<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.1" -->
<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/"
	>

<channel>
	<title>Consultoria y Formacion Adobe</title>
	<link>http://cursosadobe.es</link>
	<description>Profesionales Certificados en soluciones Adobe</description>
	<pubDate>Sat, 06 Mar 2010 22:01:55 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>
	<language>en</language>
			<item>
		<title>Comentarios del taller de SEO en la cámara de comercio</title>
		<link>http://cursosadobe.es/comentarios-del-taller-de-seo-en-la-camara-de-comercio/</link>
		<comments>http://cursosadobe.es/comentarios-del-taller-de-seo-en-la-camara-de-comercio/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 12:25:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[cursos]]></category>

		<category><![CDATA[bogota]]></category>

		<category><![CDATA[cristalab]]></category>

		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://cursosadobe.es/comentarios-del-taller-de-seo-en-la-camara-de-comercio/</guid>
		<description><![CDATA[  A todos los asistentes del taller de SEO, al finalizar, les pedimos que dejen aquí sus criticas, comentarios y opniones del taller de posicionamiento en buscadores que hicimos hoy en la Cámara de Comercio de Bogotá. 
También recuerden compartir sus videos de youtube, imágenes, fotos, anécdotas y otras historias que quieran contar a [...]]]></description>
			<content:encoded><![CDATA[<p>  A todos los asistentes del <strong>taller de SEO</strong>, al finalizar, les pedimos que dejen aquí sus criticas, comentarios y opniones del <a class="arti_link" href="http://www.cristalab.com/seo">taller de posicionamiento en buscadores</a> que hicimos hoy en la Cámara de Comercio de Bogotá. </p>
<p>También recuerden compartir sus videos de youtube, imágenes, fotos, anécdotas y otras historias que quieran contar a la comunidad.</p>
<p>Gracias por haber asistido al curso. Los esperamos la próxima.</p>
<p>PD. Sí, planeamos hacerlo en México, Argentina, Chile y Perú.
<p><a href="http://www.cristalab.com/blog/comentarios-del-taller-de-seo-en-la-camara-de-comercio-c85363l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p>
<div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=66fYHCIN-Mw:PrjquFcQn_o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=66fYHCIN-Mw:PrjquFcQn_o:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/clab/~4/66fYHCIN-Mw" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://cursosadobe.es/comentarios-del-taller-de-seo-en-la-camara-de-comercio/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Enviar y recibir datos UDP con Adobe AIR 2.0</title>
		<link>http://cursosadobe.es/enviar-y-recibir-datos-udp-con-adobe-air-20/</link>
		<comments>http://cursosadobe.es/enviar-y-recibir-datos-udp-con-adobe-air-20/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 14:27:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[udp]]></category>

		<category><![CDATA[10.1]]></category>

		<category><![CDATA[air]]></category>

		<category><![CDATA[actionscript_3]]></category>

		<category><![CDATA[Adobe Flex 3]]></category>

		<guid isPermaLink="false">http://cursosadobe.es/enviar-y-recibir-datos-udp-con-adobe-air-20/</guid>
		<description><![CDATA[  En este tip, aprenderemos a enviar información a través de UDP (Universal Datagram Protocol) que es una nueva característica de Adobe AIR 2.0 que nos permitirá enviar y recibir datos, que al ser UDP no garantiza la recepción o entrega, ya que sus cabeceras no llevan el control de datos haciendo ligero los [...]]]></description>
			<content:encoded><![CDATA[<p>  En este <a class="arti_link" href="http://www.cristalab.com/tips/">tip</a>, aprenderemos a enviar información a través de <a class="arti_link" href="http://es.wikipedia.org/wiki/User_Datagram_Protocol">UDP</a> (Universal Datagram Protocol) que es una nueva característica de <a class="arti_link" href="http://www.cristalab.com/tags/air/">Adobe AIR 2.0</a> que nos permitirá enviar y recibir datos, que al ser UDP no garantiza la recepción o entrega, ya que sus cabeceras no llevan el control de datos haciendo ligero los envíos. Al ser así, se puede usar esta nueva característica para aplicaciones con baja latencia y donde la perdida de datos sea indiferente. Por ejemplo puedes utilizar esto con aplicaciones en tiempo real o juegos multiplayer, ejemplos o utilidades pueden haber miles, depende mucho del análisis que hagas.</p>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/air/air_udp/air_udp01.jpg" border="0" /></div>
<p>Para este ejemplo, como ya saben, necesitan tener <a class="arti_link" href="http://www.cristalab.com/tips/como-trabajar-con-flex-4-gumbo-en-flex-builder-3-c67233l/">Flash Builder o eclipse con el SDK de AIR 2.0</a>. De la misma forma puedes <a class="arti_link" href="http://www.cristalab.com/tips/acceder-a-dispositivos-de-almacenamiento-en-air-2.0-c85089l/">ver</a> los <a class="arti_link" href="http://www.cristalab.com/tips/control-de-errores-globales-en-adobe-air-2.0-c84982l/">anteriores</a> <a class="arti_link" href="http://www.cristalab.com/tips/accede-a-las-dns-desde-adobe-air-2-c84947l/">tips</a> <a class="arti_link" href="http://www.cristalab.com/tips/multitouch-con-adobe-air-2-flash-lite-4-y-flash-player-10.1-c84877l/">que</a> <a class="arti_link" href="http://www.cristalab.com/tips/abrir-archivos-desde-adobe-air-2.0-c84897l/">escribí</a> para que te sientas familiarizado con <a class="arti_link" href="http://www.cristalab.com/tags/air/">Adobe AIR</a>.</p>
<p>Usaremos la clase <a class="arti_link" href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/net/DatagramSocket.html">DatagramSocket</a> y para eso crearemos una instancia de esta clase. Asimismo, tendremos una variable con la dirección IP que usaremos para la conexión. En este ejemplo usaré la dirección local de mi computador, puedes poner IP de máquinas en tu red y usar el ejemplo en más de un computador.</p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private var $__datagramSocket&#58;DatagramSocket;
private var $__IP&#58;String = &quot;127.0.0.1&quot;;
</pre>
<p>Cuando la aplicación se inicie crearemos el constructor de la clase DatagramSocket, agregando un escuchador que permita detectar cuando un mensaje fue recibido:</p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
$__datagramSocket = new DatagramSocket&#40;&#41;;
$__datagramSocket.addEventListener&#40; DatagramSocketDataEvent.DATA, dataReceived, false, 0, true &#41;;
</pre>
<p>Adicional a esto el método bind() nos permite establecer la conexión entre el puerto que usaremos y la dirección IP que servirá para dicha conexión. El método receive() es quien nos permite iniciar la escucha de los datos enviados.</p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
$__datagramSocket.bind&#40; 55555, $__IP &#41;;
$__datagramSocket.receive&#40;&#41;;
</pre>
<p>El método que usaremos para escuchar cuando los datos lleguen es dataReceived:</p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private function dataReceived&#40; event&#58;DatagramSocketDataEvent &#41;&#58;void&#123;
&nbsp; &nbsp;campo.text = campo.text + &quot;nOtro dice&#58; &quot; + event.data.toString&#40;&#41;;
&#125;
</pre>
<p>Para este tip, crearemos un ejemplo básico de chat enviando texto y mostrando la información de otro usuario. Para eso crearemos la siguiente interfaz:</p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo flex">
&lt;s&#58;Label text=&quot;Chat&#58;&quot; width=&quot;200&quot;&nbsp; fontWeight=&quot;bold&quot;/&gt;
&lt;s&#58;TextArea width=&quot;200&quot; height=&quot;200&quot; id=&quot;campo&quot; text=&quot;...INICIA CHAT...&quot;&nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;verticalAlign=&quot;bottom&quot; editable=&quot;false&quot;/&gt;
&lt;s&#58;Label text=&quot;Enviar&#58;&quot; width=&quot;200&quot;&nbsp; fontWeight=&quot;bold&quot;/&gt;
&lt;s&#58;TextInput id=&quot;txtInput&quot; width=&quot;200&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; click=&quot;&#123;txtInput.text = ''&#125;&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; keyDown=&quot;send&#40;event&#41;&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; text=&quot;Escribe aqu’ y presiona enter&quot; /&gt;
</pre>
<p>Como ven en el código, al presionar una tecla llamará al método send, nosotros validaremos que sea con ENTER:</p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private function send&#40; e&#58;KeyboardEvent = null &#41;&#58;void
&#123;
&nbsp; &nbsp;if&#40; e.keyCode == Keyboard.ENTER &#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;var data&#58;ByteArray = new ByteArray&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;data.writeUTFBytes&#40;txtInput.text&#41;;

&nbsp; &nbsp;&nbsp; &nbsp;$__datagramSocket.send&#40; data, 0, 0, $__IP, 55554&#41;;

&nbsp; &nbsp;&nbsp; &nbsp;campo.text = campo.text + &quot;nTu dices&#58; &quot; + txtInput.text;
&nbsp; &nbsp;&nbsp; &nbsp;txtInput.text = &quot;&quot;;
&nbsp; &nbsp;&#125;
&#125;
</pre>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/air/air_udp/air_udp02.jpg" border="0" /></div>
<p>Es necesario aclarar que los puertos donde se conectarán deben estar libres y no siendo utilizados incluso por varias de esta misma app, además de tener permisos de seguridad. Aquí te dejo el código completo de la app que hice, es sólo un demo pero creo que sirve como base para que puedas crear cosas impresionantes.</p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo flex">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;s&#58;WindowedApplication xmlns&#58;fx=&quot;http&#58;//ns.adobe.com/mxml/2009&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;xmlns&#58;s=&quot;library&#58;//ns.adobe.com/flex/spark&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;xmlns&#58;mx=&quot;library&#58;//ns.adobe.com/flex/mx&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;creationComplete=&quot;init&#40;&#41;&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; width=&quot;236&quot; height=&quot;300&quot;&gt;
&nbsp; &nbsp;&lt;s&#58;layout&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;s&#58;VerticalLayout horizontalAlign=&quot;center&quot; paddingTop=&quot;10&quot;/&gt;
&nbsp; &nbsp;&lt;/s&#58;layout&gt;

&nbsp; &nbsp;
&nbsp; &nbsp;&lt;fx&#58;Script&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;!&#91;CDATA&#91;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private var $__datagramSocket&#58;DatagramSocket;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private var $__IP&#58;String = &quot;127.0.0.1&quot;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function init&#40;&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__datagramSocket = new DatagramSocket&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__datagramSocket.addEventListener&#40; DatagramSocketDataEvent.DATA, dataReceived, false, 0, true &#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__datagramSocket.bind&#40; 55555, $__IP &#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__datagramSocket.receive&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function dataReceived&#40; event&#58;DatagramSocketDataEvent &#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;campo.text = campo.text + &quot;nOtro dice&#58; &quot; + event.data.toString&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function send&#40; e&#58;KeyboardEvent = null &#41;&#58;void
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if&#40; e.keyCode == Keyboard.ENTER &#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var data&#58;ByteArray = new ByteArray&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;data.writeUTFBytes&#40;txtInput.text&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__datagramSocket.send&#40; data, 0, 0, $__IP, 55554&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;campo.text = campo.text + &quot;nTu dices&#58; &quot; + txtInput.text;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;txtInput.text = &quot;&quot;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&#93;&#93;&gt;
&nbsp; &nbsp;&lt;/fx&#58;Script&gt;
&nbsp; &nbsp;
&nbsp; &nbsp;&lt;s&#58;Label text=&quot;Chat&#58;&quot; width=&quot;200&quot;&nbsp; fontWeight=&quot;bold&quot;/&gt;
&nbsp; &nbsp;&lt;s&#58;TextArea width=&quot;200&quot; height=&quot;200&quot; id=&quot;campo&quot; text=&quot;...INICIA CHAT...&quot;&nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;verticalAlign=&quot;bottom&quot; editable=&quot;false&quot;/&gt;
&nbsp; &nbsp;&lt;s&#58;Label text=&quot;Enviar&#58;&quot; width=&quot;200&quot;&nbsp; fontWeight=&quot;bold&quot;/&gt;
&nbsp; &nbsp;&lt;s&#58;TextInput id=&quot;txtInput&quot; width=&quot;200&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; click=&quot;&#123;txtInput.text = ''&#125;&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; keyDown=&quot;send&#40;event&#41;&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; text=&quot;Escribe aqu’ y presiona enter&quot; /&gt;
&nbsp; &nbsp;
&lt;/s&#58;WindowedApplication&gt;
</pre>
<p>Puedes descargar el demo <a class="arti_link" href="http://www.eldervaz.com/cristalab/air2/udp/upd.zip">aquí</a>
<p><a href="http://www.cristalab.com/tips/enviar-y-recibir-datos-udp-con-adobe-air-2.0-c85244l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p>
<div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=Xpm--gULOUE:25xpjDyWIHQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=Xpm--gULOUE:25xpjDyWIHQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/clab/~4/Xpm--gULOUE" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://cursosadobe.es/enviar-y-recibir-datos-udp-con-adobe-air-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Este sábado, taller de posicionamiento en buscadores Bogotá</title>
		<link>http://cursosadobe.es/este-sabado-taller-de-posicionamiento-en-buscadores-bogota/</link>
		<comments>http://cursosadobe.es/este-sabado-taller-de-posicionamiento-en-buscadores-bogota/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 10:44:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[cursos]]></category>

		<category><![CDATA[bogota]]></category>

		<category><![CDATA[cristalab]]></category>

		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://cursosadobe.es/este-sabado-taller-de-posicionamiento-en-buscadores-bogota/</guid>
		<description><![CDATA[  El próximo sábado, 6 de marzo, Cristalab organiza un taller de posicionamiento en buscadores en la cámara de comercio de Bogotá. Enseñaremos todos los trucos y técnicas para posicionar en Google y otros buscadores a tu sitio web. Nos quedan muy pocos cupos, así que si te quieres inscribir, esta es tu última [...]]]></description>
			<content:encoded><![CDATA[<p>  El próximo sábado, 6 de marzo, Cristalab organiza un <a class="arti_link" href="http://www.cristalab.com/taller-posicionamiento-buscadores-bogota/">taller de posicionamiento en buscadores</a> en la cámara de comercio de Bogotá. Enseñaremos todos los trucos y técnicas para posicionar en Google y otros buscadores a tu sitio web. Nos quedan <strong>muy</strong> pocos cupos, así que si te quieres inscribir, esta es tu última oportunidad.</p>
<p>Para inscribirte, sólo tienes que llamar al <strong>3470124</strong> o al <strong>5406280</strong> en Bogotá. El costo es de $150.000 pesos, incluye catering, diploma de certificación y la oportunidad que tu sitio sea optimizado en vivo en las últimas dos horas del taller. <br /><a class="arti_link" href="http://www.cristalab.com/seo">http://www.cristalab.com/seo</a></p>
<h2>Promoción especial para usuarios de Cristalab</h2>
<p>Si eres un usuario registrado del foro de Cristalab y tienes más de <strong>mil clabLevel*</strong>, puedes ir <strong>gratis</strong> si vas con alguien más. Si ya pagaste el curso, entonces puedes llevar a una persona más gratis. Para activar esta promoción, mandame un email a <a href="mailto:cursos@cristalab.com">cursos@cristalab.com</a> con tu nombre de usuario. </p>
<p>Si asistirás al taller y tienes más de <strong>cien clabLevel</strong>, el día del evento, dile esto al staff del registro. Podrás tener regalos especiales.</p>
<p>Realmente quedan pocos cupos, quiero que todos puedan asistir. No pierdan su cupo por no llamar a tiempo. Las lineas atienden en horario de oficina. Cualquier pregunta, la pueden dejar en los comentarios. Espero verlos allá este sábado.</p>
<p><span style="font-size: 11px; line-height: normal"><em>* El <strong>clabLevel</strong> es un número dentro de los foros de Cristalab que indica tu participación y aportes a la comunidad. Un post da 0.7, un tip da 50, un tutorial da 100, un curso da 2000. Cualquier persona puede tener un alto nivel de clabLevel, sólo tienes que aportar con lo que sepas, sin importar lo básico o avanzado.</em></span>
<p><a href="http://www.cristalab.com/blog/este-sabado-taller-de-posicionamiento-en-buscadores-bogota-c85159l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p>
<div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=kyIe0xT-D80:YeXG7iCSV0E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=kyIe0xT-D80:YeXG7iCSV0E:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/clab/~4/kyIe0xT-D80" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://cursosadobe.es/este-sabado-taller-de-posicionamiento-en-buscadores-bogota/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Videotutorial: Vectorizar logo de Flash&#8230; en Flash</title>
		<link>http://cursosadobe.es/videotutorial-vectorizar-logo-de-flash-en-flash/</link>
		<comments>http://cursosadobe.es/videotutorial-vectorizar-logo-de-flash-en-flash/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 10:54:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[vector]]></category>

		<category><![CDATA[dibujo]]></category>

		<category><![CDATA[videotutorial]]></category>

		<category><![CDATA[Flash CS3]]></category>

		<guid isPermaLink="false">http://cursosadobe.es/videotutorial-vectorizar-logo-de-flash-en-flash/</guid>
		<description><![CDATA[  En este video tutorial Flash veremos cómo vectorizar el logo de Flash utilizando herramientas de dibujo.




	



 


]]></description>
			<content:encoded><![CDATA[<p>  En este <a class="arti_link" href="http://www.cristalab.com/tips/tags/videotutorial">video tutorial</a> <a class="arti_link" href="http://www.cristalab.com/tips/tags/flash">Flash</a> veremos cómo vectorizar el logo de Flash utilizando herramientas de dibujo.</p>
<div style="text-align:center;"><object width="550" height="335"></p>
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="movie" value="http://www.youtube.com/v/EooknhlpMy0&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x2b405b&#038;color2=0x6b8ab6#" />
	<embed src="http://www.youtube.com/v/EooknhlpMy0&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x2b405b&#038;color2=0x6b8ab6#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="335"></embed><br />
</object></div>
<p><a href="http://www.cristalab.com/tips/videotutorial-vectorizar-logo-de-flash...-en-flash-c85130l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p>
<div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=AVHzGWgB9CE:AZCatHklwSA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=AVHzGWgB9CE:AZCatHklwSA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/clab/~4/AVHzGWgB9CE" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://cursosadobe.es/videotutorial-vectorizar-logo-de-flash-en-flash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Acceder a dispositivos de almacenamiento en AIR 2.0</title>
		<link>http://cursosadobe.es/acceder-a-dispositivos-de-almacenamiento-en-air-20/</link>
		<comments>http://cursosadobe.es/acceder-a-dispositivos-de-almacenamiento-en-air-20/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 12:39:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[usb]]></category>

		<category><![CDATA[10.1]]></category>

		<category><![CDATA[air]]></category>

		<category><![CDATA[actionscript_3]]></category>

		<category><![CDATA[Adobe Flex 3]]></category>

		<guid isPermaLink="false">http://cursosadobe.es/acceder-a-dispositivos-de-almacenamiento-en-air-20/</guid>
		<description><![CDATA[  Este es uno de los tips de Adobe AIR 2.0 que más me agradó preparar, porque en realidad tenía la necesidad, en un proyecto, de acceder a dispositivos de almacenamientos para leer, editar y grabar información. La clase StorageVolume nos permite leer todos los archivos existentes en nuestro dispositivo de almacenamiento, reconociendo los [...]]]></description>
			<content:encoded><![CDATA[<p>  Este es uno de los <a class="arti_link" href="http://www.cristalab.com/tips/">tips</a> de <a class="arti_link" href="http://www.cristalab.com/tags/air/">Adobe AIR 2.0</a> que más me agradó preparar, porque en realidad tenía la necesidad, en un proyecto, de acceder a dispositivos de almacenamientos para leer, editar y grabar información. La clase <a class="arti_link" href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/filesystem/StorageVolume.html">StorageVolume</a> nos permite leer todos los archivos existentes en nuestro dispositivo de almacenamiento, reconociendo los permisos de los archivos, si son de sistema o no, etc. Por otro lado podemos crear y eliminar directorios, así como también archivos: moviendo, copiando, etc. Recuerda que debes tener <a class="arti_link" href="http://www.cristalab.com/tips/como-trabajar-con-flex-4-gumbo-en-flex-builder-3-c67233l/">Adobe AIR 2.0 configurado en tu Flash Builder o Eclipse</a></p>
<p>Entonces para este tip, haremos una básica aplicación que permita reconocer cuando se insertó o removió un dispositivo de almacenamiento. Empezaremos creando la interfaz:</p>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/air/air2usb/air2usb01.jpg" border="0" /></div>
<p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo flex">
&lt;s&#58;Label id=&quot;msg&quot; width=&quot;100%&quot; y=&quot;20&quot; text=&quot;inserta un USB drive&quot;&nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; verticalAlign=&quot;top&quot; textAlign=&quot;center&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; color=&quot;#110E91&quot; fontWeight=&quot;bold&quot;/&gt;
&lt;mx&#58;Box id=&quot;boxContent&quot; width=&quot;90%&quot; height=&quot;126&quot; x=&quot;20&quot;&nbsp; y=&quot;40&quot;/&gt;
</pre>
<p>Ahora crearemos nuestros listener que estén pendientes de cuando el dispositivo sea agregado o retirado, para eso usaremos una función que será ejecutada al iniciar la aplicación:</p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private function init&#40;&#41;&#58;void&#123;
&nbsp; &nbsp;StorageVolumeInfo.storageVolumeInfo.addEventListener&#40;StorageVolumeChangeEvent.STORAGE_VOLUME_MOUNT, mount, false, 0, true&#41;;
&nbsp; &nbsp;StorageVolumeInfo.storageVolumeInfo.addEventListener&#40;StorageVolumeChangeEvent.STORAGE_VOLUME_UNMOUNT, unMount, false, 0, true&#41;;
&#125;
</pre>
<p>Y escribimos ahora las funciones que nos avisará en el campo de texto:
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private function mount&#40;e&#58;StorageVolumeChangeEvent&#41;&#58;void&#123;
&nbsp; &nbsp;var myDrive&#58;StorageVolume = e.storageVolume;
&nbsp; &nbsp;msg.text = &quot;Se conectó&#58; &quot;+ myDrive.name + &quot;&nbsp; Size&#58; &quot;+Math.round&#40; &#40;myDrive.rootDirectory.spaceAvailable /1073741824&#41; *100&#41;/100 +&quot; Gb&quot;;
&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
private function unMount&#40;e&#58;StorageVolumeChangeEvent&#41;&#58;void&#123;
&nbsp; &nbsp;msg.text = &quot;Se removió&#58; &quot;+ e.rootDirectory.nativePath;
&#125;
</pre>
<p>Si conectamos un dispositivo:
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/air/air2usb/air2usb02.jpg" border="0" /></div>
<p>Si retiramos el dispositivo:
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/air/air2usb/air2usb03.jpg" border="0" /></div>
<p>Vemos que nuestro evento <strong><a class="arti_link" href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/events/StorageVolumeChangeEvent.html">StorageVolumeChangeEvent</a></strong> nos avisa cuando un dispositivo fue agregado o removido, este a su vez, nos envía información importante como por ejemplo el nombre, el espacio disponible, que tipo es (&quot;FAT&quot;, &quot;NTFS&quot;, &quot;HFS&quot; o &quot;UFS&quot;), etc. Pero lo más importante es poder acceder a los archivos que contiene.</p>
<h2>Reconocer los archivos</h2>
<p>En realidad hasta aquí es el tip de acceso a dispositivos de almacenamiento, pero decidí ampliarlo un poco más reconociendo los archivos que contiene, para eso usaremos la propiedad rootDirectory y recorreremos el dispositivo usando el método getDirectoryListing(). </p>
<p>Usaré una función que nos haga el trabajo de reconocer los directorios (carpetas) y archivos para poder guardarlos en un arreglo y usarlo después:
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private var $__arrFile&#58;Array = new Array&#40;&#41;;

private function readDrive&#40; files&#58;File &#41;&#58;void&#123;
&nbsp; &nbsp;var arr&#58;Array = files.getDirectoryListing&#40;&#41;;
&nbsp; &nbsp;for each &#40;var f&#58;File in arr&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;if &#40;f.isHidden == false&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if &#40;f.isDirectory&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;trace&#40;&quot;Directorio&quot;, f.name&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;else&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;trace&#40;&quot;archivo&quot;, f.name &#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__arrFile.push&#40;f&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&#125;
&#125;
</pre>
<p>Listo!!!, tenemos guardado en el arreglo todos los archivos que podemos acceder.</p>
<h2>¿Y ahora?</h2>
<p>Ya tenemos los archivos del dispositivo y podemos basarnos en el anterior tip que hice de <a class="arti_link" href="http://www.cristalab.com/tips/abrir-archivos-desde-adobe-air-2.0-c84897l/">Abrir archivos con Adobe AIR 2.0</a>, creando una lista y abriendo con la aplicación por defecto cada file.</p>
<p>Nos valdremos de un componente creado en Flex para poder colocar el nombre del archivo y su id del array. Lo llamaremos MyBox.mxml.
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo flex">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;s&#58;Group xmlns&#58;fx=&quot;http&#58;//ns.adobe.com/mxml/2009&quot;
&nbsp; &nbsp;&nbsp; &nbsp; xmlns&#58;s=&quot;library&#58;//ns.adobe.com/flex/spark&quot;
&nbsp; &nbsp;&nbsp; &nbsp; xmlns&#58;mx=&quot;library&#58;//ns.adobe.com/flex/mx&quot;
&nbsp; &nbsp;&nbsp; &nbsp; creationComplete=&quot;init&#40;&#41;&quot;
&nbsp; &nbsp;&nbsp; &nbsp; width=&quot;200&quot; height=&quot;20&quot;&gt;
&nbsp; &nbsp;&lt;s&#58;Label x=&quot;10&quot; y=&quot;5&quot; width=&quot;180&quot; height=&quot;15&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; id=&quot;campo&quot; buttonMode=&quot;true&quot;/&gt;
&nbsp; &nbsp;
&nbsp; &nbsp;&lt;fx&#58;Script&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;!&#91;CDATA&#91;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;public var idBox&#58;int;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function init&#40;&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;this.addEventListener&#40;MouseEvent.MOUSE_OVER, mouseEvent, false, 0, true&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;this.addEventListener&#40;MouseEvent.MOUSE_OUT, mouseEvent, false, 0, true&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;public function setLabel&#40;myText&#58;String&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if&#40;myText.length&gt;=20&#41;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;myText = myText.substr&#40;0,15&#41;+&quot;...&quot;+myText.substr&#40;myText.length-4,4&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;campo.text = myText
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function mouseEvent&#40;e&#58;MouseEvent&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if&#40;e.type == MouseEvent.MOUSE_OVER&#41;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;this.alpha = 0.2;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;else
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;this.alpha = 1;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&#93;&#93;&gt;
&nbsp; &nbsp;&lt;/fx&#58;Script&gt;
&nbsp; &nbsp;
&lt;/s&#58;Group&gt;
</pre>
<p>Volvemos a nuestra aplicación y creamos una función que utilice el componente MyBox y haga la lista:
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private function createList&#40;&#41;&#58;void&#123;
&nbsp; &nbsp;for &#40;var i&#58;int = 0; i&lt; $__arrFile.length; i++&#41; &#123;
&nbsp; &nbsp;&nbsp; &nbsp;var box&#58;MyBox = new MyBox&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;box.setLabel&#40; $__arrFile&#91;i&#93;.name &#41;;
&nbsp; &nbsp;&nbsp; &nbsp;box.y = 30*i;
&nbsp; &nbsp;&nbsp; &nbsp;box.idBox = i;
&nbsp; &nbsp;&nbsp; &nbsp;box.addEventListener&#40;MouseEvent.CLICK, go, false, 0, true&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;boxContent.addElement&#40;box&#41;;
&nbsp; &nbsp;&#125;
&#125;
</pre>
<p>He creado un listener de Mouse que llama al evento go, que abrirá el archivo con su aplicación por defecto:
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private function go&#40;e&#58;MouseEvent&#41;&#58;void&#123;
&nbsp; &nbsp;var tmp&#58;File = &#40;$__arrFile&#91;e.currentTarget.idBox&#93; as File&#41;;
&nbsp; &nbsp;tmp.openWithDefaultApplication&#40;&#41;;
&#125;
</pre>
<p>Y con eso tenemos ya nuestra aplicación funcionando, reconociendo los archivos de tu dispositivo de almacenamiento y al dar click abrir el archivo. </p>
<p>Ingresamos un dispositivo:
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/air/air2usb/air2usb04.jpg" border="0" /></div>
<p>Hacemos click a un elemento de la lista, por ejemplo al SWF:</p>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/air/air2usb/air2usb05.jpg" border="0" /></div>
<p>Eso es todo, quería hacer los thumb pero creo que ya salía un poco del tip, pero haré otro con eso <img src="/foros/images/smiles/icon_razz.gif" alt=":P" border="0" /> Aquí les dejo el código completo:
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo flex">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;s&#58;WindowedApplication xmlns&#58;fx=&quot;http&#58;//ns.adobe.com/mxml/2009&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;xmlns&#58;s=&quot;library&#58;//ns.adobe.com/flex/spark&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;xmlns&#58;mx=&quot;library&#58;//ns.adobe.com/flex/mx&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;creationComplete=&quot;init&#40;&#41;&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;width=&quot;300&quot; height=&quot;200&quot;&gt;

&nbsp; &nbsp;&lt;fx&#58;Script&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;!&#91;CDATA&#91;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private var $__arrFile&#58;Array = new Array&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function init&#40;&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;StorageVolumeInfo.storageVolumeInfo.addEventListener&#40;StorageVolumeChangeEvent.STORAGE_VOLUME_MOUNT, mount, false, 0, true&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;StorageVolumeInfo.storageVolumeInfo.addEventListener&#40;StorageVolumeChangeEvent.STORAGE_VOLUME_UNMOUNT, unMount, false, 0, true&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function mount&#40;e&#58;StorageVolumeChangeEvent&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var myDrive&#58;StorageVolume = e.storageVolume;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;msg.text = &quot;Se conectó&#58; &quot;+ myDrive.name + &quot;&nbsp; Size&#58; &quot;+Math.round&#40; &#40;myDrive.rootDirectory.spaceAvailable /1073741824&#41; *100&#41;/100 +&quot; Gb&quot;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;readDrive&#40; myDrive.rootDirectory &#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function unMount&#40;e&#58;StorageVolumeChangeEvent&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;msg.text = &quot;Se removió&#58; &quot;+ e.rootDirectory.nativePath;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function readDrive&#40; files&#58;File &#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var arr&#58;Array = files.getDirectoryListing&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;for each &#40;var f&#58;File in arr&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if &#40;f.isHidden == false&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if &#40;f.isDirectory&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;trace&#40;&quot;Directorio&quot;, f.name&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;else&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;trace&#40;&quot;archivo&quot;, f.name &#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__arrFile.push&#40;f&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;createList&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function createList&#40;&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;for &#40;var i&#58;int = 0; i&lt; $__arrFile.length; i++&#41; &#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var box&#58;MyBox = new MyBox&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;box.setLabel&#40; $__arrFile&#91;i&#93;.name &#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;box.y = 30*i;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;box.idBox = i;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;box.addEventListener&#40;MouseEvent.CLICK, go, false, 0, true&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;boxContent.addElement&#40;box&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function go&#40;e&#58;MouseEvent&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var tmp&#58;File = &#40;$__arrFile&#91;e.currentTarget.idBox&#93; as File&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;tmp.openWithDefaultApplication&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&#93;&#93;&gt;
&nbsp; &nbsp;&lt;/fx&#58;Script&gt;
&nbsp; &nbsp;
&nbsp; &nbsp;&lt;s&#58;Label id=&quot;msg&quot; width=&quot;100%&quot; y=&quot;20&quot; text=&quot;inserta un USB drive&quot;&nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; verticalAlign=&quot;top&quot; textAlign=&quot;center&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; color=&quot;#110E91&quot; fontWeight=&quot;bold&quot;/&gt;
&nbsp; &nbsp;&lt;mx&#58;Box id=&quot;boxContent&quot; width=&quot;90%&quot; height=&quot;126&quot; x=&quot;20&quot;&nbsp; y=&quot;40&quot;/&gt;
&nbsp; &nbsp;
&lt;/s&#58;WindowedApplication&gt;
</pre>
<p>Pueden descargar la aplicación <a class="arti_link" href="http://www.eldervaz.com/cristalab/air2/storage/storageVolume.air">aquí</a>.
<p><a href="http://www.cristalab.com/tips/acceder-a-dispositivos-de-almacenamiento-en-air-2.0-c85089l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p>
<div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=nLyKwYjdEYo:Ihb15a9j_QQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=nLyKwYjdEYo:Ihb15a9j_QQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/clab/~4/nLyKwYjdEYo" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://cursosadobe.es/acceder-a-dispositivos-de-almacenamiento-en-air-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cómo eliminar la contraseña de Proyectos VBA en Excel 2007</title>
		<link>http://cursosadobe.es/como-eliminar-la-contrasena-de-proyectos-vba-en-excel-2007/</link>
		<comments>http://cursosadobe.es/como-eliminar-la-contrasena-de-proyectos-vba-en-excel-2007/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 15:06:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[excel]]></category>

		<category><![CDATA[Seguridad]]></category>

		<guid isPermaLink="false">http://cursosadobe.es/como-eliminar-la-contrasena-de-proyectos-vba-en-excel-2007/</guid>
		<description><![CDATA[  A muchas personas nos gusta hacer aplicaciones sencillas en Excel con la ayuda de las macros y formularios, pero si por cosas de la vida has tenido el problema de que conseguiste un archivo de Excel con Macros y deseas modificar los formularios a tu gusto, pero al intentar hacerlo entras al Editor [...]]]></description>
			<content:encoded><![CDATA[<p>  A muchas personas nos gusta hacer aplicaciones sencillas en Excel con la ayuda de las macros y formularios, pero si por cosas de la vida has tenido el problema de que conseguiste un archivo de Excel con Macros y deseas modificar los formularios a tu gusto, pero al intentar hacerlo entras al Editor de Visual Basic y al tratar de visualizarlos te encuentras con:</p>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/stuff/excelpass/excelpass01.JPG" border="0" /></div>
<p>No desesperes, la solución al alcance de tu mano y de una manera fácil y rápida. Cabe aclarar de manera inicial que se recomienda hacer una copia de seguridad del archivo por si acaso.<br />Ahora de tener la copia del archivo, seguimos los siguientes pasos:</p>
<p>1.	Abrimos una consola de DOS por medio del comando CMD en la opción Ejecutar del menú Inicio.</p>
<p>2.	En la ventana que se abre tecleamos: <strong>edit /70</strong> y presionamos Enter.</p>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/stuff/excelpass/excelpass02.JPG" border="0" /></div>
<p>3.	Se abrirá la típica ventana azul de hace años y la cual hace referencia al editor de texto de DOS.</p>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/stuff/excelpass/excelpass03.JPG" border="0" /></div>
<p>4.	Ahora vamos al menú Archivo y seleccionamos Abrir, y buscamos el archivo que queremos quitarle la contraseña de protección, y nos va a mostrar un montón de símbolos raros en el contenido del archivo.</p>
<p>5.	Luego de tener el archivo abierto, buscamos la opción Buscar en el menú Buscar y en el cuadro de búsqueda escribimos: DPB.</p>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/stuff/excelpass/excelpass04.JPG" border="0" /></div>
<p>6.	Después de haberlo encontrado, cambiamos la palabra por: DBx , quedando de la forma que muestra la imagen.</p>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/stuff/excelpass/excelpass05.JPG" border="0" /></div>
<p>7.	Ahora guardamos el archivo y cerramos la ventana de DOS.</p>
<p>8.	Abrimos el archivo de Excel y cuando vamos a habilitar las macros nos sale el siguiente mensaje:</p>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/stuff/excelpass/excelpass06.JPG" border="0" /></div>
<p>9.	Le decimos que <strong>SI</strong> y para hacer la verificación presionamos <strong>Alt+F11</strong> y nos debe abrir la ventana del proyecto listo para modificar sin necesidad de pedir e ingresar contraseña alguna. <img src="/foros/images/smiles/icon_miau.gif" alt="^^" border="0" /></p>
<p>Y Listo, eso es todo&#8230; Espero que les haya servido a los que lo necesiten&#8230; </p>
<p>Saludos!
<p><a href="http://www.cristalab.com/tips/como-eliminar-la-contrasena-de-proyectos-vba-en-excel-2007-c85050l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p>
<div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=xAQWj-bj8u8:IGlKuq-I8PY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=xAQWj-bj8u8:IGlKuq-I8PY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/clab/~4/xAQWj-bj8u8" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://cursosadobe.es/como-eliminar-la-contrasena-de-proyectos-vba-en-excel-2007/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Personas, personalidades y mentiras del &#8220;Social Media&#8221;</title>
		<link>http://cursosadobe.es/personas-personalidades-y-mentiras-del-social-media/</link>
		<comments>http://cursosadobe.es/personas-personalidades-y-mentiras-del-social-media/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 05:08:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[facebook]]></category>

		<category><![CDATA[blogs]]></category>

		<category><![CDATA[twitter]]></category>

		<category><![CDATA[opinion]]></category>

		<category><![CDATA[FNAP]]></category>

		<guid isPermaLink="false">http://cursosadobe.es/personas-personalidades-y-mentiras-del-social-media/</guid>
		<description><![CDATA[  Hay personalidades en internet y personas en la vida real. Cuentas de twitter llenas de mentiras y llamadas a amigos con verdades de corazón. No lo digo con cinismo, sino convencido que la vida en la web puede ser una realidad mentirosa, alternativa y ególatra. Las redes, los blogs y el tiempo real [...]]]></description>
			<content:encoded><![CDATA[<p>  Hay personalidades en internet y personas en la vida real. Cuentas de twitter llenas de mentiras y llamadas a amigos con verdades de corazón. No lo digo con cinismo, sino convencido que la vida en la web puede ser una realidad mentirosa, alternativa y ególatra. Las redes, los blogs y el tiempo real nos hace sentir el centro de la conversación y la facilidad de crear tribus a nuestro alrededor nos ciega. </p>
<p>Tu web tiene 4 millones de visitas al mes. Tu cuenta de twitter la siguen 3400 personas. Tienes medio millón de usuarios. Entre todos esos números, seguro muchos han visto tu cara o conocen tu nombre. Algunos habrán twitteado o enviado un email con cosas como &quot;ayudame&quot;, &quot;seamos amigos&quot;, &quot;te admiro&quot; o &quot;he hecho de mi vida una misión hacia tu muerte&quot;. <strong>Y tu te lo crees.</strong></p>
<h2>Dopamina</h2>
<p>Al recibir este tipo de mensajes, la hormona neurotransmisora <a class="arti_link" href="http://en.wikipedia.org/wiki/Dopamine">Dopamina</a> se libera en el cerebro, generando placer. Cuando, por ejemplo, un tweet genera &quot;replies&quot;, la dopamina potencia el gusto por estas acciones y nos programa condicionalmente a repetirlas para volver a experimentar la recompensa.</p>
<div style="text-align:center;"><img class="imgBlog" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/Dopamine2.svg/200px-Dopamine2.svg.png" border="0" /><br /><em><span style="color: #888A85"><span style="font-size: 11px; line-height: normal">Bitch.</span></span></em></div>
<p>Recibes un reply en twitter: Dopamina. Clickean en &quot;like&quot; a lo que subes a Facebook: Dopamina. Tu blog se llena de comentarios a lo que escribes: Dopamina. Nada anormal, parte de la especie humana, clave del éxito de la &quot;web 2.0&quot;.</p>
<p><strong>Excepto cuando te convierte en otra persona.</strong></p>
<p>Humillas a alguien frente a una gran audiencia, la cual ríe o te desaprueba: Dopamina. Trolleas a una persona, afectando su vida personal: Dopamina. Inventas chismes e historias que hacen quedar mal a otros, dañando su reputación online y offline: Dopamina. Robas ideas y contenido, posicionandote como autor y creativo: Dopamina.</p>
<h2>No eres esclavo de la biología</h2>
<p>Los animales son entrenables con condicionamiento de dopamina. Los humanos somos vulnerables, pero pensamos. Tenemos la habilidad de rescribir nuestros caminos neuronales, superando los instintos básicos biológicos y hormonales. </p>
<p>Tu puedes saltar el <em>bullshit</em> del Social Media. Puedes ser mejor que el engaño que porque a la cuenta <strong><a class="arti_link" href="http://twitter.com/freddier">@freddier</a></strong> la siguen algunas personas, eres famoso. Puedes elegir no ser la personalidad destructiva que otros odian, sino una mejor persona que puede hacer una diferencia. Que puede dar un ejemplo real e inspirar a la gente a emprender, a crear y a hacer más por otros.</p>
<p>Por enseñar a alguien. Por mejorar la calidad de vida de otros. Por traer felicidad a aquellos que te conocen. Por hacer reír sin hacer daño. </p>
<p>No por un reply. No por un comentario. No por más visitas.
<p><a href="http://www.cristalab.com/blog/personas-personalidades-y-mentiras-del-social-media-c85018l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p>
<div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=fh9kKWS4KKc:RV_-R2D8hdU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=fh9kKWS4KKc:RV_-R2D8hdU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/clab/~4/fh9kKWS4KKc" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://cursosadobe.es/personas-personalidades-y-mentiras-del-social-media/feed/</wfw:commentRss>
		</item>
		<item>
		<title>¿Sabes y amas HTML 5, CSS y JS? Participa en este debate</title>
		<link>http://cursosadobe.es/sabes-y-amas-html-5-css-y-js-participa-en-este-debate/</link>
		<comments>http://cursosadobe.es/sabes-y-amas-html-5-css-y-js-participa-en-este-debate/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 17:50:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[mejorandolaweb]]></category>

		<category><![CDATA[html5]]></category>

		<category><![CDATA[opinion]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[Flash CS3]]></category>

		<guid isPermaLink="false">http://cursosadobe.es/sabes-y-amas-html-5-css-y-js-participa-en-este-debate/</guid>
		<description><![CDATA[  Hace días que se viene dando un interesante debate alrededor de la tecnología Flash y HTML 5, hemos visto diversas opiniones y a diferentes escalas inclusive algunas declaraciones de parte del CEO de Apple (Steve Jobs) y el CTO de Adobe (Kevin Lynch). 

Esto no es algo nuevo, de hecho con cada nueva [...]]]></description>
			<content:encoded><![CDATA[<p>  Hace días que se viene dando un interesante debate alrededor de la tecnología <strong>Flash y HTML 5</strong>, hemos visto diversas opiniones y a diferentes escalas inclusive algunas declaraciones de parte del <a class="arti_link" href="http://www.tuaw.com/2010/01/31/steve-jobs-at-apple-town-hall-meeting-harsh-words-for-google-a/">CEO de Apple (Steve Jobs)</a> y el <a class="arti_link" href="http://blogs.adobe.com/conversations/2010/02/open_access_to_content_and_app.html">CTO de Adobe (Kevin Lynch)</a>. </p>
<div style="text-align:center;"><img class="imgBlog" src="http://blog.watch.tv/wp-content/uploads/2010/01/HTML5-Fist.jpg" border="0" /></div>
<p>Esto no es algo nuevo, de hecho con cada nueva tecnología que sale al mercado (<em>Silverlight, JavaFX, etc.</em>) y/o <em>cada que la W3C se pone las pilas sucede lo mismo</em>, hay quiénes toman <a class="arti_link" href="http://www.cristalab.com/blog/el-futuro-de-flash-c84378l/">una posición a favor</a> y hay quiénes toman <a class="arti_link" href="http://www.maestrosdelweb.com/editorial/flash-en-aprietos/">una posición en contra</a>; lo cuál es muy respetable <strong>siempre que esto vaya sustentado con argumentos</strong> y no simplemente como un factor de respuesta a todo el ruido que se genera en el medio.</p>
<h2>Participa en un debate en vivo de Flash vs. HTML 5</h2>
<p>La semana pasada participé con <a class="arti_link" href="http://twitter.com/freddier">@freddier</a> y <a class="arti_link" href="http://twitter.com/cvander">@cvander</a> en el programa <a class="arti_link" href="http://mejorandolaweb.com/">Mejorando la Web</a> para hablar al respecto. Los comentarios que pude ver alrededor de esta discusión fueron bastante atinados. Es por eso que al final del programa decidí comentarle una inquietud a Freddy y a Christian (quiénes se mostraron entusiasmados) misma que comparto con ustedes en este post. (Puedes ver la grabación del programa abajo)</p>
<div style="text-align:center;"><object width="549" height="412"></p>
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9490651&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=1&amp;color=00adef&amp;fullscreen=1#" />
	<embed src="http://vimeo.com/moogaloop.swf?clip_id=9490651&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=1&amp;color=00adef&amp;fullscreen=1#" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="549" height="412"></embed><br />
</object><br /><em><strong><span style="color: #555753">Empieza a verlo desde el minuto</span> 30:28</strong></em></div>
<p><strong>La idea es organizar un debate con 5 invitados de cada bando</strong> (por decirlo de una manera), es decir <strong>5 entusiastas de Flash</strong> y <strong>5 entusiastas de HTML 5</strong>. Ya tenemos algunas personas interesadas pero no creo que fuera en realidad algo muy democrático si no le diéramos cabida a cualquier persona de la comunidad que quiera participar.</p>
<h2>Cómo participar</h2>
<p>Por lo que no importa que posición sea la tuya, si estás interesado en debatir, deja en los comentarios quien eres, qué piensas y tu posición (y tu cuenta de twitter o algo). Los mejores y más acertados comentaristas serán elegidos para participar en la transmisión, que esperamos vean alrededor de 2000 personas en vivo y muchas más en su grabación.</p>
<p>Aún tenemos que definir las fechas pero tan pronto tengamos a los participantes lo haremos de manera formal, por lo que <strong>si estas interesado en participar no dudes en dejar tu comentario en este post lo antes posible.</strong>
<p><a href="http://www.cristalab.com/blog/sabes-y-amas-html-5-css-y-js-participa-en-este-debate-c84615l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p>
<div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=4UYztOx8bzM:CDJYsR7nICs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=4UYztOx8bzM:CDJYsR7nICs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/clab/~4/4UYztOx8bzM" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://cursosadobe.es/sabes-y-amas-html-5-css-y-js-participa-en-este-debate/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Control de errores globales en Adobe AIR 2.0</title>
		<link>http://cursosadobe.es/control-de-errores-globales-en-adobe-air-20/</link>
		<comments>http://cursosadobe.es/control-de-errores-globales-en-adobe-air-20/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 14:11:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[10.1]]></category>

		<category><![CDATA[air]]></category>

		<category><![CDATA[actionscript_3]]></category>

		<category><![CDATA[Adobe Flex 3]]></category>

		<guid isPermaLink="false">http://cursosadobe.es/control-de-errores-globales-en-adobe-air-20/</guid>
		<description><![CDATA[  En muchas ocasiones cuando trabajamos con aplicaciones pueden aparecer errores no controlados o inesperados, que muchas veces podemos controlar, pero otras fueron realmente imprevistos. Para eso la nueva versión de Adobe AIR implementa un controlador de errores globales (usando AIR 2.0 y FlashPlayer 10.1), con lo cual NO QUIERE DECIR que, nosotros, los [...]]]></description>
			<content:encoded><![CDATA[<p>  En muchas ocasiones cuando trabajamos con aplicaciones pueden aparecer errores no controlados o inesperados, que muchas veces podemos controlar, pero otras fueron realmente imprevistos. Para eso la nueva versión de <a class="arti_link" href="http://www.cristalab.com/tags/air/">Adobe AIR</a> implementa un controlador de errores globales (<a class="arti_link" href="http://www.cristalab.com/blog/descarga-flash-player-10.1-y-adobe-air-2-c81313l/">usando AIR 2.0 y FlashPlayer 10.1</a>), con lo cual <strong><span style="color: #A40000">NO QUIERE DECIR</span></strong> que, nosotros, los desarrolladores no prestemos importancia al control de errores, sino que será una previsión en caso de no entender porque existió un error desconocido. Por ejemplo, podemos usar la clase <a class="arti_link" href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/events/UncaughtErrorEvent.html">UncaughtErrorEvent</a> para detectar un error imprevisto y este ser enviado vía email o al servidor para que nosotros lo solucionemos. </p>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/flex/air-2/air-201.jpg" border="0" /></div>
<p>Para empezar, como en los <a class="arti_link" href="http://www.cristalab.com/tips/abrir-archivos-desde-adobe-air-2.0-c84897l/">demás</a> <a class="arti_link" href="http://www.cristalab.com/tips/accede-a-las-dns-desde-adobe-air-2-c84947l/">tips</a> que <a class="arti_link" href="http://www.cristalab.com/tips/multitouch-con-adobe-air-2-flash-lite-4-y-flash-player-10.1-c84877l/">escribí</a>, usaremos <a class="arti_link" href="http://www.cristalab.com/tips/como-trabajar-con-flex-4-gumbo-en-flex-builder-3-c67233l/">Flash Builder y el SDK de AIR 2.0</a>.</p>
<p>Primero crearemos la interfaz, un botón que obligue al error y un textArea que nos muestre los mensajes:
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo flex">
&lt;s&#58;Button id=&quot;btn&quot; label=&quot;Disparar Error&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; click=&quot;viewError&#40;event&#41;&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; horizontalCenter=&quot;0&quot; top=&quot;10&quot;/&gt;
&lt;s&#58;TextArea&nbsp; id=&quot;txtResp&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; horizontalCenter=&quot;0&quot; top=&quot;40&quot; width=&quot;80%&quot; height=&quot;160&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; verticalAlign=&quot;top&quot; textAlign=&quot;left&quot; color=&quot;#FF0000&quot;/&gt;
</pre>
<p>Ahora utilizaremos la clase UncaughtErrorEvent que nos permite controlar los errores globales.
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
loaderInfo.uncaughtErrorEvents.addEventListener&#40;UncaughtErrorEvent.UNCAUGHT_ERROR, captureError &#41;;
</pre>
<p>Cabe resaltar que podemos controlar errores del propio main de la aplicación, así como otros generados desde swf externos utilizando:
<ul>
<li>LoaderInfo.uncaughtErrorEvents</li>
<li>Loader.uncaughtErrorEvents</li>
</ul>
<p>Estos deben ser escuchados desde el SWF principal <img src="/foros/images/smiles/icon_wink.gif" alt=";)" border="0" /></p>
<p>Siguiendo con el ejemplo, nuestro botón llamará a una función que nos genere el error:
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private function viewError&#40;e&#58;Event&#41;&#58;void&#123;
&nbsp; &nbsp;var foo&#58;String = null;
&nbsp; &nbsp;trace&#40;foo.length&#41;;
&#125;
</pre>
<p>Este error será escuchado por el evento <strong>UncaughtErrorEvent</strong> y ejecutará nuestra función captureError:
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private function captureError&#40;e&#58;UncaughtErrorEvent&#41;&#58;void&#123;
&nbsp; &nbsp;txtResp.text = &quot;CaptureError&quot;;
&nbsp; &nbsp;if &#40;e.error is Error&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;var error&#58;Error = e.error as Error;
&nbsp; &nbsp;&nbsp; &nbsp;txtResp.text +=&nbsp; &nbsp;&quot;nnError ID&#58; &quot; + error.errorID +
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&quot;nnError Name&#58; &quot; + error.name +
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&quot;nnError Message&#58;n&quot; + error.message
&nbsp; &nbsp;&#125;else&#123;
&nbsp; &nbsp;&nbsp; &nbsp;var errorEvent&#58;ErrorEvent = e.error as ErrorEvent;
&nbsp; &nbsp;&nbsp; &nbsp;txtResp.text += &quot;n&quot; + errorEvent.errorID
&nbsp; &nbsp;&#125;
&#125;
</pre>
<p>Es una gran ventaja el uso de esta clase, ya que nos permite no sólo poder conocer, vía email por ejemplo, de algún error inesperado, sino que podemos decidir si la aplicación puede o no continuar, ya que muchas veces estos errores impiden el flujo normal de la aplicación.</p>
<p>El código completo está aquí:
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo flex">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;s&#58;WindowedApplication xmlns&#58;fx=&quot;http&#58;//ns.adobe.com/mxml/2009&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;xmlns&#58;s=&quot;library&#58;//ns.adobe.com/flex/spark&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;xmlns&#58;mx=&quot;library&#58;//ns.adobe.com/flex/mx&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;applicationComplete=&quot;init&#40;&#41;&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;width=&quot;200&quot; height=&quot;230&quot;&gt;
&nbsp; &nbsp;
&nbsp; &nbsp;&lt;fx&#58;Script&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;!&#91;CDATA&#91;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function init&#40;&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;loaderInfo.uncaughtErrorEvents.addEventListener&#40;UncaughtErrorEvent.UNCAUGHT_ERROR, captureError &#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function captureError&#40;e&#58;UncaughtErrorEvent&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;txtResp.text = &quot;CaptureError&quot;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if &#40;e.error is Error&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var error&#58;Error = e.error as Error;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;txtResp.text +=&nbsp; &nbsp;&quot;nnError ID&#58; &quot; + error.errorID +
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&quot;nnError Name&#58; &quot; + error.name +
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&quot;nnError Message&#58;n&quot; + error.message
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;else&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var errorEvent&#58;ErrorEvent = e.error as ErrorEvent;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;txtResp.text += &quot;n&quot; + errorEvent.errorID
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function viewError&#40;e&#58;Event&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var foo&#58;String = null;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;trace&#40;foo.length&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&#93;&#93;&gt;
&nbsp; &nbsp;&lt;/fx&#58;Script&gt;
&nbsp; &nbsp;
&nbsp; &nbsp;
&nbsp; &nbsp;&lt;s&#58;Button id=&quot;btn&quot; label=&quot;Disparar Error&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; click=&quot;viewError&#40;event&#41;&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; horizontalCenter=&quot;0&quot; top=&quot;10&quot;/&gt;
&nbsp; &nbsp;&lt;s&#58;TextArea&nbsp; id=&quot;txtResp&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; horizontalCenter=&quot;0&quot; top=&quot;40&quot; width=&quot;80%&quot; height=&quot;160&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; verticalAlign=&quot;top&quot; textAlign=&quot;left&quot; color=&quot;#FF0000&quot;/&gt;
&nbsp; &nbsp;
&lt;/s&#58;WindowedApplication&gt;
</pre>
<p>Puedes descargar <a class="arti_link" href="http://www.eldervaz.com/cristalab/air2/error/globalError.air">aquí</a> el ejemplo.
<p><a href="http://www.cristalab.com/tips/control-de-errores-globales-en-adobe-air-2.0-c84982l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p>
<div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=hbrphNvEHvE:NAhcfVShSZs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=hbrphNvEHvE:NAhcfVShSZs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/clab/~4/hbrphNvEHvE" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://cursosadobe.es/control-de-errores-globales-en-adobe-air-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Accede a las DNS desde Adobe AIR 2</title>
		<link>http://cursosadobe.es/accede-a-las-dns-desde-adobe-air-2/</link>
		<comments>http://cursosadobe.es/accede-a-las-dns-desde-adobe-air-2/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 17:54:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[air]]></category>

		<category><![CDATA[actionscript_3]]></category>

		<category><![CDATA[Adobe Flex 3]]></category>

		<guid isPermaLink="false">http://cursosadobe.es/accede-a-las-dns-desde-adobe-air-2/</guid>
		<description><![CDATA[  Entre las novedades de Adobe AIR 2.0 está la posibilidad de obtener el registros de recursos DNS (Domain Name System) gracias a su nueva API DNSResolver, que cuando obtiene los datos solicitados nos dispara un evento DNSResolverEvent. Incluso ahora puedes obtener información de un host IPv4 (32-bits) y IPv6 (64-bits). Aunque existen varios [...]]]></description>
			<content:encoded><![CDATA[<p>  Entre las novedades de <a class="arti_link" href="http://www.cristalab.com/blog/descarga-flash-player-10.1-y-adobe-air-2-c81313l/">Adobe AIR 2.0</a> está la posibilidad de obtener el registros de recursos <a class="arti_link" href="http://es.wikipedia.org/wiki/DNS">DNS (Domain Name System)</a> gracias a su nueva API <a class="arti_link" href="http://help.adobe.com/en_US/air/reference/html/flash/net/dns/DNSResolver.html">DNSResolver</a>, que cuando obtiene los datos solicitados nos dispara un evento <a class="arti_link" href="http://help.adobe.com/en_US/air/reference/html/flash/events/DNSResolverEvent.html">DNSResolverEvent</a>. Incluso ahora puedes obtener información de un host IPv4 (32-bits) y IPv6 (64-bits). Aunque existen varios <a class="arti_link" href="http://es.wikipedia.org/wiki/DNS#Tipos_de_registros_DNS">tipos</a> de registros DNS, <a class="arti_link" href="http://www.cristalab.com/tags/air/">Adobe AIR</a> implementa sólo 5:
<ul>
<li><strong><a class="arti_link" href="http://help.adobe.com/en_US/air/reference/html/flash/net/dns/ARecord.html">ARecord</a></strong>: Clase que devuelve información de 32-bits de la dirección IPv4.</li>
<li><strong><a class="arti_link" href="http://help.adobe.com/en_US/air/reference/html/flash/net/dns/AAAARecord.html">AAAARecord</a></strong>: Clase que devuelve información de 64-bits de la dirección IPv6.</li>
<li><strong><a class="arti_link" href="http://help.adobe.com/en_US/air/reference/html/flash/net/dns/MXRecord.html">MXRecord</a></strong>: Clase que proporciona información acerca de un nombre de dominio apuntando a una lista de intercambio de correo (MX).</li>
<li><strong><a class="arti_link" href="http://help.adobe.com/en_US/air/reference/html/flash/net/dns/PTRRecord.html">PTRRecord</a></strong>: Se le conoce como &quot;registro inverso&quot;, funciona a la inversa del registro A, traduce IP a dominio.</li>
<li><strong><a class="arti_link" href="http://help.adobe.com/en_US/air/reference/html/flash/net/dns/SRVRecord.html">SRVRecord</a></strong>: Permite indicar los servicios que ofrece el dominio.</li>
</ul>
<div style="text-align:center;"><img class="imgBlog" src="http://www.cristalab.com/images/tips/air/air_dns/air_dns01.jpg" border="0" /></div>
<p>Como ya explicamos en el <a class="arti_link" href="http://www.cristalab.com/tips/abrir-archivos-desde-adobe-air-2.0-c84897l/">tip</a> anterior, debemos usar <a class="arti_link" href="http://www.cristalab.com/tags/flex/">Flash Builder</a>(FB) o eclipse (con el SDK de flex), sumado a esto tenemos que tener el SDK de AIR 2.0.</p>
<p>Entonces, crearemos una instancia de la clase DNSResolver y un listener que nos permita detectar cuando la información llegue a nuestra aplicación, asimismo usaremos un evento ErrorEvent que nos avise en caso ocurra algún problema.</p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private var $__dns&#58;DNSResolver;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
private function init&#40;&#41;&#58;void&#123;
&nbsp; &nbsp;$__dns = new DNSResolver&#40;&#41;;
&nbsp; &nbsp;$__dns.addEventListener&#40;DNSResolverEvent.LOOKUP, look, false, 0, true&#41;;
&nbsp; &nbsp;$__dns.addEventListener&#40;ErrorEvent.ERROR, error, false, 0, true&#41;;
&#125;
</pre>
<p>Para poder hacer funcionar el DNSResolver usamos:</p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
$__dns.lookup&#40; &quot;www.google.com&quot; , ARecord &#41;;
</pre>
<p>Eso nos dará como respuesta la ip, por lo menos a la que yo accedo: <strong><span style="color: #888A85">74.125.159.106</span></strong>. Dicha información es capturada desde nuestro método <strong><em>look</em></strong></p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo actionscript">
private function look &#40;e&#58;DNSResolverEvent&#41;&#58;void&#123;
&nbsp; &nbsp;var records&#58;Array = new Array&#40;&#41;;
&nbsp; &nbsp;records = e.resourceRecords;
&nbsp; &nbsp;//
&nbsp; &nbsp;txtResp.text = records&#91;0&#93;.address;
&#125;
</pre>
<p>Con esto ya puedes acceder a la IP del dominio que desees, como el resto de respuestas DNS son casi iguales, las  implementé en el código y creo que no es necesario explicar, ya que es muy parecido.</p>
<p class="datos_bloque"><strong>C&oacute;digo :</strong></p>
<pre class="codigo flex">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;s&#58;WindowedApplication xmlns&#58;fx=&quot;http&#58;//ns.adobe.com/mxml/2009&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;xmlns&#58;s=&quot;library&#58;//ns.adobe.com/flex/spark&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;xmlns&#58;mx=&quot;library&#58;//ns.adobe.com/flex/mx&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;creationComplete=&quot;init&#40;&#41;&quot;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;width=&quot;300&quot; height=&quot;290&quot;&gt;
&nbsp; &nbsp;&lt;s&#58;layout&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;s&#58;VerticalLayout/&gt;
&nbsp; &nbsp;&lt;/s&#58;layout&gt;
&nbsp; &nbsp;
&nbsp; &nbsp;
&nbsp; &nbsp;&lt;fx&#58;Script&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;!&#91;CDATA&#91;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;import flash.net.dns.AAAARecord;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;import flash.net.dns.ARecord;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;import flash.net.dns.DNSResolver;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;import flash.net.dns.MXRecord;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;import flash.net.dns.PTRRecord;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;import flash.net.dns.SRVRecord;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private var $__dns&#58;DNSResolver;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function init&#40;&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__dns = new DNSResolver&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__dns.addEventListener&#40;DNSResolverEvent.LOOKUP, look, false, 0, true&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__dns.addEventListener&#40;ErrorEvent.ERROR, error, false, 0, true&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function look &#40;e&#58;DNSResolverEvent&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var records&#58;Array = new Array&#40;&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;records = e.resourceRecords;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;//
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;if &#40;records&#91;0&#93; is ARecord&#41;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;txtResp.text = &quot;Addr&#58; &quot; + records&#91;0&#93;.address;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;else if &#40;records&#91;0&#93; is PTRRecord&#41;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;txtResp.text = &quot;PTR&#58; &quot; + records&#91;0&#93;.ptrdName;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;else if &#40;records&#91;0&#93; is MXRecord&#41;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;txtResp.text = &quot;Exchange&#58; &quot; + records&#91;0&#93;.exchange;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;txtResp.text += &quot;nPreference&#58; &quot; +records&#91;0&#93;.preference;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;else if &#40;records&#91;0&#93; is SRVRecord&#41;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var priority&#58;String = &quot;Priority&#58; &quot; + records&#91;0&#93;.priority;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var weight&#58;String = &quot;Weight&#58; &quot; + records&#91;0&#93;.weight;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var port&#58;String = &quot;Port&#58; &quot; + records&#91;0&#93;.port;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var target&#58;String = &quot;Target&#58; &quot; + records&#91;0&#93;.target;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;txtResp.text += priority + &quot;n&quot; + weight + &quot;n&quot; + port + &quot;n&quot; + target;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function error&#40;e&#58;ErrorEvent&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;txtResp.text = &quot;ERROR&#58; &quot;+e;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;private function go&#40;&#41;&#58;void&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;var type&#58;String = cbType.selectedItem.label;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;switch&#40;type&#41;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#123;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;case &quot;ARecord&quot;&#58;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__dns.lookup&#40;campo.text, ARecord&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;break;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;case &quot;AAAARecord&quot;&#58;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__dns.lookup&#40;campo.text, AAAARecord&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;break;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;case &quot;MXRecord&quot;&#58;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__dns.lookup&#40;campo.text, MXRecord&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;break;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;case &quot;PTRRecord&quot;&#58;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__dns.lookup&#40;campo.text, PTRRecord&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;break;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;case &quot;SRVRecord&quot;&#58;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;$__dns.lookup&#40;campo.text, SRVRecord&#41;;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;break;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&#125;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&#93;&#93;&gt;
&nbsp; &nbsp;&lt;/fx&#58;Script&gt;
&nbsp; &nbsp;
&nbsp; &nbsp;&lt;mx&#58;HBox horizontalCenter=&quot;0&quot;&nbsp; paddingTop=&quot;10&quot; width=&quot;300&quot; horizontalAlign=&quot;center&quot;&gt;&nbsp; &nbsp;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;s&#58;Label text=&quot;Consultar&#58;&quot; paddingTop=&quot;5&quot;/&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;s&#58;TextInput id=&quot;campo&quot; width=&quot;200&quot;/&gt;
&nbsp; &nbsp;&lt;/mx&#58;HBox&gt;
&nbsp; &nbsp;
&nbsp; &nbsp;&lt;mx&#58;HBox paddingLeft=&quot;10&quot; width=&quot;300&quot; horizontalAlign=&quot;center&quot;&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;mx&#58;ComboBox editable=&quot;false&quot; id=&quot;cbType&quot;&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&lt;fx&#58;Array&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&lt;fx&#58;Object label=&quot;ARecord&quot; /&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&lt;fx&#58;Object label=&quot;AAAARecord&quot; /&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&lt;fx&#58;Object label=&quot;MXRecord&quot; /&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&lt;fx&#58;Object label=&quot;PTRRecord&quot; /&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&lt;fx&#58;Object label=&quot;SRVRecord&quot; /&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&lt;/fx&#58;Array&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;/mx&#58;ComboBox&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;s&#58;Button id=&quot;btn&quot; click=&quot;go&#40;&#41;&quot; label=&quot;Ver información&quot;/&gt;
&nbsp; &nbsp;&nbsp; &nbsp;
&nbsp; &nbsp;&lt;/mx&#58;HBox&gt;
&nbsp; &nbsp;
&nbsp; &nbsp;&lt;mx&#58;Box paddingLeft=&quot;10&quot; width=&quot;300&quot; horizontalAlign=&quot;center&quot;&gt;
&nbsp; &nbsp;&nbsp; &nbsp;&lt;s&#58;TextArea id=&quot;txtResp&quot; width=&quot;90%&quot; height=&quot;200&quot; /&gt;
&nbsp; &nbsp;&lt;/mx&#58;Box&gt;
&nbsp; &nbsp;
&lt;/s&#58;WindowedApplication&gt;
</pre>
<p>Puedes descargar la aplicación <a class="arti_link" href="http://www.eldervaz.com/cristalab/air2/dns/dns.air">aquí</a>.
<p><a href="http://www.cristalab.com/tips/accede-a-las-dns-desde-adobe-air-2-c84947l/#enviar" title="Env&iacute;a tus comentarios de este art&iacute;lo"><img src="http://www.cristalab.com/images/general/enviar-comentario.png" alt="Enviar comentario" /></a></p>
<div class="feedflare">
<a href="http://feeds.cristalab.com/~ff/clab?a=4wFChi2qscg:0mKI_PpeE6I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/clab?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.cristalab.com/~ff/clab?a=4wFChi2qscg:0mKI_PpeE6I:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/clab?d=qj6IDK7rITs" border="0"></img></a>
</div>
<p><img src="http://feeds.feedburner.com/~r/clab/~4/4wFChi2qscg" height="1" width="1"/></p>
]]></content:encoded>
			<wfw:commentRss>http://cursosadobe.es/accede-a-las-dns-desde-adobe-air-2/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
