<?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>Los DevsLos Devs | Los Devs</title>
	<atom:link href="http://losdevs.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://losdevs.com</link>
	<description>Comunidad Developer de Costa Rica</description>
	<lastBuildDate>Sun, 19 Aug 2012 22:33:16 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	<div id='fb-root'></div>
					<script type='text/javascript'>
						window.fbAsyncInit = function()
						{
							FB.init({appId: null, status: true, cookie: true, xfbml: true});
						};
						(function()
						{
							var e = document.createElement('script'); e.async = true;
							e.src = document.location.protocol + '//connect.facebook.net/es_LA/all.js';
							document.getElementById('fb-root').appendChild(e);
						}());
					</script>	
						<item>
		<title>AIR Android iOS App con Blue Marble y FlashDevelop</title>
		<link>http://losdevs.com/lenguajes/as3/air-android-ios-app-con-blue-marble-y-flashdevelop/</link>
		<comments>http://losdevs.com/lenguajes/as3/air-android-ios-app-con-blue-marble-y-flashdevelop/#comments</comments>
		<pubDate>Sun, 19 Aug 2012 22:30:24 +0000</pubDate>
		<dc:creator>absulit</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://losdevs.com/?p=574</guid>
		<description><![CDATA[Antes de proceder con este artículo, le recomiendo que lea mi artículo anterior &#8220;Desarrollando Apps para iOS y Android con FlashDevelop&#8221; que le será de utilidad si quiere iniciar a desarrollar aplicaciones para dispositivos móviles con FlashDevelop. Sobre este artículo Mi objetivo es ayudarles a crear su primera aplicación AIR Android/iOS completamente funcional gracias a un par de herramientas que he desarrollado y que considero que pueden ser de utilidad para muchos por su sencillez. Herramientas En esta ocasión usaremos el ya hablado en el artículo anterior FlashDevelop con Flex y AIR. ArbolNegro: Usaremos mi proyecto OpenSource que he movido recientemente a Github; es una serie de paquetes de clases que he desarrollado desde hace varios años, que eliminan ciertas tareas repetitivas al momento de crear programas y aplicaciones con actionscript, como lo son cargar un XML (complicado para principiantes en as3), un tipo muy singular de LiquidLayout, carga de clases externas almacenadas en otros swfs entre otras, que si se presenta la oportunidad las demostraré, pero no es el punto principal de este artículo. BlueMarble: Blue Marble inició como un apéndice de Arbol Negro, pero sus funciones cambiaron drásticamente durante el desarrollo y actualmente lo he separado como proyecto de Arbol Negro y [...]]]></description>
				<content:encoded><![CDATA[<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/lenguajes/as3/air-android-ios-app-con-blue-marble-y-flashdevelop/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>Antes de proceder con este artículo, le recomiendo que lea mi artículo anterior &#8220;<a title="Desarrollando Apps para iOS y Android con FlashDevelop" href="http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/" target="_blank">Desarrollando Apps para iOS y Android con FlashDevelop</a>&#8221; que le será de utilidad si quiere iniciar a desarrollar aplicaciones para dispositivos móviles con FlashDevelop. <br/><br/><strong>Sobre este artículo</strong> <br/><br/>Mi objetivo es ayudarles a crear su primera aplicación AIR Android/iOS completamente funcional gracias a un par de herramientas que he desarrollado y que considero que pueden ser de utilidad para muchos por su sencillez. <br/><br/><strong>Herramientas</strong><br/><br/></p>
<ul>
<li>En esta ocasión usaremos el ya hablado en el artículo anterior <strong>FlashDevelop</strong> con Flex y AIR.</li>
<li><strong><a title="Arbol Negro Open Source" href="https://github.com/Absulit/ArbolNegro" target="_blank">ArbolNegro</a></strong>: Usaremos mi proyecto OpenSource que he movido recientemente a Github; es una serie de paquetes de clases que he desarrollado desde hace varios años, que eliminan ciertas tareas repetitivas al momento de crear programas y aplicaciones con actionscript, como lo son cargar un XML (complicado para principiantes en as3), un tipo muy singular de LiquidLayout, carga de clases externas almacenadas en otros swfs entre otras, que si se presenta la oportunidad las demostraré, pero no es el punto principal de este artículo.</li>
<li><strong><a title="Blue Marble Open Source" href="https://github.com/Absulit/BlueMarble" target="_blank">BlueMarble</a></strong>: Blue Marble inició como un apéndice de Arbol Negro, pero sus funciones cambiaron drásticamente durante el desarrollo y actualmente lo he separado como proyecto de Arbol Negro y funciona como un Framework, pero sigue siendo dependiente de él. La función principal de Blue Marble es crear un GUI sin preocuparse por ello, semejante a Flex en el hecho de que juntas unos cuantos componentes y ya tienes tu aplicación, pero con las diferencias que es mucho más liviano (mi principal queja de Flex es su peso), está completamente basado en código, no en un markup tipo HTML como Flex, por lo que posiblemente sea todo muy abstracto para quien solo haya hecho de este tipo de aplicaciones, pero lo hice de esta forma para evitar que en el desarrollo se mezcle el código con el markup, una mala práctica (o no dependiendo del desarrollador) a raíz de arreglar cosas de última hora. Será Blue Marble de lo que hablaré principalmente.</li>
</ul>
<div><a title="Arbol Negro" href="https://github.com/Absulit/ArbolNegro" target="_blank">https://github.com/Absulit/ArbolNegro</a></div>
<div><a title="Blue Marble" href="https://github.com/Absulit/BlueMarble" target="_blank">https://github.com/Absulit/BlueMarble</a></div>
<div></div>
<p><br/><br/><br/><br/><strong>Inicializando</strong><br/><br/><br/><br/> Descargamos ArbolNegro y BlueMarble y lo ponemos en nuestro directorio de elección; por costumbre tengo separadas todas las class del proyecto en sí, pero también es recomendable tener la copia con el proyecto por los posibles cambios a futuro de los paquetes que incluyamos. Procedemos a abrir FlashDevelop, y creamos un nuevo proyecto &#8220;AIR Mobile AS3 APP&#8221;; una vez cargado procedemos a agregar las referencias a nuestras class de ArbolNegro y BlueMarble y cualquiera que usted ya tenga con anterioridad. Para ello nos dirigimos al menú, Tools &gt; Global ClassPaths (Ctrl &#8211; F9) <a href="http://losdevs.com/lenguajes/as3/air-android-ios-app-con-blue-marble-y-flashdevelop/attachment/global_classpaths/" rel="attachment wp-att-620"><img class="aligncenter size-full wp-image-620" title="Global Classpaths" src="http://losdevs.com/contenido/subido/2012/06/global_classpaths.jpg" alt="Global Classpaths window" width="565" height="395" /></a>   Seleccionan as3 en el combobox, presionan Add Classpath y van al directorio donde se encuentra ArbolNegro y BlueMarble; si están por separado hay que agregar ambos directorios. Ambos paquetes empiezan con la carpeta &#8220;net/&#8221;, la carpeta que debe ser incluida debe ser la que contenga a esa misma carpeta net/ para poder hacer la llamada a las classes desde la raíz, por ejemplo import net.absulit.bluemarble.controls.Button. Una vez agregadas las classes podemos proceder a crear lo básico de la aplicación.<br/><br/><strong>Creando la aplicación</strong><br/><br/> Antes de iniciar, hay unas cuantas cosas que quiero que tengan presentes, una de ellas es que el Framework funciona en su estado actual; puede que se encuentren un bug, pero hasta el momento no me ha impedido publicar 2 aplicaciones en Play Store; otra es que estoy consciente que se puede mejorar, hay  un par de cosas que quiero cambiar y se las mencionaré en el camino; en el momento que las desarrollé me pareció el enfoque más sencillo, y me gusta no complicarme,y por el momento se van a quedar así hasta que planifique una re estructuración; pero nada de lo anterior les va a evitar desarrollar un app super facil y rápido. Profundizando un poco más sobre BlueMarble y su estructura, este tiene una interfaz mínima, transparencias y lineas monocromáticas; también su estructura funcional se basa en tomar ideas de proyectos ya existentes, como lo es Flex y su concepto de ventanas que me parece muy atinado, al igual que su navegación; y por otro lado el concepto de States de Flixl (que también usa Starling) en el que un &#8220;mundo&#8221; es una class aparte, y para entrar en ese nuevo mundo, llamamos a la Class de forma dinámica sin almacenar todo en memoria. Así cada ventana de BlueMarble es un &#8220;Mundo Nuevo&#8221; donde programamos aparte del resto del sistema y con una comunicación sencilla entre ventanas enviando un objeto de parámetro que veremos más adelante. Para empezar ya a codear, nos vamos a la carpeta /src y abrimos el archivo Main.as que es la raíz de nuestro programa; aquí vamos a establecer las variables de BlueMarble y las llamadas de clases, pero antes, vamos a comentar una línea que luego nos puede ser algo incómoda al momento de hacer debug, y es en el método deactivate(), que es un listener que se dispara al ponerse Idle el aparato, pero también al darle click fuera de la ventana de AIR, por lo que se nos puede cerrar sin querer al estar revisando el output de FlashDevelop:<br/><br/> <code> private function deactivate(e:Event):void { // auto-close //NativeApplication.nativeApplication.exit(); } </code><br/><br/> Sugiero cambiar esta linea de código de point a gesture, ya que si en algún momento queremos proceder a usarlos es muy probable que se nos olvide y caigamos en frustración porque los eventos no se dispararán; no es obligado y tampoco afecta el uso de BlueMarble (hasta donde mis pruebas actuales indican), pero es una recomendación. // touch or gesture? Multitouch.inputMode = MultitouchInputMode.GESTURE; Procedemos a continuación a crear una variable para nuestro administrador de ventanas llamando a la class WindowManager de Blue Marble <br/><br/><strong>WindowManager</strong><br/><br/> <code>private var _windowManager:WindowManager;</code><br/><br/> al digitar los dos puntos (&#8220;:&#8221;) se llamará automáticamente al generador de código automático y nos incluirá WindowManager en cuanto presionemos enter al aparecer un pop up; en caso que no se importe solo por presionar mal alguna tecla, procedemos a colocar el cursor sobre el nombre de la class e inmediatamente presionamos Ctl-Shift-1; esta secuencia importará WindowManager automáticamente y con cualquier otra class en nuestro código; una entre varias ventajas que tiene FlashDevelop con respecto al manejo de código actionscript que está ausente en otros lenguajes que dan soporte de colores como PHP, Javascript; aunque PHP tiene autocompletar para classes nativas, pero no así importadas por nosotros; esto obviamente por que su enfoque principal es HaXe/as3. WindowManager es la class que administrará nuestras ventanas y la navegación entre ellas, cargándolas y descargándolas de memoria, conforme las llamamos; es una class gráfica dependiente de la variable Stage, por lo que recomiendo este siguiente código para asegurarse de que Stage ya se ha cargado correctamente, ya que podrían presentarse problemas si esto no se realiza, ya que la necesita para tomar medidas de pantalla y colocar los elementos antes de que se presenten en pantalla:   <br/><br/><code>// entry point <br/><br/>init(); if (stage != null){ addedToStage(); }else{ addEventListener(Event.ADDED_TO_STAGE, addedToStage); }</code><br/><br/> Este código se coloca en el constructor Main(); tiene una función init() para inicializar variables, esto porque el constructor en Actionscript al compilarse no se comprime, lo que aumenta el tamaño final del archivo, así que hay que mantener al mínimo el uso de variables e inicializadores en el constructor, por eso es mejor tener una referencia a una función sin comprimir, que todas las variables; luego preguntamos si el stage existe; si ya se cargó para ese momento, entonces procedemos a llamar a la función donde iniciará el programa, en caso contrario ponemos un listener y este esperará a que el contenido se cargue para iniciar. Este método también es muy útil al crear swf para web, ya que el archivo al ser descargado no estará funcional hasta que esté completo, y si stage se llama antes pues habrán problemas. En nuestra funcion addedToStage agregamos al parametro default de Event un null para poder hacer la llamada en solitario de la función en el constructor, y también para evitar ponerle el null a mano en el constructor<br/><br/> <code>private function addedToStage(e:Event = null):void</code><br/><br/> También movemos las siguientes lineas de código que estaban en el constructor aquí:<br/><br/> <code>stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.addEventListener(Event.DEACTIVATE, deactivate);</code><br/><br/>   Y ahora sí dentro de esta función podemos iniciar nuestro programa después de estas últimas líneas. Window Manager en sí misma la vamos a necesitar en otras partes, así que la convertí en un Singleton; que es una class que solo puedes instanciar una vez, y solo por el método ofrecido por la clase; esto también para mantener la integridad de la aplicación y no tener más de un WindowManager corriendo; pero si podremos tener más de una referencia y usar sus propiedades como una variable global.<br/><br/> <code>_windowManager = WindowManager.instance; addChild(_windowManager);</code><br/><br/> La raya baja en la propiedad (&#8220;_&#8221;) es una costumbre de desarrolladores de actionscript; tiene dos utilidades, una es hacer notoria que la variable es privada en contexto de variables locales en un método, pero es puro concepto visual, hay muchos que no les gusta y no lo usan; pero la segunda utilidad tal vez los haga cambiar de parecer, y es que el autocompletar de FlashDevelop al presionar &#8220;_&#8221; y una letra, nos mostrará únicamente esas variables o propiedades privadas, y se tiene un acceso rápido a ellas. Pueden no usarlas, pero se los recomiendo, es casi que un standard entre desarrolladores de actionscript. WindowManager es un Sprite, lo que quiere decir que se verá en pantalla; pero no será visible hasta indicarselo directamente por actionscript, y para eso está addChild, que agrega variables de tipo DisplayObject al DisplayList que es el ambiente visual, lo que vemos en pantalla. Inmediatamente después de creada, la agregamos al DisplayList, para luego proceder a agregar nuestras pantallas o ventanas; esta es una de las cosas que quisiera mejorar, ya que por costumbre a veces, hago addChild después de tener a todos los objetos visuales y variables listas, pero WindowManager <strong>necesita </strong>de acceso a stage, y solo puede tenerlo al hacerse el addChild, ya que como tuve que elegir crear el Singleton, no puedo enviar stage de parámetro; si se hace addChild de WindowManager luego de agregar las ventanas, es muy probable que todo se desordene en pantalla, le recomiendo lo intente para ver las consecuencias de ello, pero luego de agregar unas ventanas para que sea visible el daño. <br/><br/><strong>Window</strong><br/><br/>Una ventana es una class que hereda de Window, así de simple, esto nos permitirá enviársela a WindowManager para que la coloque en nuestra pantalla. Para crear una nueva class, damos click derecho sobre nuestra carpeta src/ y seleccionamos Add &gt; New Class y llenamos los datos de la siguiente ventana:</p>
<div id="attachment_631" class="wp-caption aligncenter" style="width: 656px"><a href="http://losdevs.com/lenguajes/as3/air-android-ios-app-con-blue-marble-y-flashdevelop/attachment/new-class/" rel="attachment wp-att-631"><img class="size-full wp-image-631" title="New Class" src="http://losdevs.com/contenido/subido/2012/06/New-Class.jpg" alt="New Class" width="646" height="514" /></a><p class="wp-caption-text">Clase nueva, herencia y constructor default</p></div>
<p>A simples rasgos una class heredada de Window luce así:  <br/><br/> <code>package { import net.absulit.bluemarble.controls.Window; <br/>public class MainWindow extends Window { <br/>public function MainWindow(width:int=400, height:int=400, data:Object=null) { <br/>super(width, height, data); <br/>} <br/>} <br/>} </code><br/><br/>Sin poner nada en esta ventana, podemos enviársela a WindowManager y tener la aplicación vacía, pero lista:   <br/><br/><code>_windowManager.push(MainWindow, "Home", [true|false], [iconpath:String]); _windowManager.sort();</code><br/><br/>  Para esto agregamos las dos lineas anteriores; el método push, inserta la referencia de la class dentro de WindowManager para futuro uso, incluso si llamamos directamente a la class luego, es necesaria para otros procesos; el segundo parámetro existe para otro componente visual: El TabBar; ese string pondrá un texto en el TabBar para ser visualizado inmediatamente y para navegación; el true o false sirve para esconder el boton del TabBar; el iconpath es un parámetro que exíste pero no está completamente funcional; provee un ícono para ser usado con o sin el texto, pero me pareció más apropiado en este primer release de BlueMarble dejar funcional al menos uno y luego retomar el desarrollo, aunque el campo está abierto desde ya. Luego llamamos a la función sort() que acomodará finalmente los elementos en pantalla y principalmente el TabBar, que tiene que hacer un conteo de las ventanas existentes y visibles; así como de las medidas de la pantalla actuales. Técnicamente con esto la aplicación está completa, pero falta incluir algo, un archivo del que el mismo ArbolNegro depende, y es flash.swc (incluido en la descarga del ejemplo). Si considera que está listo, puede probar la aplicación, presionando Ctrl-Enter y probarlo StandAlone en el computador:</p>
<div id="attachment_632" class="wp-caption aligncenter" style="width: 390px"><a href="http://losdevs.com/lenguajes/as3/air-android-ios-app-con-blue-marble-y-flashdevelop/attachment/primera-compilacion/" rel="attachment wp-att-632"><img class="size-full wp-image-632" title="primera compilacion" src="http://losdevs.com/contenido/subido/2012/06/primera-compilacion.jpg" alt="" width="380" height="590" /></a><p class="wp-caption-text">Primera compilación</p></div>
<p>Me gusta cambiar las dimensiones en Run.bat y usar las dimensiones en proporción al iPhone, ya que a la vez sirve para visualizarlo en la computadora y acostumbrarnos al mínimo tamaño disponible: <br/><br/><code>set SCREEN_SIZE=320x480:320x480</code><br/><br/> Como pueden apreciar en la imagen anterior, la interfaz es mímina; TabBar con &#8220;Home&#8221; de label, y arriba, aunque vacío, está el ActionBar, que podrá contener por ahora, un botón de navegación a la izquierda, aunque usted puede darle el uso que requiera, y un botón de acción a la derecha, pensado para menús secundarios; en medio puede ir un título, que se ajustará y mostrará de acuerdo a su tamaño. Estos elementos son accesibles gracias a propiedades dentro de cada Window, aunque pienso cambiarlo a algo más sencillo y asignarlo al WindowManager en un futuro, o ambos, pero prefiero el WindowManager para un acceso más abierto que actualmente no tengo al poner el acceso dentro de Window. Veamos un ejemplo sobre como modificar estas propiedades; para esto nos vamos a nuestra recién creada ventana MainWindow.as, recordando mantener el proceso de preguntar si existe stage antes de usarlo, proseguimos con el código:   <br/><br/><code> private function init():void { _actionBar.title = "Blue Marble Demo 1"; _actionBar.navigation = new Button(); _actionBar.navigation.label = "Exit"; _actionBar.navigation.addEventListener(MouseEvent.CLICK, onClickActionBarNavigation); _actionBar.action = new Button(); _actionBar.action.label = "Test"; }</code><br/><br/> <code>private function onClickActionBarNavigation(e:MouseEvent):void { NativeApplication.nativeApplication.exit(); }</code><br/><br/> ActionBar actualmente es una propiedad heredada de Window (pero estará en WindowManager) y de ahí podemos acceder a los botones navigation y action; crearles una nueva instancia (mi principal queja de esto es rehacerlas, cuando deberian estar constantes a mi gusto, aunque eliminarlas entre ventanas ahorra memoria, creo que es algo incomodo rehacerlas) y agregarles un listener y su método como por ejemplo el CLICK para hacer EXIT con el método nativo de AIR. Pueden probarlo y de hecho el exit funcionará. Para probarlo bien en Android y iOS pueden revisar el <a title="Desarrollando Apps para iOS y Android con FlashDevelop" href="http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/" target="_blank">post anterior</a> y comprobar que todo funcione bien. <br/><br/><strong>Conclusión</strong><br/><br/> Dentro de un Window, pueden meter LO QUE SEA que ustedes ya hayan hecho en actionscript con anterioridad, esa era mi meta, simplificar la forma de hacer aplicaciones y devolverle el poder al programador sin obstáculos de componentes pesados y poder hacer lo que sabemos hacer, que es crear nuestra propia interfaz dentro de la aplicación. Hay muchas cosas más por ver; hay un par de componentes que no he detallado aquí, pero que son fáciles de usar y pueden ver el código, que son Button, Text e InteractiveList, aunque el último necesita una explicación propia, pero eso será para otro artículo. Si quieren ver una aplicación completamente terminada en BlueMarble pueden ver <a title="Webcams Costa Rica AIR App" href="https://play.google.com/store/apps/details?id=air.com.absulit.webcamscostarica" target="_blank">Webcams Costa Rica</a> la cual originalmente fue desarrollada en Flex con un peso de 6MB ahora con BlueMarble tiene un peso de 712KB También aquí adjunto el proyecto terminado en FlashDevelop para que puedan revisarlo: <br/><br/>Descarga <a href="http://losdevs.com/lenguajes/as3/air-android-ios-app-con-blue-marble-y-flashdevelop/attachment/bluemarbledemo1/" rel="attachment wp-att-656">BlueMarbleDemo1</a> <br/><br/>Espero que esto sea de utilidad para quien aún no se haya animado a crear una aplicación y subirla al Play Store, y que empiecen a convertir esas ideas en algo real. Saludos y espero sus comentarios y dudas.</p>
<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/lenguajes/as3/air-android-ios-app-con-blue-marble-y-flashdevelop/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://losdevs.com/lenguajes/as3/air-android-ios-app-con-blue-marble-y-flashdevelop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Graph Tags</title>
		<link>http://losdevs.com/html/open-graph-tags/</link>
		<comments>http://losdevs.com/html/open-graph-tags/#comments</comments>
		<pubDate>Fri, 08 Jun 2012 04:02:57 +0000</pubDate>
		<dc:creator>absulit</dc:creator>
				<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://losdevs.com/?p=572</guid>
		<description><![CDATA[Durante mucho tiempo estuve intrigado sobre sitios como FB captaban las imágenes y texto de los links que compartía, aunque realmente nunca había hecho mucho research sobre el asunto, no hay que pensarlo mucho cuando uno como programador sabe que un archivo se puede escanear para encontrar partes relevantes; dígase tareas de primer nivel al estudiar la carrera: &#8220;parsear archivos de texto&#8221;. Sin embargo, este es un proceso ineficiente si tomamos en cuenta que el html es una de las cosas más difíciles de revisar incluso con expresiones regulares; por lo que luego supuse que esto se llevaba a cabo con etiquetas, estaba en lo correcto, pero no de la forma en que creí. Supuse que esto era obra de la Web Semántica (también llamada web3.0 pero la web no es un binario y no me gusta llamarla así) y que los textos estaban amarrados de alguna forma a un tipo de etiqueta genérica o standard que permitía a los parseadores revisar el texto más facil; pero en realidad es mucho más sencillo que esto. Open Graph Protocol El OGP son una especificación que utiliza una serie de tags o etiquetas HTML para hacer más &#8220;social&#8221; su sitio o página, permitiéndole a sitios como FB y [...]]]></description>
				<content:encoded><![CDATA[<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/html/open-graph-tags/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>Durante mucho tiempo estuve intrigado sobre sitios como FB captaban las imágenes y texto de los links que compartía, aunque realmente nunca había hecho mucho research sobre el asunto, no hay que pensarlo mucho cuando uno como programador sabe que un archivo se puede escanear para encontrar partes relevantes; dígase tareas de primer nivel al estudiar la carrera: &#8220;parsear archivos de texto&#8221;.</p>
<p>Sin embargo, este es un proceso ineficiente si tomamos en cuenta que el html es una de las cosas más difíciles de revisar incluso con expresiones regulares; por lo que luego supuse que esto se llevaba a cabo con etiquetas, estaba en lo correcto, pero no de la forma en que creí.</p>
<p>Supuse que esto era obra de la <a title="Web Semántica" href="http://en.wikipedia.org/wiki/Semantic_Web" target="_blank">Web Semántica</a> (también llamada web3.0 pero la web no es un binario y no me gusta llamarla así) y que los textos estaban amarrados de alguna forma a un tipo de etiqueta genérica o standard que permitía a los parseadores revisar el texto más facil; pero en realidad es mucho más sencillo que esto.</p>
<p><strong>Open Graph Protocol</strong></p>
<p>El <a title="Open Graph Protocol" href="http://ogp.me/" target="_blank">OGP</a> son una especificación que utiliza una serie de tags o etiquetas HTML para hacer más &#8220;social&#8221; su sitio o página, permitiéndole a sitios como FB y Google Plus captar cierta información para presentarla en sus sitios, esto sin tener que ir a revisar la página por ello, sino que busca directamente estas etiquetas y saca la información directamente.</p>
<p>Estas etiquetas se colocan en el &lt;head&gt; de cada página, deben seguir ciertas normas para su funcionamiento apropiado, pero generalmente no sabemos si funcionan bien hasta que las probamos compartiendo en FB; aunque el mismo FB provee una página para probarlas.</p>
<p><strong>Nota</strong>: <em>Supongo que para este punto haya un poco de confusión ya que en FB parece que hay  un poco de ambiguedad sobre como llamar ahora al OpenGraph, ya que ellos lo usan para su nuevo sistema de &#8220;Verbos entre Entidades&#8221;  para aplicaciones, por ejemplo: &#8220;Sebastián vio una película en Netflix&#8221;, pero en realidad este artículo solo se refiere a como las redes sociales captan la información de las páginas web para su presentación al usuario.</em></p>
<p>¿Como sé yo si mi sitio necesita OpenGraphTags?</p>
<p>Bien, tomemos por ejemplo la siguiente imagen, proveniente de este <a href="https://www.facebook.com/CinepolisCR/posts/10150883589933422" target="_blank">link de Cinépolis Costa Rica</a></p>
<div id="attachment_579" class="wp-caption aligncenter" style="width: 440px"><a href="http://losdevs.com/html/open-graph-tags/attachment/og_1/" rel="attachment wp-att-579"><img class="size-full wp-image-579" title="Descripción errónea en Open Graph Tags" src="http://losdevs.com/contenido/subido/2012/06/og_1.png" alt="" width="430" height="300" /></a><p class="wp-caption-text">Descripción errónea en Open Graph Tags</p></div>
<p>Si bien cuando compartimos en FB podemos cambiar el texto y el título con solo hacer click, ellos no pueden porque parece que lo hacen a través de una aplicación que desconozco su procedencia llamada Sendible; pero el dilema aquí es que durante el proceso ellos no pueden cambiarlo y FB escanea lo que puede y lo envía como descripción para la presentación en el Fan Page de Cinepolis Costa Rica. Si su sitio se ve así, vaya preocupándose, pero tiene solución.</p>
<p>Estas etiquetas son muy sencillas, que de hecho me impresiona que muchos sitios nacionales (Costa Rica) no las hayan implementado aún; me gusta pensar que estoy muy metido en web y HTML, pero la realidad es que soy un programador que le apunta a lo que le llega y tal vez descubrí esto un poco tarde, pero los que administran sitios web al 100% de su tiempo, no tienen excusa. Para el tiempo en que las descubrí fue cuando quería aplicarlas al sitio <a title="VozMetropolitana" href="http://VozMetropolitana.com " target="_blank">VozMetropolitana.com </a> y me sorprendió bastante que incluso <a title="Nacion" href="http://nacion.com" target="_blank">Nacion.com</a> no las manejaba, y de hecho al día de hoy no las utiliza, pero usa de igual manera unos metatags para enviar esa información, y para la imagen FB generalmente busca la primera imagen que está dentro del contenido o Body del artículo; así que por el momento están bien.</p>
<p>Las etiquetas en sí que necesita mínimo su página son las siguientes</p>
<p><code>&lt;meta property="og:title" content="Mi artículo en LosDevs" /&gt;<br />
&lt;meta property="og:type" content="article" /&gt;<br />
&lt;meta property="og:url" content="http://losdevs.com/title001/" /&gt;<br />
&lt;meta property="og:image" content="http://losdevs.com/images/image1.jpg" /&gt;</code></p>
<p>Yo agregaría Description para que sea parte de sus tags habituales, ya que ese texto en FB es muy importante</p>
<p><code>&lt;meta property="og:description" content="Descripción de mi sitio" /&gt;</code></p>
<p>&nbsp;</p>
<p>La tag OG:TYPE tiene sus variaciones, esto para indicar que tipo de contenido en sí estamos viendo, tal vez ahora no muy visible para nosotros, excepto para los buscadores como Google que pueden clasificar mejor esta información para presentárnosla en los resultados de búsqueda. Tenemos por ejemplo para esta etiqueta: WEBSITE(sitio standard), ARTICLE(noticias, artículos, informativo)</p>
<p>Hay muchas otras etiquetas que se pueden usar, por ejemplo para vídeo, y así indicarle a Facebook que su contenido tiene multimedia; ha visto esos previews de vídeo? Bueno, esto pone una limitante si usted quiere que el usuario vaya a su página, pero puede desplegar ese contenido ahí mismo, y hacer que los buscadores detecten que esa página es equivalente  a un vídeo, y mostrarla en la página de resultados especial que por ejemplo tiene Google dedicada a los vídeos.</p>
<p><strong>Revisar si nuestras páginas tienen Errores</strong></p>
<p>Cuando escribimos las tags es muy poco probable que nos demos cuenta si hemos fallado en nuestra meta de cumplir el brindar la información correcta a una red social, falta una etiqueta? la imagen no carga? dominio incorrecto de las urls? eso no se nota, pero hay varios sitios que nos pueden dar un reporte; por ejemplo aquí tenemos el reporte de la página anterior de Cinepolis Costa Rica, que seguramente será de mucho beneficio para sus desarrolladores y para mi es la herramientas más adecuada:</p>
<p>&nbsp;</p>
<div id="attachment_582" class="wp-caption aligncenter" style="width: 510px"><a href="http://losdevs.com/html/open-graph-tags/attachment/og_2/" rel="attachment wp-att-582"><img class="size-medium wp-image-582" title="Reporte de Error de FB" src="http://losdevs.com/contenido/subido/2012/06/og_2-500x252.png" alt="Reporte de Error de FB" width="500" height="252" /></a><p class="wp-caption-text">Reporte de Error de FB</p></div>
<p>Esta es una URL que debe estar en la lista de favoritos, ya que se vuelve una que aunque no queramos siempre vamos a tener que visitar: <a href="https://developers.facebook.com/tools/debug" target="_blank">https://developers.facebook.com/tools/debug</a></p>
<p>Esta es especial de Google: <a href="http://www.google.com/webmasters/tools/richsnippets">http://www.google.com/webmasters/tools/richsnippets</a></p>
<p>Y otras herramientas las podrán encontrar aquí: <a href="http://ogp.me/#implementations">http://ogp.me/#implementations</a></p>
<p><strong>Una implementación en Drupal</strong></p>
<p>Este artículo no es dedicado a Drupal, pero cuando descubrí las tags fue porque estaba dedicando mi tiempo para implementarlo en Drupal 6; en su momento consideré usar este módulo <a href="http://drupal.org/project/opengraph_meta">http://drupal.org/project/opengraph_meta</a>, pero me di cuenta que para lo que necesitaba que en realidad no era mucho, no necesitaba meter otro módulo para incluir un montón de tags que no iba a usar, además me di cuenta que no tenía la flexibilidad que necesitaba. Si alguien tiene otro módulo nos lo pueden hacer saber en los comentarios, y también saber si continuó con el uso del módulo OpenGraphMeta y darme cuenta si me equivoqué al no usarlo.</p>
<p>Mi decisión fue bastante simple, no sé si será el mejor procedimiento en lo que se refiere a rendimiento, pero me pareció muy sencillo simplemente meter las tags en el Page.tpl.php, y de ahí hacer las llamadas al API, llamar el contenido que necesitaba, hacer una llamada a la imagen recortada con ImageCache para no tener que cargar un full 1024&#215;768 sino un 100&#215;100 y  hacerlo selectivo por tipo de contenido; y me pareció mucho más fácil para modificar y podía ver todos al mismo tiempo sin ningún problema; a fin de cuentas el contenido iba a ser almacenado en el cache de Drupal y me gustó bastante:</p>
<p><code>&lt;?php<br />
//metatags para FB<br />
if($node-&gt;type == 'articulo'){<br />
echo "&lt;meta property='og:title' content='" . $node-&gt;title . "'/&gt;";<br />
echo '&lt;meta property="og:type" content="article"/&gt;';<br />
echo '&lt;meta property="og:url" content="' . $base_url .'/'. $node-&gt;path . '"/&gt;';<br />
echo '&lt;meta property="og:image" content="' . $base_url .'/'. $node-&gt;field_imagen_articulo[0]['filepath'] . '"/&gt;';<br />
echo '&lt;meta property="og:site_name" content="Mi Sitio"/&gt;';<br />
}elseif($node-&gt;type == 'galeria') {<br />
echo '&lt;meta property="og:video" content="' . $base_url . '/' . path_to_theme().'/swf/galeria.swf'" /&gt;';<br />
echo '&lt;meta property="og:video:height" content="472" /&gt;';<br />
echo '&lt;meta property="og:video:width" content="306" /&gt;';<br />
echo '&lt;meta property="og:video:type" content="application/x-shockwave-flash" /&gt;';<br />
echo '&lt;meta property="og:description" content=""/&gt;';<br />
}?&gt;</code></p>
<p>En sencillo, y el contenido se puede reemplazar a mano o incluir un field del nodo actual; como el código es selectivo, al no llamar código de otro tipo de contenido en otro nodo, no da error al estar en otro tipo de contenido.</p>
<p>&nbsp;</p>
<p><strong>Beneficios de OG Tags</strong></p>
<p>Esto puede ser un poco ambiguo y cambiar de persona a persona; si su contenido ya es bien leído por redes sociales sin poner una sola tag ¿para qué las necesito?, bueno, desde un punto de vista futuro, no vamos a poder escapar de que Google empiece a relacionar significados de palabras con páginas completas, a lo que me refiero es que Internet o nuestro buscador para ser más específico, sabrá de lo que le estamos hablando al pedirle algo, ¿que quieres la receta de las galletas que son iguales a esta foto? bueno Google muy probablemente te dará el resultado de una vez sin que tengas que revisar una lista, ya que podrá inferir de lo que hablas sin haberlo pedido explícitamente; y eso asusta un poco pero ahorrará tiempo, y si el contenido que manejas no es descifrable los buscadores no te encontrarán, y recuerda que tal vez ya no exista la lista de resultados, ya que la búsqueda directa inferida será muy efectiva y desaparecerás del mapa&#8230; por completo&#8230; pero aun no sucede así que te puedes preparar, y a la vez teniendo un control total sobre tu contenido, ya que como mencioné antes en el ejemplo de la imagen, si está dentro del contenido principal FB la encontrará, pero si antes de eso hay por ejemplo un Banner Publicitario, pues esa será la primera imagen que saldrá en el preview, entonces con los OGTags podrás forzar esto sin temor a que el cambio de contenido a futuro, o una re estructuración del HTML afecte como te percibirán las redes sociales.</p>
<p>No conozco por el momento ninguna desventaja más que agregar un puño más de caracteres a nuestro HTML; y a menos que sea mal manejado por ejemplo con la imagen del preview (demasiado grande para lo que se usa en FB) no me parece que pueda afectar más del beneficio que trae.</p>
<p>Creo que esto va a llevar a una interconexión de contenidos como nunca la hemos visto, donde las páginas (Aplicaciones de hecho) se van a estar comunicando entre sí sin intervención humana y tomarán decisiones para el usuario y su comodidad; de hecho ya está el primer vistazo de esto a futuro y son los Intents (como por ejemplo el de Twitter: <a href="https://dev.twitter.com/docs/intents">https://dev.twitter.com/docs/intents</a>) que son trozos de aplicación que incrustas en tu propia aplicación (no tienes que desarrollarlas) y que te permitirán esa interconexión e intercambio de información óptimo con el sitio que creó el Intent.</p>
<p>Hay un interesante camino por recorrer, hay que estar preparados y nada mejor que empezar con las OGTags.</p>
<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/html/open-graph-tags/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://losdevs.com/html/open-graph-tags/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Desarrollando Apps para iOS y Android con FlashDevelop</title>
		<link>http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/</link>
		<comments>http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 02:18:39 +0000</pubDate>
		<dc:creator>absulit</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[OS]]></category>

		<guid isPermaLink="false">http://losdevs.com/?p=498</guid>
		<description><![CDATA[Como desarrolladores tenemos una responsabilidad para aprender herramientas que muchas veces no pensamos usar, ya que los requerimientos así lo piden. Al menos en Costa Rica existe un tabú con respecto al uso de herramientas relacionadas con Flash, debido al mal rendimiento en memoria del plugin en los browsers; pero las empresas grandes que trabajan con clientes en el extranjero no piensan igual y ahí tienen una ventaja. La mejor forma de perderle el miedo y dejar de criticar una herramienta es empezar a usarla, y hoy voy a hacer una introducción a un grupo de herramientas, que no solamente expandirán sus habilidades como programador, si no que les permitirá desarrollar aplicaciones en iOS y Android. No voy a enseñarles a programar, espero que quien vea esto ya tenga sus años montado en la carrera o trabajando, pero creo que es claro que hay cosas sobre la sintaxis de AS3 en que necesitarán ayuda, e intentaré aclararlas durante el camino, y obviamente también en los comentarios. Nota: Como requerimientos mínimos vamos a usar un computador con Windows; generalmente los desarrolladores no podemos escapar de esta plataforma para desarrollar (.Net es buen ejemplo) y en este caso no podremos evitarlo, ya que [...]]]></description>
				<content:encoded><![CDATA[<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>Como desarrolladores tenemos una responsabilidad para aprender herramientas que muchas veces no pensamos usar, ya que los requerimientos así lo piden. Al menos en Costa Rica existe un tabú con respecto al uso de herramientas relacionadas con Flash, debido al mal rendimiento en memoria del plugin en los browsers; pero las empresas grandes que trabajan con clientes en el extranjero no piensan igual y ahí tienen una ventaja. La mejor forma de perderle el miedo y dejar de criticar una herramienta es empezar a usarla, y hoy voy a hacer una introducción a un grupo de herramientas, que no solamente expandirán sus habilidades como programador, si no que les permitirá desarrollar aplicaciones en iOS y Android.</p>
<p>No voy a enseñarles a programar, espero que quien vea esto ya tenga sus años montado en la carrera o trabajando, pero creo que es claro que hay cosas sobre la sintaxis de AS3 en que necesitarán ayuda, e intentaré aclararlas durante el camino, y obviamente también en los comentarios.</p>
<p><em><strong>Nota</strong>: Como requerimientos mínimos vamos a usar un computador con Windows; generalmente los desarrolladores no podemos escapar de esta plataforma para desarrollar (.Net es buen ejemplo) y en este caso no podremos evitarlo, ya que Flash Develop está desarrollado en .NET; y un dispositivo Android con version 2.2 (FroYo) o superior(con capacidad gráfica 3D) y/o dispotivo iOS en su versión 5 como recomendación.</em></p>
<p>Siempre he tenido un gusto primordial por el uso de herramientas gratuitas, y esta no es la excepción; usaremos <a title="Flash Develop" href="http://www.flashdevelop.org/" target="_blank">Flash Develop </a> que pueden descargar directamente de este <a title="Descarga directa FlashDevelop" href="http://www.flashdevelop.org/downloads/releases/FlashDevelop-4.0.1-RTM.exe" target="_blank">link</a>, pero si ya ha pasado mucho tiempo de este post revisen la página principal, ya que se está actualizando constantemente. Otra parte gratis que usaremos es Flex SDK, que para quienes no lo conocen permite crear aplicaciones con componentes al mejor estilo de VB .NET, que para mi gusto resultan muy pesadas, pero lo importante es que tiene un compilador de SWF. Flex SDK viene junto con la instalación de Flash Develop, así que tienen que marcar el check que aparece en la instalación para permitir la descarga que toma un tiempo; junto con el Flex SDK, se descarga AIR SDK, que es lo que nos permitirá crear la aplicación Android o iOS, empaquetando en SWF junto con assets en un .apk o .ipa dependiendo del sistema y nuestras necesidades.</p>
<p>Aparte de esto necesitamos el Android SDK, que si ya han estado experimentado desarrollo con Android en Java y otras herramientas seguro ya tendrán instalado.</p>
<p>Una vez instalado FlashDevelop, lo ejecutamos y procedemos a abrir un nuevo proyecto (Project/New Project) y seleccionamos AIR Mobile AS3 App</p>
<p><a href="http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/attachment/untitled-1/" rel="attachment wp-att-509"><img class="aligncenter size-medium wp-image-509" title="Crear Proyecto FlashDevelop" src="http://losdevs.com/contenido/subido/2012/03/Untitled-1-500x347.png" alt="" width="500" height="347" /></a></p>
<p>Como pueden ver hay una amplia capacidad de FlashDevelop para crear aplicaciones, incluso legacy como as2, y para los interesados está HaXe, que con un mismo lenguaje compila para diferentes tipos, como C++ y AS3. Si ponen atención podrán ver que existe un tipo de proyecto llamado NME, que aunque uds no lo crean, permite compilar en muchas más plataformas que AIR; si tienen curiosidad, pueden investigarlo en <a href="http://www.haxenme.org/" target="_blank">http://www.haxenme.org/</a></p>
<p>&nbsp;</p>
<p><a href="http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/attachment/untitled-2/" rel="attachment wp-att-512"><img class="aligncenter size-medium wp-image-512" title="Ventana de Proyecto Nuevo" src="http://losdevs.com/contenido/subido/2012/03/Untitled-2-500x268.png" alt="" width="500" height="268" /></a></p>
<p>&nbsp;</p>
<p>Una vez creado el proyecto, deberán revisar obligatoriamente los siguientes archivos dependiendo de la plataforma que vayan a desarrollar: AIR_Android_readme.txt y AIR_iOS_readme.txt con instrucciones para configurar y ejecutar una serie de .bat que viene listos para ejecutar los comandos de compilación por nostros. Muy importante en Android y iOS, para poder compilar necesitamos un archivo .cert o de certificado, para eso nos dirigimos al archivo /bat/CreateCertificate.bat; si no quieren complicarse mucho la vida sobre qué hace, simplemente lo ejecutan (doble click sobre el .bat o en el navegador de archivos de FlashDevelop, click derecho al archivo, se despliega el menú contextual &gt; Execute) y este les generará ese certificado en el directorio /cert dentro del proyecto. La consola nos previene de compilar hasta pasado un minuto de la ejecución del .bat; si mal no recuerdo, el compilar durante ese periodo da un error, pero no es nada grave.</p>
<p>El archivo SetupSDK.bat debe ser editado para que los paths de los SDKs correspondan a los que ya tenemos en el sistema, si ud ya instaló Flex y no quiso utilizar el que viene junto con FlashDevelop (aunque lo recomiendo) podrá editar estas rutas default</p>
<p><code>:: Path to Flex SDK<br />
set FLEX_SDK=C:\Program Files (x86)\FlashDevelop\Tools\flexsdk</p>
<p>:: Path to Android SDK<br />
set ANDROID_SDK=C:\Program Files (x86)\FlashDevelop\Tools\android</code></p>
<p>En cualquier momento que intente compilar el proyecto, si le sale algún error, la consola le advertirá de las posibles faltas de configuración que no haya realizado. La explicación está bien detallada en los readme TXT de cada plataforma.</p>
<p>Antes de compilar para ver si todo funciona, si está en Android deberá instalar el AIR Runtime para <strong>Android</strong>, que interpreta el APK creado en AIR; para esto ejecutamos el bat/InstallAirRuntime.bat mientras tenemos conectado nuestro dispositivo Android; en iOS el AIR va empacado junto con el IPA, por lo que no necesita de una preinstalación; también puede descargar el <a title="Descargar AIR Runtime" href="https://play.google.com/store/apps/details?id=com.adobe.air" target="_blank">AIR Runtime en Play de Google</a>. En los settings de las aplicaciones también existe la opción de compilar el APK junto con el AIR Runtime, pero la desventaja es que la aplicación pesará demasiado, hablamos de 8Megas por APK si decide compilarlo de esa manera, pero se estaría brincando que el usuario al descargar la aplicación se le incluya un cuadro de dialogo indicándole que debe descargar el AIR del Market; esta decisión debe tomarse desde el punto de vista de mercadeo, ya que es posible que un usuario no instale su app si no tiene AIR. Actualmente no poseo datos sobre el porcentaje de usuarios que tienen instalado AIR.</p>
<p>Para iOS necesitará un archivo de extensión .mobileprovision, este es necesario para poder publicar en el AppStore de Apple; pero gracias a los magos de la internet, poseo uno para pruebas, y también para instalar en dispositivos Jailbreak, si desea publicarlo legalmente el archivo no le va a servir, necesita tener su licencia de desarrollador en Apple y generar sus propios .cert y .mobileprovision</p>
<p><a href="http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/attachment/mobileprovision/" rel="attachment wp-att-515">mobileprovision para iOS</a></p>
<p>En los settings de iOS en los bat de FlashDevelop (bat/SetupApplication.bat) encontrará donde colocar el path al .mobileprovision y también al .cert, que puede ser exactamente el mismo que está usando con Android.</p>
<p>&nbsp;</p>
<p><a href="http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/attachment/certificados/" rel="attachment wp-att-516"><img class="aligncenter size-medium wp-image-516" title="Cambiar certificados iOS" src="http://losdevs.com/contenido/subido/2012/03/certificados-500x268.png" alt="" width="500" height="268" /></a></p>
<p>&nbsp;</p>
<p>El codigo del .bat debe ser de la siguiente manera para iOS. &#8220;fd&#8221; fue creada automáticamente al usar CreateCertificate.bat, esta clave es recomendable cambiarla al momento de ser distribuida.</p>
<p><code>:: iOS packaging</p>
<p>set IOS_DIST_CERT_FILE=cert\ProyectoAIRiOSANDROID.p12<br />
set IOS_DEV_CERT_FILE=cert\ProyectoAIRiOSANDROID.p12<br />
set IOS_DEV_CERT_PASS=fd<br />
set IOS_PROVISION=cert\mobileprovision.mobileprovision<br />
set IOS_ICONS=icons/ios<br />
</code><br />
&nbsp;</p>
<p>Básicamente eso es todo lo que se necesita, puede presionar F8, Control-Enter, o el boton de compilar, justo debajo de <em>Syntax</em> en el menú; y para probar que todo está bien, puede poner algo de texto en src/Main.as; despues de // entry point digite lo siguiente</p>
<p><code>var text:TextField = new TextField();<br />
text.text = "HelloWorld";<br />
text.x = (stage.stageWidth - text.textWidth) / 2;<br />
text.y = (stage.stageHeight - text.textHeight) / 2;<br />
addChild(text);</code></p>
<p>Esto colocará una caja de texto en el DisplayList de Flash con la frase &#8220;Hello World&#8221; centrada en pantalla .</p>
<p>&nbsp;</p>
<p><a href="http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/attachment/4-compilado/" rel="attachment wp-att-523"><img class="aligncenter size-medium wp-image-523" title="Ejecutado y compilado en FlashDevelop" src="http://losdevs.com/contenido/subido/2012/03/4-compilado-500x268.png" alt="" width="500" height="268" /></a></p>
<p>&nbsp;</p>
<p>Tome en cuenta que al compilar, este se ejecutará en una ventana aparte, pero si quiere probarlo en su dispositivo, conectelo, y cambie en Run.bat el target</p>
<p><code>:target<br />
::goto desktop<br />
goto android-debug<br />
::goto android-test<br />
::goto ios-debug<br />
::goto ios-test</code></p>
<p>Retira los :: de  &#8217;goto android-debug&#8217; y se los pone frente a &#8216;goto desktop&#8217; y ya puede probarlo en el dispositivo; le saldrá una ventanita pidiendole la IP de su máquina para hacer debug (a lo que me referiré en otro post), se la pone o le da cancelar, y podrá ver su primera aplicación en Android.</p>
<p>El resultado de su labor se encontrará en el directorio /dist; encontratá sus APK e IPA bien identificados con el  nombre del proyecto, y también con el tipo de compilación que hizo (TEST o DEBUG)</p>
<p>Incluyo a continuación un zip con el proyecto recién descrito completamente armado, así prácticamente solo tiene que instalar Android SDK y FlashDevelop y abrir el archivo del proyecto para visualizarlo. Dentro incluyo el IPA y APK; para instalar el APK sin hacer deploy desde el proyecto, tienen que activar en los settings de Android &gt; Aplicaciones &gt; Fuentes Desconocidas, para poder subirlo al dispositivo de forma manual, darle click e instalarlo. Para iOS no olviden que necesitan o tenerlo jailbreak para las pruebas, o tener su cuenta de desarrollador otorgada por Apple.</p>
<p><a href="http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/attachment/proyecto_air_ios_android/" rel="attachment wp-att-537">Proyecto_AIR_iOS_ANDROID</a></p>
<p>&nbsp;</p>
<p><strong>¿Qué ventajas tengo de trabajar con AIR?</strong></p>
<ul>
<li>Para los que hemos trabajado con Flash y as3, sabemos la ventaja de un diseño hecho en Illustrator e importarlo directamente a Flash IDE; si su aplicación es sencilla y requiere verse bien, podrá usar vectores, pero a costa de sobrecargar la memoria.</li>
<li>Si ya sabe as3, no tiene que profundizar Java ni Obj-C, lo que le permite distribuir en 2 plataformas casi que inmediatamente; aunque siempre es recomendable conocer la arquitectura original con que se trabaja; por ejemplo, actualmente se desarrollan extensiones específicamente para cada plataforma, aprovechando sus características particulares, estas extensiones se desarrollan de forma nativa y se exportan a as3, lo que permite hacer un puente entre el APK y Android, o el IPA y iOS y por ejemplo enviar mensajes a la bandeja de Notificaciones, mostrar una alerta, tener un icono en el taskbar (Android) obtener información de la red, vibrar (iOS). Pueden ver una lista detallada de estas Extensiones Nativas <a title="Native Extensions" href="http://www.adobe.com/devnet/air/native-extensions-for-air.html" target="_blank">aquí</a>.</li>
<li>La mejor ventaja de todas es que puede crear una aplicación en una semana, no es broma, como experiencia personal, las 2 aplicaciones que tengo en el Market de Android, desde su inicio hasta fin de desarrollo para subirse finalmente a la tienda, fue una semana. Me llevó más tiempo ya que no conocía (y aún no conozco muy bien) los componentes de Flex, así que hice lo mejor que pude con lo que aprendí buscando por internet. Creo que con Flex se puede desarrollar muy rápido, pero se debe considerar el coste del peso; aunque siempre he preferido trabajar con raw code as3, que de paso hace más liviana la aplicación.</li>
<li>Hay frameworks especializadas para juegos, como Flixl, y el nuevo Starling que el mismo Adobe sacó, utilizando una nueva capacidad de Flash, que es la aceleración por hardware (Stage3D) que da un incremento INCREIBLE en la velocidad de las aplicaciones, incluso cuando se agregan cientos de sprites como por ejemplo para <a title="ZombieLab Video" href="http://www.youtube.com/watch?v=TCSlluaY90s" target="_blank">un juego</a>.</li>
<li>El set de Gestures que trae Air for Android es muy sencillo de usar, se asigna un listener y puede escuchar el parámetro en la función llamada para obtener cambios de X y Y, presión, dimensión, etc.</li>
</ul>
<p><strong>¿Cuáles son las desventajas de trabajar con AIR?</strong></p>
<ul>
<li>El principal problema como antes mencioné, es la forma de empaquetarlo, el archivo puede pesar poco sin incluir el AIR Runtime incorporado, pero si lo incluimos tendremos mínimo 8Megas de peso.</li>
<li>El manejo de memoria puede llegar a ser un problema, esto referente a as3 en general,  si usted no está acostumbrado a programar con objetos pequeños, dígase Array e Int, puede olvidar liberar la memoria al crear sus propias Classes y el Garbage Collector nunca podrá eliminar su objeto. Específicamente hay que tener un control sobre las referencias de las instancias, y los listeners que se han puesto, ya que una vez que se dejan de usar, hay que eliminar estas; el Garbage Collector de la máquina virtual de Flash funciona un poco diferente a otros sistemas, este depende del DisplayList (cada que hacemos un addChild agregamos algo al DisplayList) y la única forma de que el GC pueda borrar la instancia es cortar todos los hilos que hacen referencia a ella.</li>
<li>Si usa los componentes de Flex su aplicación pesará y pesará más; actualmente Adobe trabaja en mejorar estos componentes, pero en estos momentos no son muy rentables para mobile si está cuidando el peso de su aplicación.</li>
<li>La falta de comunicación directa con el sistema operativo, que es &#8220;solucionado&#8221; en parte con las Extensiones Nativas.</li>
<li>En iOS no se puede cargar un SWF externo con código para usarlo luego, ya que el compilado de iOS se vuelve incompatible con un swf plano, y no puede leerlo. Puede cargar swfs con animaciones únicamente.</li>
</ul>
<p>&nbsp;</p>
<p><strong> Una mirada hacia atrás</strong></p>
<p>Apuesto que muchos en este punto están pensando &#8220;¿<strong>Para qué desarrollamos en iOS</strong> con Flash, si <strong>Apple no permite esto</strong>?&#8221;. Bueno, resulta que hay un poco de confusión con respecto al tema; actualmente <strong>Apple sí permite subir aplicaciones compiladas con Flash</strong> al AppStore, pero la gente no sabe que fue lo que pasó. En 2010 si no me equivoco, Adobe anunció que se podían compilar swfs a iPhone, y que de hecho ya tenían varias aplicaciones subidas; esto enfureció a Apple que de un tiempo para acá son enemigos por conveniencia (cosas fuera de este post) y prohibió de forma generalizada usar transcompiladores para generar aplicaciones para iOS, esto afectó no solo a Adobe, si no a grupos muy honestos como Appcelerator Titanium, se alzaron ciertas protestas y comentarios sobre <em>Competencia Desleal </em>por parte de Apple, lo que llevó a finales del 2010, casi terminando el año, y evitar estar en el ojo del gobierno, revocar esta restricción, noticia que pasó casi desapercibida, excepto para los desarrolladores más fanáticos (yo incluido), supongo que fue por ser la época navideña, y nadie estaba poniendo atención. Desde entonces Adobe retomó el desarrollo del transcompilador. Más o menos así es la historia, si hay algún detalle fuera o sobrante, me disculparán.</p>
<p>Espero que esta introducción sea de utilidad para quienes tengan curiosidad en desarrollar aplicaciones con actionscript, luego mostraré más cosas, como manejo de memoria, y hasta crear sus propios componentes para evitar el uso de Flex y bajar el peso de su aplicación y hasta mostrar de mis propios experimentos.</p>
<p>Saludos y espero sus comentarios.</p>
<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://losdevs.com/lenguajes/as3/desarrollando-apps-para-ios-y-android-con-flashdevelop/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>¿Por qué no me gustó Joomla!?</title>
		<link>http://losdevs.com/cms/por-que-no-me-gusto-joomla/</link>
		<comments>http://losdevs.com/cms/por-que-no-me-gusto-joomla/#comments</comments>
		<pubDate>Sat, 17 Mar 2012 01:36:33 +0000</pubDate>
		<dc:creator>Nitos</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WP]]></category>

		<guid isPermaLink="false">http://losdevs.com/?p=489</guid>
		<description><![CDATA[Joomla! es un CMS creado por la comunidad, es gratuito, y muy fácil de modificar o crear plantillas, pero sólo he dicho maravillas, ¿no? bueno eso creí yo tambien, que sería una maravilla de CMS pero a la hora de crear un sitio todo se volcó y no me gustó para nada lo siguiente. Los menus son las &#8220;vistas&#8221; Con vistas, me refiero a que a la hora de crear un vínculo o link en algún menú, usted le dice a Joomla! si es una lista de artículos, o si es una lista de artículos en vista de blog, o si es un vínculo externo, o si es un artículo, etc. ¿Por qué no crearon un sistema de vistas aparte y luego sólo ponemos en link en el menú? Al inicio esto es molesto, porque no entendía a que se refería con el menú, ya que se me confundía con lo poco que ya sabía de Drupal. Este sistema de menú me parece simplemente desordenado. Plantillas / Temas Crear un tema es muuuy fácil con Joomla! (No digo otras funcionalidades, sino el simple tema). El tema se compone de muy pocas partes: templateDetails.xml (Tiene toda la información del template, nombra [...]]]></description>
				<content:encoded><![CDATA[<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/cms/por-que-no-me-gusto-joomla/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>Joomla! es un CMS creado por la comunidad, es gratuito, y muy fácil de modificar o crear plantillas, pero sólo he dicho maravillas, ¿no? bueno eso creí yo tambien, que sería una maravilla de CMS pero a la hora de crear un sitio todo se volcó y no me gustó para nada lo siguiente.</p>
<h2>Los menus son las &#8220;vistas&#8221;</h2>
<p>Con vistas, me refiero a que a la hora de crear un vínculo o link en algún menú, usted le dice a Joomla! si es una lista de artículos, o si es una lista de artículos en vista de blog, o si es un vínculo externo, o si es un artículo, etc. ¿Por qué no crearon un sistema de vistas aparte y luego sólo ponemos en link en el menú?</p>
<p>Al inicio esto es molesto, porque no entendía a que se refería con el menú, ya que se me confundía con lo poco que ya sabía de<strong> <a title="Drupal Costa Rica" href="http://losdevs.com/category/drupal/">Drupal</a></strong>. Este sistema de menú me parece simplemente desordenado.</p>
<h2>Plantillas / Temas</h2>
<p>Crear un tema es muuuy fácil con <strong>Joomla!</strong> (No digo otras funcionalidades, sino el simple tema). El tema se compone de muy pocas partes:</p>
<ul>
<li>templateDetails.xml (Tiene toda la información del template, nombra las posiciones del tema, el nombre del tema, autor, etc.)</li>
<li>index.php (Tiene la estructura del sitio -divs con classes, ids, etc-, más las llamadas de los módulos en php)</li>
</ul>
<p>Y prácticamente eso es lo único que necesita para crear el tema, porque luego está la carpeta con el CSS, imagenes, js, etc. Viendolo de este modo el tema es muy pobre, y me refiero a las necesidades que vengan en el camino, es mucho más fácil si se modificaría por separado como es el caso de Drupal, donde uno puede modificar el page, region, block, node, comment, y por último el template, aunque aún se puede viajar más adentro y modificar los fields, etc.</p>
<h2>Extensiones / Módulos / Plugins</h2>
<p>Sí, Joomla! es gratis, tiene módulos, plugins y extensiones sin costo alguno pero son las <strong>peores extensiones o módulos</strong> (existen excepciones, pero casi no hay buenos gratituos), y para variar la mayoría gratuitos están <strong>desactualizados</strong>.</p>
<p>El amor de Drupal no es así, puede buscar de<a title="Módulos Drupal" href="http://drupal.org/search/apachesolr_multisitesearch/?filters=ss_meta_type%3Amodule" target="_blank"> miles de módulos</a> que fueron creados y todos son gratuitos, la mayoría -conste que dije la mayoría- están actualizados y la  mayoría son muy buenos.</p>
<h2>URL amigables</h2>
<p>No sé si sólo soy yo o no pude encontrar ningun lugar que me pudieran explicar como hago algo tan simple como lo es las URL amigables, además de ser algo NECESARIO para <strong><a title="SEO Costa Rica" href="http://losdevs.com/category/mercadeo-web/seo/">SEO</a></strong>, es estéticamente más fácil seguir un URL si viene donde está por medio del URL, digamos que el url que se va a generar en este artículo creado en WordPress es el siguiente:  http://losdevs.com/cms/por-que-no-me-gusto-joomla/ ‎súper fácil de saber que está en la categoría CMS.</p>
<h2>Comunidad</h2>
<p>Joomla! fue hecho por la comunidad para la comunidad, pero realmente no hay una comunidad de Joomla! en Costa Rica, esto es importante para el mejoramiento de las habilidades y conocimientos de uno al compartir con los demás.</p>
<p>Drupal si tiene comunidad en Costa Rica y es muy movida, inclusive el 21 de Abril se dará el Primer <a title="DrupalCamp Costa Rica" href="http://drupalcr.org/en/inscripcion_camp_2012" target="_blank">DrupalCamp Costa Rica</a> (del cual espero publicar con información detallada porqué debería asistir al DrupalCamp). También tienen un grupo activo en <a title="Drupal Facebook" href="www.facebook.com/groups/drupaltico/" target="_blank">Facebook </a>y en <a title="Drupal Groups" href="http://groups.drupal.org/costa-rica" target="_blank">Drupal</a>.</p>
<h2>¿Usted, usa o no usa Joomla!? ¿Por qué?</h2>
<p>Esto fue una opinión completamente personal, sé que hay varios Joomleros en Costa Rica y puede que les parezca un buen CMS, me gustaría escuchar lo que opinan ustedes.</p>
<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/cms/por-que-no-me-gusto-joomla/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://losdevs.com/cms/por-que-no-me-gusto-joomla/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Selection: CSS for n00bs</title>
		<link>http://losdevs.com/css/selection-css-for-n00bs/</link>
		<comments>http://losdevs.com/css/selection-css-for-n00bs/#comments</comments>
		<pubDate>Sat, 03 Mar 2012 22:04:33 +0000</pubDate>
		<dc:creator>Nitos</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[n00bs]]></category>
		<category><![CDATA[CSS for n00bs]]></category>

		<guid isPermaLink="false">http://losdevs.com/?p=483</guid>
		<description><![CDATA[¿Qué pasa cuando uno selecciona un texto? Se pone de color azul el background, ¿cierto? Bueno, ¿que pasaría si pudieramos cambiar ese color al que nosotros queramos? Tal vez nada, pero una de las cosas más importantes en diseño son esos pequeños detalles que hacen la gran diferencia. Este será un pequeño tutorial sobre esto mismo, cambiar el fondo de color al seleccionar un texto. ::selection { background:#cc0000; color:#fff; } /* Para mozilla */ ::-moz-selection { background:#cc0000; color:#fff; } /* Para Chrome */ ::-webkit-selection { background:#cc0000; color:#fff; } El código anterior, modificará la selección de todo, pero se puede especificar que elemento queremos cambiar, para ejemplificar esto, he creado un demo. - Demo Soporte No sé que browser le da soporte, no recuerdo, pueden probarlo ustedes y nos avisan en los comentarios Por último, no se le olvide ver los demás tutoriales de CSS para principiantes (o n00bs)]]></description>
				<content:encoded><![CDATA[<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/css/selection-css-for-n00bs/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><h1>¿Qué pasa cuando uno selecciona un texto?</h1>
<p>Se pone de color azul el background, ¿cierto? Bueno, ¿que pasaría si pudieramos cambiar ese color al que nosotros queramos? Tal vez nada, pero una de las cosas más importantes en diseño son esos pequeños detalles que hacen la gran diferencia.</p>
<p>Este será un pequeño tutorial sobre esto mismo, cambiar el fondo de color al seleccionar un texto.</p>
<pre>
::selection {
background:#cc0000;
color:#fff;
}
/* Para mozilla */
::-moz-selection {
background:#cc0000;
color:#fff;
}
/* Para Chrome */
::-webkit-selection {
background:#cc0000;
color:#fff;
}
</pre>
<p>El código anterior, modificará la selección de todo, pero se puede especificar que elemento queremos cambiar, para ejemplificar esto, he creado un demo.</p>
<h2><a title="Demo CSS para principiantes" href="http://losdevs.com/contenido/demos/selection-demo.html" target="_blank">- Demo</a></h2>
<h3>Soporte</h3>
<p>No sé que browser le da soporte, no recuerdo, pueden probarlo ustedes y nos avisan en los comentarios <img src='http://losdevs.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Por último, no se le olvide ver los demás tutoriales de <strong><a title="CSS para principiantes" href="http://losdevs.com/category/css/n00bs/" target="_blank">CSS para principiantes</a></strong> (o n00bs)</p>
<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/css/selection-css-for-n00bs/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://losdevs.com/css/selection-css-for-n00bs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS for n00bs: Sombras</title>
		<link>http://losdevs.com/css/css-for-n00bs-sombras/</link>
		<comments>http://losdevs.com/css/css-for-n00bs-sombras/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 01:59:41 +0000</pubDate>
		<dc:creator>Nitos</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[n00bs]]></category>

		<guid isPermaLink="false">http://losdevs.com/?p=477</guid>
		<description><![CDATA[Un efecto de moda muy fácil de lograr, son las sombras en varios elementos web, desde menús [menúes (?)], divisiones (divs), imágenes, slideshows, etc. Muchos se pueden lograr con la facilidad de una imagen que ya tenga la sombra, pero para los que les gusta hacer todo desde Notepad o no son muy habilidosos en programas de diseño, hay otra opción, además que es mucho más efectiva en ciertos casos, por la misma razón de no tener que cargar una imagen. Antes de empezar, quiero aclarar que este efecto NO se podrá ver en IE7, IE8, sólo se podrá ver en IE9 , así que todas aquellas personas que pensaban poder hacerlo con IE7 u IE8 así de sencillo no van a poder. Sombras en un div Para lograr las sombras se necesita de varios elementos, primero la propiedad &#8220;box-shadow:&#8220;, y sus diferentes propiedades para los diferentes navegadores, como por ejemplo en Chrome se deberá usar: &#8220;-webkit-box-shadow:&#8221; o en Firefox: &#8220;-moz-box-shadow:&#8221; y esto  lo asignamos a una clase. Esta propiedad tiene la siguiente sintaxis: box-shadow: 4px 5px 6px 7px #ccc; El &#8220;4px&#8221; se refiere al desvió o cuantos pixels se moverá la sombra en el eje X (horizontalmente), si el [...]]]></description>
				<content:encoded><![CDATA[<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/css/css-for-n00bs-sombras/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p>Un efecto de moda muy fácil de lograr, son las sombras en varios elementos web, desde menús [menúes (?)], divisiones (divs), imágenes, slideshows, etc. Muchos se pueden lograr con la facilidad de una imagen que ya tenga la sombra, pero para los que les gusta hacer todo desde Notepad o no son muy habilidosos en programas de diseño, hay otra opción, además que es mucho más efectiva en ciertos casos, por la misma razón de no tener que cargar una imagen.</p>
<p>Antes de empezar, quiero aclarar que este efecto NO se podrá ver en IE7, IE8, sólo se podrá ver en IE9 , así que todas aquellas personas que pensaban poder hacerlo con IE7 u IE8 así de sencillo no van a poder.</p>
<h2>Sombras en un div</h2>
<p>Para lograr las sombras se necesita de varios elementos, primero la propiedad &#8220;<code>box-shadow:</code>&#8220;, y sus diferentes propiedades para los diferentes navegadores, como por ejemplo en Chrome se deberá usar: &#8220;<code>-webkit-box-shadow:</code>&#8221; o en Firefox: &#8220;<code>-moz-box-shadow:</code>&#8221; y esto  lo asignamos a una clase.</p>
<p>Esta propiedad tiene la siguiente sintaxis:</p>
<p><code>box-shadow: 4px 5px 6px 7px #ccc;</code></p>
<ol>
<li>El &#8220;4px&#8221; se refiere al desvió o cuantos pixels se moverá la sombra en el eje X (horizontalmente), si el número es positivo, se moverá a la derecha, si el número es negativo se moverá a la izquierda.</li>
<li>El siguiente elemento &#8220;5px&#8221; será cuantos pixels se moverá en el eje Y (verticalmente), si el número es positivo, se moverá hacia abajo, y si es negativo, hacia arriba.</li>
<li>El &#8220;6px&#8221; se refiere al &#8220;blur&#8221;, el desenfoque de esa sombra (este elemento es opcional). Entre más grande el número, más desenfocado o borroso.</li>
<li>El &#8220;7px&#8221; se refiere al tamaño de la sombra, entre más positivo sea el número, más borroso.</li>
<li>Por último tenemos el color.</li>
</ol>
<h2> Ejemplos</h2>
<pre>
box-shadow: 2px 4px 10px 3px #ccc;
-moz-box-shadow: 2px 4px 10px 3px #ccc;
-webkit-box-shadow: 2px 4px 10px 3px #ccc;
</pre>
<div style="width: 270px; height: 55px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; -khtml-border-radius: 10px; background-color: #ddd; margin: 0 auto; text-align: center; padding: 20px; box-shadow: 5px 9px 7px -4px #ccc; -moz-box-shadow: 5px 9px 7px -4px #ccc; -webkit-box-shadow: 5px 9px 7px -4px #ccc;">Esta sombra se puede observar desde todos los navegadores, excepto IE7,8.         Sombra abajo y la derecha.</div>
<p>&nbsp;</p>
<pre>
box-shadow: 0 6px 8px -6px black;
-moz-box-shadow: 0 6px 8px -6px black;
-webkit-box-shadow: 0 6px 8px -6px black;
</pre>
<div style="width: 270px; height: 55px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; -khtml-border-radius: 10px; background-color: #ddd; margin: 0 auto; text-align: center; padding: 20px; -webkit-box-shadow: 0 6px 8px -6px black; -moz-box-shadow: 0 6px 8px -6px black; box-shadow: 0 6px 8px -6px black;">Esta sombra se puede observar desde todos los navegadores, excepto IE7,8.         Sombra sólo de abajo.</div>
<h2 style="text-align: center;"></h2>
<h2 style="text-align: center;">¿Usarán esta nueva técnica para crear sombras?</h2>
<p>Para saber como pudimos crear esas <a title="CSS for n00bs: Esquinas redondeadas" href="http://losdevs.com/css/css-for-n00bs-esquinas-redondeadas/" target="_blank">esquinas redondeadas con CSS</a>, pueden leerlo aquí.</p>
<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/css/css-for-n00bs-sombras/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://losdevs.com/css/css-for-n00bs-sombras/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSS for n00bs: Esquinas redondeadas</title>
		<link>http://losdevs.com/css/css-for-n00bs-esquinas-redondeadas/</link>
		<comments>http://losdevs.com/css/css-for-n00bs-esquinas-redondeadas/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 00:33:35 +0000</pubDate>
		<dc:creator>Nitos</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[n00bs]]></category>

		<guid isPermaLink="false">http://losdevs.com/?p=449</guid>
		<description><![CDATA[Este es el segundo artículo de la serie de CSS for n00bs, la vez pasada explique los conceptos de margin y padding, esta vez explicaré como crear esquinas redondeadas con CSS. Antes para poder crear este &#8220;efecto&#8221; se debía cortar imagenes de las esquinas, posicionar la imagen de forma absoluta y hacer miles de malabares sólo para poder imitar las esquinas redondas, ahora gracias a CSS3 esto se puede lograr con unas pocas lineas de código. Debido a que cada navegador renderiza de forma distinta, se deben aplicar diferentes propiedades para los diferentes navegadores, entonces por ejemplo tenemos a chrome y safari que utilizarían la propiedad -webkit-border-radius para mozilla sería -moz-border-radius, etc (aquí pueden encontrar los otros que significan como khtml). Esquinas redondeadas. Al poner un sólo valor en la propiedad significa que todas las esquinas serán redondas con ese valor.  Por ejemplo. -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; -khtml-border-radius: 10px; Ejemplo: Este rectángulo debe verse en firefox, safari, chrome, opera y IE9. Y tiene todas las esquinas redondeadas. Esquina(s) redondedas, seleccionando la esquina. Muchas veces este tipo de seleccion de esquina es muy util para crear menus, o diferentes estilos que todo el div redondeado. Este rectángulo debe verse [...]]]></description>
				<content:encoded><![CDATA[<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/css/css-for-n00bs-esquinas-redondeadas/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div><p><img class="alignleft size-full wp-image-472" style="padding: 10px;" title="css for noobs" src="http://losdevs.com/contenido/subido/2012/01/css-noobs.jpg" alt="css para principiantes" width="290" height="290" /> Este es el segundo artículo de la serie de <a title="CSS for n00bs" href="http://losdevs.com/tag/css-for-n00bs/" target="_blank">CSS for n00bs</a>, la vez pasada explique los <a title="Diferencia entre padding y margin" href="http://losdevs.com/css/css-for-noobs-diferencia-entre-padding-y-margin/" target="_blank">conceptos de margin y padding</a>, esta vez explicaré como crear esquinas redondeadas con CSS. Antes para poder crear este &#8220;efecto&#8221; se debía cortar imagenes de las esquinas, posicionar la imagen de forma absoluta y hacer miles de malabares sólo para poder imitar las esquinas redondas, ahora gracias a CSS3 esto se puede lograr con unas pocas lineas de código. Debido a que cada navegador renderiza de forma distinta, se deben aplicar diferentes propiedades para los diferentes navegadores, entonces por ejemplo tenemos a chrome y safari que utilizarían la propiedad <code>-webkit-border-radius</code> para mozilla sería <code>-moz-border-radius</code>, etc (aquí pueden encontrar los otros que significan como <a title="khtml, webkit, moz" href="http://reference.sitepoint.com/css/vendorspecific" target="_blank">khtml</a>).</p>
<h1>Esquinas redondeadas.</h1>
<p>Al poner un sólo valor en la propiedad significa que todas las esquinas serán redondas con ese valor.  Por ejemplo.
<pre>
-moz-border-radius: 10px; 
-webkit-border-radius: 10px; 
border-radius: 10px;
-khtml-border-radius: 10px; 
</pre>
<p>Ejemplo:</p>
<div style="width: 270px; height: 40px; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; -khtml-border-radius: 10px; background-color: #ddd; margin: 0 auto; text-align: center; padding: 20px;">Este rectángulo debe verse en firefox, safari, chrome, opera y IE9. Y tiene todas las esquinas redondeadas.</div>
<h1></h1>
<h1>Esquina(s) redondedas, seleccionando la esquina.</h1>
<p>Muchas veces este tipo de seleccion de esquina es muy util para crear menus, o diferentes estilos que todo el div redondeado.</p>
<div style="width: 270px; height: 40px; -webkit-border-top-left-radius: 20px; -webkit-border-top-right-radius: 20px; background-color: #ddd; margin: 0 auto; text-align: center; padding: 20px;">Este rectángulo debe verse sólo en <strong>chrome</strong> y las esquinas de arriba están redondeadas.</div>
<pre>
-webkit-border-top-left-radius: 20px;
-webkit-border-top-right-radius: 20px;
-webkit-border-bottom-right-radius: 0;
-webkit-border-bottom-left-radius: 0;
</pre>
<p>*No es necesario escribir los bordes de abajo, pero sólo demostrativo que en efectivo, esas esquinas no serán modificadas.</p>
<h2 style="text-align: center;">¿Han usado alguna vez este &#8220;efecto&#8221;?</h2>
<div class='wpfblike' style='height: 55px;'><fb:like href='http://losdevs.com/css/css-for-n00bs-esquinas-redondeadas/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://losdevs.com/css/css-for-n00bs-esquinas-redondeadas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
