<?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="hub" href="http://pubsubhubbub.appspot.com" /><item>
    	    <title>Cristalab estará en la Campus Party de Bogotá</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/OvV84PaDKtk/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/cristalab-estara-en-la-campus-party-de-bogota-c75285l/</guid>
	        <description><![CDATA[ La próxima semana, del lunes 6 al domingo 12 de julio, gente de todo el mundo estará reunida en la Campus Party de Colombia. Como recordarán, el año pasado no solo estuvimos (colados), pero hubo sangre, alcohol, mujeres, un video grabado a las 4am, un segundo video con Jesús (que es la misma verdad) y un último video c... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>wtf</category>
	        <category>eventos</category>
	        <category>colombia</category>
	        <category>campus_party</category>
	        
            <content:encoded><![CDATA[  La próxima semana, del lunes 6 al domingo 12 de julio, gente de todo el mundo estará reunida en la <a class="arti_link" href="http://www.campus-party.com.co/">Campus Party de Colombia</a>. Como recordarán, el año pasado no solo estuvimos (colados), pero hubo sangre, alcohol, mujeres, un <a class="arti_link" href="http://www.cristalab.com/blog/chris-cesar-y-yo-en-la-campus-party-de-colombia-c57735l/">video grabado a las 4am</a>, un <a class="arti_link" href="http://www.cristalab.com/blog/segundo-video-en-la-campus-party-con-mujeres-y-blackjack-c57776l/">segundo video con Jesús</a> (que es la misma verdad) y un último video con la <a class="arti_link" href="http://www.cristalab.com/blog/tercero-y-ultimo-desde-la-campus-party-con-toque-femenino-c57839l/">compañia femenina</a> que tan desesperadamente necesitábamos.<br /><br />Sé por demografía que la mayoría de mis lectores dará click al último enlace. Yo también los quiero. Para mis lectoras, aquí tienen a Edward Cullen aka Robert Pattinson.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/robert-pattinson-licking-anna-1246527953_full550.jpg" border="0" /></div><br />Por si olvidaron la experiencia... He aquí el primero video:<br /><br /><div style="text-align:center;"><object width="550" height="335">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.youtube.com/v/Tc42WoGdcDE&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" />
	<embed src="http://www.youtube.com/v/Tc42WoGdcDE&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="335"></embed>
</object></div><br />¿A qué voy con todo esto? A que este año, una vez más, cargados de más redbull, más banda ancha y más insomnio acumulado...<br /><h2>Cristalab estará en la Campus Party Colombia 2009! Wooh!</h2><br />Pero esta ocasión será diferente. No sólo grabaremos videos extraños que hagan a la gente dudar de nuestra capacidad para liderar comunidades. No sólo convenceremos a gente inocente para que aparezca junto a nosotros y duden de su sanidad mental.<br /><br />No. Esta vez, aparte de todo esto, estaremos en vivo, transmitiendo en tiempo real. Escuchando a todos ustedes por internet, reaccionando a su feedback, escuchando sus recomendaciones y haciéndolos parte, desde allá, en el evento. También estaremos recibiendo sitios para nuestra saga de <a class="arti_link" href="http://www.cristalab.com/tags/videos/">consejos y criticas a sitios web</a>.<br /><br />Al igual que el año pasado, estaré con Christian Van Der Henst de Maestros del web. Así como otras personas que estaremos presentándoles la próxima semana.<br /><br /><h2>Quiero ser parte y estar con Cristalab en la Campus ¿Cómo hago parte?</h2><br />Si después de ver los tres videos de arriba, leer este post entero y descartar una carrera honesta en tu futuro, aun quieres ser parte de todos los planes y sorpresas que tenemos para la Campus, simplemente búscanos. Estaremos todos los días online. También puedes encontrarme en Twitter en <strong><a class="arti_link" href="http://twitter.com/freddier">@freddier</a></strong> y a Christian en <strong><a class="arti_link" href="http://twitter.com/cvander">@cvander</a></strong>.<br /><br />Para reconocernos, un par de fotos.<br /><br />Este soy yo:<br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/sir-frederic-cristalia-1246530340_full550.jpg" border="0" /></div><br /><br />Este es Christian:<br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/christian-van-der-henst-after-canopy-1226175039_full550.JPG" border="0" /></div><br /><br />Este soy yo a las 4am:<br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/freddie-1-1238087842_full550.jpg" border="0" /></div><br /><br />Si no tienes acceso a la Campus Party, hay una Zona Expo (Que <a class="arti_link" href="http://www.campus-party.com.co/index.php/FAQ.html">solo mencionan en el FAQ</a>, sitio mal hecho, será el primero de lo que hablaremos) de acceso al publico. Allá también estaremos, sólo tienen que estar atentos a este sitio web.<br /><br />De cualquier manera, vamos a pasarla bien, concretar negocios, comprar Foros del Web de una vez por todas y convertirlo en parte de Cristalab, entre otras cosas. Nos encantaría conocerlos y realmente esperamos sus comentarios. Los vemos allá, porque recuerden:<br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/blogportada/onairtour/thisisclab.gif" border="0" /></div><br /><br />Un agradecimiento especial a <a class="arti_link" href="http://twitter.com/nozuan">@nozuan</a> por su gestión.<p><a href="http://www.cristalab.com/blog/cristalab-estara-en-la-campus-party-de-bogota-c75285l/#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=OvV84PaDKtk:FnJVkh363YY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=OvV84PaDKtk:FnJVkh363YY: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/OvV84PaDKtk" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Thu, 02 Jul 2009 05:34:43</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/cristalab-estara-en-la-campus-party-de-bogota-c75285l/</feedburner:origLink></item>
	    <item>
    	    <title>Internet Explorer 8 tiene, extrañamente, comerciales buenos</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/TzfO7MkDwkg/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/internet-explorer-8-tiene-extranamente-comerciales-buenos-c75267l/</guid>
	        <description><![CDATA[ Microsoft tiene un largo historial de comerciales pesimos para TV. Con ideas terribles destructoras de marca. Desde el infame Steve Ballmer promocionando Windows 1.0, hasta el más reciente con Bill Gates y Seinfield vendiendo... no sé. Algo.<br />
<br />
Ahora tenemos Internet Explorer 8. El último navegador creado por Microsoft... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>browsers</category>
	        <category>microsoft</category>
	        <category>publicidad</category>
	        
            <content:encoded><![CDATA[  Microsoft tiene un largo historial de comerciales pesimos para TV. Con ideas terribles destructoras de marca. Desde el infame <a class="arti_link" href="http://www.youtube.com/watch?v=tGvHNNOLnCk">Steve Ballmer promocionando Windows 1.0</a>, hasta el más reciente con <a class="arti_link" href="http://www.youtube.com/watch?v=UKM8kCPBn5E">Bill Gates y Seinfield</a> vendiendo... no sé. Algo.<br /><br />Ahora tenemos Internet Explorer 8. El último navegador creado por Microsoft que, gracias a <a class="arti_link" href="http://molly.com/">Molly Holzschlag</a> (que ahora trabaja en Opera) y al market share de Firefox, es decente. Tiene soporte de PNG32, un modelo de caja como debe ser, soporte (parcial) a HTML 5 y hasta un <a class="arti_link" href="http://www.cristalab.com/blog/modo-porno-en-internet-explorer-8-firefox-3-safari-y-opera-c61056l/">modo porno</a>. Y para los sitios web diseñados para solo verse bien en IE6, un modo de compatibilidad.<br /><br />En sintesis, es <strong>muy buena idea</strong> actualizar a IE8. Sobre todo si así al fin <a class="arti_link" href="http://www.cristalab.com/blog/el-20-de-ustedes-sigue-usando-internet-explorer-6-c64811l/">muere IE6</a>.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/microsoft-internet-explorer-8-campaign-1246487208_full550.jpg" border="0" /></div><br /><h2>Special Internet Service Announcement</h2><br />Usando al antiguo actor de Superman (Dean Cain) y un estilo de comercial de los 60s, MS ha creado varios comerciales que ilustran las nuevas capacidades de Internet Explorer 8. El ultimo es asqueroso, pero funciona, realmente funciona.<br /><h3>LOLCats y los Accelerators</h3><br /><div style="text-align:center;"><object width="550" height="335">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.youtube.com/v/QjUzzxAKs20&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" />
	<embed src="http://www.youtube.com/v/QjUzzxAKs20&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="335"></embed>
</object></div><br /><br /><h3>Desorden obsesivo compulsivo y Web Slices</h3><br /><div style="text-align:center;"><object width="550" height="335">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.youtube.com/v/JyQolo0Xdqw&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" />
	<embed src="http://www.youtube.com/v/JyQolo0Xdqw&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="335"></embed>
</object></div><br /><br /><h3>Microsoft odia IE6 y muestra la velocidad de IE8</h3><br /><div style="text-align:center;"><object width="550" height="335">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.youtube.com/v/2aA_PEltVTw&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" />
	<embed src="http://www.youtube.com/v/2aA_PEltVTw&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="335"></embed>
</object></div><br /><br /><h3>Modo porno y... (no lo vean en la oficina)</h3><br /><div style="text-align:center;"><object width="550" height="335">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.youtube.com/v/xB9fhjnJcB0&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6" />
	<embed src="http://www.youtube.com/v/xB9fhjnJcB0&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="335"></embed>
</object></div><br /><br />Ojala sirvan de algo y la gente del mainstream realmente lo descargue. Ese último comercial realmente vende. Todos los que nos dedicamos a la web <strong>necesitamos</strong> que IE8 tenga éxito y IE6 muera sin honor ni gloria.<p><a href="http://www.cristalab.com/blog/internet-explorer-8-tiene-extranamente-comerciales-buenos-c75267l/#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=TzfO7MkDwkg:pK6PDRmn4kw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=TzfO7MkDwkg:pK6PDRmn4kw: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/TzfO7MkDwkg" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 01 Jul 2009 17:37:51</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/internet-explorer-8-tiene-extranamente-comerciales-buenos-c75267l/</feedburner:origLink></item>
	    <item>
    	    <title>ADM, aplicación AIR para editar archivos de configuración</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/CaeDU_DQelQ/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/adm-aplicacion-air-para-editar-archivos-de-configuracion-c75206l/</guid>
	        <description><![CDATA[ En mi tip anterior escribí una descripción del archivo de configuración de las aplicaciones AIR. Este archivo de configuración lo deberemos editar para definir las características de nuestra aplicación.<br />
<br />
Navegando por internet encontré una aplicación creada por David Deraedt que me pareció muy útil. Se trata de ADM (... ]]></description>

	        <dc:creator>Zguillez</dc:creator>
	        <category>xml</category>
	        <category>air</category>
	        
            <content:encoded><![CDATA[  En mi <a class="arti_link" href="http://www.codigoactionscript.org/archivo-de-configuracion-de-air/">tip anterior</a> escribí una descripción del archivo de configuración de las aplicaciones <a class="arti_link" href="http://www.cristalab.com/tips/tags/php">AIR</a>. Este archivo de configuración lo deberemos editar para definir las características de nuestra aplicación.<br /><br />Navegando por internet encontré una aplicación creada por <a class="arti_link" href="http://www.dehats.com">David Deraedt</a> que me pareció muy útil. Se trata de <strong>ADM (AIR Application Descriptor Manager)</strong>, una aplicación AIR que nos permite <strong>abrir y editar todos los parámetros de un archivo de configuración</strong>.<br /><br />Es una aplicación gratuita que la podemos descargar desde la <a class="arti_link" href="http://www.dehats.com/drupal/?q=node/55">página del autor</a>:<br /><br /><ul><li><a class="arti_link" href="http://www.dehats.com/projets/adm/ADM.air">Descargar ADM</a></li></ul><br /><br />Una vez instalada la aplicación podremos abrir cualquier archivo .XML de configuración de nuestros proyectos AIR, y podremos introducir los parámetros de una manera más cómoda:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/air/adm/cap_001.png" border="0" /></div><br /><br />Una característica que especialmente me gustó es que te permite generar de forma automática todos los tamaños necesarios para los iconos de la aplicación desde un mismo archivo de imagen:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/air/adm/cap_002.png" border="0" /></div><br /><br />La página web del autor también tenemos disponible un vídeo para ver una demostración de la aplicación:<br /><br /><div style="text-align:center;"><object width="550" height="335">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.youtube.com/v/sgW7eysWNWY&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6" />
	<embed src="http://www.youtube.com/v/sgW7eysWNWY&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="335"></embed>
</object></div><br /><br />En definitiva, una aplicación muy práctica y recomendable para los que generan habitualmente aplicaciones AIR.<p><a href="http://www.cristalab.com/tips/adm-aplicacion-air-para-editar-archivos-de-configuracion-c75206l/#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=CaeDU_DQelQ:Ogm3KuwC5Ws:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=CaeDU_DQelQ:Ogm3KuwC5Ws: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/CaeDU_DQelQ" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 30 Jun 2009 22:33:37</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/adm-aplicacion-air-para-editar-archivos-de-configuracion-c75206l/</feedburner:origLink></item>
	    <item>
    	    <title>Desde el WordCamp San Francisco: Consejos para tus blogs</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/yNQQ_Jitt9A/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/desde-el-wordcamp-san-francisco-consejos-para-tus-blogs-c75091l/</guid>
	        <description><![CDATA[ Estuvimos en el Wordcamp en San Francisco, un evento impresionante dedicado al culto a Matt Mullenweg, lo ultimo de Wordpress y el estado en general de la blogosfera, las plataformas de blogging y la forma en la que las personas publican sus conocimientos, experiencias y noticias en la web.<br />
<br />
A diferencia del Google I... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>opinion</category>
	        <category>wordpress</category>
	        <category>videos</category>
	        
            <content:encoded><![CDATA[  Estuvimos en el <a class="arti_link" href="http://www.darioferrer.com/">Wordcamp</a> en San Francisco, un evento impresionante dedicado al culto a <a class="arti_link" href="http://ma.tt/">Matt Mullenweg</a>, lo ultimo de Wordpress y el estado en general de la blogosfera, las plataformas de blogging y la forma en la que las personas publican sus conocimientos, experiencias y noticias en la web.<br /><br />A diferencia del <a class="arti_link" href="http://www.cristalab.com/blog/asi-hemos-vivido-el-google-i-o-en-san-francisco-c73732l/">Google I/O</a>, WordCamp es mucho más humilde en su ejecución. Pero la naturaleza del evento atrae personas que, si bien no son técnicas, tienen una gran audiencia detrás y sus pensamientos son escuchados por muchas personas en el mundo. Bloggers pequeños, blogstars y hasta gente que usa blogspot estaba en el lugar.<br /><br />Por eso aprovechamos y tras el WordCamp, hemos decidido grabar un video hablando un poco del evento y de dos blogs que nos enviaron para la serie <strong>Mejorando la web en Español</strong>.<br /><br /><div style="text-align:center;"><a class="arti_link" href="http://l4c.me/fotos/freddie/cristalab-y-maestros-del-web-en-wordcamp"><img class="imgBlog" src="http://l4c.me/uploads/cristalab-y-maestros-del-web-en-wordcamp-1246269001_full550.JPG" border="0" /></a></div><br /><h2>Mejorando la web en Español</h2><br /><div style="text-align:center;"><object width="550" height="335">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.youtube.com/v/B1g_Q2C9gLQ&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" />
	<embed src="http://www.youtube.com/v/B1g_Q2C9gLQ&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="335"></embed>
</object></div><br /><h2>Pronto, consejos y criticas a tus sitios web en vivo</h2><br />Desde la fecha que grabamos este video, <a class="arti_link" href="http://www.darioferrer.com/">Dario Ferrer</a> cambió su blog, así que se ha salvado de la ira de Christian. Pero por estas cosas, estamos pensando transmitir esta serie de criticas y consejos para websites en vivo, con preguntas y respuestas de todos ustedes en tiempo real para nosotros ¿Qué opinan?<p><a href="http://www.cristalab.com/blog/desde-el-wordcamp-san-francisco-consejos-para-tus-blogs-c75091l/#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=yNQQ_Jitt9A:7M9tP-PnB58:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=yNQQ_Jitt9A:7M9tP-PnB58: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/yNQQ_Jitt9A" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 29 Jun 2009 04:58:37</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/desde-el-wordcamp-san-francisco-consejos-para-tus-blogs-c75091l/</feedburner:origLink></item>
	    <item>
    	    <title>Cómo abrir una ventana PopUp en ActionScript 3</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/wh4s49fc2-o/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/como-abrir-una-ventana-popup-en-actionscript-3-c75023l/</guid>
	        <description><![CDATA[ Muchos de nosotros, aveces, nos vemos obligados de abrir un popup desde Flash y para eso utilizamos ExternalInterface que ya vimos en un tutorial aquí en Cristalab. Sin embargo, para algunas personas no familiarizadas con el código, se les hace un mundo cuando comparan esa forma con el clásico método getURL de ActionSc... ]]></description>

	        <dc:creator>eldervaz</dc:creator>
	        <category>javascript</category>
	        <category>actionscript_3</category>
	        
            <content:encoded><![CDATA[  Muchos de nosotros, aveces, nos vemos obligados de abrir un popup desde <a class="arti_link" href="http://www.cristalab.com/flash/">Flash</a> y para eso utilizamos <a class="arti_link" href="http://www.cristalab.com/tips/como-comunicar-flash-y-javascript-en-actionscript-3-c50326l/">ExternalInterface</a> que ya vimos en un <a class="arti_link" href="http://www.cristalab.com/tutoriales/">tutorial</a> aquí en <a class="arti_link" href="http://www.cristalab.com">Cristalab</a>. Sin embargo, para algunas personas no familiarizadas con el código, se les hace un mundo cuando comparan esa forma con el clásico método <strong>getURL</strong> de ActionScript 2.0. De hecho <a class="arti_link" href="http://www.cristalab.com/usuario/2703-zguillez">zguillez</a> hizo un <a class="arti_link" href="http://www.cristalab.com/tips/clase-para-abrir-popups-en-flash-c28907l/">tip en AS2</a>.<br /><br />Para eso hice una pequeña clase que nos ayudará a resolver este dilema utilizando navigateToURL, pero déjenme insistir en utilizar <a class="arti_link" href="http://www.cristalab.com/tips/como-comunicar-flash-y-javascript-en-actionscript-3-c50326l/">ExternalInterface</a>.<br /><br />Para eso creo mis variables por default, donde declaro la url a abrir, el ancho y alto, el título de la ventana, si será resize y en que ventana abrirá<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private var _url&#58;String = &quot;http&#58;//www.cristalab.com&quot;;
private var _width&#58;Number= 400;
private var _height&#58;Number= 300;
private var _title&#58;String = &quot;title&quot;;
private var _resize&#58;String = &quot;yes&quot;;
private var _window&#58;String = &quot;_blank&quot;;
</pre><br /><br />Ahora crearé un método que llamará a un URLRequest, donde definiremos el javascript que abrirá el popup<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
public function openWindow&#40;newUrl&#58;String = null&#41;&#58;void&#123;
&nbsp; &nbsp;if&#40;newUrl&#41;
&nbsp; &nbsp;&nbsp; &nbsp;this.url = newUrl;
&nbsp; &nbsp;var _urlRequest&#58;URLRequest=new URLRequest&#40;&#41;;
&nbsp; &nbsp;_urlRequest.url=&quot;javascript&#58;window.open&#40;'&quot;+url+&quot;','&quot;+title+&quot;','width=&quot;+width+&quot;,height=&quot;+height+&quot;, resizable=&quot;+resize+&quot;'&#41;;newWindow.focus&#40;&#41;; void&#40;0&#41;;&quot;;
&nbsp; &nbsp;navigateToURL&#40;_urlRequest,_window&#41;;
&#125;
</pre><br /><br />Aquí el código completo de la clase:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
package com.cristalab.utils
&#123;
&nbsp; &nbsp;import flash.net.URLRequest;
&nbsp; &nbsp;import flash.net.navigateToURL;
&nbsp; &nbsp;
&nbsp; &nbsp;public class PopUp
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;private var _url&#58;String = &quot;http&#58;//www.cristalab.com&quot;;
&nbsp; &nbsp;&nbsp; &nbsp;private var _width&#58;Number= 400;
&nbsp; &nbsp;&nbsp; &nbsp;private var _height&#58;Number= 300;
&nbsp; &nbsp;&nbsp; &nbsp;private var _title&#58;String = &quot;title&quot;;
&nbsp; &nbsp;&nbsp; &nbsp;private var _resize&#58;String = &quot;yes&quot;;
&nbsp; &nbsp;&nbsp; &nbsp;private var _window&#58;String = &quot;_blank&quot;;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;public function PopUp&#40;&#41;
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;public function openWindow&#40;newUrl&#58;String = null&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if&#40;newUrl&#41;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;this.url = newUrl;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var _urlRequest&#58;URLRequest=new URLRequest&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;_urlRequest.url=&quot;javascript&#58;window.open&#40;'&quot;+url+&quot;','&quot;+title+&quot;','width=&quot;+width+&quot;,height=&quot;+height+&quot;, resizable=&quot;+resize+&quot;'&#41;;newWindow.focus&#40;&#41;; void&#40;0&#41;;&quot;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;navigateToURL&#40;_urlRequest,_window&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;


&nbsp; &nbsp;&nbsp; &nbsp;public function set url&#40;val&#58;String&#41;&#58;void
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;_url = val;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;

&nbsp; &nbsp;&nbsp; &nbsp;public function get url&#40;&#41;&#58;String
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return _url;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;

&nbsp; &nbsp;&nbsp; &nbsp;public function set width&#40;val&#58;Number&#41;&#58;void
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;_width = val;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;

&nbsp; &nbsp;&nbsp; &nbsp;public function get width&#40;&#41;&#58;Number
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return _width;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;

&nbsp; &nbsp;&nbsp; &nbsp;public function set height&#40;val&#58;Number&#41;&#58;void
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;_height = val;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;

&nbsp; &nbsp;&nbsp; &nbsp;public function get height&#40;&#41;&#58;Number
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return _height;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;

&nbsp; &nbsp;&nbsp; &nbsp;public function set title&#40;val&#58;String&#41;&#58;void
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;_title = val;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;

&nbsp; &nbsp;&nbsp; &nbsp;public function get title&#40;&#41;&#58;String
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return _title;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;

&nbsp; &nbsp;&nbsp; &nbsp;public function set resize&#40;val&#58;String&#41;&#58;void
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;_resize = val;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;

&nbsp; &nbsp;&nbsp; &nbsp;public function get resize&#40;&#41;&#58;String
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return _resize;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;

&nbsp; &nbsp;&nbsp; &nbsp;public function set window&#40;val&#58;String&#41;&#58;void
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;_window = val;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;

&nbsp; &nbsp;&nbsp; &nbsp;public function get window&#40;&#41;&#58;String
&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return _window;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&#125;
&#125;
</pre><br /><br />Para utilizar esta clase, hice un ejemplo en un FLA simple:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
import com.cristalab.utils.PopUp;

var t&#58;PopUp = new PopUp&#40;&#41;;


btn1.addEventListener&#40;MouseEvent.CLICK, popUpNormal&#41;;
btn2.addEventListener&#40;MouseEvent.CLICK, popUpEditado&#41;;

function popUpNormal&#40;e&#58;MouseEvent&#41;&#58;void &#123;
&nbsp; &nbsp;var ir&#58;String;
&nbsp; &nbsp;ir=&quot;http&#58;//www.cristalab.com/tutoriales/&quot;;
&nbsp; &nbsp;t.openWindow&#40;ir&#41;;
&#125;

function popUpEditado&#40;e&#58;MouseEvent&#41;&#58;void &#123;
&nbsp; &nbsp;t.url=&quot;http&#58;//www.google.com&quot;;
&nbsp; &nbsp;t.title=&quot;Estamos en Google&quot;;
&nbsp; &nbsp;t.width=640;
&nbsp; &nbsp;t.height=480;
&nbsp; &nbsp;t.resize=&quot;yes&quot;;
&nbsp; &nbsp;t.window=&quot;_self&quot;;
&nbsp; &nbsp;t.openWindow&#40;&#41;;
&#125;
</pre><br /><br />El método popUpNormal, abre un popup con los valores por default de la clase.<br /><br />El método popUpEditado, permite editar los parámetros a tu gusto <img src="/foros/images/smiles/icon_miau.gif" alt="^^" border="0" /><br /><br />Espero les sirva.<br /><br /><div style="text-align:center;"><br /><object width="350" height="150">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.eldervaz.com/cristalab/popup/popUp-AS3.swf#" />
	<embed src="http://www.eldervaz.com/cristalab/popup/popUp-AS3.swf#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="350" height="150"></embed>
</object><br /></div><p><a href="http://www.cristalab.com/tips/como-abrir-una-ventana-popup-en-actionscript-3-c75023l/#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=wh4s49fc2-o:4mOnRF5yRiI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=wh4s49fc2-o:4mOnRF5yRiI: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/wh4s49fc2-o" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Fri, 26 Jun 2009 16:21:32</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/como-abrir-una-ventana-popup-en-actionscript-3-c75023l/</feedburner:origLink></item>
	    <item>
    	    <title>HTC Hero, el primer télefono Android con Flash y multitouch</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/GgqtIX4qAQ4/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/htc-hero-el-primer-telefono-android-con-flash-y-multitouch-c74918l/</guid>
	        <description><![CDATA[ Tal como anunciamos hace unas semanas en la entrevista a Ryan Stewart en Adobe, Adobe ha anunciado el primer teléfono de Android que tendrá integrado Flash por defecto, el HTC Hero con sistema operativo Android.<br /><br />
HTC Hero<br />
El teléfono viene con multitouch, pantalla del mismo tamaño del iPhone (resolución y medidas)... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>google</category>
	        <category>android</category>
	        <category>flashlite</category>
	        <category>moviles</category>
	        <category>telefonos</category>
	        
            <content:encoded><![CDATA[  Tal como anunciamos hace unas semanas en la <a class="arti_link" href="http://www.cristalab.com/blog/flash-en-palm-pre-android-air-movil-y-mas-desde-adobe-c73991l/">entrevista a Ryan Stewart en Adobe</a>, Adobe ha anunciado el primer teléfono de Android que tendrá integrado Flash por defecto, el <a class="arti_link" href="http://www.htc.com/www/product/hero/overview.html">HTC Hero</a> con sistema operativo <a class="arti_link" href="http://www.cristalab.com/tags/android/">Android</a>.<br /><br /><div style="text-align:center;"><a class="arti_link" href="http://www.htc.com/www/product/hero/overview.html"><img class="imgBlog" src="http://l4c.me/uploads/htc-hero-1245871700_full550.png" border="0" /></a></div><br /><h2>HTC Hero</h2><br />El teléfono viene con multitouch, pantalla del mismo tamaño del iPhone (resolución y medidas), una batería igual al HTC Magic (O Google G2). Traerá una serie de aplicaciones creadas por HTC para Android, como clientes nativos de Twitter, Facebook y Flickr, así como la &quot;Google Experience&quot;: Gmail, Calendar, GTalk.<br /><br /><div style="text-align:center;"><object width="550" height="335">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.youtube.com/v/kshGq8COSiM&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" />
	<embed src="http://www.youtube.com/v/kshGq8COSiM&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="335"></embed>
</object></div><br /><h2>Flash Lite ahora, Flash Player 10 luego</h2><br />La gran noticia es que Adobe ha anunciado, por primera vez, Flash para Android. Inicialmente es la ultima versión de Flash Lite, pero a finales de este año está listo el Flash Player 10 completo para los móviles con el sistema operativo de Google. En el video de demostración se ve que, con &quot;doble tap&quot;, los SWF de Flash entran en modo fullscreen dentro del navegador. Mucho más usable que el comportamiento de Flash Lite en Symbian o Windows Mobile. <br /><br />La gran mayoría de SWFs deberían funcionar sin problemas con Flash Lite, así como la gigantesca colección de juegos en Flash en la web. <br /><br /><div style="text-align:center;"><object width="467" height="300">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://tv.adobe.com/Embed.swf?v=~b64~aHR0cDovL2Fkb2JlLmVkZ2Vib3NzLm5ldC9mbGFzaC9hZG9iZS9hZG9iZXR2Mi9vcGVuX3NjcmVlbl9wcm9qZWN0LzEwNV9vc3BfMDAzLmZsdj9yc3NfZmVlZGlkPTE1MzAyJnhtbHZlcnM9Mg==&amp;w=467&amp;t=http://tv.adobe.com/vi+f15302v1002&amp;h=300" />
	<embed src="http://tv.adobe.com/Embed.swf?v=~b64~aHR0cDovL2Fkb2JlLmVkZ2Vib3NzLm5ldC9mbGFzaC9hZG9iZS9hZG9iZXR2Mi9vcGVuX3NjcmVlbl9wcm9qZWN0LzEwNV9vc3BfMDAzLmZsdj9yc3NfZmVlZGlkPTE1MzAyJnhtbHZlcnM9Mg==&amp;w=467&amp;t=http://tv.adobe.com/vi+f15302v1002&amp;h=300" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="467" height="300"></embed>
</object></div><br /><h2>Otros detalles</h2><br />Una nueva interfaz, llamada HTC Sense, es la encargada de llevar las &quot;aplicaciones sociales&quot; al teléfono. Es muy similar a los &quot;decks&quot; de la Palm Pre. El procesador y la batería son iguales al HTC Magic, pero incluye detalles adicionales como una capa de teflón (como el de los utensilios de cocina) para evitar que se raye o que se manche. <br /><br />El HTC Hero sale primero en Europa (España) en Julio, luego Asia y por último Norteamérica a final del año. A esperar.<p><a href="http://www.cristalab.com/blog/htc-hero-el-primer-telefono-android-con-flash-y-multitouch-c74918l/#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=GgqtIX4qAQ4:b80Qv7x4510:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=GgqtIX4qAQ4:b80Qv7x4510: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/GgqtIX4qAQ4" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 24 Jun 2009 14:52:24</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/htc-hero-el-primer-telefono-android-con-flash-y-multitouch-c74918l/</feedburner:origLink></item>
	    <item>
    	    <title>Archivo de configuración de AIR</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/GtG2AYoYUig/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/archivo-de-configuracion-de-air-c74913l/</guid>
	        <description><![CDATA[ El archivo de configuración de AIR es un archivo XML que define las características de la aplicación AIR para ser distribuida. El nombre de este archivo es el mismo que el del archivo MXML pero con el sufijo -app.<br />
Flex 3, Flash CS4 o Dreamweaver CS4 nos permitirán asignar estas propiedades desde paneles a la hor... ]]></description>

	        <dc:creator>Zguillez</dc:creator>
	        <category>xml</category>
	        <category>air</category>
	        <category>mxml</category>
	        
            <content:encoded><![CDATA[  El archivo de configuración de <a class="arti_link" href="http://www.cristalab.com/tips/tags/air">AIR</a> es un archivo <a class="arti_link" href="http://www.cristalab.com/tips/tags/xml">XML</a> que define las características de la aplicación AIR para ser distribuida. El nombre de este archivo es el mismo que el del archivo <a class="arti_link" href="http://www.cristalab.com/tips/tags/mxml">MXML</a> pero con el sufijo <strong>-app</strong>.<br /><div style="text-align:center;"><br /><img class="imgBlog" src="http://www.cristalab.com/zguillez/cursos/AIR/2/img/cap_001.jpg" border="0" /></div><br /><br /><a class="arti_link" href="http://www.cristalab.com/tips/tags/flex">Flex 3</a>, <a class="arti_link" href="http://www.cristalab.com/tips/tags/flash">Flash CS4</a> o <a class="arti_link" href="http://www.cristalab.com/tips/tags/dreamweaver">Dreamweaver CS4</a> nos permitirán asignar estas propiedades desde paneles a la hora de empaquetar la aplicación, pero en algunos casos nos interesará editar estos valores directamente desde el archivo XML.<br /><br />Aquí vemos vemos todas estas propiedades y su finalidad:<br /><br /><h2>&lt;application/&gt;</h2><br />Este tag es el tag principal de la aplicación. Su unica propiedad es la definición de la versión del Runtime de AIR necesario para poder ejecutar la aplicación:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;application xmlns=&quot;http&#58;//ns.adobe.com/air/application/1.0&quot;&gt;</pre><br /><h2>&lt;id/&gt;</h2><br />El Id es un identificación único y específico para la aplicación, por eso se recomienda utilizar un namespace de dominio para asegurarse de no repetirlo en otra aplicación.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;id&gt;com.zguillez.cristalab.demos.demoApp1&lt;/id&gt;</pre><br /><h2>&lt;filename/&gt;</h2><br />En este tag indicaremos el nombre de fichero de nuestra aplicación.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;filename&gt;demoApp1&lt;/filename&gt;</pre><br /><h2>&lt;name/&gt;</h2><br />En este tag volveremos a incluir el nombre de nuestra aplicación. Este nombre es el que se le mostrará al usuario en la ventana de instalación de la aplicación.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;name&gt;demoApp1&lt;/name&gt;</pre><br /><h2>&lt;version/&gt;</h2><br />Aqui indiceremos la versión de nuestra aplicación. Esta propiedad se nuestra al usuario al instalar la aplicación, y sirve de alerta para saber si al reistalar la aplicación estamos instalando una versión superior a la actual.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;version&gt;1.0&lt;/version&gt;</pre><br /><h2>&lt;description/&gt;</h2><br />Tag en el que describiremos nuestra aplicación al usuario. Esta información tambien es mostrada durante la instalación de la aplicación.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;description&gt;Aplicación AIR de pruebas&lt;/description&gt;</pre><br />Este tag, como muchos otros, aparece por defecto comentado. (&lt;!-- &lt;description&gt;&lt;/description&gt; --&gt;). Deberemos eliminar esas llaves de comentario (&lt;!-- --&gt;) para que la propiedad quede asignada.<br /><h2>&lt;copyright/&gt;</h2><br />Indicaremos si la aplicación tiene copyright o no. Este dato solo se muestra en el menú About de Mac OS X.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;copyright&gt;Copyright 2008 Zguillez&lt;/copyright&gt;</pre><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;initialWindow/&gt;</pre><br />El nodo &lt;initialWindow&gt; contiene una serie de nodos de definición de las características correspondientes a la ventana de la aplicación.<br /><h3>&lt;content/&gt;</h3><br />    Este tag contiene la referencia al archivo complidado con la aplicación. Si estamos publicando desde el SDK deberemos definir este tag manualmente, pero si publicamos desde Flex, Flash o Dreamweaver se formatea automaticamente al publicar.<br />        <p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">* &lt;content&gt;demoApp1.swf&lt;/content&gt;</pre><br /><h3>&lt;title/&gt;</h3><br />    Nombre que aparecerá en la barra superior de la ventana de la aplicación.<br />       <p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;title&gt;demoApp1&lt;/title&gt;</pre><br /><h3>&lt;systemChrome/&gt;</h3><br />    Aqui definimos el tipo de &quot;caja&quot; que contendrá nuestra aplicación. Si la definimos como standard (opción por defecto) nuestra aplicación estará contenida en una ventana típica de nuestro sistema operativo, y contendrá los controles de cerrar, maximizar y minimizar típicos de cualquier ventana de nuestro sistema. Si indicamos none, ese marco de ventana no aparecerá ( en este caso deberemos incluir en la aplicación unos botones para realizar las funciones de minimizar o de salir de la aplicación).<br />       <p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;systemChrome&gt;none&lt;/systemChrome&gt;</pre><br /><h3>&lt;transparent/&gt;</h3><br />    En el caso de seleccionar systemChrome cono none, podemos indicar también si el fondo de nuestra aplicación es transparente o no.<br />      <p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;transparent&gt;true&lt;/transparent&gt;</pre><br /><h3>&lt;visible/&gt;</h3><br />    Indica si la ventana de la aplicación es visible antes de que la aplicación se haya cargado completamente. Por defecto es false.<br />      <p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;visible&gt;false&lt;/visible&gt;</pre><br /><h3>&lt;minimizable/&gt; &lt;maximizable/&gt; &lt;resaizable/&gt;</h3><br />    Con estos tags indicaremos si el usuario puede minimizar y maximizar la plicación. Y tambien si permitimos la opción de redimensionar la ventana de la aplicación.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;minimizable&gt;true&lt;/minimizable&gt;
&lt;maximizable&gt;true&lt;/maximizable&gt;
&lt;resizable&gt;false&lt;/resizable&gt;</pre><br /><h3>&lt;width/&gt; &lt;height/&gt;</h3><br />    Aqui indicamos los valores de las dimensiones iniciales de la ventana de nuestra aplicación.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;width&gt;800&lt;/width&gt;
&lt;height&gt;600&lt;/height&gt;</pre><br /><h3>&lt;x/&gt; &lt;y/&gt;</h3><br />    Valores de la posición inicial de la ventana de la aplicación respecto a las dimensiones de la pantalla.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;x&gt;0&lt;/x&gt;
&lt;y&gt;0&lt;/y&gt;</pre><br /><h3>&lt;minSize/&gt; &lt;maxSize/&gt;</h3><br />    Estos son los valores de las dimensiones máximas y mínimas de la ventana de la aplicación que pernitimos redimensionar al usuario.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;minSize&gt;400 300&lt;/minSize&gt;
&lt;maxSize&gt;1600 1200&lt;/maxSize&gt;</pre><br /><h2>&lt;installFolder/&gt;</h2><br />En este tag indicaremos el nombre de la carpeta donde se grabarán los archivos de la aplicación dentro de nuestra carpeta de aplicaciones del sistema.<br />&lt;installFolder&gt;Aplicaciones Cristalab&lt;/installFolder&gt;<br /><h2>&lt;programMenuFolder/&gt;</h2><br />Tag opcional que nos permite indicar al usuario si quiere adjuntar un acceso a la aplicación desde el menú de inicio de Windows. El nombr de la carpeta del acceso directo será el indicado en el tag.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;programMenuFolder&gt;Aplicaciones Cristalab&lt;/programMenuFolder&gt;</pre><br /><h2>&lt;icon/&gt;</h2><br />El tag icon contiene una serie de tags en los que incluiremos una referencia a una imagen para el icono de nuestra aplicación. Las imagenes pueden ser de cualquier formato bitmap, han de ser del tamaño indicado y han de estar incluidas en el paquete de publicación.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;image16x16&gt;icon16.png&lt;/image16x16&gt;
&lt;image32x32&gt;icon32.png&lt;/image32x32&gt;
&lt;image48x48&gt;icon48.png&lt;/image48x48&gt;
&lt;image128x128&gt;icon128.png&lt;/image128x128&gt;</pre><br /><h2>&lt;customUpdateUI/&gt;</h2><br />Esta propiedad nos indica si la responsabilidad de actualizarse corresponde a la propia aplicación. Si a propiedad es false (opción por defecto) al instalar un paquete AIR con una versión actualizada de una aplicación nos aparecerá la ventana de instalación por defecto en la que nos preguntará si queremos actualizar la aplicación por la versión más actual, sustituyendo una aplicación por otra. Si la propiedad es true, intentar abrir el paquete de la versión actualizada no se abrirá la ventana de instalación si no que se ejecutará la programación de actualización interna de la propia aplicación.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;customUpdateUI&gt;true&lt;/customUpdateUI&gt;</pre><br />No deberemos seleccionar esta propiedad como true a menos de que hayamos programado un sistema de auto-actualización con la clase &lt;update&gt;<br /><h2>&lt;allowBrowserInvocation/&gt;</h2><br />Con esta propiedad indicamos si permitimos la instalación de la aplicación desde la ventana de un navegador web.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;allowBrowserInvocation&gt;true&lt;/allowBrowserInvocation&gt;</pre><br /><h2>&lt;fileTypes/&gt;</h2><br />En esta serie de tags definiremos si existen algun tipo de archivo asociado a nuestra aplicación. Por ejemplo, si nuestra aplicación abre y guarda archivos con extensión .clab y queremos que al dar dobleclick a este tipo de archivos se abran directamente con nuestra aplicación. Tambien podemos definir los iconos para ese nuevo tipo de archivos.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo xml">&lt;fileTypes&gt;
&nbsp; &lt;fileType&gt;
&lt;name&gt;Cristalab&lt;/name&gt;
&lt;extension&gt;.clab&lt;/extension&gt;
&lt;description&gt;Archivo Cristalab&lt;/description&gt;
&lt;contentType&gt;text&lt;/contentType&gt;
&lt;icon&gt;
&nbsp; &lt;image16x16&gt;ico16.png&lt;/image16x16&gt;
&nbsp; &lt;image32x32&gt;ico32.png&lt;/image32x32&gt;
&nbsp; &lt;image48x48&gt;ico48.png&lt;/image48x48&gt;
&nbsp; &lt;image128x128&gt;ico128.png&lt;/image128x128&gt;
&lt;/icon&gt;
&nbsp; &lt;/fileType&gt;
&lt;/fileTypes&gt;</pre><p><a href="http://www.cristalab.com/tips/archivo-de-configuracion-de-air-c74913l/#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=GtG2AYoYUig:euY1EJzNksY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=GtG2AYoYUig:euY1EJzNksY: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/GtG2AYoYUig" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 24 Jun 2009 13:20:07</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/archivo-de-configuracion-de-air-c74913l/</feedburner:origLink></item>
	    <item>
    	    <title>8 consejos para enfrentar un proyecto web</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/nnp9R8Kz5X8/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/8-consejos-para-enfrentar-un-proyecto-web-c74834l/</guid>
	        <description><![CDATA[ Estas son algunas consideraciones que debemos tener en cuenta incluso antes de comenzar a trabajar. Esta lista la he hecho pensando en freelancers (porque yo mismo lo soy), pero muchas de las cosas que están aquí son válidas para no-freelancers también:<br />
<br />
Procura hacer un cuestionario corto y preciso, que te permita l... ]]></description>

	        <dc:creator>The Fricky!</dc:creator>
	        <category>webmasters</category>
	        <category>negocios</category>
	        
            <content:encoded><![CDATA[  Estas son algunas consideraciones que debemos tener en cuenta incluso antes de comenzar a trabajar. Esta lista la he hecho pensando en freelancers (porque yo mismo lo soy), pero muchas de las cosas que están aquí son válidas para no-freelancers también:<br /><br /><h2>Procura hacer un cuestionario corto y preciso, que te permita luego crear un brief</h2><br />La clave de un buen cuestionario es usar pocas preguntas, fáciles de contestar. Por lo general, tu cliente quiere dejar la mayor parte del trabajo tedioso de tu parte. Además, si es una persona ocupada (siempre lo es) no querrá agregar a su lista de tareas la de tener que hacer grandes cuestionarios o supervisar lo que estás haciendo. Lo mejor para él (y para ti) es que le facilites lo más posible su parte del trabajo en la creación del proyecto. Eso sí, una vez que tengas el brief listo, no olvides enviárselo para que te dé su visto bueno.<br /><br /><div style="text-align:center;"><a class="arti_link" href="http://l4c.me/fotos/freddie/oh-fuck-me-v4"><img class="imgBlog" src="http://l4c.me/uploads/oh-fuck-me-v4-1242192024_full550.jpg" border="0" /></a></div><br /><h2>Ten al menos una reunión con tu cliente para hablar sobre el proyecto</h2><br />Esta puede ser presencial, vía telefónica u online (Skype, GTalk, Messenger, etc.) La reunión no puede ser por escrito. No significa que todas deban ser de esta manera, pero al menos la primera debe serlo. Todos sabemos que una conversación donde pueda -al menos- escucharse la voz de la contraparte resulta más fluida y productiva que una conversación escrita, que es más estructurada pero no permite la inmediatez de la primer. Incluye ese &quot;extra&quot; que significa el tono de la voz y la capacidad de ganar la confianza de tu cliente a través de una buena conversación. Si puedes tener un par de conversaciones más con tu cliente, no las desaproveches. Ese tipo de contacto genera relaciones que duran en el tiempo (si te portas bien, claro).<br /><br /><h2>Prepara un contrato y no comiences el trabajo hasta tener la aceptación del mismo, por escrito, de parte del cliente</h2><br />No hace falta tampoco que generes páginas y páginas para tu contrato, sólo procura que no falten los puntos esenciales: Descripción del Proyecto, Presupuesto, Forma(s) de Pago y Tiempos de cada etapa. Siempre es buena idea que te asesores con alguien sobre las formalidades requeridas en tu país. Por supuesto, para que un contrato sea válido debe estar firmado por ambas partes o al menos aprobado expresamente de algún modo.<br /><br /><h2>Comienza siempre con un mockup</h2><br />Ya sea que utilices el viejo pero bueno papel y lápiz, algún <a class="arti_link" href="http://www.cristalab.com/blog/prototipos-bocetos-y-wireframes-con-balsamiq-mockups-c61456l/">software o alguna herramienta online</a>, no comiences a diseñar sin crear antes un mockup. A diferencia del proceso de diseño, en el mockup preocúpate por cosas como la navegación, la distribución del contenido, el formulario de búsqueda, etc. Luego tendrás tiempo para el proceso de diseño como tal. Además, el mockup te permitirá volver a plantearte la estructura o parte de ella con facilidad.<br /><br /><div style="text-align:center;"><a class="arti_link" href="http://l4c.me/fotos/freddie/delm-blog-design-mockup"><img class="imgBlog" src="http://l4c.me/uploads/delm-blog-design-mockup-1232521800_full550.png" border="0" /></a></div><br /><h2>Ten siempre presente la posibilidad de que el cliente retrase el trabajo.</h2><br />Personalmente, mi problema principal a la hora de intentar mantener los tiempos es que el cliente entregue el material, haga las revisiones en el tiempo establecido, etc. Para paliar ese problema suelo hacer dos cosas (no necesariamente al mismo tiempo):<br /><ol type="1"><br />	</li><li>Colocar tiempos de revisión -normalmente de una semana- por parte del cliente, advirtiéndole que cada día de retraso implicará un cambio en la fecha de entrega y/o un recargo (de un 1%, máximo) en el precio final. Si quieres que se apure, tócale los bolsillos. <img src="/foros/images/smiles/icon_wink.gif" alt=";)" border="0" /><br />	</li><li>Preveer estos retrasos, dándole más tiempo a los lapsos de entrega de material o revisiones. Esta no es la mejor solución, pero si conoces más o menos a tu cliente, puede funcionar.</ol><br /><h2>Piensa en el usuario final, que tu sitio sea <a class="arti_link" href="http://www.cristalab.com/tags/usabilidad/">usable</a> y accesible</h2><br />El cliente <span style="text-decoration: underline">a veces</span> tiene la razón, pero es tu obligación hacer lo mejor que puedas por él. Hazle recomendaciones, dile por qué tiene sentido tu diseño. Eso sí, ten cuidado con terminar defendiendo tu diseño sólo porque lo hiciste tú y estás enamorado de él. <strong>No tengas como prioridad satisfacer a tu cliente sino a su cliente</strong>, que será quien tenga que interactuar con lo que hayas hecho. Ten en cuenta que muchos clientes no entienden que un sitio web es un medio de comunicación y no sólo una tarjeta de presentación.<br /><br /><h2>Se un profesional o no te vendas como tal</h2><br />Sí, suena duro, pero eso cierto. Todos sabemos el dolor de cabeza que significa &quot;el sobrino que sabe de computadoras&quot;.<br />No estoy diciendo que te vendas como el mejor diseñador/desarrollador del mundo, pero tampoco debes hacer pensar a tu cliente que no estás calificado para el trabajo o que simplemente eres su sobrino de 12 años. Si te vendes por centavos, no sólo te perjudicas tú (porque siempre esperarán que te vendas por centavos) sino a todo el mercado, creando el precedente de que el diseño web es cuestión de limosnas.<br /><br />Por otro lado, debes estar consciente de tu papel, tu cliente espera que resuelvas un problema, no que los crees; aún cuando estés comenzando, debes tener la suficiente seguridad para evitar que te vea como un repartidor de pizzas, si tú no te respetas ni respetas tu trabajo, tu cliente tampoco lo hará (ni la comunidad).<br /><br /><h2>Estudia, lee, aprende</h2><br />Una de las cosas más fascinantes de la tecnología es que está en constante desarrollo. Siempre hay cosas nuevas que aprender, los horizontes están en constante expansión. Si quieres permanecer en el mercado, ya sea que te dediques al diseño, al desarrollo o ambos, debes mantener &quot;mente de principiante&quot;, debes querer aprender cosas nuevas. Claro que no te volverás un experto en todo, pero al menos debes saber un poco de diseño, de desarrollo, de SEO, de estándares... esas son las cosas que marcarán la diferencia... o no.<br /><br /><br /><br />En fin, ni esta lista ni las que vienen pretenden -ni mucho menos- ser la última palabra sobre este tema, hay cosas que faltan, cosas que pueden profundizarse y quizá cosas inútiles. Si les place, me encantaría saber su opinión al respecto.<p><a href="http://www.cristalab.com/blog/8-consejos-para-enfrentar-un-proyecto-web-c74834l/#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=nnp9R8Kz5X8:yBvGwfIUrjY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=nnp9R8Kz5X8:yBvGwfIUrjY: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/nnp9R8Kz5X8" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 22 Jun 2009 22:29:01</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/8-consejos-para-enfrentar-un-proyecto-web-c74834l/</feedburner:origLink></item>
	    <item>
    	    <title>El algoritmo tras la hierba, su raiz mátematica y código</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/eOgLezZ0RwA/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/el-algoritmo-tras-la-hierba-su-raiz-matematica-y-codigo-c74768l/</guid>
	        <description><![CDATA[ Después de muchos días de trabajo sin descanso, el equipo de Cristalab logro mejorar notablemente sus algoritmos de seguridad y rendimiento en general, haciendo del mundo un lugar mejor.<br />
<br />
Este éxito se concluyo gracias al descubrimiento de una ecuación matemática extraída directamente de la planta «Cannabis sativa», ... ]]></description>

	        <dc:creator>M@U</dc:creator>
	        <category>actionscript</category>
	        <category>actionscript_3</category>
	        <category>wtf</category>
	        <category>ciencia</category>
	        <category>programacion</category>
	        
            <content:encoded><![CDATA[  Después de muchos días de trabajo sin descanso, el equipo de Cristalab logro mejorar notablemente sus algoritmos de seguridad y rendimiento en general, haciendo del mundo un lugar mejor.<br /><br />Este éxito se concluyo gracias al descubrimiento de una ecuación <a class="arti_link" href="http://www.cristalab.com/tags/matematicas/">matemática</a> extraída directamente de la planta <strong>«<em><a class="arti_link" href="http://es.wikipedia.org/wiki/Cannabis">Cannabis sativa</a></em>»</strong>, por lo que no es necesario señalar sus singulares efectos.<br /><br />Para deleite de los visitantes, hemos encapsulado un poco de su esencia en <a class="arti_link" href="http://www.cristalab.com/tags/actionscript_3/">Actionscript 3</a>, para que solo así puedan ser testigos de su misterioso poder. Solamente <strong>tienes que dar click en el recuadro</strong> para verla en acción:<br /><br /><div style="text-align:center;"><object width="450" height="350">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://mau.cristalab.com/wp-files/p/f6.swf####" />
	<embed src="http://mau.cristalab.com/wp-files/p/f6.swf####" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="450" height="350"></embed>
</object><br /><span style="font-size: 12px; line-height: normal"><span style="color: #888A85"> Si ves esto <a class="arti_link" href="http://www.cristalab.com/blog/google-reader-me-ha-hecho-bajar-de-peso-y-ser-mejor-amante-c38568l/">desde un lector de feeds</a>, puede que no veas lo de arriba. <a class="arti_link" href="http://bit.ly/TgfHC">Da click aquí para verlo</a>. Todo a través de una <em>aparentemente</em> sencilla ecuación</span></span></div><br />La mencionada ecuación, cabe destacar, está graficada en un plano de coordenadas polares, por lo que no esperes sea igual a las que respondías en el colegio: <p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">Polar&#58;
&#91;
&nbsp; &nbsp;&#40;1 + 0.9 * cos&#40;8 * i&#41;&#41; * &#40;1 + 0.1 * cos&#40;24 * i&#41;&#41; * &#40;0.9 + 0.05 * cos&#40;200 * i&#41;&#41; * &#40;1+sin&#40;i&#41;&#41;,
&nbsp; &nbsp;&#123;-&#960; &#8594; &#960;&#125;
&#93;;</pre> Esto, traducido a glorioso <a class="arti_link" href="http://www.cristalab.com/tags/actionscript_3/">ActionScript 3</a> seria similar a lo siguiente: <p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">// Primero declaramos el Sprite donde dibujar
var graph&#58;Sprite = new Sprite&#40;&#41;;
graph.graphics.beginFill&#40;0xC0C0B4&#41;;
graph.graphics.drawCircle&#40;0, 0, 5&#41;;
graphics.lineStyle&#40;1, 0xC0C0B4, 1&#41;;
graph.visible = false;
addChild&#40;graph&#41;;
// Estas variables las necesitaremos para trazar coordenadas en 
// el plano polar, y deshacernos del convencional plano cartesiano
// que esta por defecto en Flash 
var a&#58;Number = -10*Math.PI;
var theta&#58;Number = -Math.PI;
var r&#58;Number = 0;
// Función encargada que colocar el punto en el sitio indicado
function polar&#40;sprite&#58;Sprite&#41;&#58;void
&#123;
&nbsp; &nbsp;sprite.x = 10 * r * Math.cos&#40;theta&#41; + r;
&nbsp; &nbsp;sprite.y = 10 * r * Math.sin&#40;theta&#41; + r;
&#125;
// Una vez que tenemos todo listo, comenzamos a dibujar
addEventListener&#40;Event.ENTER_FRAME, listener&#41;;
function listener&#40;event&#58;Event&#41;&#58;void
&#123;
&nbsp; &nbsp;switch&#40;event.type&#41;
&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;// Recuperamos el evento ENTER_FRAME para comenzar a trabajar
&nbsp; &nbsp;&nbsp; &nbsp;case Event.ENTER_FRAME&#58;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if&#40;a &lt; 0&#41;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;a += 0.01;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;r = 10*&#40;1+.9*Math.cos&#40;8*a&#41;&#41;*&#40;1+.1*Math.cos&#40;24*a&#41;&#41;*&#40;.9+.05*Math.cos&#40;200*a&#41;&#41;*&#40;1+Math.sin&#40;a&#41;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;graphics.lineTo&#40;graph.x , graph.y&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125; else &#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;// Removemos el evento ENTER_FRAME una vez que hemos terminado
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;removeEventListener&#40;Event.ENTER_FRAME, listener&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;graph.visible = false;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;return;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;// Mientras la ecuación anterior trabaja, debemos desplazar poco a poco el angulo
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;polar&#40;graph&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;theta += 0.01;
&nbsp; &nbsp;&nbsp; &nbsp;break;
&nbsp; &nbsp;&#125;
&#125;</pre> Voilà..! Esto fue una probadita de la ingeniera detrás del funcionamiento de Cristalab, si no eres muy habilidoso aun con <a class="arti_link" href="http://www.cristalab.com/tags/actionscript/">actionscript</a>, puedes <a class="arti_link" href="http://mau.cristalab.com/f6/">descargar el archivo fuente directo <strong>aquí</strong></a>.<br /><br />La ecuación, por cierto, <a class="arti_link" href="http://twitter.com/mpancorbo/status/2237605432">nació en Twitter</a> y fue primero rendereada por el poder de <del>Skynet</del> <a class="arti_link" href="http://bit.ly/Vd3xU">Wolfram Alpha</a>.<p><a href="http://www.cristalab.com/blog/el-algoritmo-tras-la-hierba-su-raiz-matematica-y-codigo-c74768l/#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=eOgLezZ0RwA:CKiBKX-RaWU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=eOgLezZ0RwA:CKiBKX-RaWU: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/eOgLezZ0RwA" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Sat, 20 Jun 2009 20:56:56</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/el-algoritmo-tras-la-hierba-su-raiz-matematica-y-codigo-c74768l/</feedburner:origLink></item>
	    <item>
    	    <title>Cómo obtener el número de semana del año con Javascript</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/Kdcvj99oOnc/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/como-obtener-el-numero-de-semana-del-ano-con-javascript-c74740l/</guid>
	        <description><![CDATA[ Me encontraba en el dilema de averiguar el numero de la semana del año de una fecha dada mediante javascript, el motivo o porque es lo de menos, y me vi buscando una función propia de JavaScript que haga esto como la de la mayoría de lenguajes, grade fue mi sorpresa cuando me di cuenta que dicha función no existía, así... ]]></description>

	        <dc:creator>NeoCesar</dc:creator>
	        <category>javascript</category>
	        
            <content:encoded><![CDATA[  Me encontraba en el dilema de averiguar el numero de la semana del año de una fecha dada mediante <a class="arti_link" href="http://www.cristalab.com/tips/tags/javascript">javascript</a>, el motivo o porque es lo de menos, y me vi buscando una función propia de JavaScript que haga esto como la de la mayoría de lenguajes, grade fue mi sorpresa cuando me di cuenta que dicha función no existía, así que busque otra solución, busque aquí y allá encontré algunos alcances y al final logres sacar esta humilde función que espero resuelva para todos este:<br /><h2>Requerimientos</h2><ul><li> Conocimiento básico de Javascript<br /></li><li> Sentido Común<br /></li><li> Una pizca de concentración</li></ul><br /><h2>¿Cómo hacerlo?</h2>Más importante que el código para resolver el problema es el proceso volitivo de como resolverlo, aquí esta el como lo pensé:<br /><h3>Problema</h3><ol type="1"></li><li>Tenemos una fecha y no sabemos el numero de semana del año al que pertenece.</ol><br /><h3>Sabemos</h3><ol type="1"></li><li>Sabemos que el año tiene 52 semana.<br /></li><li> Que la semana empieza el Lunes.<br /></li><li> Que el año empieza el 1 de Enero.<br /></li><li> Que si el 1 de Enero no es Lunes entonces pertenece a la semana 52 del año anterior.<br /></li><li> Que a cada fecha le corresponde una marca de tiempo.<br /></li><li> Que las marcas de tiempo se operar matemáticamente ( + , - , * , / ).</ol><h3>Podemos</h3><ol type="1"></li><li>Obtener la marca de tiempo del 1 de Enero del mismo año de la fecha en cuestión.<br /></li><li> Obtener  la marca de tiempo de la fecha en cuestión.<br /></li><li> Compensar ambas fechas en caso que el 1 de Enero no sea Lunes.<br /></li><li> Restar ambas marcas de tiempo para obtener una nueva que represente al tiempo transcurrida entre ambas.<br /></li><li> Dividir esa marca de tiempo hasta obtener la unidad de tiempo deseada.</ol><br />Si fuera un poco más técnico se podría decir que sería el Algoritmo, y con estos pasos podemos resolver el mismo problema con cualquier lenguaje<br /><br /><h2>El Código</h2><br />Ahora lo resolveremos con JavaScript les dejo el resto de lenguajes a ustedes, el código este explicado paso a paso aqui que esten muy atentos:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo javascript">
// A esta funcion se le pasa el parametro en formato fecha
// dd/mm/yyyy o dd-mm-yyyy ambos son aceptados

function semanadelano&#40;$fecha&#41;&#123;
&nbsp; $const&nbsp; =&nbsp; &#91;2,1,7,6,5,4,3&#93;; 
&nbsp; // Constantes para el calculo del primer dia de la primera semana del año
&nbsp; &nbsp;
&nbsp; if &#40;$fecha.match&#40;/\//&#41;&#41;&#123;
&nbsp; &nbsp; $fecha&nbsp; &nbsp;=&nbsp; $fecha.replace&#40;/\//g,&quot;-&quot;,$fecha&#41;;
&nbsp; &#125;;
&nbsp; // Con lo anterior permitimos que la fecha pasada a la funcion este
&nbsp; // separada por &quot;/&quot; al remplazarlas por &quot;-&quot; mediante .replace y el uso
&nbsp; // de expresiones regulares
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; $fecha&nbsp; =&nbsp; $fecha.split&#40;&quot;-&quot;&#41;;
&nbsp; // Partimos la fecha en trozos para obtener dia, mes y año por separado
&nbsp; $dia&nbsp; &nbsp; =&nbsp; eval&#40;$fecha&#91;0&#93;&#41;;
&nbsp; $mes&nbsp; &nbsp; =&nbsp; eval&#40;$fecha&#91;1&#93;&#41;;
&nbsp; $ano&nbsp; &nbsp; &nbsp; &nbsp;=&nbsp; eval&#40;$fecha&#91;2&#93;&#41;;&nbsp; &nbsp;
&nbsp; if &#40;$mes!=0&#41; &#123;
&nbsp; &nbsp; $mes--;
&nbsp; &#125;;
&nbsp; // Convertimos el mes a formato javascript 0=enero
&nbsp; 
&nbsp; $dia_pri&nbsp; &nbsp;=&nbsp; new Date&#40;$ano,0,1&#41;; 
&nbsp; $dia_pri&nbsp; &nbsp;=&nbsp; $dia_pri.getDay&#40;&#41;;
&nbsp; // Obtenemos el dia de la semana del 1 de enero
&nbsp; $dia_pri&nbsp; &nbsp;=&nbsp; eval&#40;$const&#91;$dia_pri&#93;&#41;;
&nbsp; // Obtenemos el valor de la constante correspondiente al día
&nbsp; $tiempo0&nbsp; &nbsp;=&nbsp; new Date&#40;$ano,0,$dia_pri&#41;;
&nbsp; // Establecemos la fecha del primer dia de la semana del año
&nbsp; $dia&nbsp; &nbsp; &nbsp; &nbsp;=&nbsp; &#40;$dia+$dia_pri&#41;;
&nbsp; // Sumamos el valor de la constante a la fecha ingresada para mantener 
&nbsp; // los lapsos de tiempo
&nbsp; $tiempo1&nbsp; &nbsp;=&nbsp; new Date&#40;$ano,$mes,$dia&#41;;
&nbsp; // Obtenemos la fecha con la que operaremos
&nbsp; $lapso&nbsp; &nbsp; &nbsp;=&nbsp; &#40;$tiempo1 - $tiempo0&#41;
&nbsp; // Restamos ambas fechas y obtenemos una marca de tiempo
&nbsp; $semanas&nbsp; &nbsp;=&nbsp; Math.floor&#40;$lapso/1000/60/60/24/7&#41;;
&nbsp; // Dividimos la marca de tiempo para obtener el numero de semanas
&nbsp; &nbsp;
&nbsp; if &#40;$dia_pri == 1&#41; &#123;
&nbsp; &nbsp; $semanas++;
&nbsp; &#125;;
&nbsp; // Si el 1 de enero es lunes le sumamos 1 a la semana caso contrarios el
&nbsp; // calculo nos daria 0 y nos presentaria la semana como semana 52 del 
&nbsp; // año anterior
&nbsp; &nbsp;
&nbsp; if &#40;$semanas == 0&#41; &#123;
&nbsp; &nbsp; $semanas=52;
&nbsp; &nbsp; $ano--;
&nbsp; &#125;;
&nbsp; // Establecemos que si el resultado de semanas es 0 lo cambie a 52 y 
&nbsp; // reste 1 al año esto funciona para todos los años en donde el 1 de 
&nbsp; // Enero no es Lunes
&nbsp; &nbsp;
&nbsp; if &#40;$ano &lt; 10&#41; &#123;
&nbsp; &nbsp; $ano = '0'+$ano;
&nbsp; &#125;;
&nbsp; // Por pura estetica establecemos que si el año es menor de 10, aumente 
&nbsp; // un 0 por delante, esto para aquellos que ingresen formato de fecha
&nbsp; // corto dd/mm/yy
&nbsp; &nbsp;
&nbsp; alert&#40;$semanas+&quot; - &quot;+$ano&#41;;
&nbsp; // Con esta sentencia arrojamos el resultado. Esta ultima linea puede ser
&nbsp; // cambiada a gusto y conveniencia del lector 
&#125;;</pre><br />Si encuentran algún error favor de hacerlo saber <img src="/foros/images/smiles/icon_lol.gif" alt="xD" border="0" />, espero les halla sido de mucha utilidad.<p><a href="http://www.cristalab.com/tips/como-obtener-el-numero-de-semana-del-ano-con-javascript-c74740l/#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=Kdcvj99oOnc:fMExKW1tdl4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=Kdcvj99oOnc:fMExKW1tdl4: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/Kdcvj99oOnc" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Fri, 19 Jun 2009 17:46:01</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/como-obtener-el-numero-de-semana-del-ano-con-javascript-c74740l/</feedburner:origLink></item>
	    <item>
    	    <title>Android, Palm Pre, Flash y el futuro de internet</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/B7mKlWSByEE/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/android-palm-pre-flash-y-el-futuro-de-internet-c73562l/</guid>
	        <description><![CDATA[ Hoy se lanzó la Tienda Ovi de Nokia. Una tienda de aplicaciones para todo tipo de celulares Nokia, igual que la App Store de Apple. El iPhone demostró que se pueden construir bien estos mercados, luego siguió Blackberry y Google con Android. <br />
<br />
Google nos regaló un Android la semana pasada, de la mano de Alejandro Vil... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>palm</category>
	        <category>internet</category>
	        <category>android</category>
	        <category>flashlite</category>
	        <category>moviles</category>
	        <category>telefonos</category>
	        <category>webkit</category>
	        <category>pre</category>
	        <category>navegadores</category>
	        <category>3.0</category>
	        
            <content:encoded><![CDATA[  Hoy se lanzó la <a class="arti_link" href="https://store.ovi.com/">Tienda Ovi de Nokia</a>. Una tienda de aplicaciones para todo tipo de celulares Nokia, igual que la App Store de Apple. El <strong>iPhone</strong> demostró que se pueden construir bien estos mercados, luego siguió <strong>Blackberry</strong> y Google con <strong><a class="arti_link" href="http://www.cristalab.com/tags/android/">Android</a></strong>. <br /><br /><a class="arti_link" href="http://twitter.com/freddier/status/1877579048">Google nos regaló un <strong>Android</strong> la semana pasada</a>, de la mano de <strong><a class="arti_link" href="http://www.maestrosdelweb.com/editorial/como-ve-google-a-los-desarrolladores-en-latinoamerica/">Alejandro Villanueva</a></strong>. El teléfono es un <strong>G1</strong> desbloqueado para desarrolladores. Su apariencia es fea y de juguete, pero su funcionalidad no se compara ni de lejos con el <strong>iPhone</strong>. No tiene multitouch, pero es mucho más usable. El GPS es real y no requiere plan de datos. Tiene una brújula interna real que incluso puede ser usada como detector de metales. La cámara es mejor y puede grabar video. El bluetooth es completo y sí, tiene copypaste.<br /><br /><h2>El renacimiento del software móvil</h2><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.wayerless.com/wp-content/uploads/2008/12/dev1.png" border="0" /></div><br />Pero lo importante son las aplicaciones. El <strong>Android</strong> <a class="arti_link" href="http://www.android.com/market/">Marketplace</a> está lleno de aplicaciones para el teléfono, programadas en Java, bastante interesantes. Completos sitios web en modo &quot;aplicación&quot;, pequeños widgets y aplicaciones enteras de productividad. El Bank of America tiene una versión nativa para <strong>Android</strong> y <strong>iPhone</strong>. Gmail corre mejor en la aplicación nativa que en la versión web. Hasta MySpace está en <strong>Android</strong> y Facebook en <strong>iPhone</strong>. Y donde <strong>Android</strong> es Java, <strong>iPhone</strong> es <a class="arti_link" href="http://www.cristalab.com/tutoriales/fundamentos-de-programacion-para-iphone-c260l/">Objective C</a> que es como un Java más feo.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://thepalm-pre.net/wp-content/uploads/2009/03/the-palm-pre.jpg" border="0" /></div><br />Y entonces tenemos <a class="arti_link" href="http://gizmodo.com/5133554/palm-pre-the-definitive-guide-and-faq?skyline=true&amp;s=x">la <strong>Palm Pre</strong></a>, que sale la próxima semana, <strong>dos días antes del iPhone 3</strong>. Yo <a class="arti_link" href="http://www.cristalab.com/blog/de-handhelds-accesibilidad-y-webs-c11l/">amo a Palm desde hace años</a>, a pesar de las cagadas e idiotez corporativa. <strong>Palm Pre</strong> tendrá una tienda de aplicaciones de entrada. El SDK para desarrollarlas será <a class="arti_link" href="http://www.cristalab.com/tags/html/">HTML</a>, <a class="arti_link" href="http://www.cristalab.com/tags/css/">CSS</a> y <a class="arti_link" href="http://www.cristalab.com/tags/javascript/">Javascript</a>, además de un framework de JS para acceder a hardware de bajo nivel, igual que <a class="arti_link" href="http://www.cristalab.com/tags/air/">Adobe AIR</a>. <br /><br />Quiero sinceramente que <strong>Palm Pre</strong> tenga éxito, a pesar de no ser 3G aun y arrancar en una red tan rara como la EVDO de Sprint. Pero al mismo tiempo veo que todos van en el mismo sentido. Muchas plataformas, la mayoría montada sobre estándares web o abiertos, muy poderosas, muy móviles. Y ya están cambiando el mundo.<br /><br /><h2>El cambio, las nuevas tribus los turistas perdidos</h2><br /><div style="text-align:center;"><img class="imgBlog" src="http://farm4.static.flickr.com/3233/2960861483_a0520e1a78.jpg" border="0" /></div><br />Cuando hace unos años veías turistas con mapas y papeles, ahora los ves con <strong>iPhones</strong>, GPS y twitter. Las reuniones sociales, manifestaciones políticas y hasta las noches de desvelo de gente triste y solitaria se pueden ver en uStream o QIK desde cualquier celular con wifi. Donde antes los profesores odiaban los SMS en clase, ahora ves a algunos &quot;entendiendo&quot; y animando la colaboración social por twitter y facebook en los exámenes. La gente normal empieza a &quot;entender&quot; internet. Empieza a admitir que nada será igual y a crear un cambio social gigante que sin duda va más allá del primer mundo y está expandiéndose por la web hispana.<br /><br />Como predije hace un año, el <a class="arti_link" href="http://www.cristalab.com/blog/cinco-cosas-que-el-iphone-cambiara-en-latinoamerica-c60233l/"><strong>iPhone</strong> cambió nuestros mercados latinos</a>. Al punto que los planes de datos en latinoamerica son mucho mejores que en Estados Unidos (incluso México, aunque por poco). Conseguir SIM prepago con datos incluidos es muy fácil y los precios cada vez más asequibles. Si lo dudas o crees que es mentira, es porque no has preguntado bien en tus proveedores locales (si estás en Costa Rica o Venezuela... sorry, tienes razón). Android pronto llegará a nuestras tierras con el <strong>HTC Magic</strong> que ya está en España. La <strong>Palm Pre</strong> puede tardar un año más, pero el <strong>iPhone 3</strong> será un lanzamiento internacional. <br /><br /><h2>La muerte, irrelevancia y resurrección de Flash</h2><br />En el momento que <strong>Android Marketplace</strong>, <strong>Palm Apps</strong> y <strong>Ovi</strong> de <strong>Nokia</strong> empiecen a tomar tracción con sus politicas de apertura y libertad, la <strong>App Store</strong> del <strong>iPhone</strong> soltará un poco sus cadenas opresoras y empezará a permitir mejores cosas. Apple historicamente siempre se ha aprovechado cuando está en una posición de liderazgo. Pero lo interesante será el papel que juega Flash en todo esto.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.blogcdn.com/www.downloadsquad.com/media/2009/04/flash-tv.jpg" border="0" /></div><br />Flash ha estado en caída libre en los últimos años. Siendo relegado a video y hotsites, donde antes era también usado en otros tipos de webs. Flex tiene un amplio uso en intranets, pero fuera de Grooveshark y algunas otras aplicaciones &quot;2.0&quot;, no se ve mucho por Internet. <a class="arti_link" href="http://www.cristalab.com/tags/jquery/">jQuery</a> ha sido tan exitoso y disciplinado en sus extensión de la interacción en el navegador, que Flash se vuelve cada vez más irrelevante.<br /><br />Pero en los móviles de última generación, Flash puede encontrar su nicho. <strong>Palm Pre</strong> y <strong>Android</strong> no tienen SDKs de desarrollo de juegos del nivel del <strong>iPhone</strong>. E incluso en Objective C es un hecho que hacer un juego visual para <strong>iPhone</strong> es un dolor de huevos. Flash es la herramienta ideal para desarrollo de videojuegos de la próxima generación de entretenimiento móvil en dispositivos móviles. Google y Palm <a class="arti_link" href="http://www.blocketpc.com/2009/03/29/android-soportara-flash-en-breve/">han confirmado que veremos el Flash Player 10 en sus dispositivos</a>. Apple no ha dicho nada, pero eventualmente, aunque sea tarde, cederán. Mientras Adobe no cometa errores y quizás vuelva open source al Flash Player, todo esto ocurrirá. Pero hay que tener demasiados huevos para que Adobe se atreva.<br /><br /><h2>El futuro de Internet</h2><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/augmented-reality-1243334842_full550.jpg" border="0" /></div><br /><strong>En tres años, la web será irreconocible</strong>. Sistemas como Cristalab se verán como hoy vemos los portales tipo Terra, Starmedia o UOL. Los sitios web standalone se mueven a APIs abiertas, sistemas interconectados y descubrimiento de información en tiempo real. Las noticias, servicios y datos altamente selectivos, enfocados al perfil de cada usuario y enriquecidos por la geolocalización harán de nuestro futuro algo tan extraño que sólo hay que visitar ciudades como San Francisco o Silicon Valley hoy para ver el potencial de lo que estás habilidades pueden hacer. <br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/uploads/cyberbrain-hacked-body-error-1243334915_full550.jpg" border="0" /></div><br />Y esta formula sólo necesita tres ingredientes. Un teléfono poderoso y usable, servicios web abiertos y un plan de datos confiable. Todo ya existe.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://farm4.static.flickr.com/3273/3117582535_dc5bc920aa.jpg" border="0" /></div><br />Este es el último llamado para tomar todos los riesgos, <a class="arti_link" href="http://www.cristalab.com/blog/internet-movil-llego-las-agencias-web-no-lo-notan-c67460l/">apostar por la web en movimiento</a> o perder la oportunidad, de nuevo, de ser parte del cambio del mundo.<p><a href="http://www.cristalab.com/blog/android-palm-pre-flash-y-el-futuro-de-internet-c73562l/#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=B7mKlWSByEE:cfZY_qTFF2I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=B7mKlWSByEE:cfZY_qTFF2I: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/B7mKlWSByEE" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 26 May 2009 05:56:24</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/android-palm-pre-flash-y-el-futuro-de-internet-c73562l/</feedburner:origLink></item>
	    <item>
    	    <title>Marketing para elegidos medievales: 3. El Destino.</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/-l60xWbwcdQ/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/marketing-para-elegidos-medievales-3.-el-destino.-c73543l/</guid>
	        <description><![CDATA[ Esta es el final. La tercera parte de "Marketing para elegidos medievales". Para entender la historia, no olvides leer la primera parte, Abramica  y la segunda parte, Zeroica.<br />
<br />
3. El Destino<br />
 - ¡Magalia! - gritan Phil y Federicus al unísono.<br />
 - Llevo más de cuatro años esperando esto. Invertí lo que me qu... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>divertido</category>
	        <category>FNAP</category>
	        <category>phil</category>
	        
            <content:encoded><![CDATA[  <em>Esta es el final. La tercera parte de &quot;<strong>Marketing para elegidos medievales</strong>&quot;. Para entender la historia, no olvides leer la primera parte, <a class="arti_link" href="http://www.cristalab.com/blog/marketing-para-elegidos-medievales-1.-abramica.-c71820l/">Abramica</a>  y la segunda parte, <a class="arti_link" href="http://www.cristalab.com/blog/marketing-para-elegidos-medievales-2.-zeroica.-c73149l/">Zeroica</a></em>.<br /><br /><h2>3. El Destino</h2><br /> - ¡Magalia! - gritan Phil y Federicus al unísono.<br /> - Llevo más de cuatro años esperando esto. Invertí lo que me quedaba de magia del destino en convertirte en El Elegido - dijo Magalia exasperada -. ¿Y ahora me sales con que te quieres suicidar?<br /> - ¿Tu creaste a Phil para matarme? - preguntó Federicus con voz entrecortada y herida.<br /> - Argh. ¡Niños! Yo te lo di todo, Federicus. La mitad de mi magia del destino para convertirte en el rey y la mitad de mi vida para que esa espada, Zeroica, te mantuviera en el curso del destino.<br /> - Entonces a mi... - interrumpió Phil.<br /> - A ti también te lo di todo, Phil - dijo Magalia -. La mitad que me quedaba de la magia para hacerte El Elegido y la mitad de mi vida en Abramica para mantenerte en curso.<br /> - ¿Por qué?<br /> - Los porqués no importan. ¡Empiecen a matarse!<br /><br />Phil se sentía especialmente ultraviolento, tras todo el asesinato y muerte para llegar hasta ese punto. Dejó salir un profundo suspiro, agarró su espada y la puso en el cuello de la bruja.<br /><br /> - Nos vas a explicar ya mismo o te haré caso y seguirá tu muerte en la lista.<br /> - ¿No escuchaste nada de lo que te dije? - preguntó Magalia -. Por eso tuve que engañarte todo el tiempo. Eras el fuerte, pero no el inteligente Phil. Abramica sólo representa la mitad de mi fuerza de vida, no me puedes matar sólo con esa espada.<br /> - ¿Qué hay entonces si yo también quiero escuchar la verdad? - amenazó Federicus, apuntando a la bruja con el filo de Zeroica.<br /><br />La bruja revisó la situación y reconoció que debió planear esto antes de aparecerse en el salón del trono. Se sentó en el suelo y sacó dos pergaminos viejos de entre su pecho. Las declaraciones del destino de Phil y Federicus. <br /><br /> - No, ustedes no son hermanos, ni primos, ni lazos raros familiares que generen sorpresa de ultimo momento - empezó Magalia -. Todo empieza con Sierra, la madre de Federicus. Era una cortesana de poco poder en la corte del anterior rey. Yo acababa de heredar la magia del destino tras la muerte de mi madre. No conocía el mercado y Sierra era mi primera clienta. Tienen que entenderme.<br /><br />Phil y Federicus dejaron de apuntar sus espadas a Magalia y escucharon con atención.<br /><br /> - Sierra quería un gran futuro para su hijo. Me convenció de trabajar probono y crear una declaración de destino. El destino es una cosa complicada. Hay reglas de acuerdo a los premios y riquezas que prometa y precios que pagar. Sierra quería que su hijo fuera un rey y los reyes tienen enemigos mortales. Creé el destino, siendo Federicus el rey y su enemigo el fruto de una mujer que cabalgaba en un pony cerca de mi casa. <br /> - ¿Mi madre? - preguntó Phil.<br /> - Sí. Supongo. No me importó mucho el enemigo en ese momento. Es un requerimiento de la formula y un seguro de pago en caso que Sierra me embaucara. <br /> - Si mi madre no tenía mucho poder - dijo Federicus -. ¿Con qué te pagó?<br /> - Te dije que era probono. Me pagó con el 10% de los ingresos que generara el reino bajo tu mandato.<br /><br />Federicus se llevó la mano a la cara y asintió triste. <br /><br /> - ¬¡El reino a duras penas se mantiene con una deuda externa! Eso tiene a los demás países a las puertas de una guerra mundial en mi contra - acertó Federicus.<br /> - ¡Exactamente! - gritó Magalia -. Eres un incompetente debilucho incapaz de apretar un poco a su pueblo para pagarme como es debido. Así que después de diez años de tristes ganancias, me cansé de esperarte. Creé tu campaña de maldad para empujarte un poco a mejorar los dividendos del reino. Ordené en tu nombre un par de masacres y cuando nada más dio resultado, decidí activar a tu enemigo. <br /> - ¿Entonces los últimos seis años de mi vida han sido para vengarte de Sierra? - preguntó Phil. <br /> - ¡Eso quisiera yo! - dijo Magalia cansada -. El destino hace que el universo conspire para que cumplas tu misión, pero cada persona decide qué hacer con su vida. Te quedaste un año entero en tu pueblito pensando si te hablaba en serio. ¡Tuve que masacrar tu familia en nombre del rey para que te movieras! Luego conociste al drogadicto de Eduardo y a la inútil de Andarela. Sexo y drogas por tres años. ¡Tres años! Si no se hubieran muerto, seguirías de fiesta sin cumplir con tu destino.<br /><br />Un silencio incomodo se mantuvo en la sala. Phil, Magalia y Federicus se miraban entre ellos. Ninguno muy seguro de qué hacer a continuación. Magalia se rascó la cabeza, volteó sus ojos en desaprobación, tomó las puntas de ambas espadas con sus manos y las apuntó a su pecho.<br /><br /> - ¡Mátenme!<br /> - ¿Qué? - preguntaron Phil y Federicus.<br /> - Miren, gasté toda mi magia del destino en darles a ustedes las dos estupidas declaraciones. Mi magia sólo vuelve si cumplen las profecías. Si ninguno va a matar al otro, estoy jodida. Soy inmortal como ustedes hasta que las dos fuerzas de mi vida, Abramica y Zeroica, me asesinen. <br /> - No - dijo Federicus -. Todo esto no tiene sentido. Pudiste incluir en las declaraciones de destino que yo definitivamente iba a morir a manos de Phil o que Phil definitivamente me iba a matar o... no sé, esto suena a que te lo inventaste en el camino.<br /> - Mira niño, te puedo explicar en aburridísimos detalles las reglas oscuras e indescifrables de cómo funciona el destino. Contar el ritual con el que mi madre me heredó el poder y explicar con eso porqué todo esto tiene sentido. Pero si lo hago va a sonar a que me estoy inventando mierda para poder terminar la historia. Así que por qué no me matan y acaban con esto de una vez.<br /> - ¡Bah! Hagan lo que quieran - dijo Phil lanzando su espada al suelo y saliendo de la habitación -. Me voy al bar a vivir la vida.<br /> - Yo también - dijo Federicus yéndose tras Phil.<br /><br />Magalia se quedó sola, sentada frente a las dos espadas que representaban sus contratos y enlaces con el par de idiotas que habían hecho de sus últimos dieciséis años un infierno. Tomó a Abramica y a Zeroica, hizo un rápido encantamiento y, ahora que eran suyas, rompió los contratos y las convirtió de vuelta en energía de vida. Se rió discretamente de los dos muchachos, se robó tanto oro como pudo encontrar en el salón del trono y desapareció jurando jamás volver a trabajar probono.<br /><br />_____________<br /><br /><em>Inspirado en una vida de saturación de cultura pop medieval mágica. Fuck you Dio. Fuck you Tolkien.</em><br /><a class="arti_link" href="http://www.cristalab.com/tags/phil/">Marketing para elegidos medievales</a>.<p><a href="http://www.cristalab.com/blog/marketing-para-elegidos-medievales-3.-el-destino.-c73543l/#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=-l60xWbwcdQ:rl0Wf_32RDo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=-l60xWbwcdQ:rl0Wf_32RDo: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/-l60xWbwcdQ" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 25 May 2009 16:50:33</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/marketing-para-elegidos-medievales-3.-el-destino.-c73543l/</feedburner:origLink></item>
	    <item>
    	    <title>Videotutorial de fondo decorativo en Flash</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/qw-HknzHw3o/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/videotutorial-de-fondo-decorativo-en-flash-c73530l/</guid>
	        <description><![CDATA[ En éste videotutorial de Flash crearemos un fondo con un estilo de estrella y duplicaremos rectángulos con degradados para lograr el efecto deseado.<br />
Link de tutorial en HD... ]]></description>

	        <dc:creator>FlashFacilito</dc:creator>
	        <category>flash</category>
	        <category>videotutorial</category>
	        <category>dibujo</category>
	        
            <content:encoded><![CDATA[  En éste <a class="arti_link" href="http://www.cristalab.com/tags/videotutorial/">videotutorial</a> de <a class="arti_link" href="http://www.cristalab.com/tags/flash/">Flash</a> crearemos un fondo con un estilo de estrella y duplicaremos rectángulos con degradados para lograr el efecto deseado.<br /><br /><div style="text-align:center;"><object width="425" height="355">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.youtube.com/v/wT-3xgQM5fI&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" />
	<embed src="http://www.youtube.com/v/wT-3xgQM5fI&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="425" height="355"></embed>
</object></div><br /><br /><a class="arti_link" href="http://www.youtube.com/watch?v=wT-3xgQM5fI">Link de tutorial en HD</a><p><a href="http://www.cristalab.com/tips/videotutorial-de-fondo-decorativo-en-flash-c73530l/#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=qw-HknzHw3o:DEI0qP1BX98:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=qw-HknzHw3o:DEI0qP1BX98: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/qw-HknzHw3o" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Mon, 25 May 2009 13:23:40</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/videotutorial-de-fondo-decorativo-en-flash-c73530l/</feedburner:origLink></item>
	    <item>
    	    <title>Crear aplicación "Hello World" en Facebook con PHP</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/3gKQNa6EZPA/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/crear-aplicacion-hello-world-en-facebook-con-php-c73492l/</guid>
	        <description><![CDATA[ En estos días comencé a probar la API de Facebook y me anime a crear este tip que consiste en crear una aplicación que muestra un "Hello World" en Facebook utilizando PHP.<br />
<br />
Para poder crear aplicaciones en Facebook necesitamos estar registrados en la comunidad, ya registrados nos unimos al grupo de develope... ]]></description>

	        <dc:creator>psycho-vnz</dc:creator>
	        <category>php</category>
	        <category>2.0</category>
	        <category>facebook</category>
	        
            <content:encoded><![CDATA[  En estos días comencé a probar la API de Facebook y me anime a crear este tip que consiste en crear una aplicación que muestra un &quot;Hello World&quot; en Facebook utilizando PHP.<br /><br />Para poder crear aplicaciones en <a class="arti_link" href="http://www.facebook.com/">Facebook</a> necesitamos estar registrados en la comunidad, ya registrados nos unimos al grupo de <a class="arti_link" href="http://www.facebook.com/developers/">developers</a>.  Al entrar al grupo nos va a preguntar si permitimos que acceda a nuestro perfil como cuando agregamos cualquier aplicación, luego de aceptar podremos crear aplicaciones, acceder al foro y otras funcionalidades.<br /><br />Cuando creamos aplicaciones en Facebook hay que saber que la aplicación que creamos no residen en los servidores de Facebook(el código fuente), sino en un servidor publico común y corriente.  Cuando utilizamos aplicaciones creadas por terceros o creamos nuestras propias aplicaciones, Facebook lo que hace es pasar esas solicitudes a otros servidores que procesan los datos e imprimen una respuesta que es leída por Facebook y mostrada al cliente.<br /><br /><img class="imgBlog" src="http://www.cristalab.com/images/tips/php/facebook/facebook_arq.jpg" border="0" /><br /><br />Este tip estará dividido en dos pasos:<br /><ol type="1"><br />   </li><li>Crear y configurar la aplicación en Facebook.<br />   </li><li>Subir archivos al servidor, configurar, programar y probar.<br /></ol><br /><h2>Paso 1: Crear y configurar la aplicación en Facebook</h2><br /><br />En la pagina de <a class="arti_link" href="http://www.facebook.com/developers/">developers</a> existe un botón que dice <strong>Set Up New Application</strong>, ese botón es el que nos permite crear y configurar nuestra aplicación.  Allí nos encontramos con un formulario que nos solicita el nombre que llevara nuestra aplicación y si aceptamos las políticas de uso.<br /><br /><a class="arti_link" href="http://www.cristalab.com/images/tips/php/facebook/image1.jpg"><img class="imgBlog" src="http://www.cristalab.com/images/tips/php/facebook/image1_small.jpg" border="0" /></a><br /><br /><a class="arti_link" href="http://www.cristalab.com/images/tips/php/facebook/image2.jpg"><img class="imgBlog" src="http://www.cristalab.com/images/tips/php/facebook/image2_small.jpg" border="0" /></a><br /><br />Luego de crear la aplicación nos queda configurar ciertos parámetros como el URL de la aplicación en Facebook, la ruta del servidor en donde residen los archivos de la aplicación que va a responder a las peticiones hechas por Facebook, imagen e icono que identifica a la aplicación, etc.<br /><h3>Basic:</h3><br /><br />En esta sección asignamos el nombre de nuestra aplicación, descripción, icono, logo, idioma, desarrolladores que estan relacionados con la aplicación, etc.<br /><br />También podemos notar que aparece un Application ID, API KEY y Secret<br /><ul><br />   </li><li>Application ID: es el identificador único de nuestra aplicación.<br />   </li><li>API KEY: llave privada para acceso al API.<br />   </li><li>Secret: códido secreto de nuestra aplicación.<br /></li></ul><br /><a class="arti_link" href="http://www.cristalab.com/images/tips/php/facebook/image3.jpg"><img class="imgBlog" src="http://www.cristalab.com/images/tips/php/facebook/image3_small.jpg" border="0" /></a><br /><h3>Autenticaction:</h3><br />La primera opción indica a que tipo de perfil puede ser instalada la aplicación.<br /><br />El punto mas importante a notar en esta sección es el campo Post-Authorize Callback URL, esta ruta indica en donde se encuentra alojada nuestra aplicación.<br /><br /><a class="arti_link" href="http://www.cristalab.com/images/tips/php/facebook/image4.jpg"><img class="imgBlog" src="http://www.cristalab.com/images/tips/php/facebook/image4_small.jpg" border="0" /></a><br /><h3>Canvas:</h3><br />En el canvas configuramos la dirección de la aplicación en Facebook y el Callback URL de la aplicación.<br /><br /><a class="arti_link" href="http://www.cristalab.com/images/tips/php/facebook/image5.jpg"><img class="imgBlog" src="http://www.cristalab.com/images/tips/php/facebook/image5_small.jpg" border="0" /></a><br /><br />Con la configuración de estos parámetros podemos continuar al siguiente paso que sera subir los archivos a nuestro servidor, programar el mensaje y probar <img src="/foros/images/smiles/icon_sunrise.gif" alt=":D" border="0" /><br /><h2><br />Paso 2: Subir archivos al servidor, configurar, programar y probar.</h2><br /><br />Antes de comenzar a programar, vamos a <a class="arti_link" href="http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz">descargar</a> las librerías PHP que nos permitirán interactuar con el API de Facebook.<br /><br />La estructura en mi servidor es la siguiente:<br /><br /><a class="arti_link" href="http://www.cristalab.com/images/tips/php/facebook/flies.jpg"><img class="imgBlog" src="http://www.cristalab.com/images/tips/php/facebook/flies_small.jpg" border="0" /></a><br /><br />En la carpeta includes se encuentran las librerías descargadas y un archivo llamado facebook_config.php, creado por mí, el cual tendrá como contenido el API KEY de nuestra aplicación, el código secreto(Secret), además de una instancia de la clase “Facebook” seguido de una variable que tiene el id del usuario que este utilizando la aplicación.<br /><br />Archivo facebook_config.php:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo php">
&lt;?php
/**
* @Archivo que contiene los parametros de configuración &quot;facebook_config.php&quot;
* @versión&#58; 1.0
* @autor&#58; Psycho
*/

require_once 'facebook-platform/php/facebook.php';

// codigo&#40;KEY&#41; que identifica a nuestra aplicación y es utilizadas en cada llamada a Facebook
$appapikey = 'Coloca tu API Key aquí';

// llave privada para autenticar la aplicación en el servidor de Facebook
$appsecret = 'Coloca tu Application Secret aquí';

// Crear una instancia del objeto Facebook
$facebook = new Facebook&#40;$appapikey, $appsecret&#41;;

// Obtener el id del usuario que este utilizando la aplicación
$id_usuario = $facebook-&gt;require_login&#40;&#41;;
?&gt;
</pre><br /><br />El ultimo paso es crear el archivo index.php que sera la aplicación como tal, este archivo va a ser que el maneja la instancia del objeto Facebook que se encuentra en el archivo facebook_config.php e imprime “Hello World”.<br /><br />Archivo index.php<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo php">
&lt;?php
/**
* @Archivo que imprime Hello Wold al usuario que utiliza la aplicación &quot;index.php&quot;
* @versión&#58; 1.0
* @autor&#58; Psycho
*/

// Llamar el archivo que contiene los parametros de configuración y obtine el id del usuario
require_once 'includes/facebook_config.php';
?&gt;

Hello World &lt;fb&#58;name uid=&quot;&lt;?php echo $id_usuario; ?&gt;&quot; useyou=&quot;false&quot; /&gt;
</pre><br /><br />Luego de configurar la aplicación en Facebook, programar los archivos y subirlos al servidor nos queda probarla, en mi caso voy a la dirección <a class="arti_link" href="http://apps.facebook.com/psychotuto/">http://apps.facebook.com/psychotuto/</a> y lo primero que deberías es ver una pagina parecida a esta en donde aceptas que la aplicación acceda a tus datos.<br /><br /><a class="arti_link" href="http://www.cristalab.com/images/tips/php/facebook/image6.jpg"><img class="imgBlog" src="http://www.cristalab.com/images/tips/php/facebook/image6_small.jpg" border="0" /></a><br /><br />Luego de aceptar allí, podemos ver nuestra primera aplicación en Facebook:<br /><br /><a class="arti_link" href="http://www.cristalab.com/images/tips/php/facebook/image7.jpg"><img class="imgBlog" src="http://www.cristalab.com/images/tips/php/facebook/image7_small.jpg" border="0" /></a><p><a href="http://www.cristalab.com/tips/crear-aplicacion-hello-world-en-facebook-con-php-c73492l/#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=3gKQNa6EZPA:CBiojYcfTFA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=3gKQNa6EZPA:CBiojYcfTFA: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/3gKQNa6EZPA" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Sun, 24 May 2009 18:46:45</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/crear-aplicacion-hello-world-en-facebook-con-php-c73492l/</feedburner:origLink></item>
	    <item>
    	    <title>Clase de PHP para crear galerías dinámicas</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/f94JdeBiM_s/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/clase-de-php-para-crear-galerias-dinamicas-c73470l/</guid>
	        <description><![CDATA[ Hace poco cree una clase mediante la cual se puede dinámicamente crear thumbnails de imágenes mediante php. Una utilidad que se le podría dar a esta clase sería la siguiente.<br />
<br />
Cuando queremos crear una galería de imágenes en un sitio web comúnmente nos encontramos con varias tareas, en el caso que sea dinámica nuestr... ]]></description>

	        <dc:creator>elchininet</dc:creator>
	        <category>php</category>
	        <category>clases</category>
	        
            <content:encoded><![CDATA[  Hace poco cree <a class="arti_link" href="http://foros.cristalab.com/clase-de-php-para-crear-thumbnails-de-imagenes-t73376/">una clase</a> mediante la cual se puede dinámicamente crear <a class="arti_link" href="http://es.wikipedia.org/wiki/Thumbnail">thumbnails</a> de imágenes mediante <a class="arti_link" href="http://www.cristalab.com/tags/php/">php</a>. Una utilidad que se le podría dar a esta clase sería la siguiente.<br /><br />Cuando queremos crear una galería de imágenes en un sitio web comúnmente nos encontramos con varias tareas, en el caso que sea dinámica nuestra página, debemos crear en una base de datos o un documento xml una lista con el camino a las imágenes que vamos a utilizar y por último programar un fichero mediante un lenguaje de backend que lea esta lista y la distribuya correctamente en el espacio que deseamos, y en el caso que nuestra página sea estática crear dos versiones de las imágenes (una pequeña y otra la que se va a mostrar), crear a mano cada uno de los espacios para las imágenes y después programar el vínculo a cada una de las versiones grandes. Cualquiera de las dos maneras nos lleva algo de trabajo.<br /><br />El propósito de esta clase es reducir el tiempo de trabajo a la hora de crear una galería de imágenes, podríamos crear una galería en un momento con sólo 4 líneas de código php. Sólo deberíamos indicarle una carpeta que contenga imágenes y podemos mostrar todas estas en el lugar que queramos.<br /><br />
<div class="cita">
Esta clase utiliza <a class="arti_link" href="http://docs.jquery.com/Downloading_jQuery">jQuery</a> y <a class="arti_link" href="http://leandrovieira.com/projects/jquery/lightbox/">jQuery lightBox plugin</a> para ampliar las imágenes. Y por otro lado <a class="arti_link" href="http://foros.cristalab.com/clase-de-php-para-crear-thumbnails-de-imagenes-t73376/">la clase thumbs</a> y el fichero <strong>show_thumb.php</strong> (Contenido en los archivos del tip) para crear el thumbnail de cada imagen.
</div>
<br /><h2>Fichero gallery.php</h2><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo php">
&lt;?
class gallery &#123;
&nbsp; &nbsp;var $files = array&#40;&#41;;
&nbsp; &nbsp;var $path;
&nbsp; &nbsp;
&nbsp; &nbsp;function loadFolder&#40;$path&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;$this-&gt;path = $path;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;//---Guardar en un arreglo todos los archivos en el directorio&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;$folder = opendir&#40;$this-&gt;path&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;while &#40;$fil = readdir&#40;$folder&#41;&#41; &#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;//---Si no es un directorio
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if&#40;!is_dir&#40;$fil&#41;&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$arr = explode&#40;'.', $fil&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if&#40;count&#40;$arr&#41; &gt; 1&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;//---Ir guardando los nombres en un arreglo
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$this-&gt;files&#91;&#93; = $fil;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;//---Cerrar el directorio
&nbsp; &nbsp;&nbsp; &nbsp;closedir&#40;$folder&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;//---Ordenar alfabeticamente el arreglo
&nbsp; &nbsp;&nbsp; &nbsp;sort&#40;$this-&gt;files&#41;;
&nbsp; &nbsp;&#125;

&nbsp; &nbsp;function show&#40;$area = 500, $width = 100, $space = 10&#41;&#123;
&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;//---Crear la galería con los nombres de todos los archivos
&nbsp; &nbsp;&nbsp; &nbsp;$total = count&#40;$this-&gt;files&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;$cont = 0;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;echo '&lt;div name=&quot;xx&quot; style=&quot;width&#58;'.$area.'px&quot;&gt;';
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;//---Situar los thumbnails
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;for&#40;$i = 0; $i &lt; $total; $i++&#41;&#123;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;echo '&lt;div style=&quot;width&#58;'.$width.'px; float&#58;left; padding-right&#58;'.$space.'px; padding-bottom&#58;'.$space.'px;&quot;&gt;&lt;a href=&quot;'.$this-&gt;path.'/'.$this-&gt;files&#91;$i&#93;.'&quot; rel=&quot;lightbox&quot;&gt;&lt;img src=&quot;show_thumb.php?src='.$this-&gt;path.'/'.$this-&gt;files&#91;$i&#93;.'&amp;width='.$width.'&quot; width=&quot;'.$width.'&quot; height=&quot;'.$width.'&quot; border=&quot;0&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;/div&gt;';
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
?&gt;&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;script language=&quot;javascript&quot;&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $&#40;document&#41;.ready&#40;function&#40;&#41;&#123;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$&#40;&quot;a&#91;rel = 'lightbox'&#93;&quot;&#41;.lightBox&#40;&#41;;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;&#41;;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/script&gt;&nbsp; &nbsp; &nbsp; &nbsp; 
&lt;?
&nbsp; &nbsp;&nbsp; &nbsp;echo '&lt;/div&gt;';
&nbsp; &nbsp;&#125;
&#125;
?&gt;
</pre><br /><br />La clase sólo tiene dos métodos:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo php">
// Referencia de la carpeta de donde se van a leer las imágenes
loadFolder&#40;$path&#58;string&#41;

// Muestra los thumbnails &#40;con un ancho de $width&#41; de todas las imágenes contenidas en la carpeta
// separados por una distancia $space en un área de ancho $area
show&#40;$area&#58;int, $width&#58;int, $space&#58;int&#41; 
</pre><br /><br />Por ejemplo, en la siguiente página se ha colocado el código php necesario para crear la galería:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo php">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http&#58;//www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;title&gt;PHP Gallery Example&lt;/title&gt;

&lt;link href=&quot;css/jquery.lightbox-0.5.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;

&lt;script src=&quot;scripts/jquery-1.3.2.js&quot; language=&quot;javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;scripts/jquery.lightbox-0.5.js&quot; language=&quot;javascript&quot;&gt;&lt;/script&gt;

&lt;/head&gt;

&lt;body&gt;

&nbsp; &nbsp;&lt;div align=&quot;center&quot;&gt;&nbsp; &nbsp; 
&lt;?&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;// Incluir la clase&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;include_once&#40;'gallery.php'&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;$mygallery = new gallery&#40;&#41;; // Crear una nueva instancia
&nbsp; &nbsp;&nbsp; &nbsp;$mygallery-&gt;loadFolder&#40;'galley_images'&#41;; // Leer las imágenes de la carpeta &quot;galley_images&quot;
&nbsp; &nbsp;&nbsp; &nbsp;$mygallery-&gt;show&#40;500, 100, 10&#41;; // Mostrar la galería en este lugar en un area de 500px&nbsp; &nbsp;&nbsp; &nbsp;
?&gt;&nbsp; &nbsp; 
&nbsp; &nbsp; &lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre><br /><br />Y lo anterior dará como resultado lo siguiente:<br /><br /><a class="arti_link" href="http://www.elkikinet.110mb.com/gallery_example/">Ejemplo de Galería</a><br /><br />Espero que les sea de ayuda.<br /><a class="arti_link" href="http://www.cristalab.com/images/tips/php/galeria-dinamica/gallery.zip">Archivos del tutorial</a><p><a href="http://www.cristalab.com/tips/clase-de-php-para-crear-galerias-dinamicas-c73470l/#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=f94JdeBiM_s:OFTTWmQZTag:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=f94JdeBiM_s:OFTTWmQZTag: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/f94JdeBiM_s" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Sat, 23 May 2009 23:25:10</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/clase-de-php-para-crear-galerias-dinamicas-c73470l/</feedburner:origLink></item>
	    <item>
    	    <title>Cambiar color de un coche en Photoshop</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/gujb2_2JHm0/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/cambiar-color-de-un-coche-en-photoshop-c73467l/</guid>
	        <description><![CDATA[ Bien, vamos a empezar con algo fácil, voy a enseñaros como cambiar el color de un coche con el pincel de Photoshop, este ''truco'' también os puede servir para otras cosas..<br />
<br />
bien, este es el coche que voy a usar como ejemplo<br />

<br />
Poned la imagen del coche en la primera capa, luego creáis otra y en ella pintáis s... ]]></description>

	        <dc:creator>DenMirS</dc:creator>
	        <category>photoshop</category>
	        <category>cs4</category>
	        <category>color</category>
	        
            <content:encoded><![CDATA[  Bien, vamos a empezar con algo fácil, voy a enseñaros como cambiar el color de un coche con el pincel de <a class="arti_link" href="http://www.cristalab.com/tags/photoshop/">Photoshop</a>, este ''truco'' también os puede servir para otras cosas..<br /><br />bien, este es el coche que voy a usar como ejemplo<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/photoshop/color-coche/1.jpg" border="0" /></div><br /><br /><br />Poned la imagen del coche en la primera capa, luego creáis otra y en ella pintáis sobre el coche con el color rojo (después podremos cambiarlo) pintáis todo de este modo:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/photoshop/color-coche/3.jpg" border="0" /></div><br /><br />Ahora con la capa en la que pintasteis seleccionada, la cambiáis a color, veréis como el coche adquiere el color rojo.<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/photoshop/color-coche/2b.jpg" border="0" /></div><br /><br />Entonces pulsáis control+u y cambiáis el color a su gusto, fácil no? <img src="/foros/images/smiles/icon_happy.gif" alt=":)" border="0" /><br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/photoshop/color-coche/2a.jpg" border="0" /></div><br /><br />este es el resultado final:<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/photoshop/color-coche/2.jpg" border="0" /></div><p><a href="http://www.cristalab.com/tips/cambiar-color-de-un-coche-en-photoshop-c73467l/#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=gujb2_2JHm0:5YC1Vt92bwY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=gujb2_2JHm0:5YC1Vt92bwY: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/gujb2_2JHm0" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Sat, 23 May 2009 19:29:56</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/cambiar-color-de-un-coche-en-photoshop-c73467l/</feedburner:origLink></item>
	    <item>
    	    <title>Conectar ActionScript 3 con Facebook usando la API de Adobe</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/2j8BK16TZQA/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/conectar-actionscript-3-con-facebook-usando-la-api-de-adobe-c73423l/</guid>
	        <description><![CDATA[ Hace unos días me comenzó la curiosidad de poder hacer una aplicación para Facebook en ActionScript 3, después de muchos dolores de cabeza, pruebas, ningún ejemplo bueno en Internet que explique bien como poder conectar Flash o Flex con la Api de Facebook, encontré la página donde Adobe  está desarrollando una API para... ]]></description>

	        <dc:creator>phoxer</dc:creator>
	        <category>actionscript_3</category>
	        <category>facebook</category>
	        <category>api</category>
	        
            <content:encoded><![CDATA[  Hace unos días me comenzó la curiosidad de poder hacer una aplicación para <a class="arti_link" href="http://www.facebook.com/">Facebook </a>en <a class="arti_link" href="http://www.cristalab.com/tips/tags/actionscript_3">ActionScript 3</a>, después de muchos dolores de cabeza, pruebas, ningún ejemplo bueno en Internet que explique bien como poder conectar <a class="arti_link" href="http://www.cristalab.com/tips/tags/flash">Flash</a> o <a class="arti_link" href="http://www.cristalab.com/tips/tags/flex">Flex</a> con la Api de Facebook, encontré la página donde <a class="arti_link" href="http://www.adobe.com/">Adobe </a> está desarrollando una <a class="arti_link" href="http://code.google.com/p/facebook-actionscript-api/">API para conectarse localmente o externamente, directamente a la plataforma de Facebook</a>. <br /><br />Bien lo que les vengo a ofrecer es evitarles el mismo dolor de cabeza y perdida de tiempo que me causo a mi tratar de conectarme a Facebook, asi que a continuación les dejo el código limpio para poder conectarse a la plataforma de Facebook. <img src="/foros/images/smiles/icon_wink.gif" alt=":wink:" border="0" /> <br /><br /><strong>Aviso Importante</strong>: este método solo funciona sobre Facebook, <strong>no funciona localmente</strong>, para generar aplicaciones localmente ver <a class="arti_link" href="http://www.phoxer.com/es/blog/post_67/">este video</a>.  <br /><br />Veamos algo de código..<br />Importamos todas las clases que vamos a utilizar para el desarrollo<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">import com.facebook.commands.profile.SetFBML;
import com.facebook.commands.users.HasAppPermission;
import com.facebook.commands.users.GetInfo;
import com.facebook.data.users.GetInfoData;
import com.facebook.data.BooleanResultData;
import com.facebook.data.auth.ExtendedPermissionValues;
import com.facebook.data.users.HasAppPermissionValues;
import com.facebook.data.users.GetInfoFieldValues;
import com.facebook.data.users.FacebookUser;
import com.facebook.errors.FacebookError;
import com.facebook.events.FacebookEvent;
import com.facebook.net.FacebookCall;
import com.facebook.Facebook;
import com.facebook.session.WebSession;
import com.facebook.utils.FacebookSessionUtil</pre><br /><br />Ahora vamos a obtener todas las variables que Facebook nos pasa por FlashVars, estas variables contienen información importante para el desarrollo.<br />También comenzamos a generar las variables que utilizaremos en la aplicación.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">var flashVarsParams&#58;Object = loaderInfo.parameters;

var fbSessionUtil&#58;FacebookSessionUtil = new FacebookSessionUtil&#40;&quot;*ApyKey&quot;, null, loaderInfo&#41;;
fbSessionUtil.addEventListener&#40;FacebookEvent.CONNECT, onFacebookConnect, false, 0, true&#41;;
var fb&#58;Facebook = fbSessionUtil.facebook;
var user&#58;FacebookUser;</pre><br /><strong>*ApyKey</strong>: Es el código que Facebook te da al crear un nuevo espacio para tu aplicacíón.<br /><br />Ahora vamos a generar las funciones que nos permitan interactuar con la base de datos de Facebook.<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">function isAppAllowed&#40;SessionKey&#58;String&#41;&#58;void &#123;
&nbsp; &nbsp;if &#40;SessionKey != null&#41; &#123;
&nbsp; &nbsp;&nbsp; &nbsp;fbSessionUtil.verifySession&#40;&#41;;
&nbsp; &nbsp;&#125; else &#123;
&nbsp; &nbsp;&nbsp; &nbsp;shown.text=&quot;Facebook nesesita validad al usuario.&quot;;
&nbsp; &nbsp;&#125;
&#125;
isAppAllowed&#40;flashVarsParams.fb_sig_session_key&#41;;

function onFacebookConnect&#40;e&#58;FacebookEvent&#41;&#58;void &#123; 
&nbsp; &nbsp;if &#40;e.success&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;setApplicationFBML&#40;&#41;;
&nbsp; &nbsp;&#125; else &#123;
&nbsp; &nbsp;&nbsp; &nbsp;shown.text=&quot;Error, No se puede conectar a Facebook.&quot;;
&nbsp; &nbsp;&#125;
&#125;

function setApplicationFBML&#40;&#41;&#58;void&#123;
&nbsp; &nbsp;var call&#58;FacebookCall=fb.post&#40;new GetInfo&#40;&#91;fb.uid&#93;,&#91;GetInfoFieldValues.ALL_VALUES&#93;&#41;&#41;;
&nbsp; &nbsp;call.addEventListener&#40;FacebookEvent.COMPLETE,onGetInfo&#41;;
&#125;

function onGetInfo&#40;e&#58;FacebookEvent&#41;&#58;void&#123;
&nbsp; &nbsp;user=&#40;e.data as GetInfoData&#41;.userCollection.getItemAt&#40;0&#41; as FacebookUser;
&nbsp; &nbsp;trace&#40;&quot;Hello &quot;+user.first_name+&quot; &quot;+user.last_name&#41;;
&#125;</pre><br /><br />Listo con esas pocas lineas de código podemos conectarnos a la plataforma de Facebook y obtener de la base de datos<br />la información de los usuarios.  <img src="/foros/images/smiles/icon_miau.gif" alt="^^" border="0" /><p><a href="http://www.cristalab.com/tips/conectar-actionscript-3-con-facebook-usando-la-api-de-adobe-c73423l/#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=2j8BK16TZQA:PnzDoOg58hk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=2j8BK16TZQA:PnzDoOg58hk: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/2j8BK16TZQA" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Fri, 22 May 2009 12:11:38</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/conectar-actionscript-3-con-facebook-usando-la-api-de-adobe-c73423l/</feedburner:origLink></item>
	    <item>
    	    <title>Cristalab y MDW desde el Googleplex de Silicon Valley</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/Vli0B72ILiA/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/cristalab-y-mdw-desde-el-googleplex-de-silicon-valley-c73396l/</guid>
	        <description><![CDATA[ Han pasado seis meses desde nuestro último video desde Cancún. La web ha cambiado y estamos seguros que han nacido muchos proyectos desde aquel entonces. Incluso uno de ellos cerró después de aparecer en una de las criticas.<br />
<br />
No podíamos dejar esta labor de heroísmo y sacrificio por un mejor Internet. Así que desde S... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>cristalab</category>
	        <category>opinion</category>
	        <category>google</category>
	        <category>eventos</category>
	        <category>videos</category>
	        
            <content:encoded><![CDATA[  Han pasado seis meses desde nuestro <a class="arti_link" href="http://www.cristalab.com/blog/mejorando-la-web-en-espanol-3-desde-cancun-c64159l/">último video desde Cancún</a>. La web ha cambiado y estamos seguros que han nacido muchos proyectos desde aquel entonces. Incluso <a class="arti_link" href="http://getwild.com.mx/">uno de ellos cerró</a> después de aparecer en una de las criticas.<br /><br />No podíamos dejar esta labor de heroísmo y sacrificio por un mejor Internet. Así que desde Silicon Valley, en los <a class="arti_link" href="http://l4c.me/fotos/freddie/googleplex-mountain-view-california">cuarteles generales de Google</a>, les traemos la segunda temporada de...<br /><br /><h2>Mejorando la web en español</h2><br /><div style="text-align:center;"><object width="550" height="335">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.youtube.com/v/I1oT2Oq71e4&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" />
	<embed src="http://www.youtube.com/v/I1oT2Oq71e4&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="335"></embed>
</object></div><br />Y esto apenas comienza.<br /><h2>Mandanos tus proyectos</h2><br />Como siempre, avisanos. Estamos buscando proyectos creativos e innovadores que usen:<br /><ul><li> Wordpress<br /></li><li> APIs de Google (Google Maps, Youtube, charts, etc)<br /></li><li> Software de Google (AppEngine)<br /></li><li> Flash o Flex<br /></li><li> UStream</li></ul><br />Los mejores (O más &quot;necesitados&quot;) los elegiremos para hablar de ellos a lo largo de esta y la próxima semana, tanto en Cristalab como en <a class="arti_link" href="http://www.maestrosdelweb.com/">Maestros del Web</a>. Los esperamos.<p><a href="http://www.cristalab.com/blog/cristalab-y-mdw-desde-el-googleplex-de-silicon-valley-c73396l/#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=Vli0B72ILiA:aqBg5d-cz9g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=Vli0B72ILiA:aqBg5d-cz9g: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/Vli0B72ILiA" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Fri, 22 May 2009 03:27:38</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/cristalab-y-mdw-desde-el-googleplex-de-silicon-valley-c73396l/</feedburner:origLink></item>
	    <item>
    	    <title>Clase de PHP para crear Thumbnails de imágenes</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/c7hkq8VLXO4/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/clase-de-php-para-crear-thumbnails-de-imagenes-c73376l/</guid>
	        <description><![CDATA[ Hace unos días tenía que hacer un sistema de administración donde en unos de sus módulos el cliente tenía que ser capaz de subir al servidor las imágenes que le correspondían a una serie de franquicias y luego en la web cuando seleccionara cada una de las franquicias debían aparecer estas imágenes con unas dimensiones ... ]]></description>

	        <dc:creator>elchininet</dc:creator>
	        <category>php</category>
	        
            <content:encoded><![CDATA[  Hace unos días tenía que hacer un sistema de administración donde en unos de sus módulos el cliente tenía que ser capaz de subir al servidor las imágenes que le correspondían a una serie de franquicias y luego en la web cuando seleccionara cada una de las franquicias debían aparecer estas imágenes con unas dimensiones determinadas. Habían dos tipos de imágenes, una era un <a class="arti_link" href="http://es.wikipedia.org/wiki/Thumbnail">Thumbnail</a> que representaba a la franquicia y el resto eran imágenes que compondrían una galería.<br /><br />Como el cliente tendría la libertad para subir cualquier imagen (sin importar sus dimensiones o peso) y no tenía experiencia con ningún software de edición de bitmaps, decidí que este trabajo debía realizarse desde el servidor.<br /><br />Enseguida busqué en la web para ver si existían clases de edición de imágenes que utilizaran las funciones de <a class="arti_link" href="http://www.cristalab.com/tags/php/">php</a> para redimensionar las mismas y me encontré con una enorme número de ellas, la mayoría trabajaba con las funciones natas de php, pero no tenían en cuenta el formato de la imagen y siempre guardaban un jpg (aunque el formato original no fuera este), esto provocaba en muchos casos que la imagen resultante fuera un cuadro negro (sobre todo con formatos gif).<br /><br />Por otro lado ninguna de estas clases tenía un método que permitiera hacer un recorte de la imagen a las dimensiones que yo deseara sin variar las proporciones visuales de la imagen original, y esto me era imprescindible para generar automáticamente los thumbnails. Así que me di a la tarea de elaborar una clase que permitiera redimensionar las imágenes y crear los thumbnails sin variar la proporción visual de estas. El resultado fue el siguiente:<br /><br /><h2>Fichero thumb.php</h2><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo php">
&lt;?php
class thumb &#123;

var $image;
var $type;
var $width;
var $height;

//---Método de leer la imagen
function loadImage&#40;$name&#41; &#123;

//---Tomar las dimensiones de la imagen
$info = getimagesize&#40;$name&#41;;

$this-&gt;width = $info&#91;0&#93;;
$this-&gt;height = $info&#91;1&#93;;
$this-&gt;type = $info&#91;2&#93;;

//---Dependiendo del tipo de imagen crear una nueva imagen
switch&#40;$this-&gt;type&#41;&#123;
case IMAGETYPE_JPEG&#58;
$this-&gt;image = imagecreatefromjpeg&#40;$name&#41;;
break;
case IMAGETYPE_GIF&#58;
$this-&gt;image = imagecreatefromgif&#40;$name&#41;;
break;
case IMAGETYPE_PNG&#58;
$this-&gt;image = imagecreatefrompng&#40;$name&#41;;
break;
&#125;
&#125;

//---Método de guardar la imagen
function save&#40;$name, $quality = 100&#41; &#123;

//---Guardar la imagen en el tipo de archivo correcto
switch&#40;$this-&gt;type&#41;&#123;
case IMAGETYPE_JPEG&#58;
imagejpeg&#40;$this-&gt;image, $name, $quality&#41;;
break;
case IMAGETYPE_GIF&#58;
imagegif&#40;$this-&gt;image, $name&#41;;
break;
case IMAGETYPE_PNG&#58;
$pngquality = floor&#40;&#40;$quality - 10&#41; / 10&#41;;
imagepng&#40;$this-&gt;image, $name, $pngquality&#41;;
break;
&#125;
&#125;

//---Método de mostrar la imagen sin salvarla
function show&#40;&#41; &#123;

//---Mostrar la imagen dependiendo del tipo de archivo
switch&#40;$this-&gt;type&#41;&#123;
case IMAGETYPE_JPEG&#58;
imagejpeg&#40;$this-&gt;image&#41;;
break;
case IMAGETYPE_GIF&#58;
imagegif&#40;$this-&gt;image&#41;;
break;
case IMAGETYPE_PNG&#58;
imagepng&#40;$this-&gt;image&#41;;
break;
&#125;
&#125;

//---Método de redimensionar la imagen sin deformarla
function resize&#40;$value, $prop&#41;&#123;

//---Determinar la propiedad a redimensionar y la propiedad opuesta
$prop_value = &#40;$prop == 'width'&#41; ? $this-&gt;width &#58; $this-&gt;height;
$prop_versus = &#40;$prop == 'width'&#41; ? $this-&gt;height &#58; $this-&gt;width;

//---Determinar el valor opuesto a la propiedad a redimensionar
$pcent = $value / $prop_value;
$value_versus = $prop_versus * $pcent;

//---Crear la imagen dependiendo de la propiedad a variar
$image = &#40;$prop == 'width'&#41; ? imagecreatetruecolor&#40;$value, $value_versus&#41; &#58; imagecreatetruecolor&#40;$value_versus, $value&#41;;

//---Hacer una copia de la imagen dependiendo de la propiedad a variar
switch&#40;$prop&#41;&#123;

case 'width'&#58;
imagecopyresampled&#40;$image, $this-&gt;image, 0, 0, 0, 0, $value, $value_versus, $this-&gt;width, $this-&gt;height&#41;;
break;

case 'height'&#58;
imagecopyresampled&#40;$image, $this-&gt;image, 0, 0, 0, 0, $value_versus, $value, $this-&gt;width, $this-&gt;height&#41;;
break;

&#125;

//---Actualizar la imagen y sus dimensiones
$info = getimagesize&#40;$name&#41;;

$this-&gt;width = imagesx&#40;$image&#41;;
$this-&gt;height = imagesy&#40;$image&#41;;
$this-&gt;image = $image;

&#125;

//---Método de extraer una sección de la imagen sin deformarla
function crop&#40;$cwidth, $cheight, $pos = 'center'&#41; &#123;

//---Dependiendo del tamaño deseado redimensionar primero la imagen a uno de los valores
if&#40;$cwidth &gt; $cheight&#41;&#123;
$this-&gt;resize&#40;$cwidth, 'width'&#41;;
&#125;else&#123;
$this-&gt;resize&#40;$cheight, 'height'&#41;;
&#125;

//---Crear la imagen tomando la porción del centro de la imagen redimensionada con las dimensiones deseadas
$image = imagecreatetruecolor&#40;$cwidth, $cheight&#41;;

switch&#40;$pos&#41;&#123;

case 'center'&#58;
imagecopyresampled&#40;$image, $this-&gt;image, 0, 0, abs&#40;&#40;$this-&gt;width - $cwidth&#41; / 2&#41;, abs&#40;&#40;$this-&gt;height - $cheight&#41; / 2&#41;, $cwidth, $cheight, $cwidth, $cheight&#41;;
break;

case 'left'&#58;
imagecopyresampled&#40;$image, $this-&gt;image, 0, 0, 0, abs&#40;&#40;$this-&gt;height - $cheight&#41; / 2&#41;, $cwidth, $cheight, $cwidth, $cheight&#41;;
break;

case 'right'&#58;
imagecopyresampled&#40;$image, $this-&gt;image, 0, 0, $this-&gt;width - $cwidth, abs&#40;&#40;$this-&gt;height - $cheight&#41; / 2&#41;, $cwidth, $cheight, $cwidth, $cheight&#41;;
break;

case 'top'&#58;
imagecopyresampled&#40;$image, $this-&gt;image, 0, 0, abs&#40;&#40;$this-&gt;width - $cwidth&#41; / 2&#41;, 0, $cwidth, $cheight, $cwidth, $cheight&#41;;
break;

case 'bottom'&#58;
imagecopyresampled&#40;$image, $this-&gt;image, 0, 0, abs&#40;&#40;$this-&gt;width - $cwidth&#41; / 2&#41;, $this-&gt;height - $cheight, $cwidth, $cheight, $cwidth, $cheight&#41;;
break;

&#125;

$this-&gt;image = $image;
&#125;

&#125;
?&gt;
</pre><br /><br />Los métodos de la clase son los siguientes:<br /><br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo php">
// Lee la imagen desde la ruta especificada
loadImage&#40;$name&#58;string&#41;

// Guarda la imagen en la ruta especificada y con una calidad de 0 a 100 definida por el usuario &#40;máxima calidad por defecto&#41;
save&#40;$name&#58;string, $quality&#58;int = 100&#41;

// Muestra la imagen en la página sin guardarla previamente
show&#40;&#41;

// Redimensiona la imagen en ancho o alto manteniendo sus proporciones
// $prop puede tomar los valores de &quot;width&quot; o &quot;height&quot;
resize&#40;$value&#58;int, $prop&#58;string&#41;

// Crea un thumbnail de la imagen con las medidas especificadas y manteniendo las proporciones visuales de la imagen intactas
// $pos puede tomar los valores de &quot;left&quot;, &quot;top&quot;, &quot;right&quot;, &quot;bottom&quot; o &quot;center&quot;
crop&#40;$cwidth&#58;int, $cheight&#58;int, $pos&#58;string&#41;
</pre><br />Veamos un ejemplo concreto, aquí tenemos una imagen de 550 x 413 píxeles:<br /><br /><img class="imgBlog" src="http://www.cristalab.com/images/tips/php/thumbnails/thumbnails01.jpg" border="0" /><br /><br />Vamos a crear una versión de la misma con un ancho de 100 píxeles:<br /><h2>fichero image_width_100.php</h2><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo php">
&lt;?
include_once&#40;'thumb.php'&#41;;
$mythumb = new thumb&#40;&#41;;
$mythumb-&gt;loadImage&#40;'http&#58;//img43.imageshack.us/img43/3022/finalfantasyn.jpg'&#41;;
$mythumb-&gt;resize&#40;100, 'width'&#41;;
$mythumb-&gt;show&#40;&#41;;
?&gt;
</pre><br />El resultado es el siguiente (en este momento estoy leyendo el php de arriba como una imagen) de la siguiente manera:<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo php">
echo '&lt;img src=&quot;image_width_100.php&quot;/&gt;';
</pre><br /><br /><a class="arti_link" href="http://www.elkikinet.110mb.com/show_image_width_100.php">Ejemplo de imagen con 100 píxeles de ancho</a><br /><br />De la misma manera el siguiente link es la misma imagen con 100 píxeles de alto:<br /><br /><a class="arti_link" href="http://www.elkikinet.110mb.com/show_image_height_100.php">Ejemplo de imagen con 100 píxeles de alto</a><br /><br />Y por último un crop de la imagen a 100 x 100 píxeles (igual a los avatares de aquí de la página):<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo php">
&lt;?
include_once&#40;'thumb.php'&#41;;
$mythumb = new thumb&#40;&#41;;
$mythumb-&gt;loadImage&#40;'http&#58;//img43.imageshack.us/img43/3022/finalfantasyn.jpg'&#41;;
// Como el rostro del personaje está a la derecha le especifico el parámetro $pos en &quot;right&quot;
// Si este valor es obviado el crop se hará del centro de la imagen
$mythumb-&gt;crop&#40;100, 100, 'right'&#41;;
$mythumb-&gt;show&#40;&#41;;
?&gt;
</pre><br /><br /><a class="arti_link" href="http://www.elkikinet.110mb.com/show_thumb_100x100.php">Ejemplo de thumbnail a 100 x 100</a><br /><br />Esta clase es muy util para los avatares de los foros, simpre se le advierte al usuario que debe subir una imagen de unas dimensiones específicas, pero los usuarios muchas veces no leen las reglas del foro o simplemente lo hacen por desconocimiento y entonces los avatares atentan contra el diseño del foro pues la imagen sale a su tamaño original. Podríamos utilizar esta clase para crear versiones de los thumbnails al tamaño que especifiquemos una vez que el usuario suba su imagen, de lo contrario hacer una versión al vuelo de esta imagen con las dimensiones que deseemos.<br /><br />Espero que les sea de ayuda.<p><a href="http://www.cristalab.com/tips/clase-de-php-para-crear-thumbnails-de-imagenes-c73376l/#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=c7hkq8VLXO4:QKaBFyCRSjo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=c7hkq8VLXO4:QKaBFyCRSjo: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/c7hkq8VLXO4" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Thu, 21 May 2009 17:36:19</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/clase-de-php-para-crear-thumbnails-de-imagenes-c73376l/</feedburner:origLink></item>
	    <item>
    	    <title>Videotutorial de papel cebolla en Flash</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/OzjJJNay3UE/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/videotutorial-de-papel-cebolla-en-flash-c73350l/</guid>
	        <description><![CDATA[ Veremos como utilizar la herramienta de papel cebolla para facilitar el proceso de animación en Flash. Después, haremos uso de la herramienta de selección de múltiples fotogramas para modificar animaciones completas.<br />

<br />
Link de tutorial en HD... ]]></description>

	        <dc:creator>FlashFacilito</dc:creator>
	        <category>flash</category>
	        <category>videotutorial</category>
	        
            <content:encoded><![CDATA[  Veremos como utilizar la herramienta de papel cebolla para facilitar el proceso de animación en <a class="arti_link" href="http://www.cristalab.com/tags/flash/">Flash</a>. Después, haremos uso de la herramienta de selección de múltiples fotogramas para modificar animaciones completas.<br /><br /><div style="text-align:center;"><br /><object width="425" height="355">
	<param name="allowfullscreen" value="true" />
	<param name="allowscriptaccess" value="always" />
	<param name="movie" value="http://www.youtube.com/v/Hgdup3Ammyo&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" />
	<embed src="http://www.youtube.com/v/Hgdup3Ammyo&hl=en&fs=1&rel=0&color1=0x2b405b&color2=0x6b8ab6#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="425" height="355"></embed>
</object></div><br /><br /><a class="arti_link" href="http://www.youtube.com/watch?v=Hgdup3Ammyo">Link de tutorial en HD</a><p><a href="http://www.cristalab.com/tips/videotutorial-de-papel-cebolla-en-flash-c73350l/#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=OzjJJNay3UE:nLfZzXQQmvU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=OzjJJNay3UE:nLfZzXQQmvU: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/OzjJJNay3UE" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Thu, 21 May 2009 11:13:12</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/videotutorial-de-papel-cebolla-en-flash-c73350l/</feedburner:origLink></item>
	    <item>
    	    <title>Internet Explorer morirá en 2021</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/Ta2tdokix7c/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/internet-explorer-morira-en-2021-c73329l/</guid>
	        <description><![CDATA[ ¡Buenas noticias por fin! Al parecer Internet Explorer está muriendo, así que no hace falta que saltes por esa ventana querido diseñador y maquetador web. Aprender estándares web te habrán servido de algo y por allá en el 2021 no hará falta pasar noches en vela tratando de que se muestre correctamente en Internet Explo... ]]></description>

	        <dc:creator>_CONEJO</dc:creator>
	        <category>webmasters</category>
	        <category>browsers</category>
	        <category>microsoft</category>
	        
            <content:encoded><![CDATA[  ¡Buenas noticias por fin! Al parecer <a class="arti_link" href="http://mashable.com/2009/05/13/rip-internet-explorer/">Internet Explorer está muriendo</a>, así que no hace falta que saltes por esa ventana querido diseñador y maquetador web. Aprender estándares web te habrán servido de algo y por allá en el 2021 no hará falta pasar noches en vela tratando de que se muestre correctamente en Internet Explorer. El problema es que mucho antes del 2021 el <a class="arti_link" href="http://es.wikipedia.org/wiki/Gran_colisionador_de_hadrones">LHC</a> entrará en funcionamiento y nos matará a todos <img src="/foros/images/smiles/icon_sunrise.gif" alt=":D" border="0" /><br /><br />Se nota una bajada en el uso de la gran &quot;E&quot; azul de Microsoft, lo que muchos usuarios siguen asociando con &quot;eso del interné&quot;. Así como se muestra en esta gráfica tan chula, <em>¡mira mamá, estoy poniendo gráficos en los artículos para hacerlos amenos!</em>, Internet Explorer ha pasado de tener un 90% &quot;de share&quot; en el 2004 a un 66% del mercado en 2009. ¿pero para qué os digo números si los gráficos molan más?<br /><br /><div style="text-align:center;"><a class="arti_link" href="http://l4c.me/fotos/fotosportada/ie-dies-in-2021/sizes/o"><img class="imgBlog" src="http://l4c.me/uploads/ie-dies-in-2021-1242895692_full550.png" border="0" /></a><br /><em>Gráfica graciosilla para animar el artículo</em></div><br />Como se puede ver la <strong>decadencia de Internet Explorer es increíblemente lineal</strong> (una línea recta desde el 2004 hasta ahora). De la misma forma que Firefox y Safara crecen a ritmo lineal. ¿Qué nos dice esto? Básicamente nada, que no hay una gran revolución en cuanto a navegadores. Lo que se conoce como &quot;segunda guerra de navegadores&quot; no es más que humo y paja, realmente no existe, si existiera el decrecimiento de Internet Explorer sería exponencial (mucho más acusado, una curva). Que si que es cierto que IE ha perdido terreno, pero sigue siendo el navegador por defecto en Microsoft Windows y como se puede entender del gráfico, muchos usuarios no lo cambian por otras alternativas.<br /><br /><br />Hablar de lo que va a suceder de aquí al 2021 es arriesgado e insensato, pero oye, <strong><a class="arti_link" href="http://www.cristalab.com/images/tips/blogportada/onairtour/thisisclab.gif">esto es Cristalab</a></strong>, así que podemos hacerlo. La gráfica dice que IE morirá, lentamente eso sí. Yo digo que la gráfica no vale una mierda y que no deberíamos estar tan contento, aunque si ya han descorchado el champán una copa si que me tomaba. Hay que celebrar que el uso de Internet Explorar va cayendo poco a poco, pero podría augurar que en un futuro, más que desaparecer, se estabilizaría, compartiendo una cuota similar al resto de los navegadores &quot;importantes&quot; (Firefox y Safari). Además hay que tener en cuenta causas externas, la gráfica muestra el uso general de IE, pero habría que verlo por versiones. ¿Qué pasa si mañana Cristalab compra Microsoft? ¿O si directamente Microsoft hace Internet Explorer Vista? Un chasco para los internet, el uso descendería brutalmente (actualmente un usuario &quot;normal&quot; feliz con XP, es capaz de quejarse de Vista y pedir el cambio a XP, podría pasar algo similar con IE9 en adelante).<br /><br />Creo que la mejor estrategia de mercado para quitar cuota a Internet Explorer es incluir porno de serie por parte de Firefox, Safari y similares. No hay duda de que aumentaría su uso. Razones para dejar IE de lado y pasarse a Firefox (por ejemplo)<br /><br /><div style="text-align:center;"><img class="imgBlog" src="http://l4c.me/fullsize/firefox-1-1242897589.jpg" border="0" /><br /><em>Si, la imagen es brutalmente machista, pero como he escrito yo el artículo pongo lo que quiero.</em></div><br /><br /><strong>¿Y ustedes qué opinan? ¿IE desaparecerá realmente o el título es amarillista? ¿A favor de IE? ¿En contra?</strong><p><a href="http://www.cristalab.com/blog/internet-explorer-morira-en-2021-c73329l/#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=Ta2tdokix7c:OMtFuXettb4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=Ta2tdokix7c:OMtFuXettb4: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/Ta2tdokix7c" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Thu, 21 May 2009 04:24:04</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/internet-explorer-morira-en-2021-c73329l/</feedburner:origLink></item>
	    <item>
    	    <title>Cómo crear reuniones Domingo en la Mañana! exitosas</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/zeADYuQfyY4/</link>
			<guid isPermaLink="false">http://www.cristalab.com/blog/como-crear-reuniones-domingo-en-la-manana-exitosas-c73268l/</guid>
	        <description><![CDATA[ Por petición popular, tenía este post pendiente hace mucho tiempo. Ya van varios #DELM alrededor del mundo y era hora de compilar lo que hemos aprendido en todos ellos.<br />
<br />
En DomingoEnLaManana.com hemos publicado una guía de Cómo organizar un #DELM exitoso. Así que si quieres hacerlo en tu ciudad, este es el momento.... ]]></description>

	        <dc:creator>Freddie</dc:creator>
	        <category>eventos</category>
	        <category>DELM</category>
	        
            <content:encoded><![CDATA[  Por petición popular, tenía este post pendiente hace mucho tiempo. Ya van varios #<a class="arti_link" href="http://www.cristalab.com/tags/DELM/">DELM</a> alrededor del mundo y era hora de compilar lo que hemos aprendido en todos ellos.<br /><br />En <a class="arti_link" href="http://domingoenlamanana.com/">DomingoEnLaManana.com</a> hemos publicado una guía de <strong><a class="arti_link" href="http://domingoenlamanana.com/como-organizar-un-delm-exitoso/">Cómo organizar un #DELM exitoso</a></strong>. Así que si quieres hacerlo en tu ciudad, este es el momento.<p><a href="http://www.cristalab.com/blog/como-crear-reuniones-domingo-en-la-manana-exitosas-c73268l/#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=zeADYuQfyY4:92AtSEm3NRw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=zeADYuQfyY4:92AtSEm3NRw: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/zeADYuQfyY4" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Wed, 20 May 2009 04:30:43</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/blog/como-crear-reuniones-domingo-en-la-manana-exitosas-c73268l/</feedburner:origLink></item>
	    <item>
    	    <title>Uso de empty en PHP</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/xpoMwpKbXWc/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tips/uso-de-empty-en-php-c73258l/</guid>
	        <description><![CDATA[ Empty es una construcción de lenguaje (como isset) y por eso su respuesta es más rápida que otras implementaciones similares.<br />
<br />
<?php<br />
<br />
$arreglo = array();<br />
<br />
if (!empty($arreglo))<br />
{<br />
 // si no está vacío<br />
}<br />
<br />
if (count($array)>0)<br />
{<br />
 // si no ... ]]></description>

	        <dc:creator>Maikel</dc:creator>
	        <category>php</category>
	        
            <content:encoded><![CDATA[  <strong><em>Empty</em></strong> es una construcción de lenguaje (como isset) y por eso su respuesta es más rápida que otras implementaciones similares.<br /><p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo php">
&lt;?php

$arreglo = array&#40;&#41;;

if &#40;!empty&#40;$arreglo&#41;&#41;
&#123;
 // si no está vacío
&#125;

if &#40;count&#40;$array&#41;&gt;0&#41;
&#123;
 // si no está vacío
&#125;

?&gt;</pre><br /><br />El primer <em><strong>if</strong></em> se ejecutará siempre más rápido que el segundo.<br /><br /><br /><strong>Más información:</strong> <a class="arti_link" href="http://www.php.net/empty">empty</a>.<p><a href="http://www.cristalab.com/tips/uso-de-empty-en-php-c73258l/#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=xpoMwpKbXWc:e0k1mtcRE1Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=xpoMwpKbXWc:e0k1mtcRE1Y: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/xpoMwpKbXWc" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Tue, 19 May 2009 23:51:46</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tips/uso-de-empty-en-php-c73258l/</feedburner:origLink></item>
	    <item>
    	    <title>Objetos 3D animados por Actionscript 3 usando drawTriangles</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/k-GsFCe_NRc/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/objetos-3d-animados-por-actionscript-3-usando-drawtriangles-c264l/</guid>
	        <description><![CDATA[ En este tutorial creamos un cubo 3D rotando por Actionscript 3, controlado por el usuario usando el mouse. Usando conocimientos de culling y drawTriangles para motores vectoriales de figuras tridimensionales interactivas. ]]></description>

	        <dc:creator>M@U</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ En este tutorial creamos un cubo 3D rotando por Actionscript 3, controlado por el usuario usando el mouse. Usando conocimientos de culling y drawTriangles para motores vectoriales de figuras tridimensionales interactivas. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=k-GsFCe_NRc:Cd05kTXHZdE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=k-GsFCe_NRc:Cd05kTXHZdE: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/k-GsFCe_NRc" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Sun, 08 Feb 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/objetos-3d-animados-por-actionscript-3-usando-drawtriangles-c264l/</feedburner:origLink></item>
	    <item>
    	    <title>Deformar bitmaps con el metodo drawTriangles de Actionscript 3</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/_t-7tPBBxzE/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/deformar-bitmaps-con-el-metodo-drawtriangles-de-actionscript-3-c262l/</guid>
	        <description><![CDATA[ El método drawTriangles() de Actionscript 3 es útil al crear figuras tridimensionales a partir de triángulos, para modificar la apariencia de un bitmap  y en el mas sencillo de los casos dibujar una figura vectorizada. Lo que puede llevar a su uso incluso en el desarrollo de motores 3D vectoriales en Flash. ]]></description>

	        <dc:creator>M@U</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ El m&eacute;todo drawTriangles() de Actionscript 3 es &uacute;til al crear figuras tridimensionales a partir de tri&aacute;ngulos, para modificar la apariencia de un bitmap  y en el mas sencillo de los casos dibujar una figura vectorizada. Lo que puede llevar a su uso incluso en el desarrollo de motores 3D vectoriales en Flash. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=_t-7tPBBxzE:FvHCCI4FaOg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=_t-7tPBBxzE:FvHCCI4FaOg: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/_t-7tPBBxzE" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Sun, 08 Feb 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/deformar-bitmaps-con-el-metodo-drawtriangles-de-actionscript-3-c262l/</feedburner:origLink></item>
	    <item>
    	    <title>Gráficos 3D con Culling y TriangleCulling en Actionscript 3</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/65nTPIS8nRI/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/graficos-3d-con-culling-y-triangleculling-en-actionscript-3-c263l/</guid>
	        <description><![CDATA[ En gráficos 3D, culling se refiere a la superficie no visible de un polígono dependiente por el angulo y perspectiva de la que se le aprecie. En el método graphics.drawTriangles() de ActionScript 3 puede ser aplicado para optimizar el trabajo de render en el procesador. ]]></description>

	        <dc:creator>M@U</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ En gr&aacute;ficos 3D, culling se refiere a la superficie no visible de un pol&iacute;gono dependiente por el angulo y perspectiva de la que se le aprecie. En el m&eacute;todo graphics.drawTriangles() de ActionScript 3 puede ser aplicado para optimizar el trabajo de render en el procesador. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=65nTPIS8nRI:Kswafi8Fcfs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=65nTPIS8nRI:Kswafi8Fcfs: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/65nTPIS8nRI" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Sun, 08 Feb 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/graficos-3d-con-culling-y-triangleculling-en-actionscript-3-c263l/</feedburner:origLink></item>
	    <item>
    	    <title>Animación de rompecabezas para presentar imágenes en Flash</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/sB-4u9e_0E8/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/animacion-de-rompecabezas-para-presentar-imagenes-en-flash-c265l/</guid>
	        <description><![CDATA[ Una animación de splash donde se muestra una imagen panorámica siendo creada por trozos, como rompecabezas, antes de aparecer completamente. ]]></description>

	        <dc:creator>Pley</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ Una animaci&oacute;n de splash donde se muestra una imagen panor&aacute;mica siendo creada por trozos, como rompecabezas, antes de aparecer completamente. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=sB-4u9e_0E8:u4JghL8VQnY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=sB-4u9e_0E8:u4JghL8VQnY: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/sB-4u9e_0E8" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Sun, 08 Feb 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/animacion-de-rompecabezas-para-presentar-imagenes-en-flash-c265l/</feedburner:origLink></item>
	    <item>
    	    <title>Programación orientada a objetos: Herencia de clases</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/oo_9WnbatdA/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/programacion-orientada-a-objetos-herencia-de-clases-c261l/</guid>
	        <description><![CDATA[ La herencia de clases es uno de los conceptos básicos de la programación orientada a objetos. Decir que una clase hereda de otra quiere decir que esa clase obtiene los mismos métodos y propiedades de la otra clase. Permitiendo de esta forma añadir a las características heredadas las suyas propias. ]]></description>

	        <dc:creator>Zguillez</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ La herencia de clases es uno de los conceptos b&aacute;sicos de la programaci&oacute;n orientada a objetos. Decir que una clase hereda de otra quiere decir que esa clase obtiene los mismos m&eacute;todos y propiedades de la otra clase. Permitiendo de esta forma a&ntilde;adir a las caracter&iacute;sticas heredadas las suyas propias. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=oo_9WnbatdA:jsYT3h1qxIE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=oo_9WnbatdA:jsYT3h1qxIE: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/oo_9WnbatdA" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Sat, 07 Feb 2009 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/programacion-orientada-a-objetos-herencia-de-clases-c261l/</feedburner:origLink></item>
	    <item>
    	    <title>Fundamentos de programación para iPhone</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/D4v1FI_05TI/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/fundamentos-de-programacion-para-iphone-c260l/</guid>
	        <description><![CDATA[ Aplicaciones web, aplicaciones nativas, Objective C, Cocoa Touch y las capas de servicios de los iPhone y iPod Touch son los temas tratados en este segundo tutorial de la serie de cómo programar para el iPhone. ]]></description>

	        <dc:creator>eldervaz</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ Aplicaciones web, aplicaciones nativas, Objective C, Cocoa Touch y las capas de servicios de los iPhone y iPod Touch son los temas tratados en este segundo tutorial de la serie de c&oacute;mo programar para el iPhone. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=D4v1FI_05TI:XpKz2KCYUqU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=D4v1FI_05TI:XpKz2KCYUqU: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/D4v1FI_05TI" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Sat, 27 Dec 2008 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/fundamentos-de-programacion-para-iphone-c260l/</feedburner:origLink></item>
	    <item>
    	    <title>Implementar el patrón Modelo-Vista-Controlador en PHP</title>
        	<link>http://feeds.cristalab.com/~r/clab/~3/ABy4srHZuoQ/</link>
			<guid isPermaLink="false">http://www.cristalab.com/tutoriales/implementar-el-patron-modelo-vista-controlador-en-php-c258l/</guid>
	        <description><![CDATA[ En este tutorial veremos cómo mejorar nuestras consultas a una base de datos utilizando PHP, implementando el patrón de diseño Modelo-Vista-Controlador de la programación orientada a objetos. ]]></description>

	        <dc:creator>leoncitoamx</dc:creator>
	        <category>tutorial</category>
	        
            <content:encoded><![CDATA[ En este tutorial veremos c&oacute;mo mejorar nuestras consultas a una base de datos utilizando PHP, implementando el patr&oacute;n de dise&ntilde;o Modelo-Vista-Controlador de la programaci&oacute;n orientada a objetos. <div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=ABy4srHZuoQ:XO8wGoo_kj4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=ABy4srHZuoQ:XO8wGoo_kj4: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/ABy4srHZuoQ" height="1" width="1"/>]]></content:encoded>
	        <pubDate>Thu, 25 Dec 2008 00:00:00</pubDate>
	    <feedburner:origLink>http://www.cristalab.com/tutoriales/implementar-el-patron-modelo-vista-controlador-en-php-c258l/</feedburner:origLink></item>
	</channel>
</rss>
