<?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>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>Uso de la herramienta Fusión sobre textos en Illustrator</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/T2IKw9a3g08/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/uso-de-la-herramienta-fusion-sobre-textos-en-illustrator-c105630l/</guid>
	        <description><![CDATA[ En este videotutorial de Illustrator usaremos la herramienta fusión sobre conjuntos de texto, mientras ajustamos sus opciones para obtener detalles característicos en el diseño y la extrusión de las formas, aplicando la opción reemplazar lomo con una curva como nueva trayectoria.<br />
<br />
Haremos uso de múltiples bloques gen... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>illustrator</category>
	        <category>efectos</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/illustrator/">Illustrator</a> usaremos la herramienta fusión sobre conjuntos de texto, mientras ajustamos sus opciones para obtener detalles característicos en el <a class="arti_link" href="http://www.cristalab.com/tags/diseno/">diseño</a> y la extrusión de las formas, aplicando la opción reemplazar lomo con una curva como nueva trayectoria.<br /><br />Haremos uso de múltiples bloques generando una transición de color entre ellos, para que la herramienta fusión nos ofrezca los mejores <a class="arti_link" href="http://www.cristalab.com/tags/efectos/">efectos</a>, además de modificar el trazado de la fusión entre los conjuntos a través de curvas personalizadas que reemplazaremos y editaremos.<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/JDdr1IG9fWQ&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/JDdr1IG9fWQ&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-la-herramienta-fusion-sobre-textos-en-illustrator-c105630l/#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=T2IKw9a3g08:LKMjj1oDSeA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=T2IKw9a3g08:LKMjj1oDSeA: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/T2IKw9a3g08" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Thu, 10 May 2012 12:01:53</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/uso-de-la-herramienta-fusion-sobre-textos-en-illustrator-c105630l/</feedburner:origLink></item>
	    <item>
    	    <title>Cómo mover capas en Photoshop y mantener la posición de origen</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/x23woCpboRg/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/como-mover-capas-en-photoshop-y-mantener-la-posicion-de-origen-c105606l/</guid>
	        <description><![CDATA[ En muchas ocasiones, cuando trabajamos en Adobe Photoshop, resulta necesario mover varias capas a un nuevo documento y que mantengan la misma posición que en el archivo de origen.  Hacer ésto no es nada complicado, a continuación explicaré dos formas sencillas de lograrlo:<br />
Opción 1: Shift + Arrastrar<br />
Selecciona... ]]></description>

	        <dc:creator>XKlibur</dc:creator>
	        <category>photoshop</category>
	        
            <content:encoded><![CDATA[  En muchas ocasiones, cuando trabajamos en <a class="arti_link" href="http://www.cristalab.com/tags/photoshop/">Adobe Photoshop</a>, resulta necesario mover varias capas a un nuevo documento y que mantengan la misma posición que en el archivo de origen.  Hacer ésto no es nada complicado, a continuación explicaré dos formas sencillas de lograrlo:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/duplicar-capas-1336493987_full550.png" border="0" /></div><br /><br /><h2>Opción 1: Shift + Arrastrar</h2><br />Selecciona todas las capas que quieras mover, presiona la tecla <strong>“Shift”</strong> y <strong>“arrastra”</strong> las capas hacia el nuevo documento. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/mover-capas-1336492268_full550.png" border="0" /></div><br /><br /><h2>Opción 2: Duplicar capas en un nuevo documento</h2><br />Otra opción sencilla es seleccionar todas las capas que quieras mover, hacer click con el botón derecho del mouse en una de las capas seleccionadas y escoger la opción <strong>“Duplicate layers”</strong>.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/duplicar-capa-1336492366_full550.png" border="0" /></div><br /><br />Al hacer esto te aparecerá una ventana con una lista desplegable para que selecciones el documento donde quieres que aparezcan las capas que duplicarás. Puedes crear un nuevo documento o escoger uno que tengas abierto. Si creas un nuevo documento será de las mismas dimensiones del documento de origen de las capas duplicadas. Por último, recuerda que si quieres duplicar las capas en un documento específico debes tenerlo abierto.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/lista-desplegable-1336492473_full550.png" border="0" /></div><br /><br />Espero que estos simples tips te sean de utilidad <img src="/foros/images/smiles/icon_miau.gif" alt="^^" border="0" />.<p><a href="http://www.cristalab.com/tips/como-mover-capas-en-photoshop-y-mantener-la-posicion-de-origen-c105606l/#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=x23woCpboRg:Z2fobt1poPg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=x23woCpboRg:Z2fobt1poPg: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/x23woCpboRg" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 09 May 2012 15:00:59</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/como-mover-capas-en-photoshop-y-mantener-la-posicion-de-origen-c105606l/</feedburner:origLink></item>
	    <item>
    	    <title>Skinning aplicado a Nurbs y áreas en 3D Maya</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/wiCixpBRJgs/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/skinning-aplicado-a-nurbs-y-areas-en-3d-maya-c105600l/</guid>
	        <description><![CDATA[ Después de ver la asignación del Skinning a las superficies poligonales en 3D Maya, comprobaremos cómo la aplicación Skin sobre superficies Nurbs requiere de un proceso ordenado y preciso en las superficies y los esqueletos que las controlarán, posicionando nuevos huesos de control para ajustar el área de deformación y... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>maya</category>
	        <category>3d</category>
	        
            <content:encoded><![CDATA[  Después de ver la asignación del Skinning a las superficies poligonales en <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>, comprobaremos cómo la aplicación Skin sobre superficies Nurbs requiere de un proceso ordenado y preciso en las superficies y los esqueletos que las controlarán, posicionando nuevos huesos de control para ajustar el área de deformación y controlando el efecto de la herramienta y filtrando previamente cualquier otro nodo que pueda actuar incorrectamente.<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/PekuxWKOTWU&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/PekuxWKOTWU&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/skinning-aplicado-a-nurbs-y-areas-en-3d-maya-c105600l/#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=wiCixpBRJgs:amBmzTLjqCM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=wiCixpBRJgs:amBmzTLjqCM: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/wiCixpBRJgs" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 09 May 2012 14:56:34</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/skinning-aplicado-a-nurbs-y-areas-en-3d-maya-c105600l/</feedburner:origLink></item>
	    <item>
    	    <title>Bases del enrutamiento dinámico Rip</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/sSqX-idCaEU/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/bases-del-enrutamiento-dinamico-rip-c105497l/</guid>
	        <description><![CDATA[ Después de estudiar las propiedades de los sistemas de enrutamiento dinámico, estamos listos para implementar la configuración básica de Rip sobre los dispositivos intermedios de una topología sencilla, creando un enrutamiento efectivo y recomendado en redes de pequeño tamaño, usando el simulador packet tracer y conect... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>redes</category>
	        <category>informatica</category>
	        
            <content:encoded><![CDATA[  Después de estudiar las propiedades de los sistemas de enrutamiento dinámico, estamos listos para implementar la configuración básica de Rip sobre los dispositivos intermedios de una topología sencilla, creando un enrutamiento efectivo y recomendado en redes de pequeño tamaño, usando el simulador packet tracer y conectando diferentes <a class="arti_link" href="http://www.cristalab.com/tags/redes/">redes</a> en cada extremo para testear la asignación.<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/pZY_D7ASll0&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/pZY_D7ASll0&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/bases-del-enrutamiento-dinamico-rip-c105497l/#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=sSqX-idCaEU:DBjcN9wuoSQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=sSqX-idCaEU:DBjcN9wuoSQ: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/sSqX-idCaEU" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 08 May 2012 07:34:53</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/bases-del-enrutamiento-dinamico-rip-c105497l/</feedburner:origLink></item>
	    <item>
    	    <title>Crear un icono metálico en Photoshop</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/l1U5sCB_DzQ/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/crear-un-icono-metalico-en-photoshop-c105574l/</guid>
	        <description><![CDATA[ Crearemos un icono metálico en Photoshop que nos ofrecerá un diseño con el que poder jugar e incluir en composiciones que necesiten también botones o elementos altamente personalizables, para lo que construiremos la base con la herramienta de forma circular, al que aplicaremos efectos y texturas que nos darán el result... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>photoshop</category>
	        <category>efectos</category>
	        
            <content:encoded><![CDATA[  Crearemos un icono metálico en <a class="arti_link" href="http://www.cristalab.com/tags/photoshop/">Photoshop</a> que nos ofrecerá un <a class="arti_link" href="http://www.cristalab.com/tags/diseno/">diseño</a> con el que poder jugar e incluir en composiciones que necesiten también botones o elementos altamente personalizables, para lo que construiremos la base con la herramienta de forma circular, al que aplicaremos efectos y texturas que nos darán el resultado final buscado.<br /><br />Aquí una vista del resultado final:<br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/photoshop-067-1336478084_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/3AtpK0NQCJQ&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/3AtpK0NQCJQ&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/crear-un-icono-metalico-en-photoshop-c105574l/#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=l1U5sCB_DzQ:vdYq4I10J3I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=l1U5sCB_DzQ:vdYq4I10J3I: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/l1U5sCB_DzQ" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 08 May 2012 07:29:24</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/crear-un-icono-metalico-en-photoshop-c105574l/</feedburner:origLink></item>
	    <item>
    	    <title>Cómo activar Paypal en Latinoamérica</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/ZB1hsqpyT0k/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/como-activar-paypal-en-latinoamerica-c105241l/</guid>
	        <description><![CDATA[ Hola amigos! Este tutorial no es tan técnico como los que he visto que me gustaron muchísimo, pero al mismo tiempo es muy importante para la vida cotidiana de cualquier freelancer de Latinoamérica que necesita cobrar dinero del exterior.<br />
<br />
Como muchos saben en Europa y Estados Unidos, Paypal es un medio de pago muy co... ]]></description>

	        <dc:creator>gieson</dc:creator>
	        <category>paypal</category>
	        <category>negocios</category>
	        
            <content:encoded><![CDATA[  Hola amigos! Este tutorial no es tan técnico como los que he visto que me gustaron muchísimo, pero al mismo tiempo es muy importante para la vida cotidiana de cualquier freelancer de Latinoamérica que necesita cobrar dinero del exterior.<br /><br />Como muchos saben en Europa y Estados Unidos, <a class="arti_link" href="http://www.cristalab.com/tags/paypal/">Paypal</a> es un medio de pago muy común. Este <a class="arti_link" href="http://www.cristalab.com/tutoriales/">tutorial</a> intenta dar una solución a los profesionales latinoamericanos que <a class="arti_link" href="http://www.cristalab.com/tags/negocios/">trabajamos</a> para el exterior y que muchas veces tenemos problemas para obtener nuestro saldo de Paypal.<br /><br /><h2>Objetivo</h2><br />Extraer saldo de Paypal mediante ATM / Cajero automático y trabajar cómodamente para el exterior.<br /><br /><h2>Requisitos</h2><br /><ul><li> Cuenta en Paypal<br /></li><li> Tarjeta Payoneer<br /></li><li> Cuenta Virtual en USA<br /></li></ul><br /><br />La cuenta de paypal como todos sabemos la podemos abrir gratis.<br /><br />La tarjeta payoneer se puede pedir en payoneer.com y tiene un costo de envío, pero si la piden en <a class="arti_link" href="http://www.payoneer-affiliates.com/latinoamerica">http://www.payoneer-affiliates.com/latinoamerica</a> se las envían sin costo porque es una campaña que lanzaron hace poco.<br /><br />Una vez completado el formulario online, la tarjeta tarda unos pocos días en llegar a nuestro domicilio. <br />[nota:7d54b81f0c]Por favor, recordar completar con nuestros datos reales y exactamente como figuran en nuestro Pasaporte o Documento de Identidad (que enviaremos posteriormente para abrir cuenta virtual en USA).[/nota:7d54b81f0c]<br /><br />La cuenta virtual en USA la podremos obtener también mediante Payoneer una vez que tenemos la tarjeta de débito habilitada. Para obtenerla tendremos que escribir a través del botón de contacto del sitio web de payoneer y enviar la siguiente información:<br /><ul><li> Servicios o productos que ofrecemos (Incluir sitio web propio)<br /></li><li> Links de productos o servicios ofrecidos donde se vea nuestro nombre o algo que evidencie nuestra relación laboral (ejemplo: una web que hemos hecho linkeando a nuestro website en el footer).<br /></li><li> Screenshot de Paypal donde se muestre un balance de pagos recibidos en el último período<br /></li><li> Scan de pasaporte o documento de identidad<br /></li></ul><br /><br /><h2>Transfiriendo el dinero desde Paypal a nuestra tarjeta de débito</h2><br />Ahora que ya tenemos la Tarjeta de Débito y la cuenta Virtual en USA; simplemente procederemos a vincular la Cuenta de USA con Paypal. De este modo, podremos extraer el dinero fácilmente en cualquier ATM del mundo. Los pasos son los siguientes:<br /><br />Nos dirigimos a Paypal.com y vamos a Profile =&gt; ADD OR Edit Bank Account =&gt; Add <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/activar-paypal-en-latinoamerica/activar-paypal-en-latinoamerica01.jpg" border="0" /></div><br /><br />Ingresamos a nuestra cuenta de Payoneer.com y vamos a services =&gt; US Payment service. Veremos un modelo de cheque con nuestros datos en el que se indican todo lo que nos pide Paypal.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tutoriales/activar-paypal-en-latinoamerica/activar-paypal-en-latinoamerica02.jpg" border="0" /></div><br /><br />Ingresamos todos los datos en paypal y guardamos la cuenta. Finalmente hacemos click en Withdraw =&gt; Transfer to bank account y allí seleccionamos la cuenta bancaria que creamos. <br /><br />En 48 hs aproximadamente nos llegará un email desde payoneer avisándonos que hemos recibido un depósito en nuestra cuenta. Tan sólo debemos ir al cajero automático más cercano para extraer el dinero. <br /><br /><br />Espero que este tutorial les sea de gran utilidad, si necesitan ayuda ya saben. Suerte!<p><a href="http://www.cristalab.com/tips/como-activar-paypal-en-latinoamerica-c105241l/#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=ZB1hsqpyT0k:0YRXmN6CKVo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=ZB1hsqpyT0k:0YRXmN6CKVo: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/ZB1hsqpyT0k" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 08 May 2012 07:22:54</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/como-activar-paypal-en-latinoamerica-c105241l/</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>Animación de planetas rotando en After Effects</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/86VZxT6K69A/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/animacion-de-planetas-rotando-en-after-effects-c105133l/</guid>
	        <description><![CDATA[ A través de esta práctica simple, aprenderemos el uso de las capas 3D dentro de After Effects, mientras jugamos con planetas y elementos estelares, para recrear una rotación entre ellos, en la que usaremos pequeños trucos que ajustarán la animación de forma eficiente y añadirán nuevos controles y ejes que nos permitirá... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>after_effects</category>
	        <category>3d</category>
	        <category>animacion</category>
	        
            <content:encoded><![CDATA[  A través de esta práctica simple, aprenderemos el uso de las capas <a class="arti_link" href="http://www.cristalab.com/tags/3d/">3D</a> dentro de <a class="arti_link" href="http://www.cristalab.com/tags/after_effects/">After Effects</a>, mientras jugamos con planetas y elementos estelares, para recrear una rotación entre ellos, en la que usaremos pequeños trucos que ajustarán la <a class="arti_link" href="http://www.cristalab.com/tags/animacion/">animación</a> de forma eficiente y añadirán nuevos controles y ejes que nos permitirán completar la composición.<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/NjmI3JHC3Xk&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/NjmI3JHC3Xk&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/animacion-de-planetas-rotando-en-after-effects-c105133l/#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=86VZxT6K69A:uN31aB1Ybtc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=86VZxT6K69A:uN31aB1Ybtc: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/86VZxT6K69A" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Fri, 13 Apr 2012 14:25:11</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/animacion-de-planetas-rotando-en-after-effects-c105133l/</feedburner:origLink></item>
	    <item>
    	    <title>Firefox evitará que Flash cargue sin permiso del usuario por click</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/r6jXKSBB2J0/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/firefox-evitara-que-flash-cargue-sin-permiso-del-usuario-por-click-c105149l/</guid>
	        <description><![CDATA[ Jared Wein, uno de los ingenieros de la Mozilla Foundation publicó el anuncio que Firefox 14, la próxima versión de Firefox, no permitirá que Flash cargue en cada página que se abra hasta que el usuario de permiso explicito.<br />
<br />
La implementación está aprobada y el desarrollo ya va avanzado, la pregunta que queda es cóm... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>firefox</category>
	        <category>flash</category>
	        <category>browsers</category>
	        <category>html5</category>
	        <category>adobe</category>
	        <category>flashplayer</category>
	        
            <content:encoded><![CDATA[  Jared Wein, uno de los ingenieros de la Mozilla Foundation <a class="arti_link" href="http://msujaws.wordpress.com/2012/04/11/opting-in-to-plugins-in-firefox/">publicó el anuncio</a> que Firefox 14, la próxima versión de Firefox, no permitirá que Flash cargue en cada página que se abra hasta que el usuario de permiso explicito.<br /><br />La implementación <a class="arti_link" href="https://wiki.mozilla.org/Opt-in_activation_for_plugins">está aprobada y el desarrollo ya va avanzado</a>, la pregunta que queda es cómo será la interfaz. Las dos opciones son mostrar un cuadrado gris con el texto de clickear para activar (como abajo en la imagen) o una barra amarilla en el header del sitio web, avisando del contenido Flash y dando la posibilidad de activar. <br /><br />Esta implementación será por URL y por elemento Flash. A menos que se cambie explicitamente en el about&#058;config, <strong>todos los SWF requerirán permiso de click para correr</strong>. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/flash-click-to-play-in-firefox-1334333314_full550.png" border="0" /></div><br /><h2>¿Qué significa esto para los desarrolladores en Flash y Actionscript 3?</h2><br />Hay 3 tipos de personas que se verán afectados por esta medida: Devs normales de Flash, creadores de banners y sitios que usan Flash de manera invisible. <br /><br /><h3>Para el uso normal de Flash, no significa <em>mucho</em></h3><br />A la gran mayoría de las personas que crean en Flash, lo único en lo que los afectará es un click adicional. Si tu sitio es 100% Flash, se verá gris antes que el usuario de el primer click. En algunos casos, esto puede ser imperdonable, en otros, no tan grave. <br /><br />Aunque a nivel de usabilidad, cualquier click adicional es malo. <br /><br /><h3>Para los creadores de banners: Hora de no usar Flash</h3><br />En un banner, un click adicional es inviable. Los banners son ultra optimizados para efectividad y rendimiento. Si un banner requiere un click adicional, muertos. PEro lo peor, si un banner NO SE VE sin darle click, ahí ya nos jodimos todos. Con esto, hacer banners en Flash no es rentable ya. <br /><br /><h3>Para quienes usan Flash de manera invisible como &quot;canal&quot;</h3><br />Grooveshark usa Flash internamente para reproducir la música (<a class="arti_link" href="http://www.cristalab.com/blog/el-rediseno-de-grooveshark-no-es-html5-c93353l/">Grooveshark no usa HTML5</a>, aunque tienen una <a class="arti_link" href="http://html5.grooveshark.com/">versión HTML5</a>). Pandora igual. El audio en HTML5 aun es muy malo (el video no, es genial). Otro ejemplo destacado es Socket.io, que usa Flash en navegadores que no soportan sockets para hacer realtime. Estos casos donde Flash es usado como un &quot;canal invisible&quot; son seriamente afectados. Porque al ser de 1px de tamaño, son Flash invisibles a los que no se les puede hacer click. <br /><br />¿Soluciones? No tengo ni idea. Hacer visible el SWF y agregar al diseño un &quot;da click aquí para que funcione&quot; es lo que se me ocurre. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/blog/inception-grooveshark.jpg" border="0" /></div><br /><h2>¿Para donde va Flash en los desktops?</h2><br />Repasemos. Flash ya <a class="arti_link" href="http://www.cristalab.com/blog/el-fin-del-flash-player-c100690l/">será imposible correr en Windows 8</a> cuando esté activa la interfaz Metro. Igualmente Safari (aunque sólo se usa en móviles). Adobe abandonó el plugin para móviles y la nueva estrategia de Flash está centrada en el desarrollo de juegos.<br /><br />Para allá va Flash. Flash será la plataforma cross-device de juegos #1. Ya no una de experiencias interactivas al estilo de <a class="arti_link" href="http://www.cristalab.com/blog/inside-grupo-w-la-historia-detras-de-la-agencia-interactiva-c69193l/">GrupoW</a>, 2Advanced o BigSpaceShip, sino juegos móviles en teléfonos y tablets como Angry Birds, Machinarium o Draw Something. Mientras, todavía sirve.<p><a href="http://www.cristalab.com/blog/firefox-evitara-que-flash-cargue-sin-permiso-del-usuario-por-click-c105149l/#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=r6jXKSBB2J0:wlcxR2CZvAk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=r6jXKSBB2J0:wlcxR2CZvAk: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/r6jXKSBB2J0" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Fri, 13 Apr 2012 11:47:25</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/firefox-evitara-que-flash-cargue-sin-permiso-del-usuario-por-click-c105149l/</feedburner:origLink></item>
	    <item>
    	    <title>Crea un iPod en Illustrator</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/IjaGqPIVE88/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/crea-un-ipod-en-illustrator-c105009l/</guid>
	        <description><![CDATA[ En este videotutorial de Illustrator veremos cómo en la mayoría de los casos, el uso de los degradados nos resulta imprescindible para recrear efectos como sombreados y reflejos, que serían complicados de realizar de otras formas y en este caso los usaremos exhaustivamente, junto con la herramienta de texto y las forma... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>illustrator</category>
	        <category>dibujo</category>
	        <category>ilustracion</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/illustrator/">Illustrator</a> veremos cómo en la mayoría de los casos, el uso de los degradados nos resulta imprescindible para recrear <a class="arti_link" href="http://www.cristalab.com/tags/efectos/">efectos</a> como sombreados y reflejos, que serían complicados de realizar de otras formas y en este caso los usaremos exhaustivamente, junto con la herramienta de texto y las formas, para dar vida a esta <a class="arti_link" href="http://www.cristalab.com/tags/ilustracion/">ilustración</a> de un reproductor multimedia sencillo.<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/254q3OGBARw&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/254q3OGBARw&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/crea-un-ipod-en-illustrator-c105009l/#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=IjaGqPIVE88:u5bUB4-eOxE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=IjaGqPIVE88:u5bUB4-eOxE: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/IjaGqPIVE88" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Thu, 12 Apr 2012 10:21:09</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/crea-un-ipod-en-illustrator-c105009l/</feedburner:origLink></item>
	    <item>
    	    <title>Introducción a Python</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/-xV_vjPA_Ig/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/introduccion-a-python-c105067l/</guid>
	        <description><![CDATA[ En este pequeño tutorial vamos a ver inicialmente qué es Python, cómo descargarlo, porqué utilizarlo y luego daremos paso a crear una aplicación que calcule el área y el perímetro de un triángulo. Este archivo se guardará con extensión .py. Espero que les guste la información.<br />
<br />
¿Qué es python?<br />
Es un lenguaje de prog... ]]></description>

	        <dc:creator>virtualblog1</dc:creator>
	        <category>python</category>
	        <category>framework</category>
	        <category>programacion</category>
	        
            <content:encoded><![CDATA[  En este pequeño <a class="arti_link" href="http://www.cristalab.com/tutoriales/">tutorial</a> vamos a ver inicialmente qué es <a class="arti_link" href="http://www.cristalab.com/tags/python/">Python</a>, cómo descargarlo, porqué utilizarlo y luego daremos paso a crear una aplicación que calcule el área y el perímetro de un triángulo. Este archivo se guardará con extensión .py. Espero que les guste la información.<br /><br /><h2>¿Qué es python?</h2><br />Es un lenguaje de programación creado por Guido van Rossum con el cual podremos crear tanto aplicaciones para escritorio como para la web utilizando el <a class="arti_link" href="http://www.cristalab.com/tags/framework/">framework</a> de <a class="arti_link" href="http://www.cristalab.com/tags/django/">Django</a> y todo con muy pocas líneas de código lo cual facilita y agiliza nuestro trabajo.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://en.l4c.me/uploads/python-logo-1334015321_full550.png" border="0" /></div><br /><br /><h4> ¿De dónde proviene el nombre de Python?</h4><br />Pues al principio pensaba que hacía honor a la serpiente pitón debido lo poderosa que es pero investigando un poco más me di cuenta que:<br /><br />“El nombre del lenguaje proviene de la afición de su creador original, Guido van Rossum, por los humoristas británicos Monty Python.”  <br /><br /><h2>Descargar Python</h2><br />No hay cosa más fácil y accesible que descargar python lo puedes hacer directamente desde su página oficial: <a class="arti_link" href="http://www.python.org/getit/">http://www.python.org/getit/ </a><br /><br />Puedes empezar usando la versión 2.7 que es bastante buena y completa. Al finalizar la descarga podrás ejecutar en típico proceso de instalación (siguiente, siguiente (elije el lugar donde lo vas a guardar, por defecto viene con c:\python27\), terminar) fácil ¿verdad? al final te deben quedar instalados los siguientes archivos: <br /><br /><strong>Idle (python GUI):</strong> es el editor de código python que viene junto con la instalación. Pero si no te gusta puedes descargar otro por aparte como por ej: sublime text 2 o notepad++.<ul><li> <strong>Module docs: </strong>módulo de documentos<br /></li><li> <strong>Python(command line):</strong> consola o línea de comandos python<br /></li><li> <strong>Python manuals:</strong> cuando tengas una duda puedes consultar este manual (esta en ingles)<br /></li><li> <strong>Uninstall python:</strong>desinstalador <br /></li></ul><br /><br /><h2>¿Por qué python?</h2><ul><li> la sintaxis es bastante clara y sencilla de hecho tiene un gran parecido con el lenguaje natural! lo cual te ayuda a comprender mejor el código y hacer potentes aplicaciones de manera rápida.<br /></li><li> puedes ahorrarte muchas líneas de código que normalmente harías con php, c++ o java!!<br /></li><li> es multiparadigma lo cual quiere decir que el desarrollador puede usar más de un método de programación, ej: Orientación a Objetos, Programación Funcional o Programación imperativa.<br /></li><li> es el lenguaje de programación con más apoyo y aceptación en el mundo! <br /></li><li> no necesita compilación, sólo basta con tener un editor de texto como el notepad, guardarlo con extensión .py y listo, en mac ya viene instalado y en <a class="arti_link" href="http://www.cristalab.com/tags/windows/">Windows</a> como acabas de ver su instalación es bastante sencilla.  <br /></li><li> YO lo digo!!  <img src="/foros/images/smiles/icon_lol.gif" alt=":lol:" border="0" /> <br /></li></ul><br /><br /><h2>Nuestra primera aplicación en Python</h2><br />Lo que vamos a hacer es crear una aplicación que calcule el área y el perímetro de un triángulo:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://en.l4c.me/fullsize/triangulo-1-1334014719.png" border="0" /></div><br /> <br />Solo con este código:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">print &quot;area de un triangulo&quot;

base = float&#40;raw_input&#40;&quot;medida de la base&#58; &quot;&#41;&#41;
altura = float&#40;raw_input&#40;&quot;medida de altura&#58; &quot;&#41;&#41;
lados = float&#40;raw_input&#40;“medida de los lados&#58; ”&#41;&#41;

area = base * altura / 2.0
perímetro = lados* 2 + base
if lados &lt; altura&#58;
print “la medida de los lados debe ser mayor a la altura”
else&#58;
print &quot;al area es&#58; &quot; , area , &quot;el perímetro es&#58; &quot;, perímetro
</pre>
<br /><br />Es bastante fácil, para calcular el área se tiene que realizar la siguiente operación base*altura/2 y el perímetro es ladoA + ladoB + base, la medida debe ser igual en ambos lados (AB) por lo tanto es multiplicada por dos y sumada a la base.  ¡Pero no nos olvidemos del código! Que es lo más importante, vamos a explicar cada una de sus partes: <br /><br /><br /><h2>Print</h2><br />Tenemos a “print” o imprimir con el cual podemos mostrar texto en la consola. Hace una función muy parecida a la de “trace” en actionscript, “document.write” en javascript o “System.out.println” en java.  En él podemos escribir textos, números o almacenar datos de variables.<br /><br /><h2>Variables</h2><br />En las variables podemos guardar cualquier tipo de datos tales como: operaciones, texto, números, datos booleanos… sin embargo estas no se mostraran en pantalla hasta ser llamadas por el nombre asignado. Las variables se declaran así:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://en.l4c.me/uploads/variables-1334015159_full550.png" border="0" /></div><br /><br /><h2>Float()</h2><br />Es una función de python bastante fácil de entender lo que hace es convertir enteros en números flotantes básicamente lo contrario a la función “int”.<br /><br /><h2>Raw_input()</h2><br />Raw_input espera a que escribamos algo sobre él. En nuestro caso utilizamos dos, una que espere la medida de la base y otra, la medida de la altura. Ésta se encuentra dentro de float lo cual significa que no podemos introducir texto, si lo hacemos la consola nos lanzará error.<br /><br /><h2>If, else </h2><br />Con if podemos hacer condiciones, Si la condición se cumple (en nuestro caso lados &lt; altura) entonces se imprimirá en pantalla el texto: “la medida de los lados debe ser mayor a la altura”, <br />Pero si no se cumple else que significa “de otro modo” o “de otro caso” pasará a ejecutarse. (En nuestro caso lo que hará es calcular el área y perímetro del triangulo).<br /><br /><h2>Operadores </h2><br /><div style="text-align:center;"><img class="imgBlog" src="http://en.l4c.me/uploads/operadores-1334015474_full550.png" border="0" /></div><br /><br />Espero que esta información te haya servido!<br />Aquí dejo dos enlaces que podrían interesarte:<br /><a class="arti_link" href="http://mejorando.la/videos/aprendiendo-python-en-20-minutos/">http://mejorando.la/videos/aprendiendo-python-en-20-minutos/</a><br /><a class="arti_link" href="http://www.maestrosdelweb.com/editorial/guia-python/">http://www.maestrosdelweb.com/editorial/guia-python/</a><br /><br />No olvides dejar tus comentarios<p><a href="http://www.cristalab.com/tips/introduccion-a-python-c105067l/#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=-xV_vjPA_Ig:TsEQYg9rJoU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=-xV_vjPA_Ig:TsEQYg9rJoU: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/-xV_vjPA_Ig" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 11 Apr 2012 09:30:35</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/introduccion-a-python-c105067l/</feedburner:origLink></item>
	    <item>
    	    <title>Introducción a Git y Github</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/o3FOdycLm_Y/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/introduccion-a-git-y-github-c105064l/</guid>
	        <description><![CDATA[ Hola a todos, después de mucho tiempo vuelvo a publicar unos videotutoriales. Pero esta vez no serán de maquetación, quería mostrarles para los que todavía no conocen o quieren comenzar a hacer sus proyectos con un sistema de control de versiones cómo usar  Git y Github desde cero con los conceptos básicos de cada uno ... ]]></description>

	        <dc:creator>raymicha</dc:creator>
	        <category>git</category>
	        <category>subversion</category>
	        <category>programacion</category>
	        
            <content:encoded><![CDATA[  Hola a todos, después de mucho tiempo vuelvo a publicar unos <a class="arti_link" href="http://www.cristalab.com/videotutoriales/">videotutoriales</a>. Pero esta vez no serán de maquetación, quería mostrarles para los que todavía no conocen o quieren comenzar a hacer sus proyectos con un sistema de control de versiones cómo usar  <a class="arti_link" href="http://git-scm.com">Git</a> y <a class="arti_link" href="https://github.com/">Github</a> desde cero con los conceptos básicos de cada uno y cómo se complementan para un mejor desarrollo de nuestros proyectos.<br /><br />Aquí les dejo los dos primeros. Aún falta, en teoría, un video más donde muestro lo que es Branching y un buen workflow con ssh. Trataré de ponerlo en uno sólo para que no sea algo tan grande. Espero les guste, no puedo esperar a saber sus comentarios al respecto  <img src="/foros/images/smiles/icon_happy.gif" alt=":)" border="0" /><br /><br /><strong>Libro recomendado:</strong> <a class="arti_link" href="http://rockablepress.com/launch/getting-good-with-git/">Getting Good with Git</a> de <a class="arti_link" href="http://andrewburgess.ca/">Andrew Burgess</a><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://vimeo.com/moogaloop.swf?clip_id=39846833&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=39846833&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 /><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=39875448&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=39875448&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><p><a href="http://www.cristalab.com/tips/introduccion-a-git-y-github-c105064l/#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=o3FOdycLm_Y:6320IAPvQzY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=o3FOdycLm_Y:6320IAPvQzY: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/o3FOdycLm_Y" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 11 Apr 2012 08:51:27</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/introduccion-a-git-y-github-c105064l/</feedburner:origLink></item>
	    <item>
    	    <title>Efecto de desintegración con CC Pixel Polly en After Effects</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/115pmxGLrPw/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/efecto-de-desintegracion-con-cc-pixel-polly-en-after-effects-c105029l/</guid>
	        <description><![CDATA[ En este videotutorial de After Effects descubriremos otro de sus múltiples efectos, el CC Pixel Polly, comprobando que con un trabajo de ajuste y asignación de keyframes mínimo podremos obtener curiosos efectos de desintegración de partículas sin el uso de plugins externos, al mismo tiempo que jugamos con las opciones ... ]]></description>

	        <dc:creator>arumadigital</dc:creator>
	        <category>after_effects</category>
	        <category>efectos</category>
	        <category>animacion</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> descubriremos otro de sus múltiples <a class="arti_link" href="http://www.cristalab.com/tags/efectos/">efectos</a>, el CC Pixel Polly, comprobando que con un trabajo de ajuste y asignación de keyframes mínimo podremos obtener curiosos efectos de desintegración de partículas sin el uso de <a class="arti_link" href="http://www.cristalab.com/tags/plugins/">plugins</a> externos, al mismo tiempo que jugamos con las opciones <a class="arti_link" href="http://www.cristalab.com/tags/3d/">3D</a>, las cámaras y ajustamos la <a class="arti_link" href="http://www.cristalab.com/tags/animacion/">animación</a> con el editor gráfico.<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/tIXeMQ9XvE4&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/tIXeMQ9XvE4&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/efecto-de-desintegracion-con-cc-pixel-polly-en-after-effects-c105029l/#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=115pmxGLrPw:hzKxxX0SwQc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=115pmxGLrPw:hzKxxX0SwQc: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/115pmxGLrPw" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 11 Apr 2012 08:46:38</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/efecto-de-desintegracion-con-cc-pixel-polly-en-after-effects-c105029l/</feedburner:origLink></item>
	    <item>
    	    <title>#21: Hazte millonario con AdSense!</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/cgkRy2kt7wI/</link>
			<guid isPermaLink="false">http://www.cristalab.com/comic/21-hazte-millonario-con-adsense-c105073l/</guid>
	        <description><![CDATA[ <br />
Con especial dedicatoria a todos esos grandes proyectos de emprendedores que sueñan con hacer blogs famosos, redes sociales que maten a Zuckerberg y empresas web que te permitan retirarte a los 25. <br />
<br />
El comic #de la serie Cristalab vs. The Web: "Hazte millonario con AdSense!". Si esta es tu primera vez vi... ]]></description>

	        <dc:creator>Nadimcomics</dc:creator>
	        
            <content:encoded><![CDATA[  <img class="imgBlog" src="http://www.cristalab.com/images/comic/cristalab-vs-the-web/21.png" border="0" /><br />Con especial dedicatoria a todos esos grandes proyectos de <em>emprendedores</em> que sueñan con hacer blogs famosos, redes sociales que maten a Zuckerberg y empresas web que te permitan retirarte a los 25. <br /><br />El comic #de la serie <strong>Cristalab vs. The Web</strong>: <em>&quot;Hazte millonario con AdSense!&quot;</em>. Si esta es tu primera vez viendo el comic, mira el <a class="arti_link" href="http://www.cristalab.com/comic/20-como-se-hace-mejorando.la-web-c104947l/">comic #20: Cómo se hace Mejorando.la Web</a> y otros anteriores. <br /><br /><br /><span style="color: #D3D7CF">Plan alternativo: Red social que venda datos privados a grandes marcas. O aplicación de fotografía con filtritos que valga 1 billón de dólares!</span><p><a href="http://www.cristalab.com/comic/21-hazte-millonario-con-adsense-c105073l/#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=cgkRy2kt7wI:_42YJdNH5Fw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=cgkRy2kt7wI:_42YJdNH5Fw: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/cgkRy2kt7wI" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 10 Apr 2012 09:09:30</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/comic/21-hazte-millonario-con-adsense-c105073l/</feedburner:origLink></item>
	    <item>
    	    <title>Introducción a HTML5 Web Messaging</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/FrmH8CkUW7g/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/introduccion-a-html5-web-messaging-c105028l/</guid>
	        <description><![CDATA[ HTML5 Web Messaging es una API de JavaScript que permite de una forma segura compartir información entre documentos en el mismo contexto de navegación, sin correr el riesgo de exponer el DOM a un sitio hostil. La especificación está centrada en relegar la comunicación de documentos directamente al navegador, logrando a... ]]></description>

	        <dc:creator>jonasanx</dc:creator>
	        <category>html5</category>
	        <category>javascript</category>
	        
            <content:encoded><![CDATA[  <strong><a class="arti_link" href="http://www.cristalab.com/tags/html5/">HTML5</a> Web Messaging</strong> es una <em>API de <a class="arti_link" href="http://www.cristalab.com/tags/javascript/">JavaScript</a> </em>que permite de una forma segura compartir información entre documentos en el mismo contexto de navegación, sin correr el riesgo de exponer el <em>DOM </em>a un sitio hostil. La especificación está centrada en relegar la comunicación de documentos directamente al <a class="arti_link" href="http://www.cristalab.com/tags/browsers/">navegador</a>, logrando así una implementación hermosa y sin necesidad de intervención del servidor, reduciendo así su carga e incrementando la seguridad en el sitio (teóricamente).<br /><br />En la Web actual es común el intercambio de información entre documentos pertenecientes o no al mismo dominio, no obstante es un problema no muy sencillo de solucionar. Un ejemplo común es cuando se tiene un anuncio publicitario contenido en un <em>iframe</em> alojado en un <strong>servidor externo</strong>, en el cual se necesita enviar valores relacionados con el contenido de la pagina principal, esto con la finalidad de mostrar un anuncio adecuado. <br /><br />Para automatizar este proceso recurrimos a <em>JavaScript</em>, y lo más sencillo es que el <em>iframe</em> lea de alguna manera la etiqueta <em>meta keywords</em> de la página principal o que esta misma proporcione dicha información; sin embargo, el acceso al <em>DOM</em> desde cualquiera de las partes no está permitido por el navegador, esto debido principalmente a la <a class="arti_link" href="http://en.wikipedia.org/wiki/Same_origin_policy">política del mismo origen</a> –una medida importante de seguridad presente en los navegadores modernos– que admite la comunicación sin restricciones de <em>scripts</em> en documentos del mismo sitio, no siendo así entre aquellos que son diferentes. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/juegos-y-html5-1316625008_full550.png" border="0" /></div><br />Ante esta problemática surgieron algunos mecanismos como <a class="arti_link" href="http://ajaxian.com/archives/crossframe-a-safe-communication-mechanism-across-documents-and-across-domains">Cross-Frame Messaging</a>; una solución que carece de naturalidad, poco elegante y que requiere hacer malabares. <br /><br />[nota:7e3558eab3] En los siguientes ejemplos se han utilizado dominios locales (revisar el apéndice) así como la ultima versión de Google <a class="arti_link" href="http://www.cristalab.com/tags/chrome/">Chrome</a>. [/nota:7e3558eab3]<br /><br /><h2>Cross-document messaging: enviando y recibiendo mensajes</h2><br />El envío de un mensaje es relativamente sencillo, no hace falta más que utilizar el método <em>postMessage</em> de un objeto <strong>window</strong> referenciado, ya sea de la propiedad <strong>contentWindow</strong> de un <strong>iframe</strong>, el objeto devuelto de <strong>window.open</strong>, o un nombre/indice en <strong>window.frames</strong>.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-js">window.postMessage&#40; Mensaje, Origen &#41;;</pre><br />El<strong> primer parámetro</strong> es el mensaje que va a ser enviado. Éste puede ser una cadena de texto, un objeto, un array, etc.<br /><br />El<strong> segundo parámetro</strong> es el dominio de la ventana objetivo, es decir, la ventana que va a recibir el mensaje. Si no se desea especificar un origen en concreto puede utilizarse un asterisco como comodín, sin embargo esto no es nada recomendable ya que deja enormes agujeros de seguridad. Por otra parte si el origen es el mismo que el del emisor puede utilizarse simplemente una barra diagonal: &quot;/&quot; (lamentablemente Google Chrome no soporta este último).<br /><br />También puede añadirse un <strong>tercer parámetro</strong>, el cual debe ser un objeto <em>MessagePort</em>, pero esto será tratado mas adelante.<br /><br /><h3>Enviar un mensaje</h3><br /><em>http://emisor.com/emisor.html</em><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">
...
&lt;body&gt;
&nbsp; &nbsp;&lt;iframe src=&quot;http&#58;//receptor.com/receptor.html&quot;&gt;&lt;/iframe&gt;
&nbsp; &nbsp;&lt;button&gt;Enviar mensaje&lt;/button&gt;

&nbsp; &nbsp;&lt;script&gt;
&nbsp; &nbsp;&nbsp; &nbsp;var iframe = document.querySelector&#40;&quot;iframe&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;var button = document.querySelector&#40;&quot;button&quot;&#41;;

&nbsp; &nbsp;&nbsp; &nbsp;var enviarMensaje = function&#40;&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;iframe.contentWindow.postMessage&#40;&quot;Hola, ¿como estas?&quot;, &quot;http&#58;//receptor.com&quot;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;// Al dar click al botón se ejecutar el método enviarMensaje.
&nbsp; &nbsp;&nbsp; &nbsp;button.addEventListener&#40;&quot;click&quot;, enviarMensaje, false&#41;;
&nbsp; &nbsp;&lt;/script&gt;
&lt;/body&gt;
...
</pre><br />Al dar click al botón se enviará un mensaje con el contenido: &quot;Hola, ¿como estas?&quot;, al <em>iframe</em> alojado en receptor.com; sin embargo nuestro ejemplo no está completo con sólo enviar el mensaje, también es necesario recibirlo, pero antes de continuar es importante conocer los atributos del evento <strong>message</strong> que será disparado en receptor.com cuando se reciba un mensaje.<br /><br /><h3>Atributos del evento message</h3><br />El evento <strong>message</strong> está compuesto por cinco atributos que sólo pueden ser leídos, que básicamente significa que es imposible alterar el valor de cualquiera de ellos.<br /><ul><br /></li><li> <em>evento</em>.<strong>data</strong>: contiene la información del mensaje enviado por el emisor.<br /></li><li> <em>evento</em>.<strong>origin</strong>: devuelve una cadena de texto conteniendo el origen del emisor. Ej. <a href="http://emisor.com" target="_blank">http://emisor.com</a><br /></li><li><em> evento</em>.<strong>lastEventId</strong>: una cadena con el  identificador único del actual evento de message.<br /></li><li> <em>evento</em>.<strong>source</strong>: es una referencia al objeto window de quien envía el mensaje.<br /></li><li> <em>evento</em>.<strong>ports</strong>: un array conteniendo un objeto de <strong>MessagePort </strong>enviado junto al mensaje.<br /></li></ul><br /><h3>Recibir un mensaje</h3><br /><em>http://receptor.com/receptor.html</em><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">…
&nbsp; &lt;body&gt;
&nbsp; &nbsp; &lt;div id=&quot;mensaje&quot;&gt;Aún no he recibido nada. &#58;&#40;&lt;/div&gt;
&nbsp; &nbsp; &lt;script&gt;
&nbsp; &nbsp; &nbsp; var mensaje = document.querySelector&#40;&quot;#mensaje&quot;&#41;;
&nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; var recibirMensaje = function&#40; evento &#41;&#123;

&nbsp; &nbsp; &nbsp; &nbsp; // Verificamos que efectivamente el origen sea de emisor.com
&nbsp; &nbsp; &nbsp; &nbsp; if &#40;evento.origin == &quot;http&#58;//emisor.com&quot;&#41;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mensaje.innerHTML = evento.data;
&nbsp; &nbsp; &nbsp; &#125;;

&nbsp; &nbsp;// Cuando se reciba un evento message se ejecutara las función recibirMensaje.
&nbsp; &nbsp; &nbsp; window.addEventListener&#40;&quot;message&quot;, recibirMensaje, false&#41;;
&nbsp; &nbsp; &lt;/script&gt;
&nbsp; &lt;/body&gt;
…
</pre><br />El funcionamiento del ejemplo anterior es simple: se comienza a escuchar al evento <strong>message</strong>; cuando un mensaje es detectado, se dispara el método <em>recibirMensaje</em> que simplemente verifica que el origen sea el esperado y después se coloca el texto recibido dentro del elemento <em>#mensaje</em>.<br /><br />[nota:7e3558eab3] Si intentan mandar a la consola – <strong>console.log(evento)</strong> – la información del objeto evento, se darán cuenta que al final les aparece un error. Esto se debe a lo que mencioné al principio, el receptor sólo tiene acceso a la información que explícitamente es enviada, y al colocarlo en la consola está siempre y tratará de imprimir todo el árbol del DOM.[/nota:7e3558eab3]<br /><br />Como pueden ver es igual de sencillo recibir un mensaje, pero deben tener siempre presente que <strong>se tiene que verificar </strong>que en efecto, el origen sea el esperado, incluso el tipo de dato que se espera: una cadena de texto, un número, un objeto, etc. Además de que es muy importante que se controle el número de mensajes que pueden ser recibidos por minuto, de lo contrario dejarían la puerta abierta a un posible ataque de denegación de servicio.<br /><br />Ahora bien, por qué no extender el ejemplo haciendo que nuestro receptor sea capaz de ser emisor también, y viceversa:<br /><br /><em>http://emisor.com/emisor.html</em><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">...
&nbsp; &lt;body&gt;
&nbsp; &nbsp; &lt;iframe src=&quot;http&#58;//receptor.com/receptor.html&quot;&gt;&lt;/iframe&gt;
&nbsp; &nbsp; &lt;div id=&quot;mensaje&quot;&gt;Esperando contestación...&lt;/div&gt;
&nbsp; &nbsp; 
&nbsp; &nbsp; &lt;button&gt;Enviar mensaje&lt;/button&gt;

&nbsp; &nbsp; &lt;script&gt;
&nbsp; &nbsp; &nbsp; var iframe&nbsp; = document.querySelector&#40;&quot;iframe&quot;&#41;;
&nbsp; &nbsp; &nbsp; var button&nbsp; = document.querySelector&#40;&quot;button&quot;&#41;;
&nbsp; &nbsp; &nbsp; var mensaje = document.querySelector&#40;&quot;#mensaje&quot;&#41;;

&nbsp; &nbsp; &nbsp; var enviarMensaje = function&#40;&#41;&#123;
&nbsp; &nbsp; &nbsp; &nbsp; iframe.contentWindow.postMessage&#40;&quot;¿Como te llamas?&quot;, &quot;http&#58;//receptor.com&quot;&#41;;
&nbsp; &nbsp; &nbsp; &#125;;

&nbsp; &nbsp; &nbsp; var recibirMensaje = function&#40; evento &#41;&#123;
&nbsp; &nbsp; &nbsp; &nbsp; if &#40;evento.origin == &quot;http&#58;//receptor.com&quot;&#41;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Retrasamos la publicación del mensaje solo para hacerla de emoción.
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setTimeout&#40;function&#40;&#41;&#123;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mensaje.innerHTML = &quot;Receptor&#58; &quot; + evento.data;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;, 3000&#41;;

&nbsp; &nbsp; &nbsp; &#125;;

&nbsp; &nbsp; &nbsp; button.addEventListener&#40;&quot;click&quot;, enviarMensaje, false&#41;;
&nbsp; &nbsp; &nbsp; window.addEventListener&#40;&quot;message&quot;, recibirMensaje, false&#41;;
&nbsp; &nbsp; &lt;/script&gt;
&nbsp; &lt;/body&gt;
...
</pre><br /><em>http://receptor.com/receptor.html</em><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">…
&nbsp; &lt;body&gt;
&nbsp; &nbsp; &lt;div id=&quot;mensaje&quot;&gt;Aún no he recibido nada. &#58;&#40;&lt;/div&gt;
&nbsp; &nbsp; &lt;script&gt;
&nbsp; &nbsp; &nbsp; var mensaje = document.querySelector&#40;&quot;#mensaje&quot;&#41;;
&nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; var recibirMensaje = function&#40; evento &#41;&#123;
&nbsp; &nbsp; &nbsp; &nbsp; if &#40;evento.origin == &quot;http&#58;//emisor.com&quot;&#41;&#123;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mensaje.innerHTML = &quot;Emisor&#58; &quot; + evento.data;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Aquí evento.source es una referencia al objeto window del emisor.
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // evento.origin contiene el origen del emisor&#58; &quot;http&#58;//emisor.com&quot;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; evento.source.postMessage&#40;&quot;iPad Pepito, por que solo iPad es «too mainstream».&quot;, evento.origin&#41;;
&nbsp; &nbsp; &nbsp; &nbsp; &#125;

&nbsp; &nbsp; &nbsp; &#125;;

&nbsp; &nbsp; &nbsp; window.addEventListener&#40;&quot;message&quot;, recibirMensaje, false&#41;;
&nbsp; &nbsp; &lt;/script&gt;
&nbsp; &lt;/body&gt;
...</pre><br /><h4><a class="arti_link" href="http://jonasanx.github.com/HTM5for.us---tutorials/html5-web-messaging/emisor.html">Ver ejemplo funcionando en el navegador</a></h4><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/_i8GYGFfK5A&hl=en&fs=1&rel=0&color1=0xF98A43&color2=0xFFC661" />
	<embed src="http://www.youtube.com/v/_i8GYGFfK5A&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 /><h2>MessageChannel y MessagePort</h2><br />Hasta ahora sólo hemos visto la primera mitad que compone la especificación de <strong>HTML5 web messaging</strong>; sin embargo esta también nos provee de un objeto llamado <strong>MessageChannel</strong>, el cual permite el funcionamiento de dos piezas de código independendientes (ej. corriendo en diferentes contextos de navegación) comunicarse directamente. Por ejemplo: tenemos dos <em>iframes</em> contenidos en un documento: por simple deducción concluimos que están en el contexto de navegación del documento principal; por otra parte, estos <em>iframes</em> entre sí <strong>no están en el mismo contexto</strong>; a pesar de que están juntos; uno no sabe de la existencia del otro. <br /><br />Otro ejemplo: considera una situación en la cual una red social tiene incrustado un iframe de una libreta de direcciones, y otro iframe que contiene un juego en línea. El juego necesita las direcciones electrónicas de los amigos del usuario, para esto se necesita la información de la libreta de direcciones. Es aquí cuando <strong>MessageChannel</strong> hace su aparición para hacer este proceso posible, en este caso la red social actuaría como mediador en la comunicación entre ambos iframes.<br /><br />[nota:7e3558eab3] Lamentablemente <a class="arti_link" href="http://www.cristalab.com/tags/firefox/">Firefox</a> todavía no soporta MessageChannel.[/nota:7e3558eab3]<br /><br /><h3>Componentes de MessageChannel</h3><br />El objeto <strong>MessageChannel</strong> está compuesto por dos puertos (<strong>port1</strong> y <strong>por2</strong>) que no son otra cosa sino objetos de <strong>MessagePort</strong>, y estos a su vez contienen tres métodos:<br /><br /><ul><br /></li><li> 	<em>puerto</em>.<strong>postMessage</strong>( <em>mensaje</em> ): envía mensajes a través del puerto en cuestión.<br /></li><li> 	<em>puerto</em>.<strong>start()</strong>: comienza el envío de mensajes a través del puerto.<br /></li><li> 	<em>puerto</em>.<strong>stop()</strong>: detiene el envío de mensajes a través del puerto.<br /></li></ul><br /><strong>MessagePort </strong>también contiene el evento onmessage, que puede ser utilizado en lugar de agregar un addEventListener.<br /><br /><h2>Ejemplo</h2><br />Con la finalidad de explicar mejor cómo trabajan <strong>MessageChannel</strong> y <strong>MessagePort</strong>, en este ejemplo nos basaremos en el escenario de la red social descrito anteriormente.<br /><br />[nota:7e3558eab3] Por cuestiones de infraestructura se utilizara un mismo origen; sin embargo la estructura es básicamente la misma para orígenes externos.[/nota:7e3558eab3]<br /><br />En primera instancia tenemos la página del juego. Lo primero que haremos es definir una función que se ejecutará cuando la estructura de nuestro documento esté completamente cargada. El objetivo primordial de esta función será el indicar a nuestro documento principal – la red social – que ya está listo para empezar a recibir correos. Para conseguir esto se crea un nuevo objeto <strong>MessageChannel</strong>, del cual su segundo puerto será enviado en un mensaje al documento principal. Después iniciamos nuestro primer puerto para procesar los mensajes que serán recibidos.<br /><br /><em>http://red-social.com/juego.html</em><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">…
&lt;body&gt;
&lt;!-- En #correos serán añadidas las direcciones de correo electrónico que sean recibidas. --&gt;
&lt;ul id=&quot;correos&quot;&gt;&lt;/ul&gt;

&lt;script&gt;
&nbsp; var documentoCargado = function&#40;&#41;&#123;
&nbsp; &nbsp; 
&nbsp; &nbsp; // Definimos las variables que serán utilizadas.
&nbsp; &nbsp; var canal, correos, recibirMensaje;
&nbsp; &nbsp; 
&nbsp; &nbsp; // Seleccionamos lo que será nuestro contenedor de correos.
&nbsp; &nbsp; correos = document.querySelector&#40;&quot;#correos&quot;&#41;;

&nbsp; &nbsp; // Creamos un objeto MessageChannel.
&nbsp; &nbsp; canal = new MessageChannel&#40;&#41;;

&nbsp; &nbsp; // Esta es nuestra función que será encargada de procesar los mensajes entrantes, 
&nbsp; &nbsp; // en otras palabras, de publicar los correos que sean enviados desde la agenda.
&nbsp; &nbsp; recibirMensaje = function&#40; evento &#41;&#123;
&nbsp; &nbsp; &nbsp; // creamos un nuevo elemento &quot;li&quot; y le añadimos el correo recibido.
&nbsp; &nbsp; &nbsp; var correo = document.createElement&#40;&quot;li&quot;&#41;;
&nbsp; &nbsp; &nbsp; correo.innerText = evento.data;

&nbsp; &nbsp; &nbsp; // Depues agregamos este mismo &quot;li&quot; a nuestro contenedor de correos &#40;ul#correos&#41;.
&nbsp; &nbsp; &nbsp; correos.appendChild&#40; correo &#41;;
&nbsp; &nbsp; &#125;;&nbsp; 
&nbsp; &nbsp; 
&nbsp; &nbsp; // Ahora que el documento esta cargado, le enviamos un mensaje con el puerto dos a la red social &#40;el sitio que contiene este iframe&#41;
&nbsp; &nbsp; // diciendo que ya estamos listos para recibir los correos.
&nbsp; &nbsp; window.parent.postMessage&#40;&quot;¡Estoy listo!&quot;, &quot;http&#58;//emisor.com&quot;, &#91;canal.port2&#93;&#41;;

&nbsp; &nbsp; // Por el puerto uno escuchamos la llegada de cualquier mensaje.
&nbsp; &nbsp; canal.port1.addEventListener&#40;&quot;message&quot;, recibirMensaje, false&#41;;
&nbsp; &nbsp; // y abrimos el puerto.
&nbsp; &nbsp; canal.port1.start&#40;&#41;;
&nbsp; &#125;;

&nbsp; // Esperemos a que se cargue el DOM. 
&nbsp; // * esta es la versión con JavaScript puro de $&#40;document&#41;.ready&#40;&#41; de jQuery.
&nbsp; window.addEventListener&#40;&quot;DOMContentLoaded&quot;, documentoCargado, false&#41;;
&lt;/script&gt;
&lt;/body&gt;
…
</pre><br />La red social actuará como proxy: será quien enlace el juego con la agenda. Una vez que se reciba el mensaje de parte de la página del juego será enviado un mensaje a la agenda contiendo el puerto para comunicarse con el juego.<br /><br /><em>http://red-social.com/redsocial.html</em><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">
…
&lt;body&gt;
 &lt;iframe src=&quot;juego.html&quot;&gt;&lt;/iframe&gt;
&nbsp; &lt;iframe src=&quot;agenda.html&quot;&gt;&lt;/iframe&gt;

&nbsp; &lt;script&gt;
&nbsp; var documentoCargado = function&#40;&#41;&#123;
&nbsp; 
&nbsp; &nbsp; // Seleccionamos nuestra agenda, la cual esta contenida en el segundo iframe
&nbsp; &nbsp; // de nuestro documento.
&nbsp; &nbsp; var agenda = window.frames&#91;1&#93;;

&nbsp; &nbsp; // Función encarga de procesar el mensaje entrante.
&nbsp; &nbsp; var recibirMensaje = function&#40; evento &#41;&#123;
&nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; // Le enviamos a la agenda un mensaje avisando que puede empezar
&nbsp; &nbsp; &nbsp; // a enviar información a la pagina del juego. Al mismo tiempo, le enviamos
&nbsp; &nbsp; &nbsp; // el puerto &#40;port2&#41; por el cual puede comunicarse directamente con la pagina del juego.
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; agenda.postMessage&#40;&quot;Puede transmitir&quot;, &quot;http&#58;//emisor.com&quot;, evento.ports&#41;
&nbsp; &nbsp; &#125;;
&nbsp; &nbsp; 
&nbsp; &nbsp; // Escuchamos a cualquier evento message que pueda llegar.
&nbsp; &nbsp; window.addEventListener&#40;&quot;message&quot;, recibirMensaje, false&#41;;
&nbsp; &#125;;

&nbsp; // Esperamos a que se cargue el documento.
&nbsp; window.addEventListener&#40;&quot;DOMContentLoaded&quot;, documentoCargado, false&#41;;
&nbsp; &lt;/script&gt;
&lt;/body&gt;
 ...</pre><br />En la agenda tenemos un simple formulario con una entrada de texto, en el cual serán ingresadas las direcciones electrónicas.<br /><br /><em>http://red-social.com/agenda.html</em><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint lang-html">…
&lt;body&gt;
&lt;!-- Este es el formulario en donde se ingresarán las direcciones de correo electrónico que serán enviadas a la página del juego. --&gt;
&lt;form&gt;
&nbsp; &lt;input type=&quot;email&quot; placeholder=&quot;Ingrese e-mail&quot; required&gt;
&nbsp; &lt;button&gt;Enviar&lt;/button&gt;
&lt;/form&gt;

&lt;script&gt;&nbsp; 
&nbsp; var documentoCargado = function&#40;&#41;&#123;
&nbsp; &nbsp; var recibirMensaje = function&#40; evento &#41;&#123;
&nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; // Localizamos nuestro formulario.
&nbsp; &nbsp; &nbsp; var formulario = document.forms&#91;0&#93;;

&nbsp; &nbsp; &nbsp; var procesarFormulario = function&#40; form &#41;&#123;
&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; // Detenemos el envio del formulario
&nbsp; &nbsp; &nbsp; &nbsp; form.preventDefault&#40;&#41;;

&nbsp; &nbsp; &nbsp; &nbsp; // Leemos el contenido de nuestra entrada de texto.
&nbsp; &nbsp; &nbsp; &nbsp; var correo = formulario.querySelector&#40;&quot;input&quot;&#41;.value;
&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; // Enviamos el correo ingresado por el puerto recibido en el mensaje &#40;port2&#41; que fue enviado desde la red social.
&nbsp; &nbsp; &nbsp; &nbsp; evento.ports&#91;0&#93;.postMessage&#40; correo &#41;;
&nbsp; &nbsp; &nbsp; &#125;;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; // Cuando se envíe el formulario se ejecutara la función procesarFormulario.
&nbsp; &nbsp; &nbsp; formulario.addEventListener&#40;&quot;submit&quot;, procesarFormulario, false&#41;;
&nbsp; &nbsp; &nbsp; &nbsp; &#125;;
&nbsp; 
&nbsp; &nbsp; // Escuchamos a cualquier evento message que pueda llegar.
&nbsp; &nbsp; window.addEventListener&#40;&quot;message&quot;, recibirMensaje, false&#41;;
&nbsp; &#125;;&nbsp; 

&nbsp; // Esperamos a que se cargue el documento.
&nbsp; window.addEventListener&#40;&quot;DOMContentLoaded&quot;, documentoCargado, false&#41;;
&lt;/script&gt;
&lt;/body&gt;
...</pre><br />[nota:7e3558eab3] Por cuestiones de legibilidad y simpleza se omitieron todas las validaciones que <strong><span style="color: #EF2929">deben hacerse</span></strong>; validar el origen, el tipo de datos, etc.[/nota:7e3558eab3]<br /><br /><h4><a class="arti_link" href="http://jonasanx.github.com/HTM5for.us---tutorials/html5-web-messaging/redsocial.html">Ver el ejemplo funcionando en el navegador.</a></h4><br /><br /><h2>Conclusión</h2><br />Esta es una tecnología asombrosa que ayudará a hacer la vida mas fácil a muchos desarrolladores, no obstante habrá que esperar un tiempo más, ya que los navegadores principales solo han implementado parcialmente <strong>HTML5 web messaging</strong>.<br /><br /><h2>Referencias</h2><br /><ul><br /><a class="arti_link" href="http://dev.w3.org/html5/postmsg/">http://dev.w3.org/html5/postmsg/</a><br /><a class="arti_link" href="https://developer.mozilla.org/en/DOM/window.postMessage">https://developer.mozilla.org/en/DOM/window.postMessage</a><br /><a class="arti_link" href="http://dev.opera.com/articles/view/window-postmessage-messagechannel/">http://dev.opera.com/articles/view/window-postmessage-messagechannel/</a><br /></li></ul><br /><h2>Apéndice</h2><br />Para simular distintos dominios se agregan entradas al archivo hosts de los dominios deseados, por ejemplo: emisor.com, receptor.com y red-social.com. En Ubuntu y Mac este archivo se encuentra en <em>&quot;/etc/hosts&quot;</em> y<em> &quot;system32\drivers\etc\hosts&quot;</em> en Windows. Se echa a andar un servidor web, como <em>Nginx </em>(aunque vale con cualquier otro como Lighttpd, Cherokee o el tradicional Apache) con los dominios apuntando a una misma carpeta, sin otro motivo más que de comodidad, ya que se tienen los archivos juntos.<br /><br /><em>Archivo hosts</em><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">127.0.0.1 emisor.com
127.0.0.1 receptor.com
127.0.0.1 red-social.com

</pre>
<br /><em>Configuración ejemplo de Nginx</em><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="prettyprint">
server &#123;
&nbsp; listen&nbsp; &nbsp;80;

&nbsp; # Tres dominios distintos apuntando a la misma carpeta.
&nbsp; server_name&nbsp; emisor.com alias receptor.com red-social.com; 
&nbsp; location / &#123;
&nbsp; &nbsp; root&nbsp; &nbsp;/home/jonasanx/public_html;
&nbsp; &nbsp; autoindex&nbsp; on; 
&nbsp; &#125;
&#125;
</pre>
<br /><br /><span style="color: #222222">Escrito por</span> <strong>Jonathan Javier</strong> <span style="color: #222222">{</span> <span style="color: #3465A4">Twitter:</span> <a class="arti_link" href="http://twitter.com/jonasanx">@jonasanx</a> <span style="color: #222222">} para Cristalab.com</span><p><a href="http://www.cristalab.com/tips/introduccion-a-html5-web-messaging-c105028l/#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=FrmH8CkUW7g:QW-L6aITRS8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=FrmH8CkUW7g:QW-L6aITRS8: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/FrmH8CkUW7g" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 10 Apr 2012 08:40:05</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/introduccion-a-html5-web-messaging-c105028l/</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>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>

