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

<channel>
	<title>No Smoke</title>
	<atom:link href="http://nosmoke.cycle-it.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://nosmoke.cycle-it.com</link>
	<description>Blog oficial de Cycle IT</description>
	<lastBuildDate>Fri, 20 Aug 2010 09:26:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>No Smoke ahora en nosmoke</title>
		<link>http://nosmoke.cycle-it.com/2010/08/20/no-smoke-ahora-en-nosmoke/</link>
		<comments>http://nosmoke.cycle-it.com/2010/08/20/no-smoke-ahora-en-nosmoke/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 09:25:19 +0000</pubDate>
		<dc:creator>Miguel Martín-Forero</dc:creator>
				<category><![CDATA[NoSmoke]]></category>
		<category><![CDATA[facebook button]]></category>
		<category><![CDATA[nosmoke]]></category>
		<category><![CDATA[tweetmeme]]></category>
		<category><![CDATA[twitter button]]></category>

		<guid isPermaLink="false">http://nosmoke.cycle-it.com/?p=558</guid>
		<description><![CDATA[Tweet Hemos realizado una serie de cambios que afectan al blog en cuanto a subdominio se refiere. O lo que es lo mismo, ahora la dirección del blog hace honor al nombre del mismo: No Smoke (ahora que lo pienso, al menos debería haber una explicación de por qué el nombre de &#8220;No Smoke&#8221; en [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fnosmoke.cycle-it.com%2F2010%2F08%2F20%2Fno-smoke-ahora-en-nosmoke%2F&amp;via=cycle_it&amp;text=No+Smoke+ahora+en+nosmoke&amp;lang=es&amp;count=vertical"  data-counturl="http://nosmoke.cycle-it.com/2010/08/20/no-smoke-ahora-en-nosmoke/"  style="" class="twitter-share-button">Tweet</a></div>
<p>Hemos realizado una serie de cambios que afectan al blog en cuanto a subdominio se refiere. O lo que es lo mismo, ahora la dirección del blog hace honor al nombre del mismo: <strong>No Smoke</strong> (ahora que lo pienso, al menos debería haber una explicación de por qué el nombre de &#8220;<strong>No Smoke</strong>&#8221; en nuestro &#8220;<em>A cerca de</em><em>&#8221; </em> <img src='http://nosmoke.cycle-it.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  &#8230; y no, aunque haya diferentes opiniones al respecto, no tiene que ver con el tabaco <img src='http://nosmoke.cycle-it.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> )</p>
<p>Si no os habéis dado cuenta, nuestro subdominio principal es ahora nosmoke.cycle-it.com. Ahora esperamos que No Smoke tome la entidad y el peso que le corresponde, en lugar de ser simplemente el blog de Cycle-IT. Este cambio ha tenido un par de efectos colaterales:</p>
<ul>
<li>Hemos perdido el conteo de <em>retweets</em> de <a title="Tweetmeme Retweet button" href="http://tweetmeme.com/" target="_blank">Tweetmeme</a>.</li>
<li>Hemos perdido el conteo de &#8220;Me gusta&#8221; de Facebook.</li>
</ul>
<p>Esto no quiere decir que hayamos perdido completamente estos valores, sino que al cambiar a nosmoke.cycle-it.com, estos sistemas entienden que no aplican los anteriores. Así que por esto no os preocupéis (si es que os preocupaba claro). Además, en el caso de Tweetmeme hemos aprovechado para incluir el <a title="Twitter Tweet button" href="http://twitter.com/goodies/tweetbutton" target="_blank">botón Tweet</a>, que es la versión oficial y que incluso recomiendan desde Tweetmeme.</p>
<p>En definitiva, No Smoke es No Smoke y podéis difundir la palabra, ayudándoos de los diferentes botones de medios sociales repartidos por el blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://nosmoke.cycle-it.com/2010/08/20/no-smoke-ahora-en-nosmoke/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CycleFramework menos dependiente de Flex: sin ArrayCollection</title>
		<link>http://nosmoke.cycle-it.com/2010/08/09/cycleframework-menos-dependiente-de-flex-sin-arraycollection/</link>
		<comments>http://nosmoke.cycle-it.com/2010/08/09/cycleframework-menos-dependiente-de-flex-sin-arraycollection/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 17:09:49 +0000</pubDate>
		<dc:creator>Miguel Martín-Forero</dc:creator>
				<category><![CDATA[CycleFramework]]></category>
		<category><![CDATA[CycleLabs]]></category>
		<category><![CDATA[actionscript3]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[arraycollection]]></category>
		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://blog.cycle-it.com/?p=512</guid>
		<description><![CDATA[Tweet Una de las cosas que me gustaría ver es un CycleFramework libre de dependencias del SDK de Flex. Si os preguntáis el por qué de este deseo, la respuesta es sencilla: haciéndolo independiente del SDK de Flex podremos utilizarlo sin ningún problema en otros proyectos ActionScript puros, sin mencionar con que la librería quedaría bastante [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fnosmoke.cycle-it.com%2F2010%2F08%2F09%2Fcycleframework-menos-dependiente-de-flex-sin-arraycollection%2F&amp;via=cycle_it&amp;text=CycleFramework+menos+dependiente+de+Flex%3A+sin+ArrayCollection&amp;lang=es&amp;count=vertical"  data-counturl="http://nosmoke.cycle-it.com/2010/08/09/cycleframework-menos-dependiente-de-flex-sin-arraycollection/"  style="" class="twitter-share-button">Tweet</a></div>
<p><a href="http://blog.cycle-it.com/wp-content/uploads/2009/11/Logotipo-CycleFramework.png"><img class="aligncenter size-full wp-image-33" title="Logotipo CycleFramework" src="http://blog.cycle-it.com/wp-content/uploads/2009/11/Logotipo-CycleFramework.png" alt="" width="153" height="55" /></a>Una de las cosas que me gustaría ver es un <a title="CycleFramework" href="http://code.google.com/p/cycleframework/" target="_blank">CycleFramework</a> libre de dependencias del SDK de Flex. Si os preguntáis el por qué de este deseo, la respuesta es sencilla: haciéndolo independiente del SDK de Flex podremos utilizarlo sin ningún problema en otros proyectos ActionScript puros, sin mencionar con que la librería quedaría bastante más ligera (no obstante si la compilamos como referencia externa este problema de peso, nos lo quitamos de encima).</p>
<p>Hasta ahora la mayoría de nuestros proyectos los hemos realizado en Flex, si bien ciertas partes ActionScript puras acaban teniendo su pequeño hueco en ellos, nunca hemos tenido la necesidad de utilizar un micro-framework MVC para ActionScript3. Pese a esto, tengo la espina clavada de querer liberar a CycleFramework, y aunque ahora mismo tenga más fuerza la <em>cabezonería</em> que la necesidad, me puse manos a la obra.</p>
<p>Actualmente la versión principal de CycleFramework tiene dos dependencias importantes con el SDK de Flex:  <a title="API ArrayCollection" href="http://livedocs.adobe.com/flex/3/langref/mx/collections/ArrayCollection.html" target="_blank"><code>ArrayCollection</code></a> y <a title="API ChangeWatcher" href="http://livedocs.adobe.com/flex/3/langref/mx/binding/utils/ChangeWatcher.html" target="_blank"><code>ChangeWatcher</code></a>.</p>
<p>Recordando <a title="CycleFramework Example" href="http://blog.cycle-it.com/2010/04/26/ejemplo-de-cycleframework/" target="_blank">nuestro propio ejemplo</a> para ponernos en situación:</p>
<ul>
<li>utilizamos <code>ArrayCollection</code> para almacenar el camino visual que queremos representar en nuestra aplicación en un determinado momento. Este camino visual no es más que un lista elementos que identifican de forma unívoca nodos en nuestra jerarquía de vistas.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">new</span> ArrayCollection<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'vm'</span>,<span style="color: #ff0000;">'userManager'</span>,<span style="color: #ff0000;">&quot;retrieve&quot;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

<p style="padding-left: 30px;">donde ese <code>ArrayCollection</code> identifica que deseamos realizar una navegación hacia la vista &#8216;retrieve&#8217; que cuelga de &#8216;userManager&#8217; que a su vez cuelga de &#8216;vm&#8217;: <code>vm &gt; userManager &gt; retrieve</code>.</p>
<ul>
<li><code>ChangeWatcher</code> se utiliza para observar cambios en la vista actual que se está visualizando, de tal modo que podamos navegar hacia una vista diferente.</li>
</ul>
<p>El primer paso para eliminar estas dependencias ha sido deshacernos de la clase <code>ArrayCollection</code>. La clase <code>ChangeWatcher</code> implica un trabajo extra adicional para poder eliminarla ya que en ActionScript puro no existen las clases de utilidad para <em>binding</em> con lo que hay que llegar a alguna solución a medida − ya he empezado a investigar en este sentido, pero lo dejaremos para más adelante.</p>
<p>Las razones por las cuales queremos deshacernos (y podemos) de esta clase son:</p>
<ol>
<li><strong>Nos hace dependientes del SDK de Flex</strong> y no lo necesitamos (ni lo queremos).</li>
<li>Se trata de una clase que envuelve a la clase <a title="API Array" href="http://livedocs.adobe.com/flex/3/langref/Array.html" target="_blank"><code>Array</code></a> (mantiene la lista en el atributo <code>source</code>). Esto implica una capa adicional para acceder a la fuente, añadiendo tiempo de acceso y procesamiento que empeoran el rendimiento.</li>
<li><strong>No necesitamos</strong> ninguno de los métodos que <code>ArrayCollection</code> hereda de <a title="API ListCollectionView" href="http://livedocs.adobe.com/flex/3/langref/mx/collections/ListCollectionView.html" target="_blank"><strong><code>ListCollectionView</code></strong></a>.</li>
<li>Las operaciones necesarias para realizar y gestionar navegaciones son mucho <strong>más rápidas</strong> con la clase <code>Array</code>.</li>
<li>No necesitamos manejar cambios provocados en la colección: <a title="API COLLECTION_CHANGE" href="http://livedocs.adobe.com/flex/3/langref/mx/events/CollectionEvent.html#COLLECTION_CHANGE" target="_blank"><code>COLLECTION_CHANGE</code></a>. Una de las ventajas de <code>ArrayCollection</code> es que permite añadir manejadores para detectar inserciones, borrados, modificaciones en la lista. Esto facilita el trabajo a la hora de modificar el comportamiento de nuestra interfaz, pudiendo incluso <em>bindar</em> variables con expresiones tales como: <code>arrayCollection.getItemAt(index);</code>. No obstante, <strong>no lo necesitamos en CycleFramework</strong>.</li>
<li>Hace engorrosa la tarea de querer lanzar navegaciones. Cada vez que queremos navegar, necesitamos hacer un <code>new ArrayCollection(['vm','userManager','retrieve']);</code>. Utilizando simplemente un <code>Array</code>, ahora nos bastará con hacer <code>['vm','userManager','retrieve']</code>. Escribiremos menos líneas de código, y además será más rápida la instanciación.</li>
</ol>
<p>En nuestro caso es fácil deshacernos de esta clase, ya que realmente nosotros solo necesitamos un lista de identificadores que refleje la navegación que se quiere realizar. Para esto nos basta simplemente con utilizar la clase nativa <code>Array</code>. En el propio CycleFramework, supuso eliminar todas las operaciones sobre <code>ArrayCollection</code> y sustituirlas por las operaciones &#8220;pares&#8221; en <code>Array</code>:</p>
<ol>
<li><code>new ArrayCollection([])</code> =&gt; <code>[]</code></li>
<li><code>list.getItemAt(index)</code> =&gt; <code>array[index]</code></li>
<li><code>list.removeItemAt(list.getItemIndex(item))</code> =&gt; <code>array.splice(array.indexOf(item),1)</code></li>
<li><code>list.addItem(item)</code> =&gt; <code>array[array.length] = item</code></li>
<li>etc.</li>
</ol>
<p>Ahora, en nuestras aplicaciones, simplemente debemos sustituir:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">new</span> ViewStateChangeEvent<span style="color: #66cc66;">&#40;</span>ViewStateChangeEvent.<span style="color: #006600;">MODIFY_VIEW</span>,<span style="color: #000000; font-weight: bold;">new</span> ArrayCollection<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'vm'</span>,<span style="color: #ff0000;">'init'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">dispatch</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>por:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">new</span> ViewStateChangeEvent<span style="color: #66cc66;">&#40;</span>ViewStateChangeEvent.<span style="color: #006600;">MODIFY_VIEW</span>,<span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'vm'</span>,<span style="color: #ff0000;">'init'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">dispatch</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Y esto es todo; en breve hablaré de cómo quitar la dependencia con <code>ChangeWatcher</code>. De momento, este código no está incluído en la rama principal del proyecto en Google Code. Se ha creado una rama específica para el mismo, que muy pronto se incluirá en la rama principal. Si queréis jugar con ella, os dejo aquí los datos de acceso. Esperamos vuestros comentarios al respecto <img src='http://nosmoke.cycle-it.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<blockquote><p><strong><em><tt># Non-members may check out a read-only working copy anonymously over HTTP.</tt><br />
<tt id="checkoutcmd">svn checkout <strong><em>http</em></strong>://cycleframework.googlecode.com/svn/branches/CycleFrameworkArray cycleframework-read-only</tt></em></strong></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://nosmoke.cycle-it.com/2010/08/09/cycleframework-menos-dependiente-de-flex-sin-arraycollection/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Nuevo mercado para Flash y AIR: llegan los tablets</title>
		<link>http://nosmoke.cycle-it.com/2010/07/26/nuevo-mercado-para-flash-y-air-llegan-los-tablets/</link>
		<comments>http://nosmoke.cycle-it.com/2010/07/26/nuevo-mercado-para-flash-y-air-llegan-los-tablets/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 07:14:57 +0000</pubDate>
		<dc:creator>Ramón García</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[air]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Asus]]></category>
		<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Dell]]></category>
		<category><![CDATA[ExoPC]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Hewlett Packard]]></category>
		<category><![CDATA[lenovo]]></category>
		<category><![CDATA[móviles]]></category>
		<category><![CDATA[open screen project]]></category>
		<category><![CDATA[slate]]></category>
		<category><![CDATA[smartphones]]></category>
		<category><![CDATA[tablets]]></category>
		<category><![CDATA[webos]]></category>
		<category><![CDATA[wetab]]></category>
		<category><![CDATA[windows7]]></category>
		<category><![CDATA[wired]]></category>

		<guid isPermaLink="false">http://blog.cycle-it.com/?p=437</guid>
		<description><![CDATA[Tweet Hace ya tiempo que tenemos un ojo puesto en los tablets y otro en los smartphones y cada vez me parece más emocionante el momento que se vive en el mercado de los dispositivos móviles. Actualmente está claro que el actor con la posición más relevante en este mercado es Apple, pero el asalto [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fnosmoke.cycle-it.com%2F2010%2F07%2F26%2Fnuevo-mercado-para-flash-y-air-llegan-los-tablets%2F&amp;via=cycle_it&amp;text=Nuevo+mercado+para+Flash+y+AIR%3A+llegan+los+tablets&amp;lang=es&amp;count=vertical"  data-counturl="http://nosmoke.cycle-it.com/2010/07/26/nuevo-mercado-para-flash-y-air-llegan-los-tablets/"  style="" class="twitter-share-button">Tweet</a></div>
<p>Hace ya tiempo que tenemos un ojo puesto en los <em>tablets</em> y otro en los <em>smartphones</em> y cada vez me parece más emocionante el momento que se vive en el mercado de los dispositivos móviles.</p>
<p>Actualmente está claro que el actor con la posición más relevante en este mercado es Apple, pero el asalto está preparado y parece ser que todos los fabricantes van a llegar casi a la vez con sus nuevos dispositivos en un periodo muy corto de tiempo.</p>
<p>Por los últimos anuncios que he ido leyendo, los primeros <em>tablets</em> en salir serán los de Dell, Samsung, ExoPC, Hewlett Packard y Asus, aunque también hay anuncios de Cisco y otros fabricantes menos conocidos, como por ejemplo <a href="http://wetab.mobi/en" target="_blank">WeTab GmbH</a>.</p>
<div id="attachment_485" class="wp-caption alignright" style="width: 226px"><a title="Dell Streak" href="http://blog.cycle-it.com/wp-content/uploads/2010/07/Dell_Streak2.jpg"><img class="size-full wp-image-485 " title="Dell_Streak" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/Dell_Streak2.jpg" alt="Dell Streak" width="216" height="106" /></a><p class="wp-caption-text">Dell Streak</p></div>
<p>La salida del Dell <a title="Streak" href="http://en.community.dell.com/dell-blogs/direct2dell/b/direct2dell/archive/2010/05/25/dell-streak-the-versatile-5-inch-android-tablet.aspx" target="_blank">Streak</a> será a finales de julio en EEUU, por lo que puede ser el primer <em>tablet</em> en lanzarse para competir con el dispositivo de Apple. De ser así, también será el primer <em>tablet</em> con <a href="http://www.android.com/" target="_blank">Android 2.2</a> que se lance al mercado.</p>
<p>También parece que Samsung prepara la salida de <a title="Galaxy Tape" href="http://www.engadget.com/2010/06/14/samsungs-7-inch-tab-to-run-android-2-2-on-1-2ghz-a8-processor/" target="_blank">Galaxy Tape</a> para finales de verano. Incluiría también un sistema operativo Android 2.2.</p>
<p>Para septiembre está también planificada la salida de <a title="ExoPC" href="http://www.exopc.com/en/index.php" target="_blank">ExoPC Slate</a>, un <em>tablet</em> de fabricación canadiense que en este caso confía en Windows 7 como su sistema operativo.</p>
<div id="attachment_488" class="wp-caption alignleft" style="width: 184px"><a title="Hp Slate" href="http://blog.cycle-it.com/wp-content/uploads/2010/07/HP_Slate1.jpg"><img class="size-full wp-image-488 " title="HP_Slate" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/HP_Slate1.jpg" alt="HP Slate" width="174" height="116" /></a><p class="wp-caption-text">HP Slate</p></div>
<p>Posiblemente también para después de verano, <a title="HP Slate" href="https://h30406.www3.hp.com/campaigns/2010/promo/hpsl/index.php" target="_blank">Hewlett Packard</a> tiene preparados, a falta de uno, dos <em>tablets</em>.<br />
Su estrategia se basa en sacar un dispositivo orientado a empresa (con Windows7) y otro orientado a &#8220;usuario de a pie&#8221; (con WebOS, adquirido tras la compra de Palm). Esto lo sabemos desde hace un par de días, ya que leímos la noticia donde se hablaba del abandono del tercer <em>tablet</em>, el cuál iba a incluir Android como sistema operativo.</p>
<p>Por último, comentar que Asus (ver noticia de su Eee Pad en <a href="http://www.xataka.com/tablets/asus-cambia-windows-por-android-en-una-de-sus-tablets" target="_blank">Xataka</a>), Lenovo <a href="http://www.pcworld.com/article/201462/lenovo_to_release_tablet_pc_at_years_end.html?tk=rss_news" target="_blank">LePad</a>, Cisco <a href="https://www.cisco.com/en/US/products/ps11156/index.html" target="_blank">Cius</a> e ICD <a href="http://www.convergeddevices.net/products/vega.html" target="_blank">Vega</a> también preparan la salida de sus <em>tablets</em> con Android, aunque de estos no tenemos noticias sobre las fechas.</p>
<div id="attachment_482" class="wp-caption alignright" style="width: 202px"><a title="Asus Eee Pad" href="http://blog.cycle-it.com/wp-content/uploads/2010/07/Asus_Eee_Pad2.jpg"><img class="size-full wp-image-482  " title="Asus_Eee_Pad" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/Asus_Eee_Pad2.jpg" alt="Asus Eee Pad" width="192" height="127" /></a><p class="wp-caption-text">Asus Eee Pad</p></div>
<p>Como podéis observar, a finales de este año y principios del que viene dispondremos de una amplia gama de <em>tablets</em> para todos los propósitos, y lo que es más importante, se dispondrá de una amplia gama de dispositivos plenamente funcionales y sin restricciones para su uso.</p>
<p>Todos estos dispositivos son capaces de ejecutar una amplia variedad de aplicaciones al igual que lo puede hacer un ordenador personal, con la diferencia de que añade características adicionales y limita otras por su propia naturaleza, por lo que el desarrollo de aplicaciones orientadas a los mismos es fundamental para su éxito.</p>
<p>Pensémoslo, un dispositivo sin una gran variedad de aplicaciones, al alcance de todos los bolsillos, y que le saquen el máximo partido no acaba siendo más que un <em>gadget </em>bonito que sólo sirve para decorar.</p>
<p>Por este motivo, muchos de estos dispositivos ya nacen integrados con algún tipo de tienda <em>online </em>al estilo Android Store y permiten la ejecución de aplicaciones web a través del navegador. Esto habilita el acceso desde el primer día a aplicaciones ya desarrolladas para <em>smartphones </em>y aplicaciones web, tanto de intranet como Internet,  disponibles a través del navegador.</p>
<p>Pero a día de hoy, no sólo existen aplicaciones desarrolladas con la mente puesta en otros dispositivos (PCs, portátiles o <em>smartphones</em>): ya hay grandes apuestas por aplicaciones ideadas para sacar el máximo partido a los <em>tablets</em>. Un caso a remarcar es el de la revista WIRED.</p>
<p><a href="http://nosmoke.cycle-it.com/2010/07/26/nuevo-mercado-para-flash-y-air-llegan-los-tablets/"><em>Pinche aquí para ver el vídeo</em></a></p>
<p>En el vídeo se puede ver toda la potencia de la aplicación ejecutándose en un <em>tablet</em>, y aquí es donde aparece una de las grandes ventajas de Adobe AIR y de Adobe Flash. El poder publicar una misma aplicación en cualquier pantalla (véase <a title="About Open Screen Project" href="http://www.openscreenproject.org/about/" target="_blank">Open Screen Project</a>) permite desarrollar a menor coste y llegar con el mismo producto software a cualquier usuario final, utilice el terminal que utilice.</p>
<p>Gracias a esto, si ya estais pensando en adquirir alguno de estos <em>tablets</em>, podreis contar con esta gran aplicación desde el primer día, ya que permitirán la instalación y ejecución de aplicaciones desarrolladas en Adobe Flash (a través del navegador) o Adobe AIR (descargadas de alguna tienda o directamente de Internet).</p>
<p>En definitiva, se abre un nuevo mercado de hardware y Adobe Flash y Adobe AIR parten con ventaja por su propia naturaleza.</p>
]]></content:encoded>
			<wfw:commentRss>http://nosmoke.cycle-it.com/2010/07/26/nuevo-mercado-para-flash-y-air-llegan-los-tablets/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<enclosure url='http://nosmoke.cycle-it.com/wp-content/uploads/2010/07/Dell_Streak.jpg' length ='13607'  type='image/jpg' />	</item>
		<item>
		<title>Bibliotecas 3D para Flash: Away3D</title>
		<link>http://nosmoke.cycle-it.com/2010/07/19/away/</link>
		<comments>http://nosmoke.cycle-it.com/2010/07/19/away/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 15:01:22 +0000</pubDate>
		<dc:creator>Antonio Olmo Titos</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[análisis]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[hello]]></category>
		<category><![CDATA[helloworld]]></category>
		<category><![CDATA[hola]]></category>
		<category><![CDATA[holamundo]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[introducción]]></category>
		<category><![CDATA[introduction]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[mundo]]></category>
		<category><![CDATA[prueba]]></category>
		<category><![CDATA[rendimiento]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[world]]></category>

		<guid isPermaLink="false">http://blog.cycle-it.com/?p=413</guid>
		<description><![CDATA[Tweet Continuamos con la serie de entradas que estamos dedicando al panorama de proyectos Flash para visualización en 3D fijándonos esta vez en Away3D. Como Papervision3D, Away3D es software libre: se publica bajo una licencia Apache 2.0. La referencia oficial de las clases en formato HTML se encuentra en http://away3d.com/livedocs/3.5.0_lib/ (versión 3.5.0 para Flash Player [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fnosmoke.cycle-it.com%2F2010%2F07%2F19%2Faway%2F&amp;via=cycle_it&amp;text=Bibliotecas+3D+para+Flash%3A+Away3D&amp;lang=es&amp;count=vertical"  data-counturl="http://nosmoke.cycle-it.com/2010/07/19/away/"  style="" class="twitter-share-button">Tweet</a></div>
<p style="text-align: left;"><img class="aligncenter size-full wp-image-415" title="Logo de Away3D" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/logo-Away.png" alt="Logo de Away3D" width="139" height="135" /></p>
<p style="text-align: left;">Continuamos con la serie de entradas que estamos dedicando al panorama de proyectos Flash para visualización en 3D fijándonos esta vez en <strong><em>Away3D</em></strong>.</p>
<p style="text-align: left;">Como <em>Papervision3D</em>, <em>Away3D</em> es <em>software</em> libre: se  publica bajo una <a href="http://opensource.org/licenses/apache2.0.php" target="_blank">licencia  Apache 2.0</a>.</p>
<p style="text-align: left;">La <strong>referencia oficial de las clases</strong> en formato HTML se encuentra en <a href="http://away3d.com/livedocs/3.5.0_lib/" target="_blank">http://away3d.com/livedocs/3.5.0_lib/</a> (versión 3.5.0 para <em>Flash Player</em> 10). De nuevo, el <strong>código fuente</strong> y otros documentos básicos están alojados en <a href="http://code.google.com/p/away3d/" target="_blank">la página del proyecto en <em>Google Code</em></a>. <a href="http://away3d.com/" target="_blank">El <strong>dominio oficial</strong></a> en cambio funciona como una bitácora colectiva en la que los programadores más implicados en el proyecto comparten reflexiones, noticias y ejemplos destacados de uso del <em>software</em>. <em>Away3D</em> se distribuye preferentemente en forma de <a href="http://away3d.com/download/" target="_blank">archivos comprimidos con las fuentes completas</a>. En caso de que se quiera mantener una copia local del código fuente en nuestros proyectos Flex, el <strong>repositorio <em>Subversion</em></strong> es <code>http://away3d.googlecode.com/svn</code>.</p>
<p><span style="font-size: larger;"><strong>Un <em>holamundo</em> en <em>Away3D</em></strong></span> — <a href="http://labs.cycle-it.com/away/helloworld/Main.html" target="_blank">Flash</a>, <a href="http://labs.cycle-it.com/away/helloworld/srcview/index.html" target="_blank">fuente</a></p>
<p>El enfoque de nuestro <strong><em>holamundo</em> en Flex 4 para <em>Away3D</em></strong> será totalmente análogo al <a href="http://blog.cycle-it.com/2010/07/13/papervision/" target="_self"><em>holamundo</em> que explicamos para <em>Papervision</em></a>, así que no vamos a entrar en muchos detalles, salvo en aquellos puntos donde haya diferencias relevantes.</p>
<p style="text-align: center;"><a href="http://labs.cycle-it.com/away/helloworld/Main.html" target="_blank"><img class="aligncenter size-full wp-image-418" title="Holamundo en Away3D" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/Helloworld_screenshot.png" alt="Holamundo en Away3D" width="543" height="343" /></a></p>
<p style="text-align: left;">También en este caso tenemos una clase principal (<a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Application.html?allClasses=1" target="_blank"><code>spark.components.Application</code></a>) que se limita a instanciar la clase <code>Away3DWorld</code> y a definir un refresco esperado para la aplicación de 60 cuadros por segundo. Cuánto es capaz <em>Away3D</em> de aproximarse a esta tasa de refresco, lo veremos más adelante en la prueba de rendimiento.</p>
<p><strong>La <em>vista</em> más simple que podemos crear para nuestro ejemplo se llama <a href="http://away3d.com/livedocs/3.5.0_lib/away3d/containers/View3D.html" target="_blank"><code>View3D</code></a></strong>; la instanciamos sin parámetros y nos provee de los elementos necesarios que ya nos son familiares (en este caso, <em>cámara</em>, <em>escena</em> y <em>motor</em>; <em>Away3D</em> no espera cambios en el <em>visor</em>, así que ni siquiera existe esa categoría en la jerarquía de clases). En realidad, podemos encontrar en la documentación la vista <a href="http://away3d.com/livedocs/3.5.0_lib/away3d/test/SimpleView.html" target="_blank"><code>SimpleView</code></a>, que está pensada precisamente para casos sencillos. Esta vista contiene a su vez un objeto <em>protected</em> <code>View3D</code>, objeto que podríamos usar si escribiésemos una clase que heredase de ella. Como queremos limitar el número de clases al mínimo, en este caso no vamos a hacerlo.</p>
<p style="text-align: left;">Si definimos las mismas geometrías que teníamos en <em>Papervision</em>, veremos que la proyección del cilindro no coincide con la que vimos antes. El motivo puede estar en las propiedades del visor, sobre las que ahora no tenemos control, o bien en la interpretación diferente que una y otra biblioteca hacen del campo visual de la cámara. Para mejorar la apariencia del ejemplo, vamos a variar un poco la posición de la cámara y su campo visual:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">_view = <span style="color: #0033ff; font-weight: bold;">new</span> View3D <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
_view.camera.<span style="color: #004993;">moveTo</span> <span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">800</span><span style="color: #000000;">&#41;</span>;
_view.camera.fov = <span style="color: #000000; font-weight:bold;">45</span>;
<span style="color: #004993;">addChild</span> <span style="color: #000000;">&#40;</span>_view<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>Otra diferencia que nos encontramos en seguida es que <strong>un mundo definido con <em>Away3D</em> está, por defecto, <em>a oscuras</em></strong>. Es decir, necesitamos colocar y orientar correctamente al menos una fuente de luz para poder apreciar volúmenes. Si no lo hacemos así, el objeto aparecerá como una silueta negra:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> light<span style="color: #000000; font-weight: bold;">:</span>DirectionalLight3D = <span style="color: #0033ff; font-weight: bold;">new</span> DirectionalLight3D <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
light.direction = <span style="color: #0033ff; font-weight: bold;">new</span> Number3D <span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">1</span>, <span style="color: #000000; font-weight:bold;">100</span><span style="color: #000000;">&#41;</span>;
_view.scene.addLight <span style="color: #000000;">&#40;</span>light<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p><strong>La manera de inicializar objetos también es un poco distinta en <em>Papervision</em> y en <em>Away3D</em></strong>: mientras que en el primer caso los constructores en general admiten un gran número de parámetros, en <em>Away3D</em> se prefieren constructores con una signatura minimalista, a menudo con un único parámetro <code>Object</code> que contiene todas las propiedades del objeto:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #009900;">// Papervision3D:</span>
<span style="color: #0033ff; font-weight: bold;">new</span> Cylinder <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> FlatShadeMaterial <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span>, <span style="color: #000000; font-weight:bold;">200</span>, <span style="color: #000000; font-weight:bold;">800</span>, <span style="color: #000000; font-weight:bold;">100</span>, <span style="color: #000000; font-weight:bold;">1</span>, <span style="color: #000000; font-weight:bold;">200</span>, <span style="color: #0033ff; font-weight: bold;">true</span>, <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #009900;">// Away3D:</span>
<span style="color: #0033ff; font-weight: bold;">new</span> Cylinder <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#123;</span>radius<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #000000; font-weight:bold;">200</span>, <span style="color: #004993;">height</span><span style="color: #000000; font-weight: bold;">:</span> <span style="color: #000000; font-weight:bold;">800</span>, segmentsH<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #000000; font-weight:bold;">1</span>, segmentsW<span style="color: #000000; font-weight: bold;">:</span> <span style="color: #000000; font-weight:bold;">100</span>, material<span style="color: #000000; font-weight: bold;">:</span> mat<span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p><span style="font-size: larger;"><strong>Pruebas de rendimiento con <em>Away3D</em></strong></span> — <a href="http://labs.cycle-it.com/away/benchmark/Main.html" target="_blank">Flash</a>, <a href="http://labs.cycle-it.com/away/benchmark/srcview/index.html" target="_blank">fuente</a></p>
<p>De nuevo vamos a modificar el ejemplo inicial para mostrar no uno, sino un conjunto de objetos rotando.</p>
<p>Como es lógico, para que las pruebas de rendimiento que hagamos sean representativas, y para que podamos comparar con otras bibliotecas, necesitamos asegurarnos de que la carga de trabajo es en principio similar en todos los casos. Al intentar reproducir con <em>Away3D</em> el mismo ejemplo que escribimos con <em>Papervision</em> (aquella matriz de 20×20 prismas de colores rotando) nos encontramos con otra diferencia: mientras que <em>Papervision</em> aproxima cada prisma con <em>4n-4</em> triángulos (donde <em>n</em> es igual al número de lados de la base, o sea <em>4</em>), <strong><em>Away3D</em> mantiene un número ligeramente mayor de polígonos para la misma figura</strong>. En concreto, <em>4n</em>. (Para quien esté interesado, la diferencia está en la forma de aproximar los dos polígonos regulares de las bases: <em>Papervision</em> parte esas superficies trazando segmentos en forma de acordeón, mientras que <em>Away3D</em> las construye con <em>n</em> triángulos, todos ellos compartiendo como vértice el centro del polígono.)</p>
<p>Esto no supone mayor problema, pero para no dar «ventaja» a <em>Papervision</em> en las pruebas de rendimiento, vamos a ajustar ahora el número de prismas para que la cantidad total de triángulos a <em>renderizar</em> sea la misma. Omitiendo un cuadrado de 10×10 objetos en el centro de la estructura se consigue esto, y <strong>el número de triángulos en la escena sigue siendo 4800</strong>:</p>
<p style="text-align: center;"><a href="http://labs.cycle-it.com/away/benchmark/Main.html" target="_blank"><img class="aligncenter size-full wp-image-419" title="Prueba de rendimiento en Away3D" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/Benchmark_screenshot.png" alt="Prueba de rendimiento en Away3D" width="543" height="370" /></a></p>
<p>Para <em>vaciar</em> esa región, simplemente hemos añadido una condición especial al doble bucle que genera el <em>array</em> de prismas:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> i<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">475</span>; i <span style="color: #000000; font-weight: bold;">&lt;</span>= <span style="color: #000000; font-weight:bold;">475</span>; i <span style="color: #000000; font-weight: bold;">+</span>= <span style="color: #000000; font-weight:bold;">50</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
    <span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> j<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">475</span>; j <span style="color: #000000; font-weight: bold;">&lt;</span>= <span style="color: #000000; font-weight:bold;">475</span>; j <span style="color: #000000; font-weight: bold;">+</span>= <span style="color: #000000; font-weight:bold;">50</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
        <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>i <span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">250</span> <span style="color: #000000; font-weight: bold;">||</span> i <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight:bold;">250</span> <span style="color: #000000; font-weight: bold;">||</span> j <span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">250</span> <span style="color: #000000; font-weight: bold;">||</span> j <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight:bold;">250</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
            <span style="color: #009900;">// Crear un prisma en esta posición</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>La clase que nos facilita estadísticas internas del motor gráfico de <em>Away3D</em> se llama <a href="http://away3d.com/livedocs/3.5.0_lib/away3d/debug/AwayStats.html" target="_blank"><code>AwayStats</code></a>:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> a<span style="color: #000000; font-weight: bold;">:</span>AwayStats = <span style="color: #0033ff; font-weight: bold;">new</span> AwayStats <span style="color: #000000;">&#40;</span>_view<span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">addChild</span> <span style="color: #000000;">&#40;</span>a<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p style="text-align: left;">El cuadro que aparece arriba a la izquierda (aquí ampliado) nos da información sobre la tasa real de cuadros por segundo frente a la deseada (6 sobre 60 en este instante). Haciendo clic en la parte inferior o superior de  la gráfica podemos reducir o incrementar, respectivamente, la frecuencia de refresco. Obviamente, cuando el motor gráfico no consigue alcanzar el refresco deseado, aumentar el valor de éste no tendrá ningún efecto práctico. También podemos ver aquí <strong>información acerca del consumo de memoria y el número de polígonos que son visibles en la escena</strong> en un momento determinado. En una futura entrega, cuando comparemos entre sí las distintas bibliotecas, explicaremos el porqué de estos números.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-416" title="Cuadro resumen de estadísticas de Away3D" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/away-stats.png" alt="Cuadro resumen de estadísticas de Away3D" width="375" height="225" /></p>
<p>Próxima entrega: <em>Sandy 3D Engine</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nosmoke.cycle-it.com/2010/07/19/away/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bibliotecas 3D para Flash: Papervision3D</title>
		<link>http://nosmoke.cycle-it.com/2010/07/13/papervision/</link>
		<comments>http://nosmoke.cycle-it.com/2010/07/13/papervision/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 15:51:30 +0000</pubDate>
		<dc:creator>Antonio Olmo Titos</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[análisis]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[hello]]></category>
		<category><![CDATA[helloworld]]></category>
		<category><![CDATA[hola]]></category>
		<category><![CDATA[holamundo]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[introducción]]></category>
		<category><![CDATA[introduction]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[mundo]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[prueba]]></category>
		<category><![CDATA[rendimiento]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[world]]></category>

		<guid isPermaLink="false">http://blog.cycle-it.com/?p=353</guid>
		<description><![CDATA[Tweet De las tres opciones para gráficos 3D en Flash que mencionamos en la entrada anterior, la primera que vamos a presentar con detalle es Papervision3D. Una característica interesante del proyecto (y que comparte con los otros proyectos 3D que analizaremos más adelante) es que es software libre. En concreto, Papervision se publica bajo una [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fnosmoke.cycle-it.com%2F2010%2F07%2F13%2Fpapervision%2F&amp;via=cycle_it&amp;text=Bibliotecas+3D+para+Flash%3A+Papervision3D&amp;lang=es&amp;count=vertical"  data-counturl="http://nosmoke.cycle-it.com/2010/07/13/papervision/"  style="" class="twitter-share-button">Tweet</a></div>
<p style="text-align: left;"><img class="aligncenter size-full wp-image-354" title="Logo de Papervision3D" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/logo-Papervision.png" alt="Logo de Papervision3D" width="276" height="131" /></p>
<p style="text-align: left;">De las tres opciones para gráficos 3D en Flash que mencionamos en <a href="http://blog.cycle-it.com/2010/07/05/3d/" target="_self">la entrada anterior</a>, la primera que vamos a presentar con detalle es <strong><em>Papervision3D</em></strong>.</p>
<p style="text-align: left;">Una característica interesante del proyecto (y que comparte con los otros proyectos 3D que analizaremos más adelante) es que es <strong>software libre</strong>. En concreto, <em>Papervision</em> se publica bajo una <a href="http://www.opensource.org/licenses/mit-license.php" target="_blank">licencia MIT</a>, que está considerada una licencia <em>open source</em>. Este detalle es especialmente interesante para nosotros porque, al tener acceso al código fuente, podemos leer directamente el código para averiguar cómo usa exactamente la biblioteca algunas propiedades de clase y parámetros de métodos que por desgracia no están descritos en la <a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/index.html" target="_blank">documentación oficial de las clases</a>.</p>
<p>El <strong>sitio web principal de <em>Papervision</em></strong> es <a href="http://papervision3d.org/" target="_blank">papervision3d.org</a> (la intro Flash de esta página es en sí misma <strong>un buen ejemplo de <em>Papervision</em></strong>, aunque demasiado <em>pesado</em>). Si embargo, el grueso de los recursos —código fuente, binarios, documentación, etc.— se encuentra en <a href="http://code.google.com/p/papervision3d/" target="_blank"><strong>la página correspondiente de <em>Google Code</em></strong></a>. La última versión empaquetada de la biblioteca es la 2.1.932 y el SWC correspondiente ocupa unos 485 KB. La URL del <strong>repositorio <em>Subversion</em></strong> con el código fuente es <code>http://papervision3d.googlecode.com/svn/trunk</code>.</p>
<p><span style="font-size: larger;"><strong>Un <em>holamundo</em> en <em>Papervision3D</em></strong></span> — <a href="http://labs.cycle-it.com/papervision/helloworld/Main.html" target="_blank">Flash</a>, <a href="http://labs.cycle-it.com/papervision/helloworld/srcview/index.html" target="_blank">fuente</a></p>
<p>Veamos cuáles son los <strong>elementos mínimos que deben existir en cualquier mundo 3D</strong> (esta terminología es común a la mayoría de sistemas):</p>
<ul>
<li><strong>Vista</strong>. Es el componente que sirve de base y que va a contener al resto de elementos.</li>
<li><strong>Escena</strong>. Son todos los objetos y efectos que se van a mostrar, o sea la definición del entorno en tres dimensiones.</li>
<li><strong>Cámara</strong>. Obviamente, se trata de una cámara virtual; una abstracción que nos permite introducirnos en el mundo 3D y observarlo desde un determinado punto de vista.</li>
<li><strong>Visor (<em>viewport</em>)</strong>. Podemos pensar en el visor como en una pantalla de cine, o de televisión. Es la superficie plana de forma rectangular sobre la que se proyecta la imagen.</li>
<li><strong>Motor (<em>renderer</em>)</strong>. Es el proceso que hace todos los cálculos necesarios para generar sobre el <em>visor</em> una representación de la <em>escena</em> tal y como se vería desde la <em>cámara</em>.</li>
</ul>
<p>Como primer contacto con <em>Papervision</em>, vamos a escribir <strong>un  ejemplo lo más pequeño posible en Flex 4</strong>. Escribiremos dos clases: una que llamaremos <code>Papervision3DWorld</code> y que se ocupará de  crear y de <em>animar</em> un pequeño mundo 3D, y la típica clase  principal (subclase de <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Application.html?allClasses=1" target="_blank"><code>spark.components.Application</code></a>) que se limitará a instanciar a <code>Papervision3DWorld</code>.</p>
<p>Como ya hemos dicho, <strong>el componente principal a través del cual vamos a ver el mundo 3D que  creemos es la <em>vista</em></strong>. En <em>Papervision</em>, las vistas son  subclases de <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Application.html?allClasses=1" target="_blank"><code>flash.display.Sprite</code></a>. En Flex 4 no es posible  añadir un hijo a <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Application.html?allClasses=1" target="_blank"><code>Container</code></a> mediante <code>addChild(child:DisplayObject)</code>, así  que no podremos añadir una vista directamente a <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Application.html?allClasses=1" target="_blank"><code>Application</code></a>. Lo que  vamos a hacer es <em>envolver</em> la vista en un <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/Application.html?allClasses=1" target="_blank"><code>UIComponent</code></a>, e instanciar este último dentro de la aplicación. (Mantendremos este  mismo enfoque para las otras dos bibliotecas que veamos más adelante).</p>
<p>La escena que vamos a crear es un simple cilindro gris que va a rotar indefinidamente frente a nosotros (siga el enlace del <em>pantallazo</em> para ver <a href="http://labs.cycle-it.com/papervision/helloworld/Main.html" target="_blank">el ejemplo en acción</a>; puede hacer clic con el botón derecho sobre la película Flash para <a href="http://labs.cycle-it.com/papervision/helloworld/srcview/index.html" target="_blank">ver el código fuente y descargarlo</a>):</p>
<p style="text-align: center;"><a href="http://labs.cycle-it.com/papervision/helloworld/Main.html" target="_blank"><img class="aligncenter size-full wp-image-355" title="Holamundo en Papervision3D" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/helloworld_screenshot.png" alt="Holamundo en Papervision3D" width="555" height="355" /></a></p>
<p>Para hacer esto, podríamos crear y configurar <em>a mano</em> los cinco elementos mencionados arriba. Sin embargo, <strong><em>Papervision</em> facilita la creación de vistas simples mediante una vista ya </strong>«<strong>precocinada</strong>»: basta con instanciar la clase <a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/view/BasicView.html" target="_blank"><code>BasicView</code></a> con unos pocos parámetros. Entre esos parámetros, y dado que esto es una prueba básica, vamos a especificar una cámara de tipo <em>depuración</em>, que tiene la ventaja de que nos permitirá algunos movimientos con el teclado y el ratón. Añadimos la vista como hija de <code>Papervision3DWorld</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _view<span style="color: #000000; font-weight: bold;">:</span>BasicView;</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">_view = <span style="color: #0033ff; font-weight: bold;">new</span> BasicView <span style="color: #000000;">&#40;</span><span style="color: #004993;">width</span>, <span style="color: #004993;">height</span>, <span style="color: #0033ff; font-weight: bold;">true</span>, <span style="color: #0033ff; font-weight: bold;">true</span>, CameraType.DEBUG<span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">addChild</span> <span style="color: #000000;">&#40;</span>_view<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p style="text-align: left;">Cualquier objeto que se cree en <em>Papervision</em> (incluyendo objetos especiales como una cámara) se coloca por defecto en el centro del sistema de coordenadas. Como pensamos dejar el cilindro en <em>(0, 0, 0)</em>, vamos a alejar la cámara 1000 unidades hacia atrás en el eje <em>z</em> (ese es el eje que va perpendicular a nuestra pantalla, <em>hacia dentro</em> de ésta). También vamos a ajustar el campo visual de la cámara a 60°.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">_view.camera.z = <span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">1000</span>;
_view.camera.fov = <span style="color: #000000; font-weight:bold;">60</span>;</pre></div></div>

<p>A continuación, vamos a crear el cilindro. <strong>Como la mayoría de sistemas de modelado y visualización 3D, <em>Papervision</em> nos ofrece unas pocas «primitivas»: objectos simples, generalmente poliedros, que podemos usar como bloques con los que construir escenas más complejas</strong>. Vamos a usar la primitiva <a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/objects/primitives/Cylinder.html" target="_blank"><code>Cylinder</code></a> (que es en realidad un tronco de cono) dándole 200 unidades de radio tanto en la base como en la parte superior, y 800 unidades de altura. El resto de parámetros definen el material (un color plano) y el número de polígonos que se usarán para aproximar las superficies planas y curvas del objeto. Si no rotamos el cilindro, lo veremos de frente y en vertical, como si estuviésemos delante de la columna de un edificio. Para poder ver sus bases y hacerlo más interesante, lo rotamos sobre dos ejes. El último paso es añadir el cilindro a la escena (que, recordemos, es parte de la vista).</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _object<span style="color: #000000; font-weight: bold;">:</span>DisplayObject3D;</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">_object = <span style="color: #0033ff; font-weight: bold;">new</span> Cylinder <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> FlatShadeMaterial <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span>, <span style="color: #000000; font-weight:bold;">200</span>, <span style="color: #000000; font-weight:bold;">800</span>, <span style="color: #000000; font-weight:bold;">100</span>, <span style="color: #000000; font-weight:bold;">1</span>, <span style="color: #000000; font-weight:bold;">200</span>, <span style="color: #0033ff; font-weight: bold;">true</span>, <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>;
_object.rotationX = <span style="color: #000000; font-weight:bold;">30</span>;
_object.rotationZ = <span style="color: #000000; font-weight:bold;">60</span>;
_view.scene.<span style="color: #004993;">addChild</span> <span style="color: #000000;">&#40;</span>_object<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>Finalmente, para que el objeto se mueva necesitamos alterar su orientación ligeramente cada vez que Flash dibuje un cuadro nuevo, y pedirle explícitamente a <em>Papervision</em> que renderice de nuevo la vista para reflejar los cambios en la escena. Esto se consigue asociando un manejador al evento <code>enterFrame</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #004993;">addEventListener</span> <span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">ENTER_FRAME</span>, <span style="color: #004993;">render</span><span style="color: #000000;">&#41;</span>;</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">render</span> <span style="color: #000000;">&#40;</span>e<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
    _object.rotationY <span style="color: #000000; font-weight: bold;">+</span>= <span style="color: #000000; font-weight:bold;">1</span>;
    _view.singleRender <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>El cuadro negro de la parte superior izquierda es otra consecuencia de usar <a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/cameras/DebugCamera3D.html" target="_blank"><code>org.papervision3d.cameras.DebugCamera3D</code></a>: muestra la posición y la orientación de la cámara, así como algunas otras propiedades de ésta. Pruebe a hacer clic sobre la escena y a usar el ratón y el teclado para moverse dentro de ella.</p>
<p><span style="font-size: larger;"><strong>Pruebas de rendimiento con <em>Papervision3D</em></strong></span> — <a href="http://labs.cycle-it.com/papervision/benchmark/Main.html" target="_blank">Flash</a>, <a href="http://labs.cycle-it.com/papervision/benchmark/srcview/index.html" target="_blank">fuente</a></p>
<p><img class="alignright size-full wp-image-386" title="Modelo de cilindro en alambre" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/cylinder.png" alt="Modelo de cilindro en alambre" width="285" height="297" /></p>
<p><strong>El <em>holamundo</em> que acabamos de escribir incluye sólo un objeto con pocos polígonos</strong>. En concreto, si miramos los valores que pasamos como parámetros al constructor del cilindro, veremos que la superficie curva se está aproximando con <em>n=100</em> segmentos. Ese nivel de detalle produce <em>n×2=200</em> triángulos recubriendo toda la altura del cilindro, mientras que cada una de las dos bases está compuesta por <em>n-2=98</em> triángulos. Esto arroja un total de <em>200+(2×98)=396</em> triángulos.</p>
<p>La forma en la que un objeto como este se aproxima usando únicamente triángulos queda más clara si cambiamos un poco la llamada al constructor del cilindro para asignarle un material de tipo alambre negro y bajamos mucho el número de segmentos para simplificar la figura:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">_object = <span style="color: #0033ff; font-weight: bold;">new</span> Cylinder <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> WireframeMaterial <span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, <span style="color: #000000; font-weight:bold;">1</span>, <span style="color: #000000; font-weight:bold;">2</span><span style="color: #000000;">&#41;</span>, <span style="color: #000000; font-weight:bold;">200</span>, <span style="color: #000000; font-weight:bold;">800</span>, <span style="color: #000000; font-weight:bold;">10</span>, <span style="color: #000000; font-weight:bold;">1</span>, <span style="color: #000000; font-weight:bold;">200</span>, <span style="color: #0033ff; font-weight: bold;">true</span>, <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p><strong>Vamos a poner a prueba a <em>Papervision3D</em> aumentando el número de polígonos</strong>: crearemos 400 objetos dispuestos en un cuadrado de 20×20 objetos. Seguiremos usando la primitiva <a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/objects/primitives/Cylinder.html" target="_blank"><code>Cylinder</code></a>, pero esta vez reduciremos el número de segmentos a <em>n=4</em>, obteniendo en la práctica prismas de base cuadrada.</p>
<p>Siguiendo la fórmula anterior, cada prisma estará compuesto por <em>4×n-4=12</em> triángulos. En total, <em>400×12=4800</em> triángulos en la escena. A cada objeto le asignaremos un color ligeramente diferente, creando un degradado, y una rotación inicial también distinta (siga el enlace del <em>pantallazo</em> para ver <a href="http://labs.cycle-it.com/papervision/benchmark/Main.html" target="_blank">la prueba de rendimiento en acción</a>; puede hacer clic con el botón derecho sobre la película Flash para <a href="http://labs.cycle-it.com/papervision/benchmark/srcview/index.html" target="_blank">ver el código fuente y descargarlo</a>):</p>
<p style="text-align: center;"><a href="http://labs.cycle-it.com/papervision/benchmark/Main.html" target="_blank"><img class="aligncenter size-full wp-image-356" title="Prueba de rendimiento en Papervision3D" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/benchmark_screenshot.png" alt="Prueba de rendimiento en Papervision3D" width="554" height="355" /></a></p>
<p>Para medir la eficiencia del resultado, usaremos la clase <a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/view/stats/StatsView.html" target="_blank"><code>StatsView</code></a>, que muestra en tiempo real algunas estadísticas internas de <em>Papervision</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _stats<span style="color: #000000; font-weight: bold;">:</span>StatsView;
_stats = <span style="color: #0033ff; font-weight: bold;">new</span> StatsView <span style="color: #000000;">&#40;</span>_view.renderer<span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">addChild</span> <span style="color: #000000;">&#40;</span>_stats<span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>En este caso, en lugar de una propiedad <code>_object</code> de tipo <a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/objects/DisplayObject3D.html" target="_blank"><code>DisplayObject3D</code></a>, tendremos una propiedad <code>_objects</code> de tipo <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/collections/ArrayCollection.html?allClasses=1" target="_blank"><code>ArrayCollection</code></a>. Cada prisma que se crea se añade tanto al vector <code>_objects</code> como a la escena:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _objects<span style="color: #000000; font-weight: bold;">:</span>ArrayCollection;</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> cylinder<span style="color: #000000; font-weight: bold;">:</span>DisplayObject3D;
<span style="color: #6699cc; font-weight: bold;">var</span> colour<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">uint</span>;
&nbsp;
_objects = <span style="color: #0033ff; font-weight: bold;">new</span> ArrayCollection <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> i<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">475</span>; i <span style="color: #000000; font-weight: bold;">&amp;</span>lt;= <span style="color: #000000; font-weight:bold;">475</span>; i <span style="color: #000000; font-weight: bold;">+</span>= <span style="color: #000000; font-weight:bold;">50</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
&nbsp;
    <span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> j<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">int</span> = <span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">475</span>; j <span style="color: #000000; font-weight: bold;">&amp;</span>lt;= <span style="color: #000000; font-weight:bold;">475</span>; j <span style="color: #000000; font-weight: bold;">+</span>= <span style="color: #000000; font-weight:bold;">50</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
        colour = <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>i <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #000000; font-weight:bold;">475</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">191</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight:bold;">950</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #000000; font-weight:bold;">64</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">&amp;</span>lt;<span style="color: #000000; font-weight: bold;">&amp;</span>lt; <span style="color: #000000; font-weight:bold;">16</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">+</span>
            <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>j <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #000000; font-weight:bold;">475</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">191</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight:bold;">950</span> <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #000000; font-weight:bold;">64</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">&amp;</span>lt;<span style="color: #000000; font-weight: bold;">&amp;</span>lt; <span style="color: #000000; font-weight:bold;">8</span><span style="color: #000000;">&#41;</span>;
        cylinder = <span style="color: #0033ff; font-weight: bold;">new</span> Cylinder <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> FlatShadeMaterial <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">null</span>, colour, 0x808080<span style="color: #000000;">&#41;</span>,
            <span style="color: #000000; font-weight:bold;">10</span>, <span style="color: #000000; font-weight:bold;">40</span>, <span style="color: #000000; font-weight:bold;">4</span>, <span style="color: #000000; font-weight:bold;">1</span>, <span style="color: #000000; font-weight:bold;">10</span>, <span style="color: #0033ff; font-weight: bold;">true</span>, <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>;
        cylinder.<span style="color: #004993;">x</span> = i;
        cylinder.<span style="color: #004993;">y</span> = j;
        cylinder.rotationX = <span style="color: #000000;">&#40;</span>i <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #000000; font-weight:bold;">475</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">360</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight:bold;">950</span>;
        cylinder.rotationY = <span style="color: #000000;">&#40;</span>j <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #000000; font-weight:bold;">475</span><span style="color: #000000;">&#41;</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000; font-weight:bold;">360</span> <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight:bold;">950</span>;
        _objects.addItem <span style="color: #000000;">&#40;</span>cylinder<span style="color: #000000;">&#41;</span>;
        _view.scene.<span style="color: #004993;">addChild</span> <span style="color: #000000;">&#40;</span>cylinder<span style="color: #000000;">&#41;</span>;
    <span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>El tipo de cámara, así como su posición y orientación, son distintas a las del programa anterior para mejorar un poco la apariencia y garantizar que todos los objetos de la escena son visibles dentro del visor.</p>
<p>El último cambio es que el método <code>render</code> ahora necesita recorrer todo el vector de objetos para actualizar sus orientaciones uno por uno:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">render</span> <span style="color: #000000;">&#40;</span>e<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span> <span style="color: #0033ff; font-weight: bold;">void</span> <span style="color: #000000;">&#123;</span>
&nbsp;
    <span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #0033ff; font-weight: bold;">each</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> cylinder<span style="color: #000000; font-weight: bold;">:</span>DisplayObject3D <span style="color: #0033ff; font-weight: bold;">in</span> _objects<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
        cylinder.rotationX <span style="color: #000000; font-weight: bold;">+</span>= <span style="color: #000000; font-weight:bold;">4</span>;
        cylinder.rotationY <span style="color: #000000; font-weight: bold;">+</span>= <span style="color: #000000; font-weight:bold;">4</span>;
    <span style="color: #000000;">&#125;</span>
&nbsp;
    _view.singleRender <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Como vemos, <strong>el número de cuadros por segundo que <em>Papervision</em> es capaz de manejar ha bajado notablemente</strong> al complicar la escena. En próximos artículos prestaremos atención a las estadísticas que muestra <a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/view/stats/StatsView.html" target="_blank"><code>StatsView</code></a> y analizaremos la bondad de esta prueba de rendimiento en relación a otras biblioteca Flash para 3D.</p>
<p><a href="http://blog.cycle-it.com/2010/07/19/away/" target="_self">Próxima entrega: <em>Away3D</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://nosmoke.cycle-it.com/2010/07/13/papervision/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<enclosure url='http://nosmoke.cycle-it.com/wp-content/uploads/2010/07/logo-Papervision.png' length ='8349'  type='image/jpg' />	</item>
		<item>
		<title>Panorama de bibliotecas 3D para Flash: introducción</title>
		<link>http://nosmoke.cycle-it.com/2010/07/05/3d/</link>
		<comments>http://nosmoke.cycle-it.com/2010/07/05/3d/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 09:22:59 +0000</pubDate>
		<dc:creator>Antonio Olmo Titos</dc:creator>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[comparación]]></category>
		<category><![CDATA[comparison]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[hello]]></category>
		<category><![CDATA[hola]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[introducción]]></category>
		<category><![CDATA[introduction]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[mundo]]></category>
		<category><![CDATA[Papervision]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[Sandy 3D Engine]]></category>
		<category><![CDATA[Sandy3D]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[world]]></category>

		<guid isPermaLink="false">http://blog.cycle-it.com/?p=338</guid>
		<description><![CDATA[Tweet La plataforma Flash nació como un medio de dos dimensiones. Durante aquellos primeros años, las animaciones Flash que nos encontrábamos en la web eran sobre todo a base de sprites o figuras planas, muy similares a los dibujos animados de la televisión. Sin embargo, ya hace un tiempo que surgieron unas pocas iniciativas de [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fnosmoke.cycle-it.com%2F2010%2F07%2F05%2F3d%2F&amp;via=cycle_it&amp;text=Panorama+de+bibliotecas+3D+para+Flash%3A+introducci%C3%B3n&amp;lang=es&amp;count=vertical"  data-counturl="http://nosmoke.cycle-it.com/2010/07/05/3d/"  style="" class="twitter-share-button">Tweet</a></div>
<p><a href="http://blog.cycle-it.com/wp-content/uploads/2010/07/3D-logos.png"><img class="aligncenter size-full wp-image-345" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/3D-logos.png" alt="Logotipos de tres bibliotecas 3D para Flash" width="500" height="89" /></a></p>
<p>La plataforma Flash nació como un medio de dos dimensiones. Durante aquellos primeros años, las animaciones Flash que nos encontrábamos en la web eran sobre todo a base de <em>sprites</em> o figuras planas, muy similares a los dibujos animados de la televisión.</p>
<p>Sin embargo, ya hace un tiempo que surgieron unas pocas iniciativas de bibliotecas para hacer 3D en ActionScript. Esta progresión nos ha llevado de aquel lienzo plano de los inicios a un verdadero espacio con profundidad dentro del navegador. Dos avances en los últimos años han hecho posible esta transformación: por un lado, la mejora sustancial en el rendimiento del <em>hardware</em> de nuestros equipos; por otro, las sucesivas versiones de <em>Flash Player</em>. Estos dos factores han sido decisivos para que los programadores puedan permitirse los costosos cálculos matemáticos que son necesario para recrear objetos en un espacio de tres dimensiones, darles texturas, moverlos e iluminarlos.</p>
<p>En el panorama de proyectos de bibliotecas 3D para ActionScript nos encontramos principalmente tres opciones: <a href="http://papervision3d.org/" target="_blank">Papervision3D</a>, <a href="http://away3d.com/" target="_blank">Away3D Flash Engine</a> y <a href="http://www.flashsandy.org/" target="_blank">Sandy 3D Engine</a>.</p>
<p>Desde <strong>Cycle IT</strong> queremos presentar cada uno de estos proyectos en un breve artículo. En cada entrega vamos a resumir las características principales de una de estas tres bibliotecas y a enlazar algunos recursos <em>online</em> donde ampliar información. Incluiremos también un <em>holamundo</em> específico para esa biblioteca y mostraremos el código fuente. Finalmente, haremos algunas mediciones básicas sobre ese código de ejemplo: rendimiento en cuadros por segundo, impacto en memoria de los objetos 3D, etc.</p>
<p>Para que las comparaciones entre bibliotecas sean más significativas, el ejercicio será siempre el mismo: crear un cilindro de un color plano y hacerlo rotar delante de la cámara. Se trata de un ejemplo mínimo pero completo de modelado 3D, asignación de materiales y animación.</p>
<p><a href="http://blog.cycle-it.com/2010/07/13/papervision/" target="_self">Próxima entrega: <em>Papervision 3D</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://nosmoke.cycle-it.com/2010/07/05/3d/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<enclosure url='http://nosmoke.cycle-it.com/wp-content/uploads/2010/07/3D-logos-300x53.png' length ='12011'  type='image/jpg' />	</item>
		<item>
		<title>YouTube publica sus primeras conclusiones sobre HTML5</title>
		<link>http://nosmoke.cycle-it.com/2010/07/02/youtube-publica-sus-primeras-conclusiones-sobre-html5/</link>
		<comments>http://nosmoke.cycle-it.com/2010/07/02/youtube-publica-sus-primeras-conclusiones-sobre-html5/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 12:38:20 +0000</pubDate>
		<dc:creator>Ramón García</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://blog.cycle-it.com/?p=310</guid>
		<description><![CDATA[Tweet Parece ser que el gran actor del vídeo en Internet comienza a sacar sus propias conclusiones sobre el estado de madurez de HTML5. Hace un par de días se publicó un post en el blog oficial de YouTube donde quedan claras las carencias de HTML5, y que mientras estas existan no se podrán abordar [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fnosmoke.cycle-it.com%2F2010%2F07%2F02%2Fyoutube-publica-sus-primeras-conclusiones-sobre-html5%2F&amp;via=cycle_it&amp;text=YouTube+publica+sus+primeras+conclusiones+sobre+HTML5&amp;lang=es&amp;count=vertical"  data-counturl="http://nosmoke.cycle-it.com/2010/07/02/youtube-publica-sus-primeras-conclusiones-sobre-html5/"  style="" class="twitter-share-button">Tweet</a></div>
<p><a href="http://blog.cycle-it.com/wp-content/uploads/2010/07/youtube_love_flash.gif"><img class="size-full wp-image-326 alignleft" title="youtube_love_flash" src="http://blog.cycle-it.com/wp-content/uploads/2010/07/youtube_love_flash.gif" alt="" width="570" height="86" /></a><br />
<br style="clear:both"/><br />
Parece ser que el gran actor del vídeo en Internet comienza a sacar sus propias conclusiones sobre el estado de madurez de HTML5.</p>
<p>Hace un par de días se publicó <a href="http://apiblog.youtube.com/2010/06/flash-and-html5-tag.html">un post en el blog oficial de YouTube</a> donde quedan claras las carencias de HTML5, y que mientras estas existan no se podrán abordar soluciones de vídeo complejas y profesionales mediante esta tecnología.</p>
<blockquote><p>We need to do more than just point the browser at a video file like the  image tag does</p></blockquote>
<p>La frase es bastante clara y creo que resume de forma concisa la totalidad del artículo. Desde hace años, todo el mundo ha conocido las limitaciones de HTML y JavaScript a la hora de implementar aplicaciones web mínimamente complejas. Por este motivo, aparecieron en escena tecnologías como Flash, que dan solución a dichos problemas de una forma eficiente.</p>
<p>La problemática de un Proyecto como YouTube es muy compleja y desprende unos requisitos inabordables con tecnologías poco maduras o inadecuadas. Por este motivo, para dar solución a dicha problemática se han de combinar distintas tecnologías (por ejemplo HTML y Flash, sin contar tecnologías server-side) y así poder llegar a una solución satisfactoria para usuarios y clientes, que al final son quienes realmente importan.</p>
<p>El análisis no deja lugar a dudas: La aparición de HTML5 no cambiará YouTube, al menos a corto plazo.</p>
]]></content:encoded>
			<wfw:commentRss>http://nosmoke.cycle-it.com/2010/07/02/youtube-publica-sus-primeras-conclusiones-sobre-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<enclosure url='http://nosmoke.cycle-it.com/wp-content/uploads/2010/07/youtube-logo-300x212.jpg' length ='10681'  type='image/jpg' />	</item>
		<item>
		<title>Cycle-IT recibe el apoyo de ENISA por su innovador proyecto de empresa</title>
		<link>http://nosmoke.cycle-it.com/2010/06/23/cycle-it-recibe-el-apoyo-de-enisa-por-su-innovador-proyecto-de-empresa/</link>
		<comments>http://nosmoke.cycle-it.com/2010/06/23/cycle-it-recibe-el-apoyo-de-enisa-por-su-innovador-proyecto-de-empresa/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 08:09:17 +0000</pubDate>
		<dc:creator>Alberto García</dc:creator>
				<category><![CDATA[Cycle IT]]></category>
		<category><![CDATA[aje]]></category>
		<category><![CDATA[emprendedores]]></category>
		<category><![CDATA[enisa]]></category>
		<category><![CDATA[innovación]]></category>
		<category><![CDATA[madrid]]></category>
		<category><![CDATA[tecnología]]></category>

		<guid isPermaLink="false">http://blog.cycle-it.com/?p=291</guid>
		<description><![CDATA[Tweet El pasado jueves 16 de junio firmamos con ENISA (Empresa Nacional de Innovación, SA) un préstamo preferente, libre de avales, orientado a la inversión en activos fijos y en activo circulante requerido para el desarrollo de la actividad. Para optar a esta línea de financiación se ha exigido la presentación de un proyecto empresarial [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fnosmoke.cycle-it.com%2F2010%2F06%2F23%2Fcycle-it-recibe-el-apoyo-de-enisa-por-su-innovador-proyecto-de-empresa%2F&amp;via=cycle_it&amp;text=Cycle-IT+recibe+el+apoyo+de+ENISA+por+su+innovador+proyecto+de+empresa&amp;lang=es&amp;count=vertical"  data-counturl="http://nosmoke.cycle-it.com/2010/06/23/cycle-it-recibe-el-apoyo-de-enisa-por-su-innovador-proyecto-de-empresa/"  style="" class="twitter-share-button">Tweet</a></div>
<p><a href="http://blog.cycle-it.com/wp-content/uploads/2010/06/Acto_Firma_ENISA1.jpg"><img class="aligncenter size-full wp-image-303" title="Acto de entrega de préstamos en ENISA" src="http://blog.cycle-it.com/wp-content/uploads/2010/06/Acto_Firma_ENISA1.jpg" alt="" width="499" height="250" /></a>El pasado jueves 16 de junio firmamos con <a href="http://www.enisa.es/" target="_blank">ENISA</a> (Empresa Nacional de Innovación, SA) un préstamo preferente, libre de avales, orientado a la inversión en activos fijos y en activo circulante requerido para el desarrollo de la actividad.</p>
<p>Para optar a esta línea de financiación se ha exigido la presentación de un proyecto empresarial innovador y viable; en este marco Cycle-IT cuenta con las características necesarias y así ha sido reconocido por esta empresa de capital público adscrita al Ministerio de Industria, Turismo y Comercio.</p>
<p>Este voto de confianza reafirma, más si cabe, nuestra convicción sobre lo innovador de nuestro Proyecto, y nos permite mirar hacia adelante con optimismo y avanzar con paso firme. En este sentido, Cycle-IT dedicará parte de estos recursos a inversión en tecnologías que permitan aumentar el volumen de negocio a la vez que optimicen la productividad.</p>
<p>Queremos agradecer una vez más a <a title="Asociación de Jóvenes Empresarios de Madrid" href="http://www.ajemad.es/" target="_blank">AJE Madrid</a> (Asociación de Jóvenes Empresarios de Madrid), y en particular a Raúl Jiménez Frías, por facilitarnos en todo lo posible las gestiones y trámites administrativos que siempre conllevan este tipo de proyectos.</p>
<p>Desde nuestra experiencia, animamos a jóvenes con talento que hayan comenzado recientemente una actividad empresarial de carácter innovador a solicitar estas líneas de financiación. Una ayuda de gran valor especialmente para afrontar con garantías el primer año de actividad de toda nueva empresa.</p>
]]></content:encoded>
			<wfw:commentRss>http://nosmoke.cycle-it.com/2010/06/23/cycle-it-recibe-el-apoyo-de-enisa-por-su-innovador-proyecto-de-empresa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<enclosure url='http://nosmoke.cycle-it.com/wp-content/uploads/2010/06/Acto_Firma_ENISA-300x150.jpg' length ='17266'  type='image/jpg' />	</item>
		<item>
		<title>Nuevas versiones Adobe AIR 2 y Flash Player 10.1</title>
		<link>http://nosmoke.cycle-it.com/2010/06/11/nuevas-versiones-adobe-air-2-y-flash-player-10-1/</link>
		<comments>http://nosmoke.cycle-it.com/2010/06/11/nuevas-versiones-adobe-air-2-y-flash-player-10-1/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 08:21:50 +0000</pubDate>
		<dc:creator>Miguel Martín-Forero</dc:creator>
				<category><![CDATA[air]]></category>
		<category><![CDATA[flash player]]></category>
		<category><![CDATA[adobe air 2.0.2]]></category>
		<category><![CDATA[flash player 10.1]]></category>
		<category><![CDATA[nuevas versiones]]></category>

		<guid isPermaLink="false">http://blog.cycle-it.com/?p=276</guid>
		<description><![CDATA[Tweet Según podemos leer en sus blogs oficiales, ya tenemos disponibles para descarga las versiones definitivas de Adobe AIR 2 y Flash Player 10.1. Hemos podido disfrutar, durante sus respectivas fases beta, de las notables mejoras respecto al rendimiento que aportan, a parte de las nuevas capacidades y funcionalidades que presentan. Entre ellas: Rendimiento y eficiencia [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fnosmoke.cycle-it.com%2F2010%2F06%2F11%2Fnuevas-versiones-adobe-air-2-y-flash-player-10-1%2F&amp;via=cycle_it&amp;text=Nuevas+versiones+Adobe+AIR+2+y+Flash+Player+10.1&amp;lang=es&amp;count=vertical"  data-counturl="http://nosmoke.cycle-it.com/2010/06/11/nuevas-versiones-adobe-air-2-y-flash-player-10-1/"  style="" class="twitter-share-button">Tweet</a></div>
<p><a href="http://blog.cycle-it.com/wp-content/uploads/2010/06/flashplayer_10.jpg"><img class="alignleft size-full wp-image-285" title="flashplayer_10" src="http://blog.cycle-it.com/wp-content/uploads/2010/06/flashplayer_10.jpg" alt="Flash player 10.1 y Adobe AIR 2.0.2" width="525" height="79" /></a><br />
<br style="clear: both;" /><br />
Según podemos leer en sus blogs oficiales, ya tenemos disponibles para descarga las versiones definitivas de <a title="Adobe AIR 2" href="http://blogs.adobe.com/air/2010/06/introducing_air_2.html" target="_blank">Adobe AIR 2</a> y <a title="Flash Player 10.1" href="http://blogs.adobe.com/flashplayer/2010/06/flash_player_101_now_available.html" target="_blank">Flash Player 10.1</a>. Hemos podido disfrutar, durante sus respectivas fases beta, de las notables mejoras respecto al rendimiento que aportan, a parte de las nuevas capacidades y funcionalidades que presentan. Entre ellas:</p>
<ul>
<li>Rendimiento y eficiencia</li>
<li>Mejoras en vídeo</li>
<li>Multi-touch</li>
<li>Modo de navegación privada</li>
<li>Mejoras específicas para Mac</li>
<li>Integración en dispositivos móviles</li>
<li>etc.</li>
</ul>
<p>Además, desde Adobe, se han preocupado de ir moviendo el lanzamiento de estas versiones con seminarios por internet, cursos, <em>posts </em>para ir mostrando y demostrando la potencia de estas nuevas versiones:</p>
<ul>
<li><a title="Native installers in AIR 2" href="http://www.webkitchen.be/2010/06/11/video-tutorial-creative-native-installers-in-air-2/" target="_blank"><em>Video tutorial: Create native installers in AIR 2 por Serge Jespers</em></a></li>
<li><em><a title="Growl and Adobe AIR 2" href="http://www.webkitchen.be/2010/03/15/using-growl-in-air-applications-with-air-2/" target="_blank">Using Growl in AIR applications with AIR 2 NativeProcess por Serge Jespers</a></em></li>
<li><em><a href="http://www.adobe.com/devnet/air/ajax/articles/air_and_webkit.html" target="_blank">What&#8217;s new about HTML, HTML5, CSS and JavaScript in AIR 2 por Mihai Balan</a></em></li>
<li><em><a title="Security in Flash Player 10.1 and AIR 2" href="Understanding the security changes in Flash Player 10.1 and AIR 2" target="_blank">Security changes in Flash Player 10.1 and AIR 2</a></em></li>
<li><em><a title="NativeProcess API AIR 2" href="http://www.adobe.com/devnet/air/flex/articles/air_screenrecording.html" target="_blank">Using the AIR 2 NativeProcess API to create a screen recorder por Benjamin Dobler</a></em></li>
<li><a title="Multi-touch" href="http://theflashblog.com/?p=2065" target="_blank"><em>Multi-touch water simulation example por Lee Brimelow</em></a></li>
</ul>
<p>Lo único de lo que no se han preocupado de momento es de ofrecer las versiones de depuración de Flash Player 10.1. ¿Nos han dejado a los desarrolladores para más adelante?</p>
<p>¿A qué esperáis para descargaros las nuevas versiones y descubrir toda su potencia? Os lo dejamos algo más fácil <img src='http://nosmoke.cycle-it.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<ul>
<li><a title="Flash Player 10.1" href="http://get.adobe.com/es/flashplayer/" target="_blank">Flash Player 10.1</a></li>
<li><a title="Get Adobe AIR 2.0.2" href="http://get.adobe.com/es/air/" target="_blank">Adobe AIR 2</a></li>
</ul>
<p>PD: Como nota de humor y jocosidad, os dejamos también una <a title="Flash vs HTML5" href="http://www.flashlab.com/html5/" target="_blank">pequeña mofa comparativa entre html5 y flash</a>. Espero que la disfrutéis con humor <img src='http://nosmoke.cycle-it.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://nosmoke.cycle-it.com/2010/06/11/nuevas-versiones-adobe-air-2-y-flash-player-10-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<enclosure url='http://nosmoke.cycle-it.com/wp-content/uploads/2010/06/flashplayer_10.1_air_2.0.2-300x46.gif' length ='6280'  type='image/jpg' />	</item>
		<item>
		<title>Android 2.2 SDK</title>
		<link>http://nosmoke.cycle-it.com/2010/05/27/android-2-2-sdk/</link>
		<comments>http://nosmoke.cycle-it.com/2010/05/27/android-2-2-sdk/#comments</comments>
		<pubDate>Thu, 27 May 2010 08:12:00 +0000</pubDate>
		<dc:creator>Ramón García</dc:creator>
				<category><![CDATA[flash player]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[sdk]]></category>
		<category><![CDATA[vic gundotra]]></category>

		<guid isPermaLink="false">http://blog.cycle-it.com/?p=251</guid>
		<description><![CDATA[Tweet Ya hace una semana de Google IO 2010 donde se presentan las últimas novedades tecnológicas de la compañía. Esta presentación será recordada por un gran discurso de Vic Gundotra, vicepresidente de ingeniería de Google y ex-evangelista de Microsoft, donde defendía la libertad de elección en el mundo del software y la necesidad de un [...]]]></description>
			<content:encoded><![CDATA[<div class="tw_button" style="float: right; margin-left: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fnosmoke.cycle-it.com%2F2010%2F05%2F27%2Fandroid-2-2-sdk%2F&amp;via=cycle_it&amp;text=Android+2.2+SDK&amp;lang=es&amp;count=vertical"  data-counturl="http://nosmoke.cycle-it.com/2010/05/27/android-2-2-sdk/"  style="" class="twitter-share-button">Tweet</a></div>
<p><a href="http://blog.cycle-it.com/wp-content/uploads/2010/05/android.jpg"><img class="alignleft size-medium wp-image-264" src="http://blog.cycle-it.com/wp-content/uploads/2010/05/android-300x225.jpg" alt="" width="180" height="135" /></a>Ya hace una semana de Google IO 2010 donde se presentan las últimas novedades tecnológicas de la compañía. Esta presentación será recordada por un gran discurso de Vic Gundotra, vicepresidente de ingeniería de Google y ex-evangelista de Microsoft, donde defendía la libertad de elección en el mundo del software y la necesidad de un sistema operativo abierto.</p>
<p>Obviamente, lo más interesante de toda la presentación fue Froyo (Android 2.2), que incluye grandes mejoras respecto a su predecesor Eclair (Android 2.0/2.1) como compilador JIT, integración del motor de Chrome o soporte para Adobe Flash Player 10.1, entre otras muchas novedades.</p>
<p>Desde mi punto de vista, me parece que Google lo está haciendo muy bien con Android y eso se refleja en el mercado. Si nos fijamos en el número de fabricantes que ya han adoptado Android da escalofrío. Revisando sus terminales podemos ir desde un Nexus One hasta IVY, el SmartPhone low-cost de Telefónica + Huawei. Y eso que aún no ha empezado la batalla de los tablets.</p>
<p>Cabe destacar que Android no se queda ahí, ya se está preparando la nueva versión con soporte para <a title="WebM" href="http://www.webmproject.org/" target="_blank">WebM</a>. Para los que no conozcáis WebM, es un proyecto dirigido a crear un formato de vídeo abierto de alta calidad para la web. Este proyecto está apoyado por Mozilla, Opera, Adobe, Google y otras cuarenta empresas.</p>
<p>Para concluir, aquí os dejamos con Vic Gundotra</p>
<p><a href="http://nosmoke.cycle-it.com/2010/05/27/android-2-2-sdk/"><em>Pinche aquí para ver el vídeo</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://nosmoke.cycle-it.com/2010/05/27/android-2-2-sdk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<enclosure url='http://nosmoke.cycle-it.com/wp-content/uploads/2010/05/android-300x225.jpg' length ='6193'  type='image/jpg' />	</item>
	</channel>
</rss>
