<?xml version="1.0" encoding="ISO-8859-1"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
    <channel>
        <title>Cristalab</title>
        <link>http://www.cristalab.com/</link>
        <description>Tutoriales, tips, foros, artículos y ejemplos de diseño y desarrollo web en Cristalab</description>
        
		<language>es-co</language>
		<generator>http://www.cristalab.com/</generator>
        <webMaster>webmaster@cristalab.com</webMaster>
        <atom:link rel="search" href="/opensearch.xml" type="application/opensearchdescription+xml" title="Cristalab" />
	    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.cristalab.com/clab" /><feedburner:info uri="clab" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
    	    <title>Control de objetos en memoria en AS3</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/-Jr-78suX0Q/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/control-de-objetos-en-memoria-en-as3-c105809l/</guid>
	        <description><![CDATA[ En este proyecto en Actionscript 3 cuento con una lista que me va mostrando constantemente los objetos que hay en memoria. Si el objeto es borrado, desaparecerá automáticamente de la lista, además el primer item me indica la memoria utilizada.<br />
<br />
En un juego, es muy común armar una clase Game y crear un objeto de esa c... ]]></description>

	        <dc:creator>lucasmoyano</dc:creator>
	        <category>actionscript_3</category>
	        <category>poo</category>
	        
            <content:encoded><![CDATA[  En este proyecto en <a class="arti_link" href="http://www.cristalab.com/tags/actionscript_3/">Actionscript 3</a> cuento con una lista que me va mostrando constantemente los <strong>objetos que hay en memoria</strong>. Si el objeto es borrado, desaparecerá automáticamente de la lista, además el primer item me indica la <strong>memoria utilizada</strong>.<br /><br />En un <a class="arti_link" href="http://www.cristalab.com/tags/juegos/">juego</a>, es muy común armar una <a class="arti_link" href="http://www.cristalab.com/tags/clases/">clase</a> <em>Game</em> y crear un objeto de esa clase. Y a la hora de reiniciar, o volver a jugar borrar ese objeto y crear uno nuevo. Pero muchas veces, quedan MovieClips, y <strong>objetos almacenados en memoria</strong> que no  fueron bien borrados. Por esta razón, este control de memoria es muy importante.<br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/Faxwuy0TLuo&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/Faxwuy0TLuo&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><br /><br /><a class="arti_link" href="http://videoscrack.com/archivos/Control_Memoria_RAM.zip">Archivos del Tutorial</a><br /><br />Main.as<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-as">package&nbsp; 
&#123;
&nbsp; &nbsp;import classes.RAMController;
&nbsp; &nbsp;import flash.display.MovieClip;
&nbsp; &nbsp;import flash.display.Sprite;
&nbsp; &nbsp;import flash.events.Event;
&nbsp; &nbsp;/**
&nbsp; &nbsp; * ...
&nbsp; &nbsp; * @author Lucas Moyano
&nbsp; &nbsp; */
&nbsp; &nbsp;public class Main extends Sprite
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;public var objectA&#58;MovieClip;
&nbsp; &nbsp;&nbsp; &nbsp;public var objectB&#58;MovieClip;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;public function Main&#40;&#41; 
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;addChild&#40;RAMController.ins&#40;&#41;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;RAMController.ins&#40;&#41;.add&#40;objectA, &quot;ObjectA&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;RAMController.ins&#40;&#41;.add&#40;objectB, &quot;ObjectB&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;objectA.addChild&#40;objectB&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;objectA.removeChild&#40;objectB&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;objectB = null;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;removeChild&#40;objectA&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;objectA = null;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&#125;
&#125;</pre><br /><br />RAMController.as<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-as">package classes 
&#123;
&nbsp; &nbsp;import fl.controls.List;
&nbsp; &nbsp;import flash.display.Sprite;
&nbsp; &nbsp;import flash.events.Event;
&nbsp; &nbsp;import flash.events.TimerEvent;
&nbsp; &nbsp;import flash.system.System;
&nbsp; &nbsp;import flash.utils.Dictionary;
&nbsp; &nbsp;import flash.utils.Timer;
&nbsp; &nbsp;/**
&nbsp; &nbsp; * ...
&nbsp; &nbsp; * @author Lucas Moyano
&nbsp; &nbsp; */
&nbsp; &nbsp;public class RAMController extends Sprite
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;private static var instance&#58;RAMController;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;private var&nbsp; objects&nbsp; &nbsp;&#58;Dictionary;
&nbsp; &nbsp;&nbsp; &nbsp;private var list&nbsp; &nbsp;&nbsp; &nbsp;&#58;List;
&nbsp; &nbsp;&nbsp; &nbsp;private var timer&nbsp; &nbsp;&nbsp; &nbsp;&#58;Timer;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;public function RAMController&#40;&#41; 
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;objects&nbsp; &nbsp;= new Dictionary&#40;true&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;list &nbsp; &nbsp;&nbsp; &nbsp;= new List&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;timer &nbsp; &nbsp;= new Timer&#40;1000&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;addEventListener&#40;Event.ADDED_TO_STAGE, onAddedToStage&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;private function onAddedToStage&#40;e&#58;Event&#41;&#58;void 
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;removeEventListener&#40;Event.ADDED_TO_STAGE, onAddedToStage&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;show&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;public static function ins&#40;&#41;&#58;RAMController
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if &#40;!instance&#41; instance = new RAMController&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return instance;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;public function add&#40;object&#58;*, reference&#58;String&#41;&#58;void
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;objects&#91;object&#93; = reference;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;update&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;public function update&#40;&#41;&#58;void
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var object&#58;*;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var reference&#58;String;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;list.removeAll&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;list.addItem&#40; &#123; label&#58; Number&#40;System.totalMemory / 1024 / 1024&#41;.toFixed&#40; 2 &#41; + &quot;Kb&quot; &#125; &#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;for &#40;object in objects&#41;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;reference = objects&#91;object&#93;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;list.addItem&#40; &#123; label&#58;reference &#125; &#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;System.gc&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;public function show&#40;&#41;&#58;void
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;timer.addEventListener&#40;TimerEvent.TIMER, onTickTimer&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;addChild&#40;list&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;timer.start&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;public function hide&#40;&#41;&#58;void
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;timer.removeEventListener&#40;TimerEvent.TIMER, onTickTimer&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;removeChild&#40;list&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;timer.reset&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;private function onTickTimer&#40;e&#58;TimerEvent&#41;&#58;void 
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;update&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&#125;
&#125;</pre><p><a href="http://www.cristalab.com/tips/control-de-objetos-en-memoria-en-as3-c105809l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=-Jr-78suX0Q:Ej4PGCWnZ3E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=-Jr-78suX0Q:Ej4PGCWnZ3E:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/-Jr-78suX0Q" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 22 May 2012 14:22:30</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/control-de-objetos-en-memoria-en-as3-c105809l/</feedburner:origLink></item>
	    <item>
    	    <title>Alternativa en PHP a NodeJS con React PHP</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/LNTdu3Pb2bs/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/alternativa-en-php-a-nodejs-con-react-php-c105770l/</guid>
	        <description><![CDATA[ Vengo a hablarles de algo que vi "por ahí" que es más que todo, una respuesta de la comunidad de PHP al cada día más creciente Node.JS, ambos lenguajes son buenos en sus aspectos y tienen sus ventajas y desventajas. <br />
<br />
El proyecto se llama React, está en fase alpha y lo pueden ver en la página oficial.<br />
<br />
[[... ]]></description>

	        <dc:creator>hersonHN</dc:creator>
	        <category>php</category>
	        
            <content:encoded><![CDATA[  Vengo a hablarles de algo que vi &quot;por ahí&quot; que es más que todo, una respuesta de la comunidad de <a class="arti_link" href="http://www.cristalab.com/tags/php/">PHP</a> al cada día más creciente <a class="arti_link" href="http://www.cristalab.com/tags/node.js/">Node.JS</a>, ambos lenguajes son buenos en sus aspectos y tienen sus ventajas y desventajas. <br /><br />El proyecto se llama React, está en fase alpha y lo pueden ver en la <a class="arti_link" href="http://nodephp.org/">página oficial</a>.<br /><br />
<div class="cita">
<br />React is a platform built on PHP for easily building fast, scalable network applications. React uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.<br />
</div>
<br /><br />Procedemos entonces a instalarlo. Para instalarlo lo haré en una máquina virtual con <a class="arti_link" href="http://lubuntu.net/">Lubuntu</a> (porque no tengo mucha memoria ram para derrochar).<br /><br />Entonces, tecleamos:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">
sudo apt-get install phpunit

</pre>
<br /><br />Necesitamos phpunit para instalarlo, no sé si correrá en <a class="arti_link" href="http://www.cristalab.com/tags/windows/">windows</a>, pero no es algo por lo que nos vayamos a preocupar.<br /><br />Entonces, como en la máquina virtual no tenía instalado ni PHP, ni <a class="arti_link" href="http://www.cristalab.com/tags/mysql/">MySql</a>, ni nada de eso, se instaló también automáticamente PHP, y probamos ver qué versión tenemos:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">
php --version

</pre>
<br /><br />y nos dice que es la 5.3.10. Nos conformaremos con esa versión para probar.<br /><br />Ahora, para manejar las dependencias y esas cosas instalaremos <a class="arti_link" href="http://getcomposer.org"><strong>composer</strong></a> de esta forma:<br /><br />Instalaremos curl (por si no lo tienen en su sistema operativo):<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">
sudo apt-get install curl

</pre>
<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">
curl -s http&#58;//getcomposer.org/installer | php

</pre>
<br /><br />Listo, &quot;composser successfully installed&quot;.<br /><br />Tenemos ya, php, phpunit y composer, ahora vamos con nodePHP, pero como acabamos de instalar PHP, necesitaremos php-curl para manejar URLs.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">
sudo apt-get install php5-curl

</pre>
<br /><br />Ahora, siguiendo con la instalación de nodephp, probamos con:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">
echo '&#123; &quot;require&quot;&#58; &#123; &quot;react/react&quot;&#58; &quot;dev-master&quot; &#125; &#125;' &gt; composer.json
composer install

</pre>
<br /><br />¡ups! me dió error, no reconoce el comando composer, pero si sustituímos el último comando, evitaremos ese problema:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">
php composer.phar install

</pre>
<br /><br />Y comenzará a instalar dependencias, mientras tanto no caería mal una taza de café, ya que considerando que lo estoy (o estamos) instalando desde cero, tiene que instalar muchas dependencias, (de <a class="arti_link" href="http://www.cristalab.com/tags/symfony/">Symfony</a> más que todo).<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/fullsize/instalando-react-nodephp-1337440201.png" border="0" /></div><br /><br />Cuando por fin se termine de instalar, procedemos a crear un <em>&quot;hola mundo!&quot;</em>.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-php">
&lt;?php
require 'vendor/autoload.php';
$stack = new React\Espresso\Stack&#40;function &#40;$request, $response&#41; &#123;
&nbsp; &nbsp; $response-&gt;writeHead&#40;200, array&#40;'Content-Type' =&gt; 'text/plain'&#41;&#41;;
&nbsp; &nbsp; $response-&gt;end&#40;&quot;Hello World\n&quot;&#41;;
&#125;&#41;;
echo &quot;Server running at http&#58;//127.0.0.1&#58;1337\n&quot;;
$stack-&gt;listen&#40;1337&#41;;
?&gt;
</pre><br /><br />Y lo guardamos en un archivo cualquiera, como por ejemplo &quot;server.php&quot; y lo corremos vía consola con:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">
php server.php

</pre>
<br /><br />En nuestro navegador nos dirigimos a localhost:1337 ¡y listo!<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/fullsize/react-php-1337440759.png" border="0" /></div><br /><br />Espero que a ustedes no les de tantos problemas como a mí, enumeré en el post todo lo que hice. Cabe recalcar que el proyecto aún está en estado alpha, pero vale la pena darle una ojeada, probablemente será super popular o probablemente nadie lo termine usando, pero eso no importa, lo interesante es aprender.<br /><br />Saludos  <img src="/foros/images/smiles/icon_razz.gif" alt=":P" border="0" /><p><a href="http://www.cristalab.com/tips/alternativa-en-php-a-nodejs-con-react-php-c105770l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=LNTdu3Pb2bs:uTyP_FOoiQw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=LNTdu3Pb2bs:uTyP_FOoiQw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/LNTdu3Pb2bs" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 22 May 2012 14:01:38</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/alternativa-en-php-a-nodejs-con-react-php-c105770l/</feedburner:origLink></item>
	    <item>
    	    <title>Fotomanipulación realista en Photoshop</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/BXyhs2ASKcU/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/fotomanipulacion-realista-en-photoshop-c105774l/</guid>
	        <description><![CDATA[ Espero que les guste este videotutorial de Photoshop, donde aprenderán varias técnicas de fotomanipulación y efectos, mediante los cuales crearemos una ciudad a punto de ser aplastada por los pasos de un gigante, como vemos en la imagen con el resultado final, tratando de lograr un cuadro lo más realista posible y de a... ]]></description>

	        <dc:creator>sabdiel</dc:creator>
	        <category>photoshop</category>
	        <category>fotografia</category>
	        <category>efectos</category>
	        
            <content:encoded><![CDATA[  Espero que les guste este <a class="arti_link" href="http://www.cristalab.com/videotutoriales/">videotutorial</a> de <a class="arti_link" href="http://www.cristalab.com/tags/photoshop/">Photoshop</a>, donde aprenderán varias técnicas de fotomanipulación y <a class="arti_link" href="http://www.cristalab.com/tags/efectos/">efectos</a>, mediante los cuales crearemos una ciudad a punto de ser aplastada por los pasos de un gigante, como vemos en la imagen con el resultado final, tratando de lograr un cuadro lo más realista posible y de alto impacto visual:<br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/32vku-1337635221_full550.jpg" border="0" /></div><br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/GhsBQwnGrqc&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/GhsBQwnGrqc&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><p><a href="http://www.cristalab.com/tips/fotomanipulacion-realista-en-photoshop-c105774l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=BXyhs2ASKcU:ZUUZCVb9cuQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=BXyhs2ASKcU:ZUUZCVb9cuQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/BXyhs2ASKcU" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 21 May 2012 16:34:21</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/fotomanipulacion-realista-en-photoshop-c105774l/</feedburner:origLink></item>
	    <item>
    	    <title>Google Chrome es, desde hoy, el navegador más usado del mundo</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/7-aOIoDwPIM/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/google-chrome-es-desde-hoy-el-navegador-mas-usado-del-mundo-c105794l/</guid>
	        <description><![CDATA[ Internet Explorer, tras más de una decada, cae al segundo lugar superado por Google Chrome, reporta Memeburn. Chrome ha sido clave en la estrategia de Google de empujar HTML5, Javascript y las nuevas tecnologías que hicieron viables las aplicaciones web.<br />
<br />
Chrome inició comiendose el market share de Opera y Firefox, p... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>browsers</category>
	        <category>estadisticas</category>
	        <category>marketing</category>
	        <category>webkit webmasters</category>
	        
            <content:encoded><![CDATA[  Internet Explorer, tras más de una decada, <strong>cae al segundo lugar superado por Google Chrome</strong>, reporta <a class="arti_link" href="http://memeburn.com/2012/05/its-official-chrome-is-the-webs-most-popular-browser/">Memeburn</a>. Chrome ha sido clave en la estrategia de Google de empujar <a class="arti_link" href="http://www.cristalab.com/tags/html5/">HTML5</a>, Javascript y las nuevas tecnologías que hicieron viables las aplicaciones web.<br /><br />Chrome inició comiendose el market share de Opera y Firefox, pero IE, a pesar de sus innovaciones con IE9 e IE10, se unió al resto en una constante tendencia a la baja. <br /><br />Chrome introdujo varios cambios que han adaptado la mayoría de browsers. Eliminaron las versiones, se actualiza silencionamente, fusionó las URLs con la busqueda, los plugins se instalan sin reiniciar, el motor V8 aceleró Javascript al infinito, trajo la sincronización entre dispositivos y aisló por primera vez los tabs por procesos. <br /><br />Chrome además hizo que <a class="arti_link" href="http://www.cristalab.com/blog/la-revolucion-movil-de-internet-esta-en-manos-de-webkit-c69353l/">Webkit sea el motor de render dominante en el planeta</a>.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/chrome-overtakes-internet-explorer-worldwide-1337612465_full550.png" border="0" /></div><br />Microsoft entendió el error de frenar la web con IE6, 7 y 8. <a class="arti_link" href="http://www.cristalab.com/blog/internet-explorer-10-preview-mas-html5-que-nunca-c96871l/">IE9 aceptó a HTML5 y IE10 empezó a competir de manera seria</a> con el resto de los navegadores modernos. Pero es demasiado tarde. Ha ocurrido. <strong>La gente normal</strong>, no nosotros, no los techies, no los geeks, quieren instalar un navegador mejor. <br /><br /><h2>¡Pero esto es en el primer mundo! ¿Qué pasa con latam?</h2><br />¿Qué pasa con latam? Pasa algo muy similar. Cristalab no es un indicador del público en general, pero vale la pena resaltar quién entra a nuestra comunidad: <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/estadisticas-de-cristalab-en-navegador-2012-1-1337613609_full550.png" border="0" /></div><br />Internet Explorer es una minoría brutal. IE9 es el más usado, seguido por IE8. <strong>IE7 sólo representa el 1% de nuestro tráfico</strong> y IE6, como en el resto del mundo, no existe. Es hermoso trabajar en Cristalab.<br /><br />IE6 no existe, IE7 muere rápidamente. Ya casi, compañeros, ya casi somos libres.<br /><br /><strong><span style="font-size: 16px; line-height: normal"><span style="color: #A40000">¡Postea screenshots de tu propio Analytics y celebremos!</span></span></strong><p><a href="http://www.cristalab.com/blog/google-chrome-es-desde-hoy-el-navegador-mas-usado-del-mundo-c105794l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=7-aOIoDwPIM:F3tyb91SCZ0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=7-aOIoDwPIM:F3tyb91SCZ0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/7-aOIoDwPIM" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 21 May 2012 10:12:14</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/google-chrome-es-desde-hoy-el-navegador-mas-usado-del-mundo-c105794l/</feedburner:origLink></item>
	    <item>
    	    <title>Tracking en perspectiva en After Effects</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/LX-dBx4ZqEU/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/tracking-en-perspectiva-en-after-effects-c105757l/</guid>
	        <description><![CDATA[ Hasta ahora hemos usado el rastreador para ejecutar trackings sencillos en puntos concretos, pero modificando las opciones para utilizar capturas de múltiples puntos, como bordes en perspectiva, entenderemos las posibilidades que nos ofrece esta herramienta para obtener composiciones mucho más complejas y ajustadas a l... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>after_effects</category>
	        <category>video</category>
	        
            <content:encoded><![CDATA[  Hasta ahora hemos usado el rastreador para ejecutar trackings sencillos en puntos concretos, pero modificando las opciones para utilizar capturas de múltiples puntos, como bordes en perspectiva, entenderemos las posibilidades que nos ofrece esta herramienta para obtener composiciones mucho más complejas y ajustadas a las necesidades reales de nuestro día a día, en el mundo de la composición dentro de <a class="arti_link" href="http://www.cristalab.com/tags/after_effects/">After Effects</a>.<br /><br />Crearemos un cartel de reemplazo, que incorporaremos en el material original, ajustando su aspecto para que encaje correctamente en el conjunto, capturando el desplazamiento del inicial y componiéndolo con varios ajustes específicos.<br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/7egWwOOOHxc&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/7egWwOOOHxc&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><br /><br />Saludos.<p><a href="http://www.cristalab.com/tips/tracking-en-perspectiva-en-after-effects-c105757l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=LX-dBx4ZqEU:OaM8-PU0_Wc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=LX-dBx4ZqEU:OaM8-PU0_Wc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/LX-dBx4ZqEU" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Fri, 18 May 2012 12:13:40</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/tracking-en-perspectiva-en-after-effects-c105757l/</feedburner:origLink></item>
	    <item>
    	    <title>Cómo hacer música en FL Studio utilizando el teclado de tu computadora</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/ERN6kc74rEk/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/como-hacer-musica-en-fl-studio-utilizando-el-teclado-de-tu-computadora-c105734l/</guid>
	        <description><![CDATA[ Si no tienes un teclado MIDI puedes utilizar el teclado de tu computadora para crear música en FL Studio de forma divertida, intuitiva y sencilla. Obviamente, la experiencia no será igual que trabajar con un teclado MIDI, pero es una alternativa muy útil que te permitirá agilizar esta labor, sobre todo si eres un novat... ]]></description>

	        <dc:creator>XKlibur</dc:creator>
	        <category>fl_studio</category>
	        <category>musica</category>
	        <category>audio</category>
	        
            <content:encoded><![CDATA[  Si no tienes un teclado MIDI puedes utilizar el teclado de tu computadora para crear <a class="arti_link" href="http://www.cristalab.com/tags/musica/">música</a> en <a class="arti_link" href="http://www.cristalab.com/tags/fl_studio/">FL Studio</a> de forma divertida, intuitiva y sencilla. Obviamente, la experiencia no será igual que trabajar con un teclado MIDI, pero es una alternativa muy útil que te permitirá agilizar esta labor, sobre todo si eres un novato. A continuación explicaré como realizarlo:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/teclado-1337254802_full550.png" border="0" /></div><br /><br /><h2>Paso 1 : Habilitar el teclado</h2><br />Lo primero que debemos hacer es habilitar el teclado seleccionando la opción <strong>Typing keyboard to piano</strong> en el menú <strong>Options</strong>.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/typing-keyboard-to-piano-1337114194_full550.png" border="0" /></div><br /><br />También puede hacerse marcando el icono externo correspondiente sin necesidad de entrar al menú o con el shortcut <strong>(Ctrl+T)</strong>.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/typing-keyboard-to-piano-icono-1337114364_full550.png" border="0" /></div><br /><br />Ahora, al seleccionar un instrumento musical y pulsar teclas, se emitirán notas.<br /><br /><h2>Paso 2: Grabar las notas en el piano roll</h2><br /><br />Para grabar o registrar en el <strong>piano roll</strong> las notas correspondientes a cada tecla que presiones debes seleccionar la opción <strong>Step edit</strong> en el menú <strong>Options</strong>.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/step-edit-1337115468_full550.png" border="0" /></div><br /><br />También puede hacerse marcando el icono externo correspondiente sin necesidad de entrar al menú o con el shortcut <strong>(Ctrl+E)</strong>.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/step-edit-icono-1337115744_full550.png" border="0" /></div><br /><br /><h2>Paso 3: Ajustar </h2><br />Al seleccionar las dos opciones anteriores podrás grabar las notas usando tu teclado pero éstas aparecerán apiladas en el piano roll, e independientemente del tiempo que mantengas pulsada una tecla las notas se registrarán todas iguales, con una longitud mínima. En consecuencia, al reproducir lo que grabaste <a class="arti_link" href="http://www.cristalab.com/tags/audio/">sonará</a> <em>horrible</em>.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/piano-roll-1337118064_full550.png" border="0" /></div><br /><br />Para ajustar el tamaño, selecciona las notas con la herramienta <strong>Select</strong>, verás que aparece un círculo pequeño en la parte derecha. Escoge luego la herramienta <strong>Draw</strong> y arrastra el referido círculo para que todas las barras verdes se agranden. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/edicion-1337254208_full550.png" border="0" /></div><br /><br />Para finalizar, realiza los ajustes necesarios de forma manual, en caso de ser requeridos, para que la canción suene justo como quieres.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/ajuste-de-notas-completado-1337118623_full550.png" border="0" /></div><br /><br />Esta es la forma en la que yo lo hago, pero este programa tiene tantas opciones que es probable que exista alguna alternativa para grabar las notas y que aparezcan en el piano roll con la longitud exacta. ¿Tú como lo haces?.<br /><br />Espero que este método les sea de utilidad.<p><a href="http://www.cristalab.com/tips/como-hacer-musica-en-fl-studio-utilizando-el-teclado-de-tu-computadora-c105734l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=ERN6kc74rEk:oCtVNRpep9I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=ERN6kc74rEk:oCtVNRpep9I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/ERN6kc74rEk" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Thu, 17 May 2012 09:30:29</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/como-hacer-musica-en-fl-studio-utilizando-el-teclado-de-tu-computadora-c105734l/</feedburner:origLink></item>
	    <item>
    	    <title>Enrutamiento dinámico Rip Redistribute y Default Information</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/W99FEIbsS6c/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/enrutamiento-dinamico-rip-redistribute-y-default-information-c105717l/</guid>
	        <description><![CDATA[ En este videotutorial aprenderemos más características del protocolo de enrutamiento dinámico rip, con comandos adicionales que nos ayudarán a introducir información que el protocolo no incluiría por defecto y que sería necesaria para obtener la convergencia de la red y conseguir que todas las configuraciones que imple... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>redes</category>
	        <category>informatica</category>
	        
            <content:encoded><![CDATA[  En este <a class="arti_link" href="http://www.cristalab.com/videotutoriales/">videotutorial</a> aprenderemos más características del protocolo de enrutamiento dinámico rip, con comandos adicionales que nos ayudarán a introducir información que el protocolo no incluiría por defecto y que sería necesaria para obtener la convergencia de la <a class="arti_link" href="http://www.cristalab.com/tags/redes/">red</a> y conseguir que todas las configuraciones que implementaremos en la topología se complementen y funcionen como un todo, a pesar de sus diferencias de métrica y caracteristicas.<br /><br />Implementaremos una ruta estática por defecto y haremos que rip la redistribuya con sus vecinos, además de ajustar las opciones del sistema, para que sea incluída la información del enrutamiento estático en sus mensajes de intercambio.<br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/N2s61U55uMs&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/N2s61U55uMs&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><br /><br />Saludos.<p><a href="http://www.cristalab.com/tips/enrutamiento-dinamico-rip-redistribute-y-default-information-c105717l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=W99FEIbsS6c:s3M0oiRssxU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=W99FEIbsS6c:s3M0oiRssxU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/W99FEIbsS6c" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 16 May 2012 17:55:17</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/enrutamiento-dinamico-rip-redistribute-y-default-information-c105717l/</feedburner:origLink></item>
	    <item>
    	    <title>La herramienta Interactive Skin Bind en 3D Maya</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/pqr6IZL-XN0/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/la-herramienta-interactive-skin-bind-en-3d-maya-c105690l/</guid>
	        <description><![CDATA[ En las últimas versiones de 3D Maya podemos encontrar una nueva herramienta, que nos permitirá asignar la influencia y el peso de deformación de los huesos sobre la maya de una forma más visual, gracias a sus ayudantes interactivos y las posibilidades de asignación sobre cualquier geometría.<br />
<br />
Estudiaremos sus posibil... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>maya</category>
	        <category>3d</category>
	        <category>animacion</category>
	        
            <content:encoded><![CDATA[  En las últimas versiones de <a class="arti_link" href="http://www.cristalab.com/tags/3d/">3D</a> <a class="arti_link" href="http://www.cristalab.com/tags/maya/">Maya</a> podemos encontrar una nueva herramienta, que nos permitirá asignar la influencia y el peso de deformación de los huesos sobre la maya de una forma más visual, gracias a sus ayudantes interactivos y las posibilidades de asignación sobre cualquier geometría.<br /><br />Estudiaremos sus posibilidades de aplicación y el soporte inestimable de las opciones de selección rápida de huesos y configuraciones que permitirán desplazarnos por los diferentes conjuntos y editar los sistemas de aplicación según nuestras necesidades.<br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/ssoGntEiNPI&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/ssoGntEiNPI&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><br /><br />Saludos.<p><a href="http://www.cristalab.com/tips/la-herramienta-interactive-skin-bind-en-3d-maya-c105690l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=pqr6IZL-XN0:eSsU2E95RFU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=pqr6IZL-XN0:eSsU2E95RFU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/pqr6IZL-XN0" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 15 May 2012 15:37:14</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/la-herramienta-interactive-skin-bind-en-3d-maya-c105690l/</feedburner:origLink></item>
	    <item>
    	    <title>Herramientas para comenzar a programar para Android</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/0P1gqq78QzA/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/herramientas-para-comenzar-a-programar-para-android-c105668l/</guid>
	        <description><![CDATA[ ¿Quieres empezar a desarrollar para dispositivos Android?, si es así, estás en el lugar correcto, en este tutorial veremos las herramientas necesarias para empezar a crear aplicaciones en java para este famoso sistema operativo, y pues, no está de más darnos una idea de cómo funciona esta plataforma haciendo el típico ... ]]></description>

	        <dc:creator>virtualblog1</dc:creator>
	        <category>android</category>
	        <category>java</category>
	        <category>eclipse</category>
	        <category>moviles</category>
	        
            <content:encoded><![CDATA[  ¿Quieres empezar a desarrollar para dispositivos <a class="arti_link" href="http://www.cristalab.com/tags/android/">Android</a>?, si es así, estás en el lugar correcto, en este <a class="arti_link" href="http://www.cristalab.com/tutoriales/">tutorial</a> veremos las herramientas necesarias para empezar a crear aplicaciones en <a class="arti_link" href="http://www.cristalab.com/tags/java/">java</a> para este famoso sistema operativo, y pues, no está de más darnos una idea de cómo funciona esta plataforma haciendo el típico “hola mundo” <img src="/foros/images/smiles/icon_wink.gif" alt=";)" border="0" /><br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/android-1336876861_full550.png" border="0" /></div><br /><br /><h2>Manos a la obra con Java y <a class="arti_link" href="http://www.cristalab.com/tags/eclipse/">Eclipse</a></h2><br />Como cualquier otro lenguaje de programación vamos a necesitar un editor de texto, nosotros vamos a utilizar: <br /><br /><h3>Eclipse</h3> Es un entorno de desarrollo integrado de código abierto multiplataforma para crear aplicaciones. Eclipse es usado como la principal herramienta de desarrollo para java, pero también podemos instalar plugins para otros lenguajes.<br /><br />Para utilizar java vas a necesitar el Java Development Kit (JDK) que lo puedes conseguir desde <a class="arti_link" href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">esta página</a>.<br /><br />¿Pero donde está nuestro IDE? Para descargar eclipse dirígete a su <a class="arti_link" href="http://www.eclipse.org/downloads/">página oficial</a>.<br /><br />Una vez hecho esto ya tenemos lo necesario para empezar a trabajar con java, pero no para Android, ¿entonces qué debemos hacer?<br /><br /><h2>¿Qué necesitamos para trabajar con Android?</h2><br />Lo que vamos a hacer es dirigirnos hacia la página de <a class="arti_link" href="http://developer.android.com/index.html">Android developer</a>, cuando estés dentro de ella haz click en la opción <strong>SDK</strong>, vas a encontrar un cuadro como este:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/cuadro-1-1336877205_full550.png" border="0" /></div><br /><br />Podemos descargar una versión para <a class="arti_link" href="http://www.cristalab.com/tags/mac_os_x/">Mac OS X</a> y para <a class="arti_link" href="http://www.cristalab.com/tags/linux/">Linux</a>, en la sección se <a class="arti_link" href="http://www.cristalab.com/tags/windows/">Window</a>s hay dos: uno en formato .zip y otra en .exe. Para que se nos haga más fácil seleccionemos el que nos recomienda la misma página (exe) además así no tendremos que descomprimirlo. Si tienes problemas con la instalación <a class="arti_link" href="http://developer.android.com/sdk/installing.html">puedes leer esta buena guía</a>: (está en inglés, qué bueno que contamos con google translate). <img src="/foros/images/smiles/icon_razz.gif" alt=":P" border="0" /> <br />Una vez descargado e instalado debe quedarnos lo siguiente:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/archivos-1336877417_full550.png" border="0" /></div><br /><br /><strong>AVD Manager:</strong> aquí se encuentran las maquinas virtuales que nos permitirán ver la aplicación en funcionamiento, mas adelante estaremos utilizando esta herramienta.<br /><br /><strong>SDK Manager:</strong> aquí se encuentran todas las herramientas ya instaladas y las que no hemos instalado, cada carpeta es una versión de Android. Dentro de ellas se encuentra el SDK que es básicamente el elemento que necesitamos para programar.<br /><br /><h2>Plugin ADT para eclipse</h2><br />Un <a class="arti_link" href="http://www.cristalab.com/tags/plugins/">Plugin</a> es un complemento que añade función nueva y generalmente muy específica. Esta aplicación adicional es ejecutada por la aplicación principal.<br /><br />Sin salirnos de la página “android developer” vamos a seleccionar el ADT 18.0.0 (es un plugin para el IDE de Eclipse que está diseñado para darle un ambiente potente e integrado) en el menú izquierdo de la página:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/sin-titulo-78-1336877591_full550.png" border="0" /></div><br /><br />Luego se nos mostrarán las instrucciones para añadirlo en eclipse, en una parte de la página vamos a encontrar la siguiente dirección: <a class="arti_link" href="http://dl-ssl.google.com/android/eclipse/">http://dl-ssl.google.com/android/eclipse/</a><br /><br />Copiemos la dirección y ejecutemos eclipse y dirijámonos a help &gt; install new software<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/menu-5-1336877686_full550.png" border="0" /></div><br /><br />Y pegamos la dirección en <strong>work with</strong>, luego seleccionamos “add”, se nos abre una ventana pidiéndonos el nombre que le pondremos al plugin en mi caso yo escribí simplemente “ADT plugin”:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/instalar-1336877764_full550.png" border="0" /></div><br /><br />Hacemos click en ok y Eclipse estará verificando y llamando a la dirección que le hemos indicado. Todos los elementos que aparecerán luego deben estar seleccionados (select all); damos click en next &gt; next &gt; aceptamos las condiciones de uso &gt; finish. Eclipse se va a reiniciar y nos  aparecerá una ventana como esta:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/image12-1336877847_full550.png" border="0" /></div><br /><br />Nos vamos a la opción <strong>use existing SDKs</strong> y ubicamos la ruta donde se instaló, de lo contrario usamos install new SDK y marcamos la segunda casilla. Terminamos el proceso y listo!!<br /><br /><h2>Crear un dispositivo virtual</h2><br />Es algo parecido a usar virtualBox. En eclipse ahora van a aparecer dos iconos en el menú:<div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/fullsize/iconos-1336877913.png" border="0" /> </div><br /><br />El primero es el AVD manager y el segundo es SDK manager, escojamos el segundo para crear una máquina virtual &gt; click en new. Luego nos aparecerán las características del dispositivo:<br /><ul><li> <strong>Name</strong>: escribimos el nombre<br /></li><li> <strong>Target</strong>: elegimos la versión que vamos a usar ej: 2.1<br /></li><li> <strong>SD card</strong>: elegimos la cantidad de espacio que ocupa, podemos poner 1GIB<br /></li><li> <strong>Hardware</strong>: si damos click en new podemos añadirle soporte para funcionamientos como: acelerometrer, soporte para touch-screen, e.t.c<br /></li></ul><br />Para finalizar click en <strong>create AVD</strong>, si queremos ver en funcionamiento la máquina virtual, click en start:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/emulador-1336878184_full550.png" border="0" /></div><br /><br />Ahora, ya podemos empezar a programar y crear un nuevo proyecto android.<br /><br /><h2>Crear un &quot;Hola mundo&quot; en Android</h2><br />Antes de empezar vamos a tener una serie de carpetas y me gustaría señalar algunas de ellas<br /><br /><ul><li> <strong>SRC</strong>: Aquí se encuentra podría decirse nuestra hoja PRINCIPAL del proyecto en java.<br />Dentro de la carpeta res esta la carpeta layout donde se encuentra nuestro main.xml<br /></li><li> <strong>XML</strong>: es un lenguaje basado en etiquetas, al cual yo llamaría hermano de html porque lo que hace es crear la parte estructural de (en este caso) componentes para android, ej: los botones, campos de texto, imágenes e.t.c. En main.xml tenemos dos vistas disponibles la forma gráfica y la forma de código.<br /></li></ul><br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/ver-1336878378_full550.png" border="0" /></div><br /><br />Si lo modificamos en la manera gráfica, automáticamente se genera el código xml, haciéndonos la vida más fácil <img src="/foros/images/smiles/icon_lol.gif" alt="XD" border="0" />.<br /><ul><li> <strong>Strings.xml:</strong> por defecto si ejecutamos la máquina virtual con nuestro proyecto veremos un texto que dice Hello World, EjemploActivity! Pero si nos vamos a src, donde está la hoja principal de java en ninguna parte está escrito esto, pero sucede que en strings.xml hay una línea así: <br /></li></ul><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-xml">&lt;string name=&quot;hello&quot;&gt;Hello World, EjemploActivity!&lt;/string&gt;</pre><br />Ha, con que de ahí sale!! En java lo único que se hace es un llamado a ese contenido con:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-java">setContentView&#40;R.layout.main&#41;;</pre><br />Además, también podemos modificar el texto de un botón llamándolo a través de su nombre.<br />Para crear nuestro propio hola mundo desde java importemos:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-java">import android.widget.TextView;</pre><br />Para llamar a TextView, y escribamos:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-java">TextView variable = new TextView&#40;this&#41;;
variable.setText&#40;&quot;Hola Mundo&quot;&#41;;
setContentView&#40;variable&#41;;
</pre><br />Fácil, creamos un texto visual (que llamamos variable), luego le añadimos el método setText y por último escribimos que se coloque en pantalla el contenido visual de “texto”.<br /><br />Espero que este tutorial te haya servido, no olvides dejar tus comentarios.<p><a href="http://www.cristalab.com/tips/herramientas-para-comenzar-a-programar-para-android-c105668l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=0P1gqq78QzA:sF_dHvG00Tk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=0P1gqq78QzA:sF_dHvG00Tk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/0P1gqq78QzA" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 14 May 2012 09:05:27</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/herramientas-para-comenzar-a-programar-para-android-c105668l/</feedburner:origLink></item>
	    <item>
    	    <title>Uso de Nulls en galerías cinemáticas en After Effects</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/fnwuySdzy4k/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/uso-de-nulls-en-galerias-cinematicas-en-after-effects-c105647l/</guid>
	        <description><![CDATA[ El uso de los objetos Null en After Effects nos será de gran utilidad a la hora de controlar el movimiento de otros elementos con más dificultades de selección y manejo, gracias al linkado de éstos sobre las características que necesitemos y su posterior animación de claves, que nos permitirán trabajar más comodamente.... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>after_effects</category>
	        <category>efectos</category>
	        <category>3d</category>
	        
            <content:encoded><![CDATA[  El uso de los objetos Null en <a class="arti_link" href="http://www.cristalab.com/tags/after_effects/">After Effects</a> nos será de gran utilidad a la hora de controlar el movimiento de otros elementos con más dificultades de selección y manejo, gracias al linkado de éstos sobre las características que necesitemos y su posterior animación de claves, que nos permitirán trabajar más comodamente.<br /><br />En este ejercicio trabajaremos con imágenes fijas, a las que asignaremos propiedades <a class="arti_link" href="http://www.cristalab.com/tags/3d/">3D</a> para encajarlas en la composición, para posteriormente animar el conjunto y ajustar los keyframes y añadiendo <a class="arti_link" href="http://www.cristalab.com/tags/efectos/">efectos</a> de Motion Blur para completar el aspecto visual.<br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/yZMEK7JAL8E&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/yZMEK7JAL8E&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><br /><br />Saludos.<p><a href="http://www.cristalab.com/tips/uso-de-nulls-en-galerias-cinematicas-en-after-effects-c105647l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=fnwuySdzy4k:9pHXtEWngc4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=fnwuySdzy4k:9pHXtEWngc4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/fnwuySdzy4k" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Fri, 11 May 2012 14:20:32</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/uso-de-nulls-en-galerias-cinematicas-en-after-effects-c105647l/</feedburner:origLink></item>
	    <item>
    	    <title>Crear un Slider con efectos en Javascript</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/zzDNJs_w2aA/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/crear-un-slider-con-efectos-en-javascript-c105085l/</guid>
	        <description><![CDATA[ Antes de comenzar este tutorial quiero avisarles que no soy el creador de este slider. Yo lo hice siguiendo un tutorial en inglés que compré. No obstante la traducción y la interpretación del mismo fueron por mi parte. Luego le añadí diversas explicaciones que consideré pertinentes. Es mi forma de aprender. Estoy igual... ]]></description>

	        <dc:creator>lordoracle</dc:creator>
	        <category>javascript</category>
	        <category>css</category>
	        <category>animacion</category>
	        <category>jquery</category>
	        <category>efectos</category>
	        
            <content:encoded><![CDATA[  Antes de comenzar este <a class="arti_link" href="http://www.cristalab.com/tutoriales/">tutorial</a> quiero avisarles que no soy el creador de este slider. Yo lo hice siguiendo un tutorial en inglés que compré. No obstante la traducción y la interpretación del mismo fueron por mi parte. Luego le añadí diversas explicaciones que consideré pertinentes. Es mi forma de aprender. Estoy igual que ustedes, aprendiendo así que les pido que si notan algo que llama la atención lo notifiquen. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/tyres-1335330583_full550.jpg" border="0" /><br /><span style="font-size: 11px; line-height: normal"><a class="arti_link" href="http://dl.dropbox.com/u/8191121/index.html">Ver Demo</a></span></div><br /><br />Antes de comenzar debemos entender cómo funciona un slider. Se puede decir que a grandes rasgos son imágenes apiladas una sobre otra. Luego mediante <a class="arti_link" href="http://www.cristalab.com/tags/javascript/">javascript</a> se altera su propiedad z-index.<br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/uno-2-1335330139_full550.jpg" border="0" /></div><br />Comenzaremos creando tres archivos:<ul><li> <strong>Index.html</strong> que contendrá el contenedor del mismo y todo lo referente a divs e imágenes, así como también la llamada a <a class="arti_link" href="http://www.cristalab.com/tags/jquery/">jquery</a> y los archivos javascript y <a class="arti_link" href="http://www.cristalab.com/tags/css/">css</a>.<br /></li><li> Un archivo .js que se llame: <strong>JWslider.js</strong><br /></li><li> Un archivo CSS que contenga los estilos del Slider. Como nombre le pondremos: <strong>JWslider.css</strong><br /></li></ul><br /><br />Vamos con el código del archivo html:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&nbsp; &nbsp;&lt;html xmlns=&quot;http&#58;//www.w3.org/1999/xhtml&quot;&gt;
&nbsp; &nbsp;&lt;head&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.4.2.min.js&quot; &gt;&lt;/script&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.easing.1.3.js&quot;&gt;&lt;/script&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.JWslider.js&quot; &gt;&lt;/script&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/JWslider.css&quot; /&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &lt;title&gt; JW slider&lt;/title&gt;
&nbsp; &nbsp;&lt;/head&gt;

&nbsp; &nbsp;&lt;body&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &lt;div style=&quot;width&#58;960px;margin-left&#58;auto;margin-right&#58;auto;&quot;&gt;

&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &lt;ul id=&quot;test&quot;&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;img src=&quot;img/im1.jpg&quot;&nbsp; /&gt;&lt;/li&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;img src=&quot;img/im2.jpg&quot;&nbsp; /&gt;&lt;/li&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;img src=&quot;img/im3.jpg&quot;&nbsp; /&gt;&lt;/li&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;img src=&quot;img/im4.jpg&quot;&nbsp; /&gt;&lt;/li&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;img src=&quot;img/im5.jpg&quot;&nbsp; /&gt;&lt;/li&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;img src=&quot;img/im6.jpg&quot;&nbsp; /&gt;&lt;/li&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;img src=&quot;img/im7.jpg&quot;&nbsp; /&gt;&lt;/li&gt;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &lt;/ul&gt;

&nbsp; &nbsp;&nbsp; &nbsp; &lt;/div&gt;
&nbsp; &nbsp;&lt;/body&gt;
&nbsp; &nbsp;&lt;/html&gt;</pre><br /><br />De momento todo luce sencillo. Tenemos las llamadas a los archivos antes mencionadas así como también un div contenedor con una lista. Cada elemento li de la misma llama a una imagen localizada en el directorio img.<br /><br />El CSS contendrá los siguientes estilos que aún no aparecen:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-java">.JWslider &#123;&nbsp; 
&nbsp; &nbsp;padding&#58;0px;&nbsp; 
&nbsp; &nbsp;position&#58;relative;&nbsp; 
&nbsp; &nbsp;z-index&#58;100;&nbsp; 
&nbsp; &nbsp;overflow&#58;hidden;&nbsp; 
&nbsp; &nbsp;&#125;&nbsp; 
.JWslider ul&#123;&nbsp; 
&nbsp; &nbsp; list-style&#58;none;&nbsp; 
&nbsp; &nbsp;padding&#58;0px;&nbsp; 
&nbsp; &nbsp;margin&#58;0px;&nbsp; 
&nbsp; &nbsp;position&#58;relative;&nbsp; 
&nbsp; &nbsp;&#125;&nbsp; 
.JWslider ul li &#123;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; position&#58;absolute;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; display&#58;block;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; width&#58;100%;&nbsp; 
&nbsp; &nbsp;&#125;&nbsp; 
&nbsp; &nbsp;.JWslider ul li img &#123;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; position&#58;relative;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; z-index&#58;1;&nbsp; 
&nbsp; &nbsp;&#125;&nbsp; 
&nbsp; &nbsp;.JWslider .active &#123;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;z-index&#58;10;&nbsp; 
.JWslider .reset &#123;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; z-index&#58;3;&nbsp; 
&nbsp; &nbsp;&#125;&nbsp; </pre><br /><br />Podemos ver que las dos últimas clases contienen la propiedad z-index. La clase active tiene un nivel alto y como su nombre lo indica tiene por objetivo aplicarse al elemento de la lista que se está mostrando. La clase reset por el contrario, tiene por objetivo aplicarse al elemento previo que ya no se muestra, o sea la diapositiva previamente activa. Con esto conseguimos mantenerlas en orden. <br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-java">.JWslider span &#123;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; display&#58;none;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; color&#58;#fff;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; bottombottom&#58;0px;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; padding&#58;10px;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; width&#58;100%;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; left&#58;0px;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; position&#58;absolute !important;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; z-index&#58;555; background&#58;url&#40;'i/comment-bg.png'&#41;;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; font-family&#58;Verdana, Geneva, sans-serif;&nbsp; 
&nbsp; &nbsp;&#125;&nbsp; 
&nbsp; &nbsp;.control_active &#123;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; background&#58; url&#40;'i/active.png'&#41; no-repeat!important;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; height&#58;20px!important;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; margin-top&#58;9px!important;&nbsp; 
&nbsp; &nbsp;&#125;&nbsp; 
&nbsp; &nbsp;.control_hover &#123;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; background&#58; url&#40;'i/active.png'&#41; top no-repeat!important;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; height&#58;20px!important;&nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; margin-top&#58;9px!important;&nbsp; 
&nbsp; &nbsp;&#125; </pre><br /><br />Puede parecer extraño ver un elemento span aquí. Lo cierto es que el mismo será utilizado para mostrar texto que vaya a diversas páginas.<br /><br />Finalmente tenemos las dos últimas clases que remiten al control del slider. Como pueden notar, es una simple imagen que podemos conseguir en cualquier lado e incluso dibujar nosotros. Y ahora viene lo difícil que es el archivo Javascript. Lo mejor es entender cómo funciona cada porción de código por separado y qué hace cada una en su totalidad.<br /><br /><h2>Estructura básica de un plugin jQuery</h2><br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">&nbsp; &nbsp;&#40;function&#40;$&#41; &#123;

&nbsp; &nbsp;&nbsp; &nbsp; $.fn.JWslider = function&#40;options&#41;&#123;

&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&#125;&#40;jQuery&#41;&#41;;</pre><br /><br />Se declara una función que recibe el parámetro options que está entre paréntesis como todo parámetro, y la función se llama JWslider. Este es el motivo por el cual en el código del CSS anterior usamos como clase principal .JWslider, es porque, si bien todavía ésta no existe, la añadiremos con jQuery.<br /><br /><h3>Agregar las opciones</h3>Ahora seguiremos definiendo las propiedades del slider.<br />	<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">&nbsp; &nbsp;var defaults = &#123;
&nbsp; &nbsp;&nbsp; &nbsp; time&#58; 4000,
&nbsp; &nbsp;&nbsp; &nbsp; width&#58; 600,
&nbsp; &nbsp;&nbsp; &nbsp; height&#58; 400,
&nbsp; &nbsp;&nbsp; &nbsp; effect&#58; 'none',
&nbsp; &nbsp;&nbsp; &nbsp; blocksize&#58; &#123;height&#58;'',width&#58;'' &#125;,
&nbsp; &nbsp;&nbsp; &nbsp; duration&#58; 700,
&nbsp; &nbsp;&nbsp; &nbsp; controls&#58; true,
&nbsp; &nbsp;&nbsp; &nbsp; customblocksize&#58; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; // image transitions global settings
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; cubeoutcenter&nbsp; &nbsp; &nbsp; &#58; &#123; height&#58;100, width&#58;100 &#125;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; cubegrow&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#58; &#123; height&#58;100, width&#58;100 &#125;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; cubesidegrow&nbsp; &nbsp; &nbsp; &nbsp;&#58; &#123; height&#58;100, width&#58;100 &#125;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; stripealternate&nbsp; &nbsp; &#58; &#123; height&#58;100, width&#58;40&nbsp; &#125;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; stripefade&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#58; &#123; height&#58;100, width&#58;40&nbsp; &#125;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; stripehalfalternate&#58; &#123; height&#58;100, width&#58;40&nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;,
&nbsp; &nbsp;&nbsp; &nbsp; callback&#58;function&#40;&#41;&#123;&nbsp; &nbsp;&#125; 
&nbsp; &nbsp;&#125;;
</pre><br />Podemos ver que se definen varias cosas. El tiempo de duración de las transiciones, el ancho, el alto, el tipo de <a class="arti_link" href="http://www.cristalab.com/tags/efectos/">efecto</a>, la duración, si mostrar o no los controles (por defecto en true se muestran) y custom blocksize que son las medidas de bloques pequeños que se usarán para los efectos. Cuando digo bloques pequeños, me refiero a bloques div.<br /><br />Tienen un ancho y un alto de 100px. ¿Podemos decir entonces que cada tipo de efecto es un bloque div que se comporta de forma diferente?<br /><br />Lo último es una función de llamada: <br />  <p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-java">callback&#58;function&#40;&#41;&#123;&nbsp; &nbsp;&#125;</pre><br /><br />Truco utilizado en varios lenguajes de programación Javascript no es la excepción. Cito a Wikipedia para que entiendan para qué sirve un callback:
<p class="datos_bloque"><strong>wikipedia :</strong></p>
<div class="cita">es una función &quot;A&quot; que se usa como argumento de otra función &quot;B&quot;. Cuando se llama a &quot;B&quot;, ésta ejecuta &quot;A&quot;. 
</div>
<br />Aquí podríamos decir que el código antes de A es el ancho el alto, la duración, etc, etc y que cuando llamemos a B (callback) ejecutará A. Rebuscado, interesante y súper útil.<br /><br /><h3>Agregando las variables:</h3>Ahora, vamos a declarar las variables que utilizaremos en la secuencia de comandos; también obtendremos referencias a todos los elementos que vamos a utilizar con frecuencia.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">&nbsp; &nbsp;var options = $.extend&#40;defaults, options&#41;;
&nbsp; &nbsp;var root&nbsp; &nbsp; = $&#40;this&#41;;
&nbsp; &nbsp;var li&nbsp; &nbsp; &nbsp; = root.find&#40;&quot;li&quot;&#41;;
&nbsp; &nbsp;var images&nbsp; = li.find&#40;&quot;img&quot;&#41;;

&nbsp; &nbsp;var pos, random_no, timer, image_timer, arr, 
&nbsp; &nbsp;&nbsp; &nbsp; index, block, w, h, src, parent, im, 
&nbsp; &nbsp;&nbsp; &nbsp; override = false, 
&nbsp; &nbsp;&nbsp; &nbsp; in_animation = false,
&nbsp; &nbsp;&nbsp; &nbsp; controls;

&nbsp; &nbsp;var current = li.eq&#40;1&#41;.toggleClass&#40;'active'&#41;,
&nbsp; &nbsp;&nbsp; &nbsp; prev = li.first&#40;&#41;.addClass&#40;&quot;reset&quot;&#41;;

&nbsp; &nbsp;var bool = true,
&nbsp; &nbsp;&nbsp; &nbsp; first_bool = true;</pre><br /><br />La primer línea llama poderosamente la atención. Aparece la primera función de jQuery; “.extend”  que recibe dos parámetros: defaults y options. Lo que extend hace es combinar dos objetos. En este caso combina defaults con options. Ahora options tiene todo el power de defaults. Luego tenemos un this que sirve para hacer referencia a un objeto en particular. Se utiliza para decir: esto es propiedad de esto.<br /><br />La variable li tiene como valor “root.find(”li”)” donde aparece otro elemento de jquery que es .find, el cual cumple una función muy similar a .children. La diferencia con éste es que puede buscar elementos más distantes en el árbol del DOM y no limitarse sólo a los hijos directos. Y recibe como parámetro li en este caso.<br /><br />Luego se declara la variable img en el cual vemos una sentencia parecida:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">&nbsp; &nbsp;var images&nbsp; = li.find&#40;&quot;img&quot;&#41;;</pre><br /><br />Pero esta vez hilamos más fino y capturamos el elemento img que lógicamente es una imagen.<br />Veremos después qué hacen el resto de las variables. El siguiente paso es la modularización del plugin o slider. Esto hace la cosa más sencilla.<ul><li> Una función de inicio llamada Init que contendrá todo.<br /></li><li> Una función Switcher que “switchea” los slides.<br /></li><li> Un modulo de efectos aplicados a las imágenes.<br /></li><li>Una función de efectos que cambia aleatoriamente las <a class="arti_link" href="http://www.cristalab.com/tags/animacion/">animaciones</a>, basado en datos seteados por el usuario.<br /></li><li>Una función para darle vida al control del slider.<br /></li><li>Una función que traiga las imágenes al frente cuando el usuario hace click en el control basado en su índice.<br /></li><li>Y una función que se ejecuta cuando el efecto termina, esconde el texto actual y prepara la próxima imagen. </li></ul><br /><br />Declaramos entonces la primera función y dentro de la misma decimos que si las opciones de control del slider es verdadera, añada controles (appendControls), y se le dice que tome el primer elemento de la lista, obtenga la etiqueta span y le aplique las propiedades css display, block y las oculte. Luego a cada elemento root le coloca como clase un elemento contenedor llamado JWslider. Por algo anteriormente seteamos sus estilos en el archivo CSS.<br /><br />Por último obtenemos el padre de cada uno de los elementos actuales y les asignamos los width y height que seteamos en options.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">function init&#40;&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; if&#40;options.controls==true&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; appendControls&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;

&nbsp; &nbsp;&nbsp; &nbsp;li.first&#40;&#41;.find&#40;&quot;span&quot;&#41;.css&#40;&quot;display&quot;,&quot;block&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;current.children&#40;&#41;.hide&#40;&#41;;

&nbsp; &nbsp;&nbsp; &nbsp;root.wrap&#40;&quot;&lt;div class='JWslider' /&gt;&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;root.parent&#40;&#41;.css&#40;&#123;&quot;width&quot;&#58;options.width,height&#58;options.height&#125;&#41;;

&nbsp; &nbsp;&#125;</pre><br />	<br /><h2>Switcher</h2><br />Conmutacion de los slides es la palabra. Se trata de la adición de la clase active al elemento siguiente y la clase reset al elemento actual. Primero se guarda, el elemento anterior si no lo hubo es porque llegamos al final. Esta es la manera de movernos a través de la lista en el sentido de las agujas del reloj. Esto quiere decir que la primera imagen vendrá después que la última. Se remueve la clase reset con removeClass (de jQuery) y se la añade al elemento actual. Por último, la siguiente diapositiva se establece como activa y su imagen está oculta, porque nosotros estamos animando los bloques del div que aparecerá mas tarde.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">function switcher&#40;&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; if&#40;current.prev&#40;&#41;.length &gt; 0&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; prev = current.prev&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; else
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; prev = li.last&#40;&#41;;

&nbsp; &nbsp;&nbsp; &nbsp; prev.removeClass&#40;&quot;reset&quot;&#41;;

&nbsp; &nbsp;&nbsp; &nbsp; current.toggleClass&#40;&quot;active reset&quot;&#41;;

&nbsp; &nbsp;&nbsp; &nbsp; if&#40;current.next&#40;&#41;.length &gt; 0&#41;&nbsp; &nbsp;// setting the next slide
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; current = current.next&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; else
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; current = li.first&#40;&#41;; 

&nbsp; &nbsp;&nbsp; &nbsp; current.children&#40;&#41;.hide&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; current.addClass&#40;&quot;active&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; options.callback&#40;current.children&#40;&#41;&#91;0&#93;&#41;;
&nbsp; &nbsp;&#125;</pre><br /><br /><h3>Codificando los efectos personalizados</h3>Y ahora viene la parte más complicada que es animar los efectos.  Se puede crear cualquier efecto usando combinaciones de bloques divs de diversos anchos y altos.<br /><br />La gran mayoría de los sliders tiene dos combinaciones: la creación de franjas horizontales o verticales y uno un poco más complejo que lo hace por etapas, cubriendo diversos campos de la imagen. De ahí como le dicen en USA “stages”.<br /><br />[nota:0d13b4b296]Palabra clave para recordar: animación de pequeños bloques de divs.[/nota:0d13b4b296]<br /><br /><h2>Efecto 1: Salida en bloque desde el centro</h2><br /><strong>in_animation</strong> es una variable que utilizaremos para ver si proceder o no cuando el usuario manualmente clickea en los controles. <strong>w</strong> y <strong>h</strong> son el ancho y el alto de los pequeños bloques de divs.<br /><br />En este efecto crece un cuadrado desde la posición inicial de su zona. Se define entonces la función <strong>cubeoutcenter</strong> con el parámetro <strong>image</strong>. Se establece como verdadera la variable <strong>in_animation</strong>. Y luego chequeamos si el tamaño del bloque global está seteado por el usuario o no. Recordemos que con anterioridad le pusimos a <em>customblocksize</em> 100px de width y 100px de height. De ahí el <strong>options.blocksize.width</strong> y <strong>options.blocksize.height</strong> asignados a w y h.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">&nbsp; &nbsp;function cubeoutcenter&#40;image&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; in_animation = true;
&nbsp; &nbsp;&nbsp; &nbsp; if&#40;options.blocksize.width!=''&#41; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; w = Math.floor&#40;options.blocksize.width&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; h = Math.floor&#40;options.blocksize.height&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; else &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; w = Math.floor&#40;options.customblocksize.cubeoutcenter.width&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; h = Math.floor&#40;options.customblocksize.cubeoutcenter.height&#41;;&nbsp; &nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; parent = image.parent&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; arr = new Array&#40;&#41;; i = 0;&nbsp; j = 0; index = 0;
&nbsp; &nbsp;&nbsp; &nbsp; src = image.attr&#40;&quot;src&quot;&#41;;
&nbsp; &nbsp;&#125;;&nbsp; &nbsp;
&nbsp; &nbsp;</pre><br /><br />Lo cierto es que ver el objeto <strong>Math</strong> puede resultar bastante intimidante. A grandes rasgos, posee una serie de propiedades y eventos para sacarle partido a todas las posibilidades aritméticas del navegador. El método de Math que interesa aquí (posee una decena más sumados a unas cuantas propiedades) es <strong>floor</strong>, que lo que hace es redondear un número decimal a su inmediato entero. Y la razón por la cual se lo utiliza aquí es porque las coordenadas del browser son en decimales.<ul><li>La variable parent obtendrá el elemento padre de la imagen, o sea, li.<br /></li><li>Se inicializan las variables i, j e index para utilizarla en loops, etc.<br /></li><li><strong>Src</strong> contiene el lugar donde está alojada la imagen y lo usa para asignárselo como fondo al div.<br /></li></ul><br /><br />Y ahora crearemos el div con las siguientes propiedades:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">block = $&#40;&quot;&lt;div /&gt;&quot;, &#123;
&nbsp; &nbsp;&nbsp; &nbsp; css&#58;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; position&#58; &quot;absolute&quot;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; width&#58; 0,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; height&#58; 0,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; marginTop&#58; h/2,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; marginLeft&#58; w/2,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 'background-image'&#58; 'url&#40;'+src+'&#41;',
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; zIndex&#58; 99,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; display&#58; 'none'
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&#125;&#41;.addClass&#40;'disblock'&#41;;
</pre><br /><br />El mismo está posicionado de forma absoluta con un ancho y un alto de 0 (los tomará de h y w) y la vieja fórmula para centrar un elemento es:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">Margin-top&#58; h/2
Margin-left&#58; w/2
</pre>
<br /><br />Tomará, como dije antes, la imagen como fondo y tendrá un nivel de z-index de 99. Recordemos que los divs son divisiones y que con z-index los convertimos en capas.  Con este valor aparece en el frente.<br />Se agrega (mediante jQuery) la clase <strong>disblock</strong> para poder remover el bloque una vez que la animación concluya.<br /><br />Ahora se debe crear un bucle que itera hasta que la variable sea menor que el ancho del slider y dentro un bucle anidado hasta que la variable sea menor que el alto.<br /><br />Ahora se crea un clon (con la propiedad .clone de jQuery) del boque div con una imagen de fondo a cambiar. Después de cada iteración cambia la posición del fondo (con background-position) para por último anexarlo (con .append de jquery) a su padre, que es li. <br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/dos-2-1335330332_full550.jpg" border="0" /></div><br /><br />Para realizar el bucle usaremos<strong> las variables j e i</strong>.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">while&#40;i&lt;options.width&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; j = 0;
&nbsp; &nbsp;&nbsp; &nbsp; while &#40;j&lt;options.height&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;&nbsp; &nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; arr&#91;index&#93; = block.clone&#40;&#41;.css&#40;&#123;left&#58;i ,top&#58;j,backgroundPosition&#58;-i+&quot;px &quot;+-j+&quot;px&quot; &#125;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; parent.append&#40;arr&#91;index++&#93;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; j = j + h;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; i = i + w;
&nbsp; &nbsp;&#125;
&nbsp; &nbsp;</pre><br />Ahora que hemos añadido los bloques, tenemos que añadir la animación. Por lo tanto será animar los bloques para dar nuestro efecto. Para ello, utilizaremos <strong>setInterval</strong> con el tiempo de intervalo de 80 milisegundos. Ya tenemos los elementos de bloque dentro de la matriz de <strong>arr</strong>, que deberemos recorrer desde su posición inicial y animar cada bloque.<br /><br />Estos, a medida que se expanden, reducirán los márgenes para que los mismos aparezcan en el centro de la zona. Finalmente comprobaremos si la variable es mayor que el tamaño del array (matriz) y de ser así pediremos a la función endeffect que haga eso: End Effect.<br /><br />Entonces, repasando, sabemos que para el efecto:<ul><li>Se crea el bloque, se lo clona y se lo anexa al elemento padre li.<br /></li><li>Se crea la animación.<br /></li><li>Se finaliza la animación.<br /></li></ul><br /><br /><h3>Vamos con la animación:</h3><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">i = 0;

&nbsp; &nbsp;timer = setInterval&#40;function&#40;&#41;&#123;

&nbsp; &nbsp;&nbsp; &nbsp; if&#40;i&gt;=arr.length&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123; 
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; endeffect&#40;image&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; return;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;

&nbsp; &nbsp;&nbsp; &nbsp; arr&#91;i++&#93;.animate&#40;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; height&#58; h,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; width&#58; w,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; marginTop&#58; 0,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; marginLeft&#58; 0
&nbsp; &nbsp;&nbsp; &nbsp; &#125; , &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; duration&#58; options.duration,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; easing&#58;'easeOutSine'
&nbsp; &nbsp;&nbsp; &nbsp; &#125;&#41;;

&nbsp; &nbsp;&#125;, 80&#41;;</pre><br /><br /><h3>Cube Out Center: código completo</h3><br /><br />	<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">function cubeoutcenter&#40;image&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; in_animation = true;
&nbsp; &nbsp;&nbsp; &nbsp;if&#40;options.blocksize.width != ''&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; w = Math.floor&#40;options.blocksize.width&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; h = Math.floor&#40;options.blocksize.height&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; else
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; w = Math.floor&#40;options.customblocksize.cubeoutcenter.width&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; h = Math.floor&#40;options.customblocksize.cubeoutcenter.height&#41;;&nbsp; &nbsp; 
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; parent = image.parent&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; arr = new Array&#40;&#41;; i =0;&nbsp; j =0; index = 0;
&nbsp; &nbsp;&nbsp; &nbsp; src = image.attr&#40;&quot;src&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; block = $&#40;&quot;&lt;div /&gt;&quot; , &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; css&#58;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; position&#58; &quot;absolute&quot;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width&#58; 0,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height&#58; 0,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; marginTop&#58; h/2,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; marginLeft&#58; w/2,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'background-image'&#58; 'url&#40;'+src+'&#41;',
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zIndex&#58; 99,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; display&#58; 'none'
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;&#41;.addClass&#40;'disblock'&#41;;

&nbsp; &nbsp;&nbsp; &nbsp; while&#40;i &lt; options.width&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; j = 0;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; while&#40;j &lt; options.height&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr&#91;index&#93; = block.clone&#40;&#41;.css&#40;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; left&#58;i,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top&#58;j,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; backgroundPosition&#58; -i + &quot;px &quot; + -j + &quot;px&quot;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parent.append&#40;arr&#91;index++&#93;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j = j + h;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; i = i + w;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; i = 0;
&nbsp; &nbsp;&nbsp; &nbsp; timer = setInterval&#40;function&#40;&#41;&#123;

&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if&#40;i &gt;= arr.length&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &#123; 
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; endeffect&#40;image&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &#125;

&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; arr&#91;i++&#93;.animate&#40;&#123; 
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height&#58; h,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width&#58; w,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; marginTop&#58; 0,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; marginLeft&#58; 0
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &#125;,&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; duration&#58; options.duration, 
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; easing&#58; 'easeOutSine'
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &#125;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;,80&#41;;
&nbsp; &nbsp;&#125;;&nbsp; &nbsp;
</pre><br /><strong>Animate</strong>, perteneciente a jQuery, tiene la función de crear una animación personalizada de un conjunto de propiedades de CSS. En este caso:<ul><li>Height: con los valores de h<br /></li><li>Width: con los valores de w<br /></li><li>Margin-top<br /></li><li>Margin-left<br /></li><li>Options.duration fue declarada al principio del tutorial y tiene como valor 700.<br /></li></ul><br /><br /><h2>Efecto cuadrado 2: Efecto SideGrow o “crecer de lado”</h2><br /><br />Este efecto, en lugar de crecer desde el centro, lo hace desde uno de los lados. El código es el mismo que el anterior con las siguientes diferencias:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">block = $&#40;&quot;&lt;div /&gt;&quot; , &#123;
&nbsp; &nbsp;&nbsp; &nbsp; css&#58; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; position&#58; &quot;absolute&quot;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; width&#58; 0,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; height&#58; 0,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 'background-image'&#58; 'url&#40;'+src+'&#41;',
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; zIndex&#58; 99,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; display&#58; 'none'
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&#125;&#41;.addClass&#40;'disblock'&#41;;</pre><br /><br />Como se puede ver, desaparecen las propiedades que hacían alusión a los márgenes top y left. En lugar de indexarlos de manera secuencial se repite la matriz de manera aleatoria utilizando una función llamada: <strong>random_array</strong> que devuelve un array de números aleatorios y que debe recibir una medida como parámetro:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">random_no = random_array&#40;arr.length&#41;; // array of random numbers</pre><br /><br />La última parte es casi igual, salvo que no necesitaremos los márgenes para hacer la animación. Usaremos los valores de la matriz antes mencionada.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">timer = setInterval&#40;function&#40;&#41;&#123;

&nbsp; &nbsp;&nbsp; &nbsp; if&#40;i &gt;= arr.length&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; endeffect&#40;image&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; return;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;

&nbsp; &nbsp;&nbsp; &nbsp; arr&#91;random_no&#91;i++&#93;&#93;.animate&#40;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; height&#58; h,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; width&#58; w,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; opacity&#58; 1
&nbsp; &nbsp;&nbsp; &nbsp; &#125;,&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; duration&#58; options.duration,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; easing&#58;'easeOutCubic'
&nbsp; &nbsp;&nbsp; &nbsp; &#125;&#41;;
&nbsp; &nbsp;&#125;,80&#41;;
&nbsp; &nbsp;</pre><br /><br /><h2>Efecto de bandas</h2><br /><br />Crearemos una animación de bandas que vaya desde lados opuestos de manera vertical u horizontal. Todo el código anterior es el mismo pero lo que cambia es lo siguiente en la parte de animación y css:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">if&#40;options.blocksize.width!=''&#41;
&nbsp; &nbsp;&nbsp; &nbsp; w = Math.floor&#40;options.blocksize.width&#41;;
&nbsp; &nbsp;else
&nbsp; &nbsp;&nbsp; &nbsp; w = Math.floor&#40;options.customblocksize.stripefade.width&#41;;

&nbsp; &nbsp;h = options.height;</pre><br /><br />Tengan en cuenta que estamos aplicando esto para líneas verticales. Si lo quieren hacer al revés, o sea líneas horizontales, inviertan el código de arriba.<br /><br />El bloque de CSS cambia a esto:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">&nbsp; &nbsp;block = $&#40;&quot;&lt;div /&gt;&quot; , &#123;
&nbsp; &nbsp;&nbsp; &nbsp; css&#58; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; position&#58; &quot;absolute&quot;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; width&#58; w,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; height&#58; h,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 'background-image'&#58; 'url&#40;'+src+'&#41;',
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; zIndex&#58; 99,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; display&#58; 'block',
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; marginTop&#58;options.height,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; opacity&#58; 0
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&#125;&#41;.addClass&#40;'disblock'&#41;;</pre><br /><br />Nótese que el valor de h y w no es 0.  Esto es así porque no queremos que crezcan las líneas horizontales y verticales, queremos que las bandas aparezcan de manera alternativa. Por ahora se colocará cada una debajo del escenario del slider. Esto es porque todos los bloques tendrán valores de márgenes positivos, así que vamos a implementar una condición que aplique una propiedad de margen superior a negativo en base a la altura del slider.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">&nbsp; &nbsp;while&#40;i&lt;options.width&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; if&#40;flag==true&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; css = &#123;left&#58;i, backgroundPosition&#58; -i + &quot;px 0px&quot; &#125;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; flag = false;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; else
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; css = &#123;left&#58;i, backgroundPosition&#58; -i + &quot;px 0px&quot;, marginTop&#58; -options.height &#125;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; flag = true;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; arr&#91;index&#93; = block.clone&#40;&#41;.css&#40;css&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; parent.append&#40;arr&#91;index++&#93;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; i = i + w;
&nbsp; &nbsp;&#125;</pre><br />	<br /><br />La última parte es casi igual, excepto que no necesitaremos las propiedades height y width de animación. Simplemente establecemos: margen superior a 0 y la opacidad a 1. <br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">&nbsp; &nbsp;timer = setInterval&#40;function&#40;&#41;&#123;

&nbsp; &nbsp;&nbsp; &nbsp; if&#40;i&gt;=arr.length&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; endeffect&#40;image&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; return;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; arr&#91;i++&#93;.animate&#40;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; marginTop&#58;0,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; opacity&#58;1
&nbsp; &nbsp;&nbsp; &nbsp; &#125;,&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; duration&#58; options.duration, 
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; easing&#58;'easeOutSine'
&nbsp; &nbsp;&nbsp; &nbsp; &#125;&#41;;
&nbsp; &nbsp;&#125;,80&#41;;</pre><br />	<br /><h2>Efecto de bandas con atenuación </h2><br /><br />Pocos cambios con respecto al código anterior. Lo primero es que las animaciones de transición suelen tener rayas verticales u horizontales de longitud completa, por lo que la variable de inicialización cambia a esto:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">&nbsp; &nbsp;if&#40;options.blocksize.width!=''&#41;
&nbsp; &nbsp;&nbsp; &nbsp; w = Math.floor&#40;options.blocksize.width&#41;;
&nbsp; &nbsp;else
&nbsp; &nbsp;&nbsp; &nbsp; w = Math.floor&#40;options.customblocksize.stripefade.width&#41;;

&nbsp; &nbsp;h = options.height;</pre><br />	<br /><strong>Estamos creando franjas verticales de longitud completa con anchura definida en las opciones.</strong><br /><br />El CSS cambia a esto:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">block = $&#40;&quot;&lt;div /&gt;&quot;, &#123;
&nbsp; &nbsp;&nbsp; &nbsp; css&#58; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; position&#58; &quot;absolute&quot;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; width&#58; w,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; height&#58; h,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 'background-image'&#58; 'url&#40;'+src+'&#41;',
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; zIndex&#58; 99,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; display&#58; 'block',
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; opacity&#58; 0
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&#125;&#41;.addClass&#40;'disblock'&#41;;</pre><br /><br />Como sólo nos interesa atenuar, no hay márgenes. En la sección del bucle sólo estamos estableciendo la posición del fondo y anexándolo en el padre, además de cambiar la posición de los bloques.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">while&#40;i&lt;options.width&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; arr&#91;index&#93; = block.clone&#40;&#41;.css&#40;&#123;left&#58;i, backgroundPosition&#58; -i + &quot;px 0px&quot; &#125;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; parent.append&#40;arr&#91;index++&#93;&#41;;

&nbsp; &nbsp;&nbsp; &nbsp; i = i + w;
&nbsp; &nbsp;&#125;

&nbsp; &nbsp;i = 0;</pre><br /><br />La última parte es casi igual, excepto que no necesitaremos las propiedades margin-top, width y height en la animación. Simplemente establecemos la opacidad a 1.  Ahora tenemos un bonito Fade.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">timer = setInterval&#40;function&#40;&#41;&#123;

&nbsp; &nbsp;&nbsp; &nbsp; if&#40;i&gt;=arr.length&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; endeffect&#40;image&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; return;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;

&nbsp; &nbsp;&nbsp; &nbsp; arr&#91;i++&#93;.animate&#40;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; opacity&#58;1
&nbsp; &nbsp;&nbsp; &nbsp; &#125;,&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; duration&#58; 700, 
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; easing&#58;'easeOutSine'
&nbsp; &nbsp;&nbsp; &nbsp; &#125;&#41;;
&nbsp; &nbsp;&#125;,80&#41;;</pre><br /><br />Se podría haber utilizado la función fadeIn, pero esto genera un bug en Chrome.<br /><br /><h2>Creación del módulo de efecto final</h2><br /><br />Ahora es el momento de crear la función que se llama después de que todos los bloques han sido animados.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">function endeffect&#40;image&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; current.find&#40;&quot;span&quot;&#41;.fadeIn&#40;'slow'&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; if&#40;options.controls==true&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; controls.removeClass&#40;&quot;control_active&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; controls.eq&#40;current.index&#40;&quot;.JWslider li&quot;&#41;&#41;.addClass&#40;&quot;control_active&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; clearInterval&#40;timer&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; setTimeout&#40;function&#40;&#41; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; image.show&#40;&#41;;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // show the real image
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; $&#40;&quot;.disblock&quot;&#41;.remove&#40;&#41;; // remove the divs
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; // switch next slide
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; in_animation = false;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if&#40;override == false&#41;&nbsp; &nbsp; &nbsp; // Return if manually triggered
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; image_timer = setTimeout&#40;function&#40;&#41; &#123; 
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switcher&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; image.next&#40;&#41;.fadeOut&#40;'slow'&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; effects&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;, options.time&#41;; 
&nbsp; &nbsp;&nbsp; &nbsp; &#125;,1000&#41;;
&nbsp; &nbsp;&#125;;
</pre><br /><br /><br /><h2>Construcción del módulo de efectos</h2><br /><br />El módulo de efectos principales decide qué efecto mostrar. Es más simple que los otros. Lo primero que se hace es generar un número aleatorio entre 0 y el número de efectos disponibles. A continuación comprobamos si la opción global se establece en un número especial y se establece una variable en 1.<br /><br />La parte siguiente es un caso especial: si un usuario intenta hacer click manualmente en los controles antes de que comience la presentación de diapositivas, finalmente usaremos el switcher para seleccionar el efecto basado en el valor de la variable  ch. <br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">&nbsp; &nbsp;function effects&#40;&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; var ch = Math.floor&#40;Math.random&#40;&#41;*6&#41;;

&nbsp; &nbsp;&nbsp; &nbsp; if&#40;!isNaN&#40;options.effect&#41;&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ch = options.effect;

&nbsp; &nbsp;&nbsp; &nbsp; if&#40;bool==true&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; li.first&#40;&#41;.find&#40;&quot;span&quot;&#41;.hide&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; bool=false;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; first_bool = false;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;

&nbsp; &nbsp;&nbsp; &nbsp; switch&#40;ch&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; case 0&#58;cubesidegrow&#40;current.find&#40;&quot;img&quot;&#41;&#41;;break;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; case 1&#58;cubeoutcenter&#40;current.find&#40;&quot;img&quot;&#41;&#41;;break;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; case 2&#58;cubegrow&#40;current.find&#40;&quot;img&quot;&#41;&#41;;break;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; case 3&#58;stripealternate&#40;current.find&#40;&quot;img&quot;&#41;&#41;;break;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; case 4&#58;stripefade&#40;current.find&#40;&quot;img&quot;&#41;&#41;;break;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; case 5&#58;stripehalfalternate&#40;current.find&#40;&quot;img&quot;&#41;&#41;;break;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&#125;</pre><br />	<br /><h3>Creando los controles</h3><br /><br />Ahora vamos a trabajar con controles. En este módulo agregamos la lista de control después de nuestro slider y establecemos al primer elemento de la lista la clase control_active puesta con anterioridad en el CSS. Los elementos de la lista de control se encargarán de eventos, tales como la función de setImage on click al cual se lo llama con su índice como parámetro, o las funciones hover que alternan con la clase control_hover.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">&nbsp; &nbsp;function appendControls&#40;&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; var str = &quot;&lt;ul class='controls'&gt;&quot;;
&nbsp; &nbsp;&nbsp; &nbsp; for&#40;var i=0;i&lt;li.length;i++&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; str = str + &quot;&lt;li&gt;&quot;+&#40;i+1&#41;+&quot;&lt;/li&gt;&quot;;

&nbsp; &nbsp;&nbsp; &nbsp; str = str+&quot;&lt;/ul&gt;&quot;;

&nbsp; &nbsp;&nbsp; &nbsp; root.after&#40;str&#41;;

&nbsp; &nbsp;&nbsp; &nbsp; controls = root.parent&#40;&#41;.find&#40;&quot;.controls li&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; controls.first&#40;&#41;.addClass&#40;&quot;control_active&quot;&#41;;

&nbsp; &nbsp;&nbsp; &nbsp; controls.bind&#40;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; click&nbsp; &nbsp; &#58; function&#40;&#41; &#123; setImage&#40;$&#40;this&#41;.index&#40;&#41;&#41;; &nbsp; &nbsp;&#125;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; mouseover&#58; function&#40;&#41; &#123; $&#40;this&#41;.toggleClass&#40;&quot;control_hover&quot;&#41;; &#125;,
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; mouseout &#58; function&#40;&#41; &#123; $&#40;this&#41;.toggleClass&#40;&quot;control_hover&quot;&#41;; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;&#41;;
&nbsp; &nbsp;&#125;
</pre><br /><br /><h3>Configuración de la imagen</h3><br /><br />El Slider está casi completo ahora hay que implementar el módulo <strong>setImage</strong>. El mismo tomará el parámetro <strong>index</strong> y animará la imagen. <br /><br />En primer lugar comprobaremos si in_animation se establece en true. De ser así, veré si el usuario ha hecho click en el mismo elemento de control, si eso es cierto volveremos, si  in_animation es false entonces haremos las siguientes tareas: Remover las clases “reset” y active de los slides, y desactivar el sistema automático de slides.<br /><br />Ahora el bloque de prueba (test en el html) es la condición especial que se cumple cuando el usuario hace click en los controles. Para esto tenemos que agregar manualmente la clase reset a la primera diapositiva. Ya que esto es necesario  sólo la primera vez (si el usuario hace click en el control), estableceremos en false cuando los módulos de efectos se llaman la primera vez.<br /><br />A continuación agregaremos la clase reset a la diapositiva actual y active a la diapositiva que se basa en el parámetro que recibimos de index.<br /><br />Se hace un fadeIn de la etiqueta span de esa diapositiva y se llama a la función de efectos. Es bastante parecida a la función switch.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">function setImage&#40;index&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; if&#40;in_animation == true || current.index&#40;&quot;.JWslider ul li&quot;&#41; == index&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; return;

&nbsp; &nbsp;&nbsp; &nbsp; li.removeClass&#40;&quot;reset active&quot;&#41;;

&nbsp; &nbsp;&nbsp; &nbsp; current.find&#40;&quot;span&quot;&#41;.hide&#40;&#41;;&nbsp; &nbsp;

&nbsp; &nbsp;&nbsp; &nbsp; clearTimeout&#40;image_timer&#41;; // Manual Override...

&nbsp; &nbsp;&nbsp; &nbsp; if&#40;first_bool==true&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; li.first&#40;&#41;.addClass&#40;&quot;reset&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; current.addClass&#40;&quot;reset&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; current = li.eq&#40;index&#41;.addClass&#40;&quot;active&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; current.children&#40;&#41;.hide&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; current.find&#40;&quot;span&quot;&#41;.fadeIn&#40;700&#41;;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp; override = true;
&nbsp; &nbsp;&nbsp; &nbsp; effects&#40;&#41;;
&nbsp; &nbsp;&#125;</pre><br /><br /><h2> Arranque de los motores</h2><br /><br />Por lo tanto, todo está listo! Vamos a arrancar nuestro slider llamando a la función de efectos con la duración que se define en la opción.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">image_timer = setTimeout &#40;function&#40;&#41; &#123;effects&#40;&#41;;&#125;, options.time&#41;; / / A partir de la presentación de diapositivas</pre><br /><br />[nota:0d13b4b296]Todo el código anterior a este fragmento de código se ajusta dentro de la función init; [/nota:0d13b4b296]<br /><br /><h3> Aplicar el generador de números aleatorios</h3>Ahora vamos a implementar una función sencilla que genera una matriz de números. Esta función está fuera el plugin de jQuery.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">function random_array&#40;maxn&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; var array = new Array&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; var temp,i,flag=true;
&nbsp; &nbsp;&nbsp; &nbsp; var index =0;
&nbsp; &nbsp;&nbsp; &nbsp; while&#40;index&lt;maxn&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; flag = true;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; temp = Math.floor&#40;Math.random&#40;&#41; * maxn&#41;;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; for&#40;i=0;i&lt;array.length;i++&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if&#40;temp==array&#91;i&#93;&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#123;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; flag=false;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if&#40;flag==true&#41;
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array&#91;index++&#93; = temp;
&nbsp; &nbsp;&nbsp; &nbsp; &#125;
&nbsp; &nbsp;&nbsp; &nbsp; return array;
&nbsp; &nbsp;&#125;;</pre><br /><br /><br />Aunque nuestro slider está completo, cuando Javascript está desactivado y todo falla, las imágenes se muestran todas fuera de lugar. Para eso podemos agregar una pequeña corrección mediante CSS.<br />Lo que se hace entonces es agregar un div wrapper (contendor) y estilizarlo un poco. El estilo para este elemento sería el siguiente:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-java">&nbsp;#wrapper &#123;height&#58; 410px; overflow&#58; auto;&#125;</pre><br /><br />Si está activado JavaScript, fácilmente podemos cambiar esto mediante la función CSS:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">$&#40;function&#40;&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp; $&#40;&quot;#wrapper&quot;&#41;.css&#40;&#123;height&#58;&quot;auto&quot; , overflow&#58;&quot;visible&quot;&#125;&#41;; // Restablecer de nuevo &#61514;
&nbsp; &nbsp;&nbsp; &nbsp; $&#40;&quot;#test&quot;&#41;.JWslider&#40;&#41;;
&nbsp; &nbsp;&#125;&#41;;</pre><br /><br />Eso es todo.	<br /><br /><a class="arti_link" href="http://dl.dropbox.com/u/8191121/index.html">Ver Demo</a> - <a class="arti_link" href="http://dl.dropbox.com/u/8191121/demo.rar">Archivos</a><p><a href="http://www.cristalab.com/tips/crear-un-slider-con-efectos-en-javascript-c105085l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=zzDNJs_w2aA:QRekbO5Xot8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=zzDNJs_w2aA:QRekbO5Xot8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/zzDNJs_w2aA" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 25 Apr 2012 00:18:40</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/crear-un-slider-con-efectos-en-javascript-c105085l/</feedburner:origLink></item>
	    <item>
    	    <title>Pasar HTML a plantilla base en PHP usando Include</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/ZEAnkjU2HNw/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/pasar-html-a-plantilla-base-en-php-usando-include-c105260l/</guid>
	        <description><![CDATA[ Muchos de nosotros hemos utilizado los Templates de Dreamweaver con la esperanza de facilitarnos, a futuro, la tarea de hacer cambios en partes de nuestras webs. Así, por ejemplo, si necesitamos agregar un botón al menú de un sitio de 40 páginas, hacemos dicha modificación en el template, para no tener que cambiarlo en... ]]></description>

	        <dc:creator>elmaluf</dc:creator>
	        <category>php</category>
	        <category>html</category>
	        
            <content:encoded><![CDATA[  Muchos de nosotros hemos utilizado los Templates de <a class="arti_link" href="http://www.cristalab.com/tags/dreamweaver/">Dreamweaver</a> con la esperanza de facilitarnos, a futuro, la tarea de hacer cambios en partes de nuestras webs. Así, por ejemplo, si necesitamos agregar un botón al menú de un sitio de 40 páginas, hacemos dicha modificación en el template, para no tener que cambiarlo en todas las páginas, lo que nos demandaría un rato muy largo.<br /><br />Sin embargo, <strong>las templates de Dreamweaver pueden no ser siempre la mejor solución ni la más fácil de administrar</strong>. Es por eso que resulta mejor maquetar nuestras plantillas en un solo archivo y luego dividirlo en partes: encabezado, menu, sidebar, footer, etc., como hace <a class="arti_link" href="http://www.cristalab.com/tags/wordpress/">Wordpress</a>. Esto nos permite un mayor control sobre los elementos que componen nuestras páginas. <br /><br />Vamos a ello:<br /><br />Supongamos que creamos un archivo <strong>index.html</strong>, que contiene lo siguiente:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http&#58;//www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&nbsp; &nbsp;&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=UTF-8&quot;&gt;
&nbsp; &nbsp;&lt;title&gt;Titulo de la pagina&lt;/title&gt;
&lt;/head&gt;


&lt;body&gt;
&lt;!--Menú--&gt;
&lt;ul&gt;
&lt;li&gt;Inicio&lt;/li&gt;
&lt;li&gt;Quiénes somos&lt;/li&gt;
&lt;li&gt;Contacto&lt;/li&gt;
&lt;/ul&gt;

&lt;!--Div con el encabezado--&gt;
&lt;div id=&quot;encabezado&quot;&gt;
&lt;!--Aquí va una imagen o un logo o un swf o todo a la vez--&gt;
&lt;/div&gt;

&lt;!--Div con el contenido--&gt;
&lt;div id=&quot;wrapper&quot;&gt;
&lt;h1&gt;Aquí va el título de la página&lt;/h1&gt;
&lt;p&gt;Aquí va algún texto y más abajo irían imágenes&lt;/p&gt;
&lt;/div&gt;

&lt;!--Sidebar--&gt;
&lt;div id=&quot;sidebar&quot;&gt;
&lt;p&gt;Aquí van algunos links o publicidad&lt;/p&gt;
&lt;/div&gt;

&lt;!--Footer--&gt;
&lt;div id=&quot;footer&quot;&gt;
&lt;p&gt;Aquí pueden ir los datos de contacto&lt;/p&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</pre><br /><br />Bien, esto es lo básico, si quisiéramos crear una segunda página, digamos quienes_somos.html, simplemente grabaríamos como y, conservando la misma estructura, cambiaríamos los contenidos, principalmente el del div principal (wrapper).<br /><br />Pero, si el día de mañana tuviéramos que cambiar los datos del sidebar, el pie, el menú, etc., deberíamos cambiarlos en cada página. Para facilitar las cosas -y de paso no usar plantillas Dreamweaver- vamos a dividir las partes de la página en varios archivos y luego llamarlos con la sentencia<strong> include()</strong> de <a class="arti_link" href="http://www.cristalab.com/tags/php/">PHP</a>.<br /><br />Lo primero será renombrar nuestro index.html a <strong>index.php</strong>. Luego, podríamos copiar, por ejemplo, el menú del sitio a un archivo llamado menu.php, que contendría sólo lo siguiente:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">&lt;!--Menú--&gt;
&lt;ul&gt;
&lt;li&gt;Inicio&lt;/li&gt;
&lt;li&gt;Quiénes somos&lt;/li&gt;
&lt;li&gt;Contacto&lt;/li&gt;
&lt;/ul&gt;</pre><br /><br />Luego, volviendo a nuestro index.php, borraríamos el código que acabamos de copiar y, en su lugar, pondríamos:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-php">&lt;?php include&#40;&quot;menu.php&quot;&#41;; ?&gt;</pre><br /><br />Con esto tan simple, aparece el menú como si lo tuviéramos en la misma página.<br /><br />Luego, haríamos lo mismo con todas las otras partes, creando los archivos respectivos a cada sección del diseño que se repite en cada página:<ul><li> encabezado.php<br /></li><li> sidebar.php<br /></li><li> footer.php<br /></li></ul><br /><br />Y reemplazaríamos el código en index.php, quienes_somos.php, contacto.php, etc., por su respectiva llamada<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-php">&lt;?php include&#40;&quot;encabezado.php&quot;&#41;; ?&gt;
&lt;?php include&#40;&quot;menu.php&quot;&#41;; ?&gt;
&lt;?php include&#40;&quot;footer.php&quot;&#41;; ?&gt;</pre><br /><br />Así, cuando necesitáramos agregar un botón en el menú, una publicidad en el sidebar o cambiar los datos de contacto en el footer, simplemente acudiríamos a los archivos específicos, con lo cual estos cambios se mostrarían en todas las páginas.<br /><br />Si alguien no desea utilizar la extensión php en los archivos de sus sitio web, puede simplemente renombrarlos mediante un archivo <a class="arti_link" href="http://www.cristalab.com/tags/htaccess/">.htaccess</a>.<p><a href="http://www.cristalab.com/tips/pasar-html-a-plantilla-base-en-php-usando-include-c105260l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=ZEAnkjU2HNw:BrR9LoAx8Oo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=ZEAnkjU2HNw:BrR9LoAx8Oo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/ZEAnkjU2HNw" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 24 Apr 2012 08:20:50</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/pasar-html-a-plantilla-base-en-php-usando-include-c105260l/</feedburner:origLink></item>
	    <item>
    	    <title>Ruta estática por defecto en Redes</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/noDh-ZEaSb4/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/ruta-estatica-por-defecto-en-redes-c105226l/</guid>
	        <description><![CDATA[ En este videotutorial, repasaremos el formato y la teoría que conforman la aplicacion de la conocida ruta estática por defecto ( Quad Zero ) y cómo nos servirá de apoyo en multitud de configuraciones de nuestras topologías de Red, haciendo la función de puerta de salida, para todos los paquetes sobre los que el disposi... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>redes</category>
	        <category>informatica</category>
	        
            <content:encoded><![CDATA[  En este <a class="arti_link" href="http://www.cristalab.com/videotutoriales/">videotutorial</a>, repasaremos el formato y la teoría que conforman la aplicacion de la conocida ruta estática por defecto ( Quad Zero ) y cómo nos servirá de apoyo en multitud de configuraciones de nuestras topologías de <a class="arti_link" href="http://www.cristalab.com/tags/redes/">Red</a>, haciendo la función de puerta de salida, para todos los paquetes sobre los que el dispositivo desconozca su red de destino y en la reducción de configuraciones y tamaño de las tablas de rutas, debido a la simplificación de su ID, máscara de red y el ámbito sobre el que se aplica.<br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/IC_iPs_PTlQ&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/IC_iPs_PTlQ&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><br /><br />Saludos.<p><a href="http://www.cristalab.com/tips/ruta-estatica-por-defecto-en-redes-c105226l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=noDh-ZEaSb4:JwfvO3d5iMQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=noDh-ZEaSb4:JwfvO3d5iMQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/noDh-ZEaSb4" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 24 Apr 2012 07:51:25</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/ruta-estatica-por-defecto-en-redes-c105226l/</feedburner:origLink></item>
	    <item>
    	    <title>Adobe CS6 y Adobe Creative Cloud: Resumen de novedades</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/hH-8pgMVwds/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/adobe-cs6-y-adobe-creative-cloud-resumen-de-novedades-c105321l/</guid>
	        <description><![CDATA[ Adobe hoy anunció Adobe Creative Suite 6 y Adobe Creative Cloud. Adobe CS6 trae mejoras a toda la gama de productos (hasta Fireworks! <3) y Creative Cloud es varias cosas: Una nueva estrategia de precios, un sistema tipo "dropbox" para compartir contenido y una serie de apps que corren en tablets y guardan... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>adobe</category>
	        <category>cs6</category>
	        <category>creative cloud</category>
	        <category>flash</category>
	        <category>fireworks</category>
	        <category>photoshop</category>
	        <category>iphone</category>
	        <category>ipad</category>
	        <category>android</category>
	        <category>telefonos</category>
	        <category>moviles</category>
	        <category>phonegap</category>
	        <category>dreamweaver</category>
	        <category>Premiere</category>
	        <category>html5</category>
	        
            <content:encoded><![CDATA[  Adobe hoy anunció <a class="arti_link" href="http://www.adobe.com/products/creativecloud.html">Adobe Creative Suite 6 y Adobe Creative Cloud</a>. Adobe CS6 trae mejoras a toda la gama de productos (hasta Fireworks! &lt;3) y Creative Cloud es varias cosas: Una nueva estrategia de precios, un sistema tipo &quot;dropbox&quot; para compartir contenido y una serie de apps que corren en tablets y guardan en la &quot;nube&quot;. <br /><br />Los mensajes principales son: Crear apps nativas para móviles y tablets sin programar. Exportar <a class="arti_link" href="http://www.google.com/url?q=http://www.cristalab.com/tags/html5/&amp;sa=U&amp;ei=WsCVT9jUB8n66QGYtJGhBA&amp;ved=0CBEQFjAG&amp;client=internal-uds-cse&amp;usg=AFQjCNET8Q6r66aUEK-Db2GBjMZqGH1Y4w">HTML5</a> fácil. Hacer todas las apps gráficas más veloces. Cambiar el modelo de pago por software a un modelo de suscripción como servicio. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/adobe-cs6-1335213777_full550.jpg" border="0" /></div><br />Puedes ver todos los detalles en tiempo real del cubrimiento <a class="arti_link" href="https://twitter.com/cristalab">si sigues la cuenta de Twitter @cristalab</a>.<br /><br /><h2>Adobe Photoshop CS6</h2><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/adobe-photoshop-cs6-1335213797_full550.jpg" border="0" /></div><br />Dos cosas resaltan del nuevo Photoshop: Un aumento gigantesco en rendimiento y velocidad (al fin!) que le permitirá correr incluso en maquinas antiguas y una mejora sobre todos sus algoritmos de recreación de bitmaps. <br /><br />En Photoshop CS5 vimos los filtros &quot;<a class="arti_link" href="http://www.cristalab.com/tutoriales/usos-del-relleno-automatico-content-aware-fill-en-photoshop-c88004l/">content aware</a>&quot; y su capacidad de <a class="arti_link" href="http://www.cristalab.com/videotutoriales/relleno-segun-contenido-content-aware-fill-en-photoshop-cs5-c99719l/">rellenar una fotografía con patrones similares ultrarealistas</a> al querer hacer retoques o borrar detalles. Ahora &quot;content aware&quot; es extendido a cosas como fotos panorámicas o con filtros &quot;ojo de pescado&quot; y otros casos donde las fotografías pierden detalle angular. <br /><br />Ah y ahora la interfaz se parece a Premiere, gris oscuro. No está mal. Photoshop sigue siendo la joya de la corona, titulo que en un pasado compartió con Flash. <br /><br /><h2>Adobe Photoshop Touch</h2><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/adobe-photoshop-touch-cs6-1335213836_full550.jpg" border="0" /></div><br />Un Photoshop para iPad y tablets Android, optimizado para usarlo con dedos o &quot;stylus gordos&quot;. Tiene todas las capacidades básicas: Capas, efectos, selección inteligente, filtros, brochas y hasta los algoritmos &quot;edge aware&quot; y &quot;content aware&quot; para no necesitar la precisión de pixel de un desktop. Genera archivos .psd que puede guardar en la &quot;nube&quot; de Creative Cloud o permite compartir los resultados a la cámara del dispositivo, Facebook o por email. <br /><br />Y cuesta 10 dólares. <br /><br /><h2>Adobe Premiere Pro CS6</h2><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/adobe-premiere-cs6-1335213878_full550.jpg" border="0" /></div><br />Puedo resumirlo en una frase: Premiere CS6 es un editor de video con el poder de Photoshop. La mayoría de los filtros &quot;content aware&quot; ahora son aplicables a videos en movimiento y gracias a &quot;Mercury&quot;, el nuevo motor gráfico de Adobe, los cambios se ven casi al instante. Premiere también incluye la detección de profundidad 3D de Photoshop y un &quot;live preview&quot; de efectos y clips que es muy similar al de iMovie o Final Cut Pro. <br /><br /><h2>Adobe Flash CS6</h2><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/adobe-flash-cs6-1335213897_full550.jpg" border="0" /></div><br />Flash CS6 se siente más como un CS5.5.1, pero es entendible dado el <a class="arti_link" href="http://www.cristalab.com/blog/una-explicacion-honesta-del-clusterfuck-de-adobe-flash-y-flex-c102072l/">serio recorte de presupuesto que sufrió el equipo de Flash Platform el 2011</a>. Flash CS6 ahora puede exportar animaciones básicas a HTML5 de manera transparente, así como compilar de manera nativa a iPhone, iPad y Android, incluyendo el uso de Stage3D. <br /><br />La exportación de Flash a HTML5 estará optimizada para <a class="arti_link" href="http://createjs.com/">CreateJS</a>, un framework de creación de &quot;experiencias interactivas&quot; en HTML5, competencia de ImpactJS o, en cierto modo, jQuery. Especializado en animaciones, audio y video. Creado por Grant Skinner. <br /><br />Flash quiere ser LA herramienta para crear juegos y experiencias multimedia (como libros interactivos para niños) en móviles y tablets. Sea en el navegador o como app nativa. ¿Lo logrará? Por primera vez hay alternativas, pero Flash seguirá peleando fuerte. <br /><br />Un -1 para Adobe por hacer el demo de Flash a HTML5 creando un intro, eso sí. <br /><br /><h2>Adobe Dreamweaver CS6</h2><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/adobe-dreamweaver-cs6-1335213939_full550.jpg" border="0" /></div><br />Conozco pocas personas que sigan usando Dreamweaver, pero para los que les gusta, DWCS6 trae un asistente para crear <a class="arti_link" href="http://www.cristalab.com/tutoriales/responsive-design-diseno-receptivo-y-adaptivo-en-la-web-c105160l/">Responsive Design</a>, llamado &quot;Fluid grid layout&quot;. También incluye soporte nativo a jQuery Mobile, transiciones CSS3 y la exportación directa de Phonegap. <br /><br />Dreamweaver aspira a convertirse en el IDE de <a class="arti_link" href="http://www.cristalab.com/tutoriales/responsive-design-diseno-receptivo-y-adaptivo-en-la-web-c105160l/">Phonegap</a> para creación de apps móviles al igual que Flash Builder 4.6 es el IDE de Flash para juegos móviles. <br /><br />En las cosas pro: Live View de Dreamweaver ahora usa un Webkit actualizado. Ya era hora. <br /><br /><h2>Adobe InDesign CS6</h2><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/adobe-indesign-cs6-1335213964_full550.jpg" border="0" /></div><br />Todo el mundo está migrando del papel a la pantalla y este es un equipo de Adobe que sí supo reaccionar al cambio. InDesign CS6 ahora puede crear revistas y libros interactivos para tablets sin necesidad de escribir una sola linea de código. <br /><br />Capacidades como Layout Liquido, inserción de contenido externo (videos, Flash, HTML, etc) y forms de PDF se combinan con la habilidad mágica de exportar tu diseño, en un click, como una app nativa para iPhone, iPad o Android gracias a Adobe Digital Publishing. <br /><br />Aplausos a un equipo dentro de Adobe que ha sabido responder al futuro con buen PR, buenas herramientas y buen contacto con la comunidad. <br /><br /><h2>Adobe Fireworks CS6</h2><br />Fireworks es el equivalente al hermano gemelo de Bart Simpson. Vive en el ático encerrado, le dan cabezas de pescado y nadie quiere hablar de él, más que para mantenerlo con vida. Nada se dijo de esta herramienta, mi favorita de todas. <strong>Fireworks no compite con Photoshop, lo complementa</strong> siendo el mejor entorno para combinar bitmaps, vectores y areas sensibles, que luego pueden ser exportadas como prototipos para webs o apps. <br /><br />Fireworks CS6 ahora puede: Exportar CSS &quot;limpio&quot; analizando el diseño, crear themes para <a class="arti_link" href="http://www.cristalab.com/blog/jquery-mobile-framework-jquery-para-telefonos-moviles-c90202l/">jQuery Mobile</a>, correr más rápido con Mercury. Y ya. Eso es todo. Gracias por las cabezas de pescado.<br /><br /><h2>En sintesis: Not bad</h2><br />Desde afuera, parecía un lanzamiento aburrido, pero Adobe tuvo anuncios muy interesantes. El más importante de todos, en mi opinión, es la migración a un modelo <em>&quot;Software as a Service&quot;</em> con la suscripción de Creative Cloud. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/adobe-not-bad-cs6-1335213981_full550.jpg" border="0" /></div><br />Extrañé mucho menciones a Fireworks o Illustrator, pero entiendo que querían limitarse a mostrar las apps móviles y los pesos pesados que generan dinero real dentro de Adobe. <br /><br />La pregunta es para ustedes ¿Vale la pena CS6? ¿Lo comprarán y usarán? ¿Migraron a otra plataforma? ¿O seguirán usando alguna versión vieja de Adobe Creative Suite?<br /><br /><em><span style="color: #888A85">Todas las imágenes de este artículo fueron creadas y optimizadas con Fireworks CS5 &lt;/3</span></em><p><a href="http://www.cristalab.com/blog/adobe-cs6-y-adobe-creative-cloud-resumen-de-novedades-c105321l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=hH-8pgMVwds:W0sE3YMwCss:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=hH-8pgMVwds:W0sE3YMwCss:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/hH-8pgMVwds" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 23 Apr 2012 15:56:30</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/adobe-cs6-y-adobe-creative-cloud-resumen-de-novedades-c105321l/</feedburner:origLink></item>
	    <item>
    	    <title>Métodos del Objeto Date de Javascript</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/RXCOLyMyhqE/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/metodos-del-objeto-date-de-javascript-c105282l/</guid>
	        <description><![CDATA[ En este tutorial aprenderemos los métodos del objeto Date de javaScript, analizaremos todos y cada uno de ellos, usaremos ejemplos prácticos , e intentaremos comprender de manera fugaz los métodos set y get de los objetos también aprenderemos a trabajar con fechas, mediante la realización de 2 sencillos ejercicios.<br />
<br />
... ]]></description>

	        <dc:creator>Abducted</dc:creator>
	        <category>javascript</category>
	        
            <content:encoded><![CDATA[  En este <a class="arti_link" href="http://www.cristalab.com/tutoriales/">tutorial</a> aprenderemos los métodos del objeto Date de <a class="arti_link" href="http://www.cristalab.com/tags/javascript/">javaScript</a>, analizaremos todos y cada uno de ellos, usaremos <strong>ejemplos prácticos </strong>, e intentaremos comprender de manera fugaz los <strong>métodos set y get de los objetos</strong> también aprenderemos a <strong>trabajar con fechas</strong>, mediante la realización de 2 sencillos ejercicios.<br /><br />La decisión de hacer un tutorial sobre el objeto Date, siendo una cosa tan vista y con tanta información publicada en la red, ha sido, que en Clab no he visto ningún tutorial concreto sobre ello, y veo a gente de vez en cuando preguntar cosas sencillas sobre las fechas y cómo trabajar con ellas. Además, así aprovecho y me vale de introducción al tutorial que estoy desarrollando, para <strong>crear un calendario en <a class="arti_link" href="http://www.cristalab.com/tags/jquery/">jQuery</a> desde cero</strong>, de modo que los interesados estad atentos.<br /><br /><br /><h2>¿Quién debería leer este tutorial y quién no?</h2><br /><strong>Caso A</strong>: Si de vez en cuando vas andando por la calle, y oyes una voz susurrar a tú oído <em>ddddaaaatttteee</em>, y eso te causa escalofríos incontrolables. No te preocupes, es buena señal, tu eres el target perfecto de este tutorial.<br /><strong>Caso B</strong>: Si estás buscando información sobre el objeto Date, pero para otro lenguaje, igual no te viene mal, echarle 15 minutillos a este tuto, y debido a las similitudes entre los lenguajes igual le sacas provecho y todo.<br /><br /><h2>1. El objeto Date</h2><br />Para comenzar vamos a ver cómo<strong> almacenar un objeto date con la fecha actual en una variable</strong> y también veremos que nos muestra la consola de depuración si imprimimos esa variable.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Creamos una variable y almacenamos la fecha de hoy &#40;paréntesis vacío&#41;
var fechaHoy = new Date&#40;&#41;;
//Imprimimos la variable en la consola
console.log&#40;fechaHoy&#41;;</pre><br />Si quisiéramos configurar una fecha diferente a la actual, le pasaríamos los parámetros a Date de la siguiente manera:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">var fechaRequerida = new Date&#40;año, mes, día, horas, minutos, segundos, milisegundos&#41;

//O con un total de milisegundos que contarán a partir del 1 de enero de 1970
//Por ejemplo 1334968890477, estaría dentro del 21 de Abril de 2012
var fechaPorMilisegundos = new Date&#40;1334968890477&#41;</pre><br /><h3>¿Cómo funciona el objeto Date?</h3>Aquí hay varias cosas a tener en cuenta:<ol type="1"></li><li>El mínimo de variables que se le pueden pasar al objeto Date para que funcione correctamente son 2, <strong>el año y el mes</strong>, introducidos éstos, a todos los que dejemos vacíos javascript los rellenará con la fecha más cercana al primer milisegundo del día 1 del mes del año introducidos</li><li>Si sólo se introduce el año, javascript rellenará la fecha con el <strong>1 de enero de 1970</strong>, que es la <strong>hora universal del objeto Date</strong>, pues le estará sumando a esta fecha entre 1 y 9999 milisegundos que serán los años que pongáis</li><li>Los <strong>meses</strong> van de <strong>0 a 11</strong>, es decir, 0 = enero, 11 = diciembre</li><li>Los días del mes funcionan normal, del 1 al 31</li><li>Los segundos y minutos van de 0 a 59</li><li>Los milisegundos van de 0 a 999</ol>Bien, vamos también a imprimir, nuestra fecha requerida en la consola:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">console.log&#40;fechaRequerida&#41;</pre><br />Y la consola nos imprimirá lo siguiente en ambos casos:<br />
<div class="cita">
Date
</div>
<br />Que no es ni de lejos lo que queremos ver, aun así sabemos que contiene una fecha, pues nos lo está diciendo la consola. Así que vamos a ver los métodos y al final sabremos cómo trabajar con el objeto date.<br /><br /><br /><h2>2. Los métodos del objeto Date</h2><br /><h3>¿Qué son los métodos de un objeto?</h3>Que nadie se asuste, los métodos son <strong>simples funciones</strong> incluidas dentro de un objeto, que desempeñan <strong>diferentes acciones</strong>.<br />Imaginemos que tenemos un robot, este será nuestro objeto <em>Abducted</em>. <em>Abducted </em>tiene programado un método que le hace decir algo, y otro que le dice lo que debe decir, vamos a verlo en pseudo-código:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">Abducted &#123;
&nbsp; &nbsp;private var tipoDeFrase&#58;Frase = 'una parida';
&nbsp; &nbsp;
&nbsp; &nbsp;function get decirCosa &#40;&#41;&#58;Frase &#123;
&nbsp; &nbsp;&nbsp; &nbsp;return tipoDeFrase
&nbsp; &nbsp;&#125;
&nbsp; &nbsp;
&nbsp; &nbsp;function set queDecir &#40;nuevoTipoDeFrase&#58;Frase&#41;&#58;void &#123;
&nbsp; &nbsp;&nbsp; &nbsp;tipoDeFrase = nuevoTipoDeFrase
&nbsp; &nbsp;&#125;
&#125;</pre><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Ok, ahora tú me ordenarías&#58;
Abducted.decirCosa&#40;&#41;
//Y yo te respondería cual esclavo&#58;
'van 2 y se cae el de en medio'

//Como ves te estaría diciendo un parida, pues es lo que tendría configurado por defecto.

//Ahora bien, tú podrías ordenarme&#58;
Abducted.queDecir&#40;'algo inteligente'&#41;

//Si después me volvieras a ordenar&#58;
Abducted.decirCosa&#40;&#41;
//A diferencia de la vez anterior, yo te respondería&#58;
'No hay nada de malo en pasar por tonto, si en realidad lo que uno está haciendo es inteligente'</pre><br />Como veis los métodos o funciones <strong>get </strong>sirven para pedirle datos a <em>Abducted</em>, sin embargo los <strong>set</strong> nos valen para cambiar una variable o propiedad de <em>Abducted</em>.<br />Espero que os haya gustado mi explicación casera breve e incompleta, sobre qué son los métodos <strong>get</strong> y <strong>set</strong> de un objeto. Y si he conseguido expresarme con claridad, veremos mucho más rápido los métodos a continuación.<br /><br /><h3>Tipos de métodos del objeto Date</h3>Vamos a intentar dividir los métodos del objeto Date en 4 grupos <em>(esta sub-división no es ninguna convención ni nada parecido, es simplemente que me parece más sencillo explicarlo así, si sí son una convención, pues bueno, entonces he pensado lo mismo que muchos)</em>:<br /><ul><li>A. Métodos para <strong>obtener o cambiar los valores</strong> del objeto Date</li><li>B. Métodos para obtener <strong>fechas lectibles</strong></li><li>C. Métodos para <strong>trabajar con fechas en milisegundos</strong></li><li>D. Métodos desfasados</li></ul><br /><h4>A. Métodos para obtener o cambiar valores del objeto Date</h4>Vamos a ver rápidamente los nombres simples de estos métodos <em>(así no se pueden usar)</em>.<ul><li>FullYear</li><li>Month</li><li>Date</li><li>Day</li><li>Hours</li><li>Minutes</li><li>Seconds</li><li>Milliseconds</li></ul>Todos estos métodos se pueden usar de 4 maneras, <strong>2 formas de get y 2 formas de set, a excepción de Day</strong> que sólo se pueden usar los get.<br /><br />Voy a tomar como ejemplo Date y Day. Los get los podemos usar de 2 maneras:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">getDate&#40;&#41;
getUTCDate&#40;&#41;

getDay&#40;&#41;
getUTCDay&#40;&#41;</pre><br />Y los set se usan igual, pero como acabo de explicar que los Day son los únicos que no tienen set, nos quedamos sin ellos en este ejemplo ya que no existen como métodos:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">setDate&#40;&#41;
setUTCDate&#40;&#41;</pre><br />Bien, alguno se preguntará<em> ¿y qué maldita diferencia hay entre poner UTC o no ponerlo?</em>. Como trabajamos con fechas, tenemos que tener en cuenta que ahora mismo <strong>no es la misma hora en todo el mundo</strong>. Por lo tanto cuando trabajemos con fechas, la diferencia entre ponerlo o no, radica en que si no se pone estarás usando tu franja horaria <em>(que es lo más normal)</em>, y si lo pones pedirás esa fecha en la hora universal <em>(UTC - Universal Time Coordinated)</em>, que es GTM+0 <em>(La del meridiano 0 o meridiano de Greenwich)</em><br /><a class="arti_link" href="http://es.wikipedia.org/wiki/Horario_universal">Wikipedia UTC</a><br /><br />Ahora veamos a qué dato dentro de una fecha corresponde cada uno de los métodos que acabamos de ver, e iremos viendo ejemplos:<br /><em>(Los links a partir de aquí, son links a ejemplos prácticos en los que podréis usar los métodos a vuestro antojo)</em><br /><ul><h4>FullYear</h4>Usos: <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getfullyear">getFullYear()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getutcfullyear">getUTCFullYear()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setfullyear">setFullYear()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setutcfullyear">setUTCFullYear()</a><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Obtiene el año en 4 dígitos
getFullYear&#40;&#41;
getUTCFullYear&#40;&#41;
//Configura la fecha a partir de año
setFullYear&#40;año, mes, diaMes&#41;
setUTCFullYear&#40;año, mes, diaMes&#41;</pre><br /><h4>Month</h4>Usos: <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getmonth">getMonth()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getutcmonth">getUTCMonth()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setmonth">setMonth()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setutcmonth">setUTCMonth()</a><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Obtiene el mes &#40;de 0 a 11&#41;
getMonth&#40;&#41;
getUTCMonth&#40;&#41;
//Configura la fecha a partir del mes
setMonth&#40;mes, diaMes&#41;
setUTCMonth&#40;mes, diaMes&#41;</pre><br /><h4>Date</h4>Usos: <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getdate">getDate()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getutcdate">getUTCDate()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setdate">setDate()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setutcdate">setUTCDate()</a><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Obtienen el día del mes &#40;de 1 a 31&#41;
getDate&#40;&#41;
getUTCDate&#40;&#41;
//Configuran la fecha con el día
setDate&#40;diaMes&#41;
setUTCDate&#40;diaMes&#41;</pre><br /><h4>Day</h4>Usos: <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getday">getDay()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getutcday">getUTCDay()</a><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Obtienen el día de la semana &#40;de 0 = Domingo a 6 = sábado&#41;
getDay&#40;&#41;
getUTCDay&#40;&#41;</pre><br /><h4>Hours</h4>Usos: <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_gethours">getHours()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getutchours">getUTCHours()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_sethours">setHours()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setutchours">setUTCHours()</a><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Obtienen las horas &#40;de 0 a 23&#41;
getHours&#40;&#41;
getUTCHours&#40;&#41;
//Configuran la hora a partir de las horas
setHours&#40;horas, minutos, segundos, milisegundos&#41;
setUTCHours&#40;horas, minutos, segundos, milisegundos&#41;</pre><br /><h4>Minutes</h4>Usos: <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getminutes">getMinutes()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getutcminutes">getUTCMinutes()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setminutes">setMinutes()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setutcminutes">setUTCMinutes()</a><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Obtienen los minutos &#40;de 0 a 59&#41;
getMinutes&#40;&#41;
getUTCMinutes&#40;&#41;
//Configuran la hora a partir de los minutos
setMinutes&#40;minutos, segundo, milisegundos&#41;
setUTCMinutes&#40;minutos, segundos, milisegundos&#41;</pre><br /><h4>Seconds</h4>Usos: <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getseconds">getSeconds()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getutcseconds">getUTCSeconds()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setseconds">setSeconds()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setutcseconds">setUTCSeconds()</a><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Obtienen los segundos &#40;de 0 a 59&#41;
getSeconds&#40;&#41;
getUTCSeconds&#40;&#41;
//Configuran la hora a partir de los segundos
setSeconds&#40;segundos, milisegundos&#41;
setUTCSeconds&#40;segundos, milisegundos&#41;</pre><br /><h4>Miliseconds</h4>Usos: <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getmiliseconds">getMiliseconds()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_getutmiliseconds">getUTCMiliseconds()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setmiliseconds">setMiliseconds()</a> | <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_setutcmiliseconds">setUTCMiliseconds()</a><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Obtienen los milisegundos &#40;de 0 a 999&#41;
getMiliseconds&#40;&#41;
getUTCMiliseconds&#40;&#41;
//Configuran la hora a partir de los milisegundos
setMiliseconds&#40;milisegundos&#41;
setUTCMiliseconds&#40;milisegundos&#41;</pre><br />Dentro de esta categoría también metería este último método<br /><h4>setTime()</h4> Usos: <a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_settime">setTime()</a><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//setTime nos vale para configurar una fecha sumando o restando x milisegundos al milisegundo 1 del 1 de enero de 1970
//así si un día tiene 86.400.000 milisegundos, haciendo esto
var mas1Dia = new Date&#40;&#41;;
mas1Dia.setTime&#40;86400000&#41;;
//Si imprimiéramos mas1Dia de una manera lectible, veríamos que mas1Dia = 2 de enero de 1970
console.log&#40;mas1dia.toDateString&#40;&#41;&#41;;
DEVUELVE--&gt; Fri Jan 02 1970</pre></li></ul><br /><h4>B. Métodos para obtener fechas legibles </h4>Bueno, ya hemos visto como configurar y modificar el objeto date, y obtener datos precisos de él, ahora vamos a ver cómo obtener estos datos de tal manera que casi cualquier humano, pueda leerlos. Los métodos para conseguir esto sin morir en el intento, <strong>siempre devuelven un string</strong>, son los siguientes:<ul><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_tostring">toString()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_toutcstring">toUTCString()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_totimestring">toTimeString()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_todatestring">toDateString()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_tolocalestring">toLocaleString()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_tolocaledatestring">toLocaleDateString()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_tolocaletimestring">toLocaleTimeString()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_toisostring">toISOString()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_tojson">toJSON()</a></li></ul>Ahora que hemos visto sus nombres <em>(y alguno hasta habrá trasteado con los ejemplos prácticos)</em>, vamos a generar una fecha de hoy y a pasarla por cada uno de los métodos y veremos lo que obtenemos. A partir de ahora la fecha <strong><em>&quot;Hoy&quot;</strong></em> que se usará para los ejemplos y ejercicios será el 21 de Abril de 2012 y me encuentro en Madrid, España, las horas nos dan más o menos igual, aunque ahora mismo es muy, muy tarde <img src="/foros/images/smiles/icon_confused.gif" alt=":?" border="0" />.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Creamos la fecha de hoy
var fechaDeHoy = new Date&#40;&#41;

//toString&#40;&#41; devuelve el objeto completo en nuestra franja horaria
console.log&#40;fechaDeHoy.toString&#40;&#41;&#41;;
//SALIDA ---&gt; 'Sat Apr 21 2012 04&#58;50&#58;14 GMT+0200 &#40;Hora de verano romance&#41;'

//toString&#40;&#41; devuelve el objeto completo en GMT+0 ó UTC
console.log&#40;fechaDeHoy.toUTCString&#40;&#41;&#41;;
//SALIDA ---&gt; 'Sat, 21 Apr 2012 02&#58;50&#58;14' GMT'

//toLocaleString&#40;&#41; devuelve el objeto completo, de acuerdo a las convenciones locales
console.log&#40;fechaDeHoy.toLocaleString&#40;&#41;&#41;;
//SALIDA ---&gt; 'Sat Apr 21 2012 04&#58;50&#58;14' GMT+0200 &#40;Hora de verano romance&#41;'

//toTimeString&#40;&#41; devuelve las horas minutos y segundos y franja horaria
console.log&#40;fechaDeHoy.toTimeString&#40;&#41;&#41;;
//SALIDA ---&gt; '04&#58;50&#58;14' GMT+0200 &#40;Hora de verano romance&#41;'

//toDateString&#40;&#41; devuelve el día de la semana, día del mes, el mes, y el año
console.log&#40;fechaDeHoy.toDateString&#40;&#41;&#41;;
//SALIDA ---&gt; 'Sat Apr 21 2012'

//toLocaleDateString&#40;&#41; devuelve el día de la semana, día del mes, el mes, y el año, de acuerdo a las convenciones locales
console.log&#40;fechaDeHoy.toLocaleDateString&#40;&#41;&#41;;
//SALIDA ---&gt; 'Saturday, April 21, 2012'

//toLocaleTimeString&#40;&#41; devuelve las horas minutos, segundos y franja horaria, de acuerdo a las convenciones locales
console.log&#40;fechaDeHoy.toLocaleTimeString&#40;&#41;&#41;;
//SALIDA ---&gt; '04&#58;50&#58;14'

//toISOString devuelve la fecha formateada con el starndard ISO
console.log&#40;fechaDeHoy.toISOString&#40;&#41;&#41;;
//SALIDA ---&gt; '2012-04-21T02&#58;50&#58;14.007Z'

//toJSON devuelve la fecha formateada como fecha JSON
console.log&#40;fechaDeHoy.toJSON&#40;&#41;&#41;;
//SALIDA ---&gt; '2012-04-21T02&#58;50&#58;14.007Z'</pre><br /><h4>C. Métodos para trabajar con fechas en milisegundos</h4>Los siguientes métodos nos devolverán milisegundos y todos ellos estarán basados en torno a la fecha universal del objeto Date de la que ya hemos hablado con anterioridad.<br /><em>(No os asustéis, al final del tuto en los ejercicios crearemos una sencilla función que nos ayudarán mucho en nuestros cálculos con milisegundos)</em><br />Estos métodos son:<br /><ul><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_gettime">getTime()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_utc">UTC()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_valueof_date">valueOf()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_parse">parse()</a></li><li><a class="arti_link" href="http://w3schools.com/jsref/tryit.asp?filename=tryjsref_gettimezoneoffset">getTimezoneOffset()</a></li></ul>Vale, vamos a ver de rápidamente <strong>cómo usarlos y que obtenemos de cada uno</strong>, en la última parte del tuto ya trabajaremos con las fechas<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Primero creamos una fecha con el día de &quot;Hoy&quot;.
var fechaHoy = new Date&#40;&#41;;

//1º - getTime&#40;&#41; - sin parámetros
console.log&#40;fechaHoy.getTime&#40;&#41;&#41;;
//SALIDA --&gt;&nbsp; 1334968890477

//2º - UTC&#40;año, dia, mes&#41; - 3 parámetros
console.log&#40;Date.UTC&#40;2012, 21, 3&#41;&#41;;
//SALIDA --&gt;&nbsp; 1380758400000

//3º - valueOf&#40;&#41; - sin parámetros
console.log&#40;fechaHoy.valueOf&#40;&#41;&#41;;
//SALIDA --&gt;&nbsp; 1334968890477

//4º - parse&#40;'fecha en string'&#41; - 1 parámetro
console.log&#40;Date.parse&#40;'april 21,&nbsp; 2012'&#41;&#41;;
//SALIDA --&gt;&nbsp; 1334959200000

//Hasta aquí todas las salidas que hemos recibido, son la cantidad de milisegundos desde el 1 de enero de 1970, hasta la fecha sobre la que estemos aplicando el método.

//5º - getTimeZoneOffset&#40;&#41; - sin parámetros
console.log&#40;fechaHoy.getTimezoneOffset&#40;&#41;&#41;;
//SALIDA --&gt;&nbsp; -120
//Este es el único de los métodos que estamos viendo que no devuelve milisegundos, devuelve la diferencia en minutos entre nuestra franja horaria y la hora UTC, en mi caso, como estoy en GMT+2, -120 minutos</pre><br /><h4>D. Métodos desfasados</h4><strong>No nos hace falta saber que hacen</strong>, lo único que necesitamos es que nos chirríen los ojos si lo vemos escrito por algún sitio, porque seguro que nosotros no lo ponemos.<ul><strong><em></li><li>getYear()</li><li>setYear()</li><li>toGMTString()</strong></em></li></ul>Bueno, bueno, bueno, pues con esto hemos terminado nuestro aprendizaje teórico del objeto Date, ahora sólo nos queda un poquito de práctica. Vamos a hacer algún ejercicio.<br /><br /><br /><h2>3. Ejercicios</h2><br /><h4>Ejercicio1 - Ejercicios sencillos</h4>Empezaremos con unos ejercicios sencillos que no precisen de cálculos<ol type="a"></li><li>Crear variable &quot;fechaHoy&quot; con fecha de hoy</li><li>Crear variable &quot;fecha85&quot; que sume 85 días a la variable &quot;fechaHoy&quot;</li><li>Crear variable &quot;fecha187&quot; que reste 187 días variable &quot;fechaHoy&quot;</li><li>Sumar 2 años a la variable &quot;fecha85&quot;</li><li>Restar 24 horas a la variable &quot;fecha187&quot;</li><li>Crear variable &quot;fechaResto&quot; que sea la resta de fecha85 - fecha187 y observa lo que obtienes</li><li>imprimir en la consola cada paso</ol><strong><em>Resultados:</strong></em><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//a&#41;
var fechaHoy = new Date&#40;&#41;;
console.log&#40;fechaHoy.toString&#40;&#41;&#41;;
console.log&#40;''&#41;;

//b&#41;
var fecha85 = new Date&#40;fechaHoy&#41;;
fecha85.setDate&#40;85&#41;;
console.log&#40;fecha85.toString&#40;&#41;&#41;;
console.log&#40;''&#41;;

//c&#41;
var fecha187 = new Date&#40;fechaHoy&#41;;
fecha187.setDate&#40;-187&#41;;
console.log&#40;fecha187.toString&#40;&#41;&#41;;
console.log&#40;''&#41;;

//d&#41;
fecha85.setFullYear&#40;fecha85.getFullYear&#40;&#41;+2&#41;;
console.log&#40;fecha85.toString&#40;&#41;&#41;;
console.log&#40;''&#41;;

//e&#41;
fecha187.setHours&#40;fecha187.getHours&#40;&#41;-25&#41;;
console.log&#40;fecha187.toString&#40;&#41;&#41;;
console.log&#40;''&#41;;

//f&#41;
var fechaResto = new Date&#40;fecha85-fecha187&#41;;
console.log&#40;fechaResto.toString&#40;&#41;&#41;;</pre><br /><h4>Ejercicio - Ejercicio medio</h4>si alguna vez tenemos la necesidad de trabajar con milisegundos, ya sabemos cómo obtenerlos y como configurarlos en una fecha, ahora voy a plantear una función que facilite el trabajo con esos milisegundos.<br />Lo primero, vamos a ver que son milisegundos y que significan en tiempo.<ul><li>1.000 milisegundos = 1 segundo = 1000x1</li><li>60.000 milisegundos = 1 minuto = 1000x60</li><li>3.600.000 milisegundos = 1 hora: = 1000x60x60</li><li>86.400.000 milisegundos = 1 día = 1000x60x60x24</li><li>31.536.000.000 milisegundos = 1 año = 1000x60x60x24x365</li></ul>Vale pues vamos a crear una función que nos convierta los milisegundos a todas esas unidades y viceversa<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//La preparamos para que pueda funcionar en los 2 sentidos, convertir milisegundos a unidades y unidades a milisegundos, por lo que además de la cantidad de unidades y el tipo de unidades le pasaremos un modo
function convertirMilisegundos &#40;cantidad, unidad, modo&#41; &#123;
&nbsp; &nbsp;//Configuramos la función para que si no la pasamos exactamente 3 parámetros, nos dé una alerta
&nbsp; &nbsp;if &#40;arguments.length != 3&#41; &#123;
&nbsp; &nbsp;&nbsp; &nbsp;//Preparamos la alerta
&nbsp; &nbsp;&nbsp; &nbsp;alert&#40;'La función convertirMilisegundos requiere exactamente 3 parámetros\ncantidad, unidad, modo'&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;//Salimos de la función sin hacer nada más
&nbsp; &nbsp;&nbsp; &nbsp;return false
&nbsp; &nbsp;&#125;
&nbsp; &nbsp;//Declaramos una variable vacia donde almacenaremos el valor por el que multiplicaremos o dividiremos nuestra cantidad
&nbsp; &nbsp;var valor;
&nbsp; &nbsp;//Detectamos la unidad a usar e inicializamos valor
&nbsp; &nbsp;switch &#40;unidad&#41; &#123;
&nbsp; &nbsp;&nbsp; &nbsp;case 'se'&#58; valor = 1000; break;
&nbsp; &nbsp;&nbsp; &nbsp;case 'mi'&#58; valor = 60000; break;
&nbsp; &nbsp;&nbsp; &nbsp;case 'ho'&#58; valor = 3600000; break;
&nbsp; &nbsp;&nbsp; &nbsp;case 'di'&#58; valor = 86400000; break;
&nbsp; &nbsp;&nbsp; &nbsp;case 'an'&#58; valor = 31536000000; break;
&nbsp; &nbsp;&#125;
&nbsp; &nbsp;//Detectamos el modo, y devolvemos la operación
&nbsp; &nbsp;switch &#40;modo&#41; &#123;
&nbsp; &nbsp;&nbsp; &nbsp;case 'mu'&#58; return catidad/valor; break;
&nbsp; &nbsp;&nbsp; &nbsp;case 'um'&#58; return catidad*valor; break;
&nbsp; &nbsp;&#125;
&nbsp; &nbsp;
&#125;</pre><br />Y la usaríamos así, imaginad que vuestra empresa tiene 2 objetos Date con una hora de salida y una hora de entrada de  un día cualquiera y el jefe os pide la diferencia en minutos y días, después os dice que multipliquéis esas horas por 5 días que tiene la semana y se lo devolváis en milisegundos para saber cuánto habéis vagueado en el trabajo esta semana. Nosotros obedecemos como un perrito faldero.<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">//Primero tenemos los 2 objetos Date que la maldita máquina de fichar del curro no perdona a la hora de comer
var horaA = new Date&#40;2012, 3, 21, 14, 00, 00&#41;;
var horaB = new Date&#40;2012, 3, 21, 18, 26, 35&#41;;
//Como veréis nos hemos retrasado un poco con la siesta

//Bien, almacenamos las 2 fechas como milisegundos en nuevas variables
var milisecsA = horaA.getTime&#40;&#41;;
var milisecsB = horaB.getTime&#40;&#41;;

//Y ahora a la fecha mayor le restamos la menor, para obtener el intervalo de milisegundos que hay entre las 2
var milisecInter = horaB-horaA;

//Ahora nos ha pedido la diferencia en minutos y días
//Muy bien, pues nosotros que somos más eficientes y más chulos que nadie, escribimos&#58;
var enMinutos = convertirMilisegundos&#40;milisecInter, 'mi', 'mu'&#41;;
console.log&#40;enMinutos&#41;;
//SALIDA --&gt; 266.5833333333333

var enDias = convertirMilisegundos&#40;milisecInter, 'di', 'mu'&#41;;
console.log&#40;enDias&#41;;
//SALIDA --&gt; 0.18512731481481481

//Y ahora nos ha pedido que lo multipliquemos por 5 y se lo devolvamos en milisegundos
var por5 = convertirMilisegundos&#40;enDias*5, 'di', 'um'&#41;;
console.log&#40;por5&#41;;
//SALIDA --&gt; 79975000</pre><br />Y debido a nuestra eficiencia, el jefe nos perdona las siestas.<br />Como veréis todo es bastante sencillo, espero que os haya gustado y que le saquéis provecho.<br /><br />Un saludo.<p><a href="http://www.cristalab.com/tips/metodos-del-objeto-date-de-javascript-c105282l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=RXCOLyMyhqE:yI_cjwmHZko:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=RXCOLyMyhqE:yI_cjwmHZko:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/RXCOLyMyhqE" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 23 Apr 2012 12:31:50</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/metodos-del-objeto-date-de-javascript-c105282l/</feedburner:origLink></item>
	    <item>
    	    <title>Tracking de fondo para efectos en After Effects</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/pNKbRgVv2MU/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/tracking-de-fondo-para-efectos-en-after-effects-c105269l/</guid>
	        <description><![CDATA[ En este videotutorial de After Effects comprobaremos cómo además de serviros en la estabilización de nuestras tomas, la utilización de la herramienta rastreador nos ayudará a capturar el movimiento de los elementos para aplicarlo sobre los efectos, de forma sencilla y ahorrándonos trabajo de animación.<br />
<br />
Usaremos el f... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>after_effects</category>
	        <category>animacion</category>
	        <category>video</category>
	        
            <content:encoded><![CDATA[  En este <a class="arti_link" href="http://www.cristalab.com/videotutoriales/">videotutorial</a> de <a class="arti_link" href="http://www.cristalab.com/tags/after_effects/">After Effects</a> comprobaremos cómo además de serviros en la estabilización de nuestras tomas, la utilización de la herramienta rastreador nos ayudará a capturar el movimiento de los elementos para aplicarlo sobre los efectos, de forma sencilla y ahorrándonos trabajo de <a class="arti_link" href="http://www.cristalab.com/tags/animacion/">animación</a>.<br /><br />Usaremos el fondo de un <a class="arti_link" href="http://www.cristalab.com/tags/video/">video</a> como referencia del proceso en el trackeo, además de incluir un efecto sobre la capa, para aplicar posteriormente los datos capturados, corrigiendo el movimiento en los puntos más complicados.<br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/hJBHBcGauAE&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/hJBHBcGauAE&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><br /><br />Saludos.<p><a href="http://www.cristalab.com/tips/tracking-de-fondo-para-efectos-en-after-effects-c105269l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=pNKbRgVv2MU:Vy818TCv-ew:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=pNKbRgVv2MU:Vy818TCv-ew:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/pNKbRgVv2MU" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Fri, 20 Apr 2012 12:12:33</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/tracking-de-fondo-para-efectos-en-after-effects-c105269l/</feedburner:origLink></item>
	    <item>
    	    <title>Rigging de ojos en 3D Maya</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/p1VOG5SarOU/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/rigging-de-ojos-en-3d-maya-c105070l/</guid>
	        <description><![CDATA[ Cualquier buen animador sabe que la mayor parte del resultado de las expresiones faciales de un personaje, se recibe a través de su mirada y para su correcto control, aplicando estas ligeras y sutiles variaciones de forma efectiva al conjunto, usaremos nuestro software Maya para crear el sistema de Rig de los ojos, ade... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>maya</category>
	        <category>animacion</category>
	        <category>3d</category>
	        
            <content:encoded><![CDATA[  Cualquier buen <a class="arti_link" href="http://www.cristalab.com/tags/animacion/">animador</a> sabe que la mayor parte del resultado de las expresiones faciales de un personaje, se recibe a través de su mirada y para su correcto control, aplicando estas ligeras y sutiles variaciones de forma efectiva al conjunto, usaremos nuestro software <a class="arti_link" href="http://www.cristalab.com/tags/maya/">Maya</a> para crear el sistema de Rig de los ojos, además de incluir atributos adicionales, que aumentarán nuestro control.<br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/ykCBzDDcXdc&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/ykCBzDDcXdc&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><br /><br />Saludos.<p><a href="http://www.cristalab.com/tips/rigging-de-ojos-en-3d-maya-c105070l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=p1VOG5SarOU:rpOQLJ26Qik:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=p1VOG5SarOU:rpOQLJ26Qik:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/p1VOG5SarOU" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Thu, 19 Apr 2012 11:50:46</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/rigging-de-ojos-en-3d-maya-c105070l/</feedburner:origLink></item>
	    <item>
    	    <title>Cartel publicitario 3D en Illustrator</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/Oo3H6d8oEaM/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/cartel-publicitario-3d-en-illustrator-c105244l/</guid>
	        <description><![CDATA[ Si en alguna ocasión, hemos intentado con las herramientas 3D de Illustrator, crear extrusiones de grosor variable de varios elementos, nos habrán surgido problemas, debidos a la unificación del proceso de la perspectiva, por lo que aprenderemos a separarlos y expandirlos correctamnete, ajustando la creación y obtenien... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>illustrator</category>
	        <category>3d</category>
	        
            <content:encoded><![CDATA[  Si en alguna ocasión, hemos intentado con las herramientas <a class="arti_link" href="http://www.cristalab.com/tags/3d/">3D</a> de <a class="arti_link" href="http://www.cristalab.com/tags/illustrator/">Illustrator</a>, crear extrusiones de grosor variable de varios elementos, nos habrán surgido problemas, debidos a la unificación del proceso de la perspectiva, por lo que aprenderemos a separarlos y expandirlos correctamnete, ajustando la creación y obteniendo diferentes grosores y profundidades con una perfecta asignacion del punto de fuga.<br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/SPsnWClxHRU&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/SPsnWClxHRU&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><br /><br />Saludos.<p><a href="http://www.cristalab.com/tips/cartel-publicitario-3d-en-illustrator-c105244l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=Oo3H6d8oEaM:DE9NwSjXxH0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=Oo3H6d8oEaM:DE9NwSjXxH0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/Oo3H6d8oEaM" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Thu, 19 Apr 2012 11:45:34</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/cartel-publicitario-3d-en-illustrator-c105244l/</feedburner:origLink></item>
	    <item>
    	    <title>Rigging facial con huesos en 3D Autodesk Maya</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/2TXTCuekzis/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/rigging-facial-con-huesos-en-3d-autodesk-maya-c105206l/</guid>
	        <description><![CDATA[ Haremos uso de Maya y su herramienta de huesos, para añadir elementos individuales de control, que nos ayudarán como manejadores de detalle adicional sobre otros sistemas de animación, como los Blend Shapes para desarrollo facial y otros específicos de otras zonas<br />
<br />
Asignaremos nuevos controles y conexiones para ajust... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>maya</category>
	        <category>animacion</category>
	        <category>3d</category>
	        
            <content:encoded><![CDATA[  Haremos uso de <a class="arti_link" href="http://www.cristalab.com/tags/maya/">Maya</a> y su herramienta de huesos, para añadir elementos individuales de control, que nos ayudarán como manejadores de detalle adicional sobre otros sistemas de <a class="arti_link" href="http://www.cristalab.com/tags/animacion/">animación</a>, como los Blend Shapes para desarrollo facial y otros específicos de otras zonas<br /><br />Asignaremos nuevos controles y conexiones para ajustar la deformación y redirigirla a nuestro gusto, además de aplicar un Skin en la malla del modelo, para controlar y deformar los vértices y las caras como deseemos.<br /><br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/5NAxcLQ8uYc&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/5NAxcLQ8uYc&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><br /><br />Saludos.<p><a href="http://www.cristalab.com/tips/rigging-facial-con-huesos-en-3d-autodesk-maya-c105206l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=2TXTCuekzis:QKD1Q2_51qw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=2TXTCuekzis:QKD1Q2_51qw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/2TXTCuekzis" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 18 Apr 2012 15:22:10</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/rigging-facial-con-huesos-en-3d-autodesk-maya-c105206l/</feedburner:origLink></item>
	    <item>
    	    <title>Branches, SSH y flujo de trabajo con Git y Github (II)</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/KWAP1uBtB_Q/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/branches-ssh-y-flujo-de-trabajo-con-git-y-github-ii-c105224l/</guid>
	        <description><![CDATA[ Aquí les dejo la segunda y ultima parte de mi introducción a Git y Github donde hablamos sobre Branches y también les enseño a realizar un workflow unido al servidor con SSH.<br />
<br />
Este es el libro que les dejo para que puedan revisar con detenimiento más comandos de git. Lo que les mostré ahora es la forma básica en cómo... ]]></description>

	        <dc:creator>raymicha</dc:creator>
	        <category>git</category>
	        <category>programacion</category>
	        <category>subversion</category>
	        
            <content:encoded><![CDATA[  Aquí les dejo la segunda y ultima parte de mi introducción a <a class="arti_link" href="http://www.cristalab.com/tags/git/">Git</a> y Github donde hablamos sobre Branches y también les enseño a realizar un workflow unido al servidor con SSH.<br /><br />Este es el libro que les dejo para que puedan revisar con detenimiento más comandos de git. Lo que les mostré ahora es la forma básica en cómo se trabaja y lo que van a usar en su día a día: <a class="arti_link" href="http://shop.oreilly.com/product/9781934356722.do">Pragmatic Guide to Git</a> de Travis Swicegood.<br /><br />Les dejo también el <a class="arti_link" href="http://help.github.com/git-cheat-sheets/">Cheat Sheet de la ayuda de Github</a>.  <br /><br />Recuerdo que alguien me preguntó cómo eliminar archivos de git. El comando es: <br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">git rm &lt;nombre del archivo&gt;
</pre>
<br /><br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=40542956&amp;amp;server=vimeo.com&amp;amp;show_title=0&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=00adef&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0" />
	<embed src="http://vimeo.com/moogaloop.swf?clip_id=40542956&amp;amp;server=vimeo.com&amp;amp;show_title=0&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=00adef&amp;amp;fullscreen=1&amp;amp;autoplay=0&amp;amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><br /><br />Quisiera agradecer infinitamente a Pablo Rigazzi (@prigazzi) por su ayuda, sin él este <a class="arti_link" href="http://www.cristalab.com/videotutoriales/">videotutorial</a> no sería tan genial. Muchas gracias Pablo, soy tu fan <img src="/foros/images/smiles/icon_razz.gif" alt=":P" border="0" />  <img src="/foros/images/smiles/icon_redface.gif" alt=":oops:" border="0" /> <br /><br />Y sin más espero sus comentarios y que les guste mucho. Hasta los próximos videos!  <img src="/foros/images/smiles/icon_happy.gif" alt=":)" border="0" /><p><a href="http://www.cristalab.com/tips/branches-ssh-y-flujo-de-trabajo-con-git-y-github-ii-c105224l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=KWAP1uBtB_Q:1nkQpWOnwuQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=KWAP1uBtB_Q:1nkQpWOnwuQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/KWAP1uBtB_Q" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 18 Apr 2012 06:45:28</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/branches-ssh-y-flujo-de-trabajo-con-git-y-github-ii-c105224l/</feedburner:origLink></item>
	    <item>
    	    <title>Responsive Design: Diseño receptivo y adaptivo en la Web</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/8QJudaNj-58/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/responsive-design-diseno-receptivo-y-adaptivo-en-la-web-c105160l/</guid>
	        <description><![CDATA[ El Responsive design, diseño receptivo y adaptivo o como quieran traducirlo es una tendencia totalmente nueva dentro del diseño Web, la cual consiste en reacomodar los elementos que componen el website según el tamaño de dispositivo que la reproduzca.<br />
<br />
¿Por qué debo implementarlo en diseño web?<br />
Porque responsive des... ]]></description>

	        <dc:creator>lysergtk</dc:creator>
	        <category>diseño</category>
	        <category>usabilidad</category>
	        <category>telefonos</category>
	        <category>moviles</category>
	        <category>android</category>
	        <category>iphone</category>
	        
            <content:encoded><![CDATA[  El Responsive design, <a class="arti_link" href="http://www.cristalab.com/tags/diseno/">diseño</a> receptivo y adaptivo o como quieran traducirlo es una <a class="arti_link" href="http://www.cristalab.com/blog/10-tecnologias-web-a-aprender-en-el-2012-c104569l/">tendencia totalmente nueva dentro del diseño Web</a>, la cual consiste en reacomodar los elementos que componen el website según el tamaño de dispositivo que la reproduzca.<br /><br /><h2>¿Por qué debo implementarlo en diseño web?</h2><br />Porque responsive design tiene que ser pensado desde el concepto de diseño de nuestro website. Este diseño debe tener un concepto de fluido entre los elementos que la componen para así lograr el perfecto flujo al momento de codificarlo. Sí, si sólo diseñas webs, lo mismo debes implementar el concepto en tus diseños.<br /><br /><h2>¿Entonces no puedo hacer responsive design a mi website actual?</h2><br />Dependiendo de tu website puede que sea más o menos doloroso. En el peor de los casos estás usando un <a class="arti_link" href="http://www.cristalab.com/tags/cms/">cms</a> con una plantilla pre-hecha que muy probablemente tenga el código muy desordenado y lo único que te ganes sean dolores de cabeza modificando el flujo del mismo.<br /><br />No obstante te invito a que des el siguiente paso y hagas un diseño a la medida, es decir que desde ya, pienses qué es lo que va a tener tu website y en base a eso planear su implementación para tener el flujo correcto y te sientas un héroe por haberlo logrado (yo soy un héroe).<br /><br /><h2>¿Y cómo es un diseño responsive?</h2><br />Entra ahora mismo a tu website favorito y redimensiona el navegador. Si aparece un scroll horizontal que impide que veas parte del contenido de la web, esta no cuenta con responsive design.. <br /><br />Ahora entra a <a class="arti_link" href="http://mejorando.la/">mejorando.la</a> y redimensiona el navegador y mira como todo el contenido se reacomoda.<br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/responsive-1334682043_full550.jpg" border="0" /></div><br /><br /><strong>Esto es responsive design</strong> y se logra con un conjunto de técnicas de <a class="arti_link" href="http://www.cristalab.com/tags/css3/">css3</a> y en especial las <a class="arti_link" href="http://www.cristalab.com/tutoriales/layout-sensible-en-html5-con-media-queries-y-js-c99797l/">mediaqueries</a> de las cuales hablaremos en siguientes <a class="arti_link" href="http://www.cristalab.com/tutoriales/">tutoriales</a>. Esto no sólo es agregarle algo más a tu web para que sea más fancy, es una necesidad hoy en día ya que <strong>la navegación movil es cada vez más grande y con múltiples resoluciones</strong>, por lo cual debemos tener un diseño que se adapte a todo. <br /><br />Si buscas inspiración para tu propio responsive design entonces puedes visitar <a class="arti_link" href="http://mediaqueri.es/">mediaqueri.es</a> donde encontrarás numerosos responsive designs. <br /><br />La idea dentro de responsive design es que cuando pienses en tu diseño tengas una idea clara de los bloques que lo conformarán, luego sea super sencillo trabajar en una maquetación eficaz que mantenga en flujo correcto de la estructura, así que debes hacerle ajustes ligeros a los bloques del diseño dependiendo del target.<br /><br /><h2>¿Y ahora debo hacer cuatro diseños?</h2><br />Tener los diseños listos antes de su implementación ayuda mucho a tener la mente clara al momento de codificarlo. Pero míralo bien, no son cuatro diseños, es solo uno (tener cuatro diseños sería una muy mala idea) lo que realmente se hace en los “diseños” adicionales es solo reacomodar el contenido que ya mostraba el “diseño” principal, esto es un correcto responsive design.<br /><br /><em>Yo sé que te has dado cuenta...</em><br />Para este punto espero ya hayas echado un vistazo a <a class="arti_link" href="http://mediaqueri.es">mediaqueri.es</a><br /><br /><h2>¿Te has fijado que el flujo de los elementos es similar?</h2><br />Por supuesto, porque llevan la filosofía responsive design desplazando los elementos para una mejor visualización.<br /><br /><em>Es muy similar, pero no igual </em><br /><br />Yo no sabía cómo categorizar estas diferencias y en realidad era consciente que se aplicaban diferentes estrategias para acomodar los elementos pero simplemente no les daba un nombre.<br /><br /><em>Desde que digo que las webs que hago están con html5 la gente me mira más bonito.</em><br /><br />Entonces cuando digo que mi website tiene responsive design soy una persona más cool pero yendo un paso más adelante y basadome es este artículo <a class="arti_link" href="http://www.lukew.com/ff/entry.asp?1514">lukew.com</a>  y estando muy de acuerdo con él es que ahora yo puedo categorizar los patrones dentro del responsive desgin:<br /><br /><h3><strong>Mostly Fluid – más o menos fluido </strong></h3><br />Este quizá es el más popular dentro del responsive design ya que que un muy protagonista primer bloque  seguido de otros 2 con menos relevancia y este al momento de tener un dispositivo se adapta siguiendo el flujo que hay en este.<br /><br /><em><strong>¿Dónde he visto algo parecido?</strong></em> ah! <a class="arti_link" href="http://mejorando.la">mejorando.la</a><br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/mas-o-menos-fluido-1334356928_full550.jpg" border="0" /></div><br /><br /><h3><strong>Column Drop – caída de columna</strong></h3><br />Quizá su cms favorito lleve un aspecto de flujo muy similar a este. Bienvenido, este es el responsive design que buscas.<br /><br />Este tipo de diseño se adapta hasta el punto en el que no se pueden manejar las tres columnas en una sola fila, entonces la columna (con el contenido más random) pasa a la parte inferior y luego el flujo se sigue desarrollando hasta llegar a una sola columna.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/caida-de-columna-1334357221_full550.jpg" border="0" /></div><br /><br /><h3><strong>Layout shifter – movimiento de estructura</strong></h3><br />Este probablemente sea la forma de decirle innovación al responsive design ya que ahora sí cambia ligeramente el diseño, pero no por esto está mal, por el contrario, esta estructura está orientanda a dar una experiencia diferente en dispositivos de pantallas más reducidas para invitar al usuario a la navegación en el website.<br /><br /><em>Dénse cuenta que es muy usada para reacomodar menus y header.</em><br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/movimiento-de-estructura-1334357443_full550.jpg" border="0" /></div><br /><br /><h3><strong>Tyny tweaks – pequeños cambios</strong></h3><br />Esto es magia pura para los microsites que sólo brindan información referencial del producto e invitan a una acción rápida, por tanto la navegación es casi nula y el responsive desgin sólo adapta los contenidos a la pantalla sin casi hacerle cambios.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/pequenos-cambios-1334357698_full550.jpg" border="0" /></div><br /><br /><h3><strong>Off canvas – fuera del canvas</strong></h3><br />Estoy seguro es el más popular en las webapps que no siempre tienen un diseño wow sino más bien guardan muchas información y múltiples opciones por lo que tienen que recurrir a esta clase de responsive design. <br /><br />Consiste en sólo tener un bloque de información general que no distraiga mucho (como el timeline de <a class="arti_link" href="http://www.cristalab.com/tags/facebook/">facebook</a> en su aplicacion <a class="arti_link" href="http://www.cristalab.com/tags/moviles/">móvil</a>) y guardan las demás opciones o menús en botones que suelen tener íconos para distinguirlos. Es indispensable que sean interfaces muy <a class="arti_link" href="http://www.cristalab.com/tags/usabilidad/">usables</a>. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/md-patterns5-1334684554_full550.png" border="0" /></div><br /><br />Quiero terminar el artículo invitándote a que sigas un mini curso de responsive design que estaré impartiendo por medio de tutoriales en cristalab.com y en video por mi canal de youtube así que si estás interesado en conocer cómo enfrentar estas 5 técnicas de responsive design suscríbete a <a class="arti_link" href="http://youtube.com/leonidasesteban">youtube.com/leonidasesteban</a>  <br /><br />te dejo un video por si no quieres leer todo lo que esta arriba...<br /><object width="600" height="365">
	<param name="allowfullscreen" value="true" />
	<param name="allowScriptAccess" value="never" />
	<param name="swliveconnect" value="false" />
	<param name="movie" value="http://www.youtube.com/v/DCRkJs_5fc8&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/DCRkJs_5fc8&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="never" swliveconnect="false" width="600" height="365"></embed>
</object><p><a href="http://www.cristalab.com/tips/responsive-design-diseno-receptivo-y-adaptivo-en-la-web-c105160l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=8QJudaNj-58:crqxukROzhg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=8QJudaNj-58:crqxukROzhg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/8QJudaNj-58" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 17 Apr 2012 13:11:12</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/responsive-design-diseno-receptivo-y-adaptivo-en-la-web-c105160l/</feedburner:origLink></item>
	    <item>
    	    <title>Curso de programación de apps iPhone y Android en Bogotá y México</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/lM_R_M35fr8/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/curso-de-programacion-de-apps-iphone-y-android-en-bogota-y-mexico-c105193l/</guid>
	        <description><![CDATA[ Este fin de semana será el Curso de desarrollo de apps para iPhone y Android en Bogotá y el 11 y 12 de mayo, este mismo curso estará en Ciudad de México. <br />
<br />
Un curso donde aprenderás las tecnologías con las que se crean aplicaciones móviles compatibles con iPhone, Android y iPad (Y hasta Blackberry si te interesa lo r... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>telefonos</category>
	        <category>moviles</category>
	        <category>iphone</category>
	        <category>android</category>
	        <category>cursos</category>
	        <category>colombia</category>
	        <category>mexico</category>
	        
            <content:encoded><![CDATA[  Este fin de semana será el Curso de desarrollo de apps para iPhone y Android en Bogotá y el 11 y 12 de mayo, este mismo curso<a class="arti_link" href="http://mejorando.la/cursos/iphone-android-mexico/"> estará en Ciudad de México</a>. <br /><br />Un curso donde aprenderás las tecnologías con las que se crean aplicaciones móviles compatibles con iPhone, Android y iPad (Y hasta Blackberry si te interesa lo retro). Apps como <a class="arti_link" href="https://play.google.com/store/apps/details?id=org.wikipedia&amp;hl=en">Wikipedia</a>, <a class="arti_link" href="http://machinarium.net/demo/">Machinarium</a> y hasta <a class="arti_link" href="http://gamua.com/starling/">Angry Birds para Facebook</a> han sido creadas con los lenguajes que verás en el curso. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://mejorando.la/cursos/iphone-android-mexico/img/logo_html5.png" border="0" /></div><br /><br /><h2>¿Qué necesito para ir a estos cursos?</h2><br />Saber programar y querer crear apps para poder vender (o regalar) en la App Store de Apple o en el Google Play Store de Android. No necesitas más que los conocimientos básicos de programación. Obviamente, si tienes teléfonos o tablets, lleva todo el hardware que quieras para probar. <br /><br />El <strong><a class="arti_link" href="http://mejorando.la/cursos/iphone-android-colombia/">curso de Bogotá es este fin de semana</a></strong>, 20 y 21 de abril. Con un valor de $440.000 pesos. <br />El <strong><a class="arti_link" href="http://mejorando.la/cursos/iphone-android-mexico/">curso de México DF</a></strong> es el 11 y 12 de mayo. Con un valor de $2.900 pesos. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://mejorando.la/cursos/iphone-android-mexico/img/dispositivos.jpg" border="0" /></div><br />Ambos cursos pueden pagarse con tarjeta de crédito, Paypal o deposito bancario. Y hay descuentos si vas en grupo, llamando al teléfono de cada curso. <br /><br />Si tienes <strong>más de 100 clabLevel</strong> en Cristalab, <strong>puedes ir gratis llevando a alguien más</strong>. Sólo mandas un mail a <a href="mailto:cursos@cristalab.com">cursos@cristalab.com</a> y tendrás tu entrada.<p><a href="http://www.cristalab.com/blog/curso-de-programacion-de-apps-iphone-y-android-en-bogota-y-mexico-c105193l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=lM_R_M35fr8:QU9ktQPMB-c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=lM_R_M35fr8:QU9ktQPMB-c:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/lM_R_M35fr8" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 16 Apr 2012 13:40:54</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/curso-de-programacion-de-apps-iphone-y-android-en-bogota-y-mexico-c105193l/</feedburner:origLink></item>
	    <item>
    	    <title>Listado con paginación en jsp con AJAX y SQL SERVER</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/rueW74V3QoY/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/listado-con-paginacion-en-jsp-con-ajax-y-sql-server-c105048l/</guid>
	        <description><![CDATA[ Hola a todos, hoy traigo un tutorial básico de un listado de registros de una Base de Datos en SQL Server 2008 utilizando jsp, jquery y css3. El listado se hace mediante procedimientos almacenados, así que veremos en primer lugar como podemos conectarnos a sql server 2008 desde jsp y como invocar a un procedimiento alm... ]]></description>

	        <dc:creator>LocoTriste</dc:creator>
	        <category>bases_de_datos</category>
	        <category>jsp</category>
	        <category>ajax</category>
	        <category>sql</category>
	        
            <content:encoded><![CDATA[  Hola a todos, hoy traigo un tutorial básico de un listado de registros de una <a class="arti_link" href="http://www.cristalab.com/tags/bases_de_datos/">Base de Datos</a> en <a class="arti_link" href="http://www.cristalab.com/tags/sql/">SQL</a> Server 2008 utilizando <a class="arti_link" href="http://www.cristalab.com/tags/jsp/">jsp</a>, <a class="arti_link" href="http://www.cristalab.com/tags/jquery/">jquery</a> y <a class="arti_link" href="http://www.cristalab.com/tags/css3/">css3</a>. El listado se hace mediante procedimientos almacenados, así que veremos en primer lugar como podemos conectarnos a sql server 2008 desde jsp y como invocar a un procedimiento almacenado con parámetros desde jsp, y mostraremos los resultados utilizando la tecnología <a class="arti_link" href="http://www.cristalab.com/tags/ajax/">AJAX</a> ( Jquery) y modificaremos el estilo para darle una mejor apariencia utilizando css3… así que manos a la obra.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server01.png" border="0" /></div><br /><br /><h2>Crear una Base de Datos en sql Server</h2><br />En primer lugar lo que vamos a hacer es crear nuestra base de datos en sql server 2008, preferiblemente utilizando autenticación sql Server; así que escribimos en el analizador de consultas lo siguiente:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">create database tutorial
go
use tutorial
go
</pre>
<br /><br />Creamos la tabla CategoriaProductos:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">create table CategoriaProductos
&#40;
CodigoCategoriaProductos int not null identity&#40;1,1&#41;,
DescripcionCategoriaProductos varchar&#40;50&#41; not null,
EstadoCategoriaProductos int

constraint clavecategoria primary key &#40;CodigoCategoriaProductos&#41;

&#41;
go
</pre>
<br /><br />Creamos la tabla Productos con referencia a la tabla CategoriaProductos:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">create table Productos
&#40;
CodigoProductos int not null identity&#40;1,1&#41;,
CodigoCategoriaProductos int ,
DescripcionProductos varchar&#40;50&#41; not null,
PrecioProductos decimal&#40;9,2&#41;,
SotckProductos int,
EstadoCProductos int

constraint claveproductos primary key &#40;CodigoProductos&#41;,
constraint claveforaneaproductos foreign key &#40;CodigoCategoriaProductos&#41;
references CategoriaProductos&#40;CodigoCategoriaProductos&#41;
&#41;
go
</pre>
<br /><br />Y debería quedarnos de esta manera:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server02.png" border="0" /></div><br /><br />Una vez que hemos creado nuestras tablas, procedemos a llenarlas de algunos registros. Insertamos algunos registros en la tabla CategoriaProductos:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">insert into CategoriaProductos values&#40;‘Bebidas’,1&#41;
insert into CategoriaProductos values&#40;‘Lacteos’,1&#41;
insert into CategoriaProductos values&#40;‘Cereales’,1&#41;
</pre>
<br /><br />Para ver los registros que acabamos de insertar en la tabla CategoriaProductos:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">select * from CategoriaProductos
go
</pre>
<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server03.png" border="0" /></div><br /><br />Ahora insertamos algunos registros en la tabla Productos:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">insert into Productos values&#40;1, ‘Inka Kola 2 Lts’,3.5, 200,1&#41;
insert into Productos values&#40;1, ‘Pepsi 1 Lt.’,3, 100,1&#41;
insert into Productos values&#40;2, ‘Leche Pura Vida’,2.5, 400,1&#41;
insert into Productos values&#40;2, ‘Leche Anchor’,2, 200,1&#41;
insert into Productos values&#40;2, ‘Leche Gloria deslactozada’,3, 100,1&#41;
insert into Productos values&#40;3, ‘Arroz Paisana 1 Kg.’,3.5, 50,1&#41;
insert into Productos values&#40;3, ‘Arroz Costeño 1Kg.’,3, 50,1&#41;
insert into Productos values&#40;3, ‘Cereales Angel 1Kg.’,4, 50,1&#41;
</pre>
<br /><br />Ahora vemos los registros que acabamos de ingresar:<br />select * from Productos<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server04.png" border="0" /></div><br /><br />Ahora pasamos a crear el procedimiento almacenado que me lista los Productos:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">create procedure sp_gen_s_productos
@RegistrosAMostrar int,
@RegistrosAEmpezar int
as

SELECT TOP &#40;@RegistrosAMostrar&#41;* FROM
&#40;
select p.CodigoProductos as codigo, p.DescripcionProductos as descripcion,cp.DescripcionCategoriaProductos as categoria,
p.PrecioProductos as precio,p.SotckProductos as stock,
ROW_NUMBER&#40;&#41; OVER &#40;ORDER BY p.CodigoProductos &#41; AS num

from Productos p
inner join CategoriaProductos cp on p.CodigoCategoriaProductos=cp.CodigoCategoriaProductos

&#41;
AS a
WHERE num &gt; @RegistrosAEmpezar
</pre>
<br /><br />Para probar lo ejecutamos:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">exec sp_gen_s_productos 3,0
</pre>
<br /><br />Nos debe salir lo siguiente:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server05.png" border="0" /></div><br /><br /><br /><h2> Crear un proyecto jsp</h2><br />Como entonces ya creamos nuestra base de datos con las tablas correspondientes para el ejemplo, ahora procedemos a crear un proyecto jsp en la IDE que utilizaremos para este ejemplo , que es Net Beans. Ustedes pueden utilizar la que gusten pero el proyecto tendrá la siguiente estructura:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server06.png" border="0" /></div><br /><br />Los resaltados con amarillo, son los directorios y archivos que debemos crear, como sabemos en netbeans , el resto de archivos se crea por defecto, así que para crear el proyecto en Net Beans nos vamos a la ficha archivo, click en Proyecto nuevo, en categorías seleccionamos Java Web y Proyectos seleccionamos Web Application, click en siguiente y colocamos un nombre a nuestro proyecto y lo guardamos en la ruta que deseemos, click en siguiente y luego en terminar.<br /><br />Para empezar a crear nuestros directorios damos click derecho sobre la carpeta Web Pages, luego click en <em>nuevo</em> y luego en <em>carpeta</em> y así vamos creando las carpetas hasta tener la estructura de la imagen anterior, luego en la carpeta CSS hacemos click derecho y elegimos la opción <em>nuevo</em> y luego elegimos <em>Hoja de estilo en cascada</em> (CSS) y le ponemos de nombre estilo.<br /><br />Una vez que hemos hecho esto, el siguiente paso es descargarnos el archivo de jquery aquí, ojo, si descargan una versión distinta a la que yo utilicé, sólo tienen que cambiar la referencia en el index por la versión que ustedes hayan descargado. Hasta hoy la última versión es jquery-1.7.2.min.js, entonces ese archivo lo descargamos y copiamos a la carpeta js de nuestro proyecto. Asimismo también damos click derecho en la carpeta js y elegimos <em>nuevo</em>, luego elegimos archivos de Java Script y lo llamamos <em>funciones</em>. Para tener toda la estructura lista y empezar con el proceso, descargamos la siguiente imagen y la copiamos en la carpeta images.<br /><br />Una vez que hemos hecho todo lo anterior procedemos a descargar el proyecto que necesitamos para conectarnos y donde están los métodos de consulta a la Base de datos, así como también el driver necesario para conectarme a SQL SERVER 2008. Podemos descargarlo aquí, descargamos y descomprimimos las dos carpetas en la carpeta raíz de nuestro proyecto.<br /><br />En el explorador de windows copiamos las dos carpetas driver sql y jdbc y debe ver así:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server07.png" border="0" /></div><br /><br />Ahora en el Net Beans nos vamos a abrir proyecto y seleccionamos el archivo jdbc de la carpeta de nuestro proyecto:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server08.png" border="0" /></div><br /><br />…y hacemos click en abrir proyecto. Doble click en el archivo ConectaDB.java del proyecto jdbc y cambiamos los parámetros necesarios para conectarnos: el primer parámetro driver, es la regla del driver que utilizaremos para conectarnos que lo agregaremos después, el segundo la cadena de conexión que para este caso será mediante un dsn que crearemos luego de nombre dsnProductos, lo siguiente es el usuario de sql y luego su contraseña.<br /><br />Una vez que hemos modificado estos valores hacemos click derecho en el proyecto jdbc y elegimos limpiar y construir:<br /><br />Ahora vamos a crear el dsn de usuario que nos permitirá conectarnos a la base de datos, para esto nos vamos a panel de control:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server09.png" border="0" /></div><br /><br />En el panel de control donde dice ver por, seleccionamos iconos pequeños y luego elegimos la opción Herramientas Administrativas.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server10.png" border="0" /></div><br /><br />Luego elegimos la opción Origenes de Datos ODBC.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server11.png" border="0" /></div><br />Y se abre la siguiente pantalla:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server12.png" border="0" /></div><br /><br />damos click en agregar:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server13.png" border="0" /></div><br />seleccionamos sql server y click en finalizar<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server14.png" border="0" /></div><br />Escribimos en nombre del dsn, una descripción y el servidor , para este caso local y click en siguiente:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server15.png" border="0" /></div><br />Escribimos nuestro usuario de sql server y la contraseña y click en siguiente:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server16.png" border="0" /></div><br />Seleccionamos la db a la cual nos queremos conectar y click en siguiente:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server17.png" border="0" /></div><br />Click en finalizar.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server18.png" border="0" /></div><br />Click en probar origen de datos.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server19.png" border="0" /></div><br />Si todo estuvo bien sale esta imagen, click en aceptar.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server20.png" border="0" /></div><br />Como vemos nuestro DSN de usuario(dsnProductos) ha sido creado.<br /><br />Lo siguiente que vamos a hacer es agregar el proyecto jdbc y la librería para conectarnos a sql server a nuestro proyecto turorialJSP, entonces click derecho en el nombre del proyecto y elegimos propiedades.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server21.png" border="0" /></div><br />Click en libraries.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server22.png" border="0" /></div><br />Click en add project para agregar el proyecto jdbc.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server23.png" border="0" /></div><br />Seleccionamos el proyecto jdbc que hicimos las modificación de conexión y que está dentro de nuestro proyecto tutorialJSP y le damos click en Agregar al proyecto archivos JAR.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server24.png" border="0" /></div><br />Aquí ya aparece el proyecto jdbc agregado ahora hacemos click en add library.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server25.png" border="0" /></div><br />Click en crear.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server26.png" border="0" /></div><br />Le ponemos en nombre mssql_conect y hacemos click en aceptar.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server27.png" border="0" /></div><br />Click en agregar archivo JAR/Carpeta.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server28.png" border="0" /></div><br />Buscamos el archivo sqljdbc4 que está dentro de la carpeta driver sql en la carpeta raíz de nuestro proyecto tutorialJSP y le damos click en Agregar archivo JAR/Carpeta.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server29.png" border="0" /></div><br />Click en Aceptar.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server30.png" border="0" /></div><br />Como se creo la librería de nombre mssql_conect, ahora hacemos click en añadir biblioteca.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server31.png" border="0" /></div><br />Click en aceptar.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server32.png" border="0" /></div><br />Si desplegamos la carpeta libraries de nuestro proyecto vemos las librerías que acabamos de agregar.<br /><br />Ahora que ya tenemos nuestras librerías necesarias ya agregadas, procedemos a programar cada uno de los archivos, empezaremos programando el archivo estilo.css de la carpeta css que nos va a permitir mejorar la apariencia de nuestra página:<br /><br />estilo.css<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-java">body &#123;
background-color&#58;#F2F2F2;
font-family&#58; verdana,arial;
font-size&#58; 14px;
&#125;

a&#123;
color&#58;#DF7401;
text-decoration&#58; none;
&#125;
a&#58;hover&#123;
color&#58;#FFFF00;
&#125;

#bienvenida
&#123;
background-color&#58; #F5F6CE;
border&#58; 1px solid #FFBF00;
border-radius&#58;5px;
color&#58;#FF8000;
margin&#58; 0px auto;
padding&#58;10px 0 0 0;
text-align&#58; center;

&#125;

#menu&#123;
background&#58; #00BFFF;
border&#58;1px solid #01A9DB;
border-radius&#58; 5px;
border-bottom-right-radius&#58; 100px;
border-bottom-left-radius&#58; 100px;
height&#58; 50px;
margin&#58;0 auto;
width&#58;50%;
-webkit-border-radius&#58; 5px;
-webkit-border-bottom-right-radius&#58; 100px;
-webkit-border-bottom-left-radius&#58; 100px;
-moz-border-radius&#58; 5px;
-moz-border-radius-bottomright&#58; 100px;
-moz-border-radius-bottomleft&#58; 100px;

&#125;

li&#123;
color&#58;#fff;
cursor&#58;pointer;
font-size&#58;15px;
float&#58;left;
list-style&#58; none;
margin-left&#58; 40px;

&#125;
li&#58;hover &#123;
color&#58;#F4FA58;
font-weight&#58; bold;

&#125;
#contenedor&#123;
background-color&#58;#fff;
border&#58;1px solid #BDBDBD;
margin&#58; 20px auto;
min-height&#58; 300px;
-webkit-border-radius&#58; 5px;
-moz-border-radius&#58; 5px;
border-radius&#58; 5px;
width&#58; 70%;

text-align&#58; center;

&#125;
.paginadoractivo&#123;
padding&#58;5px 10px 5px 10px;
font-family&#58; “Trebuchet MS”, Arial, Helvetica, sans-serif;
font-size&#58;14px;
background-color&#58;#F5DAA0;
color&#58;#000000;
border&#58;0.5px solid #000000;
cursor&#58;pointer;
&#125;
.paginador&#123;
padding&#58;5px 10px 5px 10px;
font-family&#58; “Trebuchet MS”, Arial, Helvetica, sans-serif;
font-size&#58;14px;
background-color&#58; #E7F7FF;
color&#58;#000000;
border&#58;0.5px solid #333333;
cursor&#58;pointer;

&#125;
.paginador&#58;hover&#123;
padding&#58;5px 10px 5px 10px;
font-family&#58; “Trebuchet MS”, Arial, Helvetica, sans-serif;
font-size&#58;14px;
background-color&#58;#73ADD6;
color&#58; white ;
border&#58;0.5px solid #333333;
cursor&#58;pointer;
&#125;
.tablita
&#123;
font-size&#58; 12px;
width&#58;90%;
text-align&#58; left;
margin&#58;0 auto;
border&#58; 1px solid #E6E6E6;
border-collapse&#58; collapse;
font-family&#58; “Trebuchet MS”, Arial, sans-serif;
color&#58; #ffffff;
&#125;
.tablita caption
&#123;
font-size&#58; 16px;
font-weight&#58; normal;
padding&#58; 5px;
/* background&#58; #73ADD6 url&#40;‘../images/fon_perfil.gif’&#41; repeat-x;*/
border-right&#58; 1px dotted #06C ;
background&#58; #084B8A;
color&#58; #FFFFFF;
-webkit-border-top-left-radius&#58; 10px;
-webkit-border-top-right-radius&#58; 10px;
-moz-border-radius-topleft&#58; 10px;
-moz-border-radius-topright&#58; 10px;
border-top-left-radius&#58; 10px;
border-top-right-radius&#58; 10px;
&#125;
.tablita th
&#123;
font-size&#58; 13px;
font-weight&#58; normal;
padding&#58; 5px;
/* background&#58; #73ADD6 url&#40;‘../images/fon_perfil.gif’&#41; repeat-x;*/
border-right&#58; 1px dotted #06C ;
background&#58; #084B8A;
color&#58; #FFFFFF;
&#125;
.tablita td
&#123;
padding&#58; 4px;
color&#58; #086A87;

&#125;
.tablita tfoot tr td
&#123;
font-size&#58; 12px;
color&#58; #ffffff;
&#125;
.tablita tbody tr&#58;hover td
&#123;
/* background&#58; #FCFDFE; */
color&#58;saddlebrown;
background&#58; #E0F8F7;
&#125;</pre><br /><br />Ahora procederemos a codificar nuestro archivo Index:<br /><br />index.jsp<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">&lt;%@page contentType=”text/html” pageEncoding=”UTF-8&#8243;%&gt;
&lt;!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http&#58;//www.w3.org/TR/html4/loose.dtd”&gt;

&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8&#8243;&gt;
&lt;link rel=”stylesheet” href=”css/estilo.css” media=”all”&gt;
&lt;script type=”text/javascript” src=”js/jquery-1.6.2.min.js”&gt;&lt;/script&gt;
&lt;script type=”text/javascript” src=”js/funciones.js”&gt;&lt;/script&gt;
&lt;title&gt;JSP Page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=”bienvenida”&gt;
&lt;h2&gt;Bienvenidos a este tutorial JSP- MSSQL SERVER 2008 – JQUERY -CSS&lt;/h2&gt;
&lt;/div&gt;

&lt;div id=”menu”&gt;
&lt;ul&gt;
&lt;li&gt;Inicio&lt;/li&gt;
&lt;li onclick=”listaproductos&#40;&#41;”&gt;Listado&lt;/li&gt;
&lt;li&gt;Registro&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div id=”contenedor” &gt;

&lt;h3&gt;Aqui se mostrara el listado de productos&lt;/h3&gt;
&lt;img src=”images/admiracion-300×300.jpg”&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server33.png" border="0" /></div><br /><br />Ahora procedemos a codificar el código de la función listarProductos en el archivo funciones.js que se encuentra en la carpeta js de nuestro proyecto:<br /><br />funciones.js<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">function listaproductos&#40;pagina&#41;&#123;
var rnd = Math.random&#40;&#41;*11;

$.post&#40;“lib/listado.jsp”,&#123;
rnd&#58;rnd,
pagina&#58;pagina
&#125;,function&#40;data&#41;&#123;
$&#40;“#contenedor”&#41;.html&#40;data&#41;;
&#125;&#41;;
&#125;
</pre><br />Por último codificamos el archivo jsp que nos realiza el listado y el que recibe la variable pagina por el método post en jquery, este archivo se encuentra en la carpeta lib de nuestro proyecto:<br /><br />listado.jsp<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">&lt;%–

Document &#58; listado
Created on &#58; 31/03/2012, 02&#58;28&#58;29 PM
Author &#58; Jose Garcia
–%&gt;

&lt;%@ page import=”java.util.Vector, jdbc.*” %&gt;&lt;!– Nos permite utilizar metodos del proyecto jdbc con la clase sql.java –&gt;
&lt;%@page contentType=”text/html” pageEncoding=”UTF-8&#8243;%&gt;
&lt;%

out.println&#40;“&lt;br&gt;&lt;br&gt;”&#41;;

out.println&#40;“&lt;table class=’tablita’&gt;”&#41;;
out.println&#40;“&lt;caption&gt;LISTADO DE PRODUCTOS&lt;/caption&gt;”&#41;;
out.println&#40;“&lt;tr&gt;”&#41;;
out.println&#40;“&lt;th&gt;Codigo&lt;/th&gt;”&#41;;
out.println&#40;“&lt;th&gt;Producto&lt;/th&gt;”&#41;;
out.println&#40;“&lt;th&gt;Categoria&lt;/th&gt;”&#41;;
out.println&#40;“&lt;th&gt;Precio&lt;/th&gt;”&#41;;
out.println&#40;“&lt;th&gt;Stock&lt;/th&gt;”&#41;;

out.println&#40;“&lt;/tr&gt;”&#41;;
out.println&#40;“&lt;tbody&gt;”&#41;;
int RegistrosAMostrar=4;
int PaginasIntervalo=3;
int RegistrosAEmpezar=0;
int PagAct = 1;
String pag = request.getParameter&#40;“pagina”&#41;;
if &#40;pag==null || pag==”&quot;&#41;&#123;
RegistrosAEmpezar=0;
PagAct=1;
&#125;else&#123;
RegistrosAEmpezar=&#40;Integer.valueOf&#40;pag&#41;.intValue&#40;&#41;-1&#41;* RegistrosAMostrar;
PagAct=Integer.valueOf&#40;pag&#41;.intValue&#40;&#41;;
&#125;
%&gt;
&lt;%
Vector productos = Sql.consulta&#40;“exec &#91;sp_gen_s_productos&#93; @RegistrosAMostrar=’”+RegistrosAMostrar+”‘,@RegistrosAEmpezar=’”+RegistrosAEmpezar+”‘”&#41;;//nos permite ejecutar un sp con parametros para la paginacion
for &#40;int fils = 1; fils &lt; productos.size&#40;&#41;; ++fils&#41; &#123; //recorre el vector productos con los resultados del metodo Sql.consulta
String&#91;&#93; unaFila = &#40;String&#91;&#93;&#41; productos.get&#40;fils&#41;;
%&gt;
&lt;tr id=”grid”&gt;

&lt;!– voy imprimiendo los resultados en la tabla–&gt;
&lt;td id=”formnuevo”&gt;&lt;%=unaFila&#91;0&#93;%&gt;&lt;/td&gt;
&lt;td id=”formnuevo”&gt;&lt;%=unaFila&#91;1&#93;%&gt;&lt;/td&gt;
&lt;td id=”formnuevo”&gt;&lt;%=unaFila&#91;2&#93;%&gt;&lt;/td&gt;
&lt;td id=”formnuevo”&gt;&lt;%=unaFila&#91;3&#93;%&gt;&lt;/td&gt;
&lt;td id=”formnuevo”&gt;&lt;%=unaFila&#91;4&#93;%&gt;&lt;/td&gt;

&lt;/tr&gt;

&lt;%

&#125; %&gt;
&lt;%
String NroRegistros = Sql.getCampo&#40;“select count&#40;*&#41; from Productos p “
+ ” inner join CategoriaProductos cp on p.CodigoCategoriaProductos=cp.CodigoCategoriaProductos”&#41;;// obtengo la cantidad de registros actuales
int PagAnt=PagAct-1;
int PagSig=PagAct+1;

double PagUlt=Integer.valueOf&#40;NroRegistros&#41;.intValue&#40;&#41;/RegistrosAMostrar; //calculo cuantas paginas tendra mi paginacion
int Res=Integer.valueOf&#40;NroRegistros&#41;.intValue&#40;&#41;%RegistrosAMostrar;
if&#40;Res&gt;0&#41;&#123;
PagUlt=Math.floor&#40;PagUlt&#41;+1;
&#125;

out.println&#40;“&lt;/tbody&gt;”&#41;;
out.println&#40;“&lt;/table&gt;&lt;br /&gt;”&#41;;
//principio del paginador
out.println&#40;“&lt;div style=’width&#58;300px; float&#58;right’&gt;”&#41;;

if&#40;PagAct&gt;&#40;PaginasIntervalo+1&#41;&#41; &#123;
out.println&#40;“&lt;a onclick=listaproductos&#40;’1&#8242;&#41;; class=’paginador’&gt;&lt;&lt; Primero&lt;/a&gt;”&#41;;
out.println&#40;“&amp;nbsp;”&#41;;
&#125;
for &#40; int i = &#40;PagAct-PaginasIntervalo&#41; ; i &lt;= &#40;PagAct-1&#41; ; i ++&#41; &#123;
if&#40;i&gt;=1&#41; &#123;
out.println&#40;“&lt;a onclick=\”listaproductos&#40;‘”+i+”‘&#41;\” class=’paginador’&gt;”+i+”&lt;/a&gt;”&#41;;
out.println&#40;“&amp;nbsp;”&#41;;
&#125;
&#125;
out.println&#40;“&lt;span class=’paginadoractivo’&gt;”+PagAct+”&lt;/span&gt;”&#41;;
out.println&#40;“&amp;nbsp;”&#41;;
for &#40; int i = &#40;PagAct+1&#41; ; i &lt;= &#40;PagAct+PaginasIntervalo&#41; ; i ++&#41; &#123;
if&#40;i&lt;=PagUlt&#41; &#123;
out.println&#40;“&lt;a onclick=\”listaproductos&#40;‘”+i+”‘&#41;\” class=’paginador’&gt;”+i+”&lt;/a&gt;”&#41;;
out.println&#40;“&amp;nbsp;”&#41;;
&#125;
&#125;
if&#40;PagAct&lt;&#40;PagUlt-PaginasIntervalo&#41;&#41; &#123;
out.println&#40;“&lt;a onclick=\”listaproductos&#40;‘”+PagUlt+”‘&#41;\” class=’paginador’&gt;Ultimo &gt;&gt;&lt;/a&gt;”&#41;;
&#125;
out.println&#40;“&lt;/div&gt;”&#41;;
//fin del paginador
%&gt;</pre><br /><br />Si hemos hecho todo bien cuando hacemos click en listado de la pagina index.jsp nos aparecerá el listado en el div contenedor con su respectiva paginación y nos mostrará 4 registros por página cuando hacemos click en los números de páginas (si queremos que nos muestre más registros por página cambiamos el valor de la variable RegistrosAMostrar en la pagina listado.jsp) y se mostrará de la siguiente manera:<br /><br />Primera página del paginador:<br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server34.png" border="0" /></div><br /><br />Segunda y última pagina del paginador<br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/listado-paginacion-en-jsp-con-ajax-sql-server/listado-paginacion-en-jsp-con-ajax-sql-server35.png" border="0" /></div><br /><br />Espero que este tutorial les haya sido de gran ayuda<br /><br />Gracias por la atención brindada ..hasta otra oportunidad<p><a href="http://www.cristalab.com/tips/listado-con-paginacion-en-jsp-con-ajax-y-sql-server-c105048l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p> <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=rueW74V3QoY:_7VchO4JV68:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=rueW74V3QoY:_7VchO4JV68:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/rueW74V3QoY" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 16 Apr 2012 09:13:55</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/listado-con-paginacion-en-jsp-con-ajax-y-sql-server-c105048l/</feedburner:origLink></item>
	    <item>
    	    <title>Tutorial de AMFPHP y Actionscript 3</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/l_9Jl7cuE5g/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/tutorial-de-amfphp-y-actionscript-3-c274l/</guid>
	        <description><![CDATA[ AMFPHP es un famoso sistema del lado del servidor para usar Remoting en PHP en conexión con Flash. En este tutorial veremos cómo instalarlo y adaptarlo a Actionscript 3, Flash CS4 y Flex. ]]></description>

	        <dc:creator>bubudrc</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ AMFPHP es un famoso sistema del lado del servidor para usar Remoting en PHP en conexi&oacute;n con Flash. En este tutorial veremos c&oacute;mo instalarlo y adaptarlo a Actionscript 3, Flash CS4 y Flex. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=l_9Jl7cuE5g:ZGLWaXqD6FU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=l_9Jl7cuE5g:ZGLWaXqD6FU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/l_9Jl7cuE5g" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Sat, 05 Dec 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/tutorial-de-amfphp-y-actionscript-3-c274l/</feedburner:origLink></item>
	    <item>
    	    <title>Programación orientada a objetos en Visual Basic .NET</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/vW58udRu7ck/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/programacion-orientada-a-objetos-en-visual-basic-.net-c273l/</guid>
	        <description><![CDATA[ Un completo manual de programación orientada a objetos en Visual Basic .NET, donde hablamos de herencia, encapsulación, polimorfismo, proyectos en VB.NET y todo lo que abarca el OOP en Visual Basic. ]]></description>

	        <dc:creator>Wyrm</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ Un completo manual de programaci&oacute;n orientada a objetos en Visual Basic .NET, donde hablamos de herencia, encapsulaci&oacute;n, polimorfismo, proyectos en VB.NET y todo lo que abarca el OOP en Visual Basic. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=vW58udRu7ck:XEX7uXANcq0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=vW58udRu7ck:XEX7uXANcq0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/vW58udRu7ck" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 14 Sep 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/programacion-orientada-a-objetos-en-visual-basic-.net-c273l/</feedburner:origLink></item>
	    <item>
    	    <title>Tutorial de Visual Basic .NET</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/GnQHiCRUFH8/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/tutorial-de-visual-basic-.net-c272l/</guid>
	        <description><![CDATA[ En este tutorial básico crearemos una aplicación usando los Windows Forms de .NET y el lenguaje Visual Basic .NET. Todo usando el IDE Microsoft Visual Studio 2008 y Visual Basic 2008. ]]></description>

	        <dc:creator>Wyrm</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ En este tutorial b&aacute;sico crearemos una aplicaci&oacute;n usando los Windows Forms de .NET y el lenguaje Visual Basic .NET. Todo usando el IDE Microsoft Visual Studio 2008 y Visual Basic 2008. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=GnQHiCRUFH8:rn2POocWP8k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=GnQHiCRUFH8:rn2POocWP8k:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/GnQHiCRUFH8" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 01 Sep 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/tutorial-de-visual-basic-.net-c272l/</feedburner:origLink></item>
	    <item>
    	    <title>Tutorial de PHP y YAML</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/zoGQfoomyb8/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/tutorial-de-php-y-yaml-c271l/</guid>
	        <description><![CDATA[ YAML es un formato de serialización de datos que nos permite crear archivos de variables fácilmente leíbles. En este tutorial usaremos YAML o YML para archivos de configuración en PHP. ]]></description>

	        <dc:creator>Duilio</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ YAML es un formato de serializaci&oacute;n de datos que nos permite crear archivos de variables f&aacute;cilmente le&iacute;bles. En este tutorial usaremos YAML o YML para archivos de configuraci&oacute;n en PHP. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=zoGQfoomyb8:u05JSskbHOk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=zoGQfoomyb8:u05JSskbHOk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/zoGQfoomyb8" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 24 Aug 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/tutorial-de-php-y-yaml-c271l/</feedburner:origLink></item>
	    <item>
    	    <title>Coloreado de dibujos en Flash</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/5_aDF9qWd2k/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/coloreado-de-dibujos-en-flash-c269l/</guid>
	        <description><![CDATA[ En este tutorial de coloreado digital, veremos el proceso de entintado de personajes y dibujos usando Adobe Flash como herramienta. ]]></description>

	        <dc:creator>Victor-Nael</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ En este tutorial de coloreado digital, veremos el proceso de entintado de personajes y dibujos usando Adobe Flash como herramienta. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=5_aDF9qWd2k:BQfPsql8H4w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=5_aDF9qWd2k:BQfPsql8H4w:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/5_aDF9qWd2k" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 10 Aug 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/coloreado-de-dibujos-en-flash-c269l/</feedburner:origLink></item>
	    <item>
    	    <title>Efectos de sonido en FL Studio</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/dZ0PQg0y7Jc/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/efectos-de-sonido-en-fl-studio-c268l/</guid>
	        <description><![CDATA[ Hay muchos tipos de efectos de sonido en FL Studio (antiguo Fruity Loops). En este tutorial veremos los efectos de audio Delay, Reeverb, Flanger, Phaser, Chorus, Compressor, Clipper, Fast Distortion y Vocoder. ]]></description>

	        <dc:creator>RattaMono</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ Hay muchos tipos de efectos de sonido en FL Studio (antiguo Fruity Loops). En este tutorial veremos los efectos de audio Delay, Reeverb, Flanger, Phaser, Chorus, Compressor, Clipper, Fast Distortion y Vocoder. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=dZ0PQg0y7Jc:HguT4wmAceY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=dZ0PQg0y7Jc:HguT4wmAceY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/dZ0PQg0y7Jc" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 10 Aug 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/efectos-de-sonido-en-fl-studio-c268l/</feedburner:origLink></item>
	    <item>
    	    <title>Crear una base de datos en MySQL</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/I4K_FRtl8BE/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/crear-una-base-de-datos-en-mysql-c270l/</guid>
	        <description><![CDATA[ En este tutorial veremos cómo crear una base de datos de MySQL, crear tablas y ejecutar comandos de MySQL con phpMyAdmin, sin necesidad de tener conocimientos extensos de SQL. ]]></description>

	        <dc:creator>Wyrm</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ En este tutorial veremos c&oacute;mo crear una base de datos de MySQL, crear tablas y ejecutar comandos de MySQL con phpMyAdmin, sin necesidad de tener conocimientos extensos de SQL. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=I4K_FRtl8BE:ksBmKPfEj74:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=I4K_FRtl8BE:ksBmKPfEj74:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/clab/~4/I4K_FRtl8BE" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 10 Aug 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/crear-una-base-de-datos-en-mysql-c270l/</feedburner:origLink></item>
	</channel>
</rss>

