<?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>Blog de Daniel Zegarra &#187; AS3</title>
	<atom:link href="http://danielzegarra.net/category/adobe/as3/feed/" rel="self" type="application/rss+xml" />
	<link>http://danielzegarra.net</link>
	<description>De vuelta en Lima!</description>
	<lastBuildDate>Thu, 15 Mar 2012 14:42:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Nace Kopernik, un sistema académico</title>
		<link>http://danielzegarra.net/2010/08/14/nace-kopernik-un-sistema-academico/</link>
		<comments>http://danielzegarra.net/2010/08/14/nace-kopernik-un-sistema-academico/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 23:14:07 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Copernico]]></category>
		<category><![CDATA[Flex 4]]></category>
		<category><![CDATA[Kopernik]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Zend AMF]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[ZF]]></category>

		<guid isPermaLink="false">http://danielzegarra.net/?p=1308</guid>
		<description><![CDATA[[...]]]></description>
			<content:encoded><![CDATA[<p><a title="Nicolas Copernico en Wikipedia" href="http://es.wikipedia.org/wiki/Nicol%C3%A1s_Cop%C3%A9rnico" target="_blank">Kopernik</a> es el nombre clave del proyecto personal al que he dedicado mi tiempo estos ultimos 4 meses. Se trata de un sistema academico online desarrollado usando Flex, PHP (Zend Framework) y MySQL para su uso en instituciones educativas.</p>
<div id="attachment_1314" class="wp-caption aligncenter" style="width: 399px"><a href="http://danielzegarra.net/wp-content/uploads/2010/08/logo_kopernik.png" rel="lightbox[1308]"><img class="size-full wp-image-1314    " title="Logo de Kopernik" src="http://danielzegarra.net/wp-content/uploads/2010/08/logo_kopernik.png" alt="Logo de Kopernik" width="389" height="256" /></a><p class="wp-caption-text">Logo de Kopernik. La idea era que el sistema sea usado por escolares y por lo tanto, no debia ser tan serio.</p></div>
<p>Aprovechando la experiencia que adquiri trabajando y estudiando en universidades decidi crear desde cero un sistema que se ajustara a los requerimientos especiales que cada institucion pudiera tener. Como recien estaba empezando pense que mejor seria comenzar con modulos para colegios pero&#8230; resulta que he olvide como funcionan!</p>
<p>Cuando estaba en el colegio no pensaba en procesos y en maneras de como mejorarlos como lo hago ahora. Por eso es que los modulos que ya he creado almacenan datos como el valor en creditos de cada asignatura o que permiten a un alumno matricularse en asignaturas distintas que el resto de sus companeros. De hecho el proceso que los administradores deben realizar para matricular de un alumno esta pensado usando los requerimientos universitarios o de institutos.</p>
<p>En los colegios todos los alumnos llevan lo mismo. Solo hay dos opciones:</p>
<ul>
<li>No te matriculas un año o&#8230;</li>
<li>Estas matriculado y llevas todas las asignaturas de tu año (con algunas excepciones como no asistir al curso de religion por solicitud de los padres).</li>
</ul>
<p>Es algo en lo que hay que trabajar.</p>
<p>Por el momento me quedan algunos modulos importantes por desarrollar, como el control de evaluaciones, asistencias y materiales de clase.</p>
<p>A continuacion explico algunos detalles del software y al final puedes encontrar un enlace para que lo puedas ver en accion.</p>
<h2>Caracteristicas generales</h2>
<ul>
<li>Es modular, de tal forma que sea facil reutilizar los modulos comunes y adecuarlos a lo que necesite.</li>
<li>Permite el trabajo colaborativo (tiempo real).</li>
<li>Solo hace uso del puerto 80. No es necesario habilitar la salida puertos adicionales en una red controlada.</li>
<li>El cliente solo necesita tener Adobe Flash instalado.</li>
<li>No requiere de licencias adicionales.</li>
<li>Es multiplataforma. Corre en Windows, Mac, Linux y cualquier otro sistema operativo que tenga soporte para Adobe Flash (talvez Android?)</li>
<li>Es multitarea. Las aplicaciones y modulos son cargados dentro de contenedores visibles como ventanas. Por lo tanto, no es necesario salir de un modulo para entrar a otro. Puedes tener varios modulos abiertos al mismo tiempo compartiendo el escritorio visible o minimizar algunos de ellos para usarlos luego.</li>
<li>Al instalarlo en un servidor web con un IP publico es accesible desde cualquier parte del mundo.</li>
<li>Control de acceso, a modulos y acciones, por grupos de usuarios. Se define que grupos tienen acceso a que modulos y las operaciones que realizan estos.</li>
<li>El sistema cuenta con algunas herramientas como el administrador de tareas <em>(clic secundario sobre el fondo)</em> y un explorador de directorios (del servidor).</li>
</ul>
<div id="attachment_1321" class="wp-caption aligncenter" style="width: 460px"><a href="http://danielzegarra.net/wp-content/uploads/2010/08/kopernik_apps.png" rel="lightbox[1308]"><img class="size-medium wp-image-1321" title="Tres aplicaciones abiertas: el explorador de alumnos, el explorador de archivos y el administrador de tareas" src="http://danielzegarra.net/wp-content/uploads/2010/08/kopernik_apps-450x265.png" alt="Tres aplicaciones abiertas: el explorador de alumnos, el explorador de archivos y el administrador de tareas" width="450" height="265" /></a><p class="wp-caption-text">Tres aplicaciones abiertas: el explorador de alumnos, el explorador de archivos y el administrador de tareas</p></div>
<h2>Tecnologias usadas</h2>
<ul>
<li>Flex 4: Empece el proyecto con la version 3 pero las nuevas caracteristicas (en especial la capacidad de trabajar con archivos localmente y el skining) resultaron muy tentadoras y tuve que hacer la migracion ya casi a mitad del proyecto (y acepto que no fue una decision muy inteligente. Me retraso todo el calendario pero espero haya valido la pena).</li>
<li>Zend Framework: Elegi este framework por la empresa que hay detras (Zend creadora de PHP) y por que ya me encuentro familiarizado con el. Ademas podia usar el paquete Zend_Amf para conectar Flex con el servidor. Tuve que migrar desde AMFPHP por lo que perdi el explorador de servicios y el control de acceso en cada clase. Realmente fue una migracion dura porque las clases del sistema (no academicas) ya estaban empezadas y funcionaban perfecto con AMFPHP. La gran ventaja de usar Zend_Amf es que tienes a tu disposicion todo el framework de Zend y ademas es el unico soporte para AMF que tiene la venia de Adobe sin ser desarrollado por Adobe (y la version actual de AMFPHP se encontraba abandonada en una version beta).</li>
<li>PHP: Como es obvio, por ser un lenguaje fantastico y porque casi todo servidor Apache lo tiene instalado.</li>
<li>MySQL: Necesitaba una base de datos transaccional y confiable. Que mejor que MySQL usada en la mayoria de servicios de hosting.</li>
</ul>
<h2>Requisitos</h2>
<ul>
<li>Del lado del cliente
<ul>
<li>Flash Player 10.0.0 o una version mayor.</li>
</ul>
</li>
<li>Del lado del servidor
<ul>
<li>PHP 5.2</li>
<li>Apache</li>
<li>MySQL</li>
</ul>
</li>
</ul>
<h2>Acceso a la demo</h2>
<p>Antes de ingresar por favor, lee las siguientes instrucciones:</p>
<ul>
<li>Los datos de acceso se encuentran pre-escritos en los campos de texto, solo es cuestion de logearse.</li>
<li>El usuario de prueba pertenece al grupo de administradores, por lo que tendras acceso sin restriccion sobre los modulos y acciones que puedan estos realizar. Ten cuidado de eliminar aplicaciones, volver a registrarlas te puede resultar complicado si no sabes donde se encuentran almacenadas.</li>
<li>La falta de acentos se debe a que uso en teclado en ingles. Lo corregire muy pronto. Las fallas ortograficas se deben a mi falta de atencion a las clases de lengua (junto con la eficiencia del corrector ortografico de Word). Cuando tenga tiempo aplicare las correcciones necesarias.</li>
<li>La primera vez que cada aplicacion es solicitada puede demorarse unos segundos en cargarse (dependiendo de tu velocidad de salida a Internet). La aplicacion queda almacenada en la cache de tu navegador y es cargada de alli en las solicitudes posteriores.</li>
<li>Y por ultimo, te recuerdo que esta es una version en desarrollo y por ello puede tener errores. Si encuentras alguno, por favor ayudame a corregirlo comentandolo en este post. Gracias.</li>
</ul>
<p>Eso es todo. La direccion de acceso es la siguiente: <span style="font-size: 16;"><a title="Abrir Kopernik" href="http://kopernik.danielzegarra.net/" target="_blank">http://kopernik.danielzegarra.net/.</a></span> Espero tus comentarios.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2010/08/14/nace-kopernik-un-sistema-academico/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Flex: Clase datagridColumnSelector</title>
		<link>http://danielzegarra.net/2010/06/11/flex-clase-datagridcolumnselector/</link>
		<comments>http://danielzegarra.net/2010/06/11/flex-clase-datagridcolumnselector/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 21:53:43 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[UIComponents]]></category>

		<guid isPermaLink="false">http://danielzegarra.net/?p=1212</guid>
		<description><![CDATA[[...]]]></description>
			<content:encoded><![CDATA[<p>Esta es una clase que hice para Flex para mostrar y ocultar las columnas de cualquier instancia de DataGrid sin ensuciarse con mucho codigo.</p>
<div id="attachment_1213" class="wp-caption aligncenter" style="width: 460px"><a href="http://danielzegarra.net/wp-content/uploads/2010/06/screenshot.2.png" rel="lightbox[1212]"><img class="size-medium wp-image-1213" title="Menu contextual del DataGrid" src="http://danielzegarra.net/wp-content/uploads/2010/06/screenshot.2-450x305.png" alt="Menu contextual del DataGrid" width="450" height="305" /></a><p class="wp-caption-text">Menu contextual del DataGrid</p></div>
<p>Se puede implementar en solo una linea de codigo:</p>
<pre class="brush: as3; light: true; title: ; notranslate">
new datagridColumnSelector(datagridInstance, [campoignorado1]);
</pre>
<p>El primer argumento es obligatorio y debe ser una instancia de DataGrid. El segundo argumento es opcional y debe recibir un Array con los nombres de las columnas a ignorar. </p>
<p>Cambiando algunas propiedades por defecto:</p>
<pre class="brush: as3; light: true; title: ; notranslate">
datagridColumnSelector.label_hide = &quot;Ocultar&quot;;
datagridColumnSelector.label_show = &quot;Mostrar&quot;;
var selector:datagridColumnSelector = new datagridColumnSelector(data_dg);
selector.hidden = [&quot;col3&quot;];
</pre>
<p>En el siguiente ejemplo la columna 4 y 5 estan ocultas por defecto. Tambien se decide ignorar la columna 3 para que el usuario no pueda ocultar todas las columnas.<br />
Nota que el valor del atributo <code>headerText</code> en cada <code>DataGridColumn</code> es usado en el menu contextual para que el usuario pueda identificar la columna. </p>
<pre class="brush: xml; auto-links: false; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:Application layout=&quot;vertical&quot; creationComplete=&quot;init()&quot;
	xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
	backgroundGradientAlphas=&quot;[1.0, 1.0]&quot; backgroundGradientColors=&quot;[#FFFFFF, #E7E7E7]&quot;
	paddingBottom=&quot;8&quot; paddingLeft=&quot;8&quot; paddingRight=&quot;8&quot; paddingTop=&quot;8&quot; horizontalAlign=&quot;left&quot; viewSourceURL=&quot;srcview/index.html&quot;&gt;

	&lt;mx:Script&gt;
		&lt;![CDATA[
			import net.danielzegarra.utils.datagridColumnSelector;

			protected function init():void{
				new datagridColumnSelector(data_dg, [&quot;col3&quot;]);
			}
		]]&gt;
	&lt;/mx:Script&gt;

	&lt;mx:Label text=&quot;Haga un clic secundario sobre el DataGrid para mostrar u ocultar columnas.&quot;/&gt;
	&lt;mx:DataGrid id=&quot;data_dg&quot; width=&quot;100%&quot; height=&quot;100%&quot;&gt;
		&lt;mx:columns&gt;
			&lt;mx:DataGridColumn headerText=&quot;Columna 1&quot; dataField=&quot;col1&quot;/&gt;
			&lt;mx:DataGridColumn headerText=&quot;Columna 2&quot; dataField=&quot;col2&quot;/&gt;
			&lt;mx:DataGridColumn headerText=&quot;Columna 3&quot; dataField=&quot;col3&quot;/&gt;
			&lt;mx:DataGridColumn headerText=&quot;Columna 4&quot; dataField=&quot;col4&quot; visible=&quot;false&quot;/&gt;
			&lt;mx:DataGridColumn headerText=&quot;Columna 5&quot; dataField=&quot;col5&quot; visible=&quot;false&quot;/&gt;
		&lt;/mx:columns&gt;
	&lt;/mx:DataGrid&gt;
&lt;/mx:Application&gt;
</pre>
<p>Y el resultado:<br />
<iframe class="" src="http://danielzegarra.net/wp-content/uploads/2010/06/datagridColumnSelector/index.html" style="width: 100%; height: 300px; " frameborder="0" scrolling="" onload="scro11me(this)"></iframe><script type="text/javascript">function scro11me(f){f.contentWindow.scrollTo(0,0); }</script>
<p><a title="Ver el codigo fuente" href="http://danielzegarra.net/wp-content/uploads/2010/06/datagridColumnSelector/srcview/index.html">Ver la fuente</a> | <a href="http://danielzegarra.net/download/8" title="Selector de columnas para datagrid.">Descargar datagridColumnSelector Class</a></p>
<p>Nota: Funciona tambien con Air aunque es preferible usar las <a href="http://livedocs.adobe.com/flex/3/langref/flash/display/NativeMenu.html">clases nativas de Adobe Air</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2010/06/11/flex-clase-datagridcolumnselector/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips sobre Class mapping con Zend AMF</title>
		<link>http://danielzegarra.net/2010/06/07/tips-sobre-class-mapping-con-zend-amf/</link>
		<comments>http://danielzegarra.net/2010/06/07/tips-sobre-class-mapping-con-zend-amf/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 10:38:29 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[AS2]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Zend AMF]]></category>

		<guid isPermaLink="false">http://danielzegarra.net/?p=1200</guid>
		<description><![CDATA[[...]]]></description>
			<content:encoded><![CDATA[<p>En resumen <strong><em>Class mapping</em></strong> consiste en relacionar dos clases de lenguajes distintos de tal forma que en cada lenguaje se traten del mismo elemento. Esta relacion (comunmente llamada mapeo en español) permite intercambiar instancias de estas clases entre lenguajes de manera transparente.</p>
<p>Zend AMF mapea por defecto las clases mas comunes como son String, Number, Array, Object, ArrayCollection, etc y tambien permite mapear clases creadas por el usuario. Para lograr el mapeo bidireccional te recomiendo cumplir dos puntos.</p>
<ul>
<li>Define la variable <code>$_explicitType</code> con el alias en cada clase deseas mapear o usa el metodo <code>getASClassName()</code> en lugar de registrar cada mapeo con <code>$serveramf-&gt;setClassMap()</code>. Dara mas flexibilidad a tu aplicacion.</li>
<li>Intenta relacionar el alias de la clase con la ruta donde la clase PHP a mapear se encuentra. Esto te ayudara a mapear clases de AS3 a Zend AMF.<br />
Cuando Zend AMF recibe una solicitud lee los alias de las clases AS3 en el mensaje y busca sus clases PHP homologas en el directorio dado por <code>$serveramf-&gt;addDirectory()</code>. Si el alias elegido para las clases es, por dar un ejemplo, <code>VO.Usuario</code> Zend AMF buscara la clase <code>VO_Usuario</code> en la ruta VO/Usuario.php.<br />
Ten en cuenta esto solo si usas <code>addDirectory()</code> para definir la ubicacion de tus servicios y no deseas usar <code>setClassMap()</code> para registrar cada alias.</li>
</ul>
<p>Las siguientes dos clases se mapearan correctamente entre PHP y AS3 de forma bidireccional.</p>
<p><strong>Ruta: <code>[ServicesPath]/VO/Usuario.php</code></strong></p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
class VO_Usuario{

	/**
	 * Usado por Zend AMF. Devuelve el alias de
	 * esta clase para actionscript.
	 * Devuelve una cadena con el nombre de la
	 * clase actual reemplazando _ por puntos.
	 */
	public function getASClassName(){
		return str_replace(&quot;_&quot;,&quot;.&quot;,get_class($this));
	}

	public $id;
	public $username;
	public $firstname;
	public $lastname;
	public $enabled;
}
?&gt;
</pre>
<p><em><span style="color: #800000;"><strong>Nota:</strong> En este ejemplo uso <code>getASClassName()</code> para obtener dinamicamente el alias de la clase. Seria muy util que este metodo se encontrara en una clase base y que cada clase a mapear herede de esta. De esta forma no tendras que preocuparte por verificar el alias elegido.</span></em></p>
<p>Y por otro lado tenemos su clase homologa en AS3:</p>
<p><strong>Ruta: <code>/net/danielzegarra/VO/UsuarioVO.as</code></strong></p>
<pre class="brush: as3; title: ; notranslate">
package net.danielzegarra.VO{
	//Recuerde que no es necesario que el alias tenga relacion
	//con el nombre de la clase
	[RemoteClass(alias=&quot;VO.Usuario&quot;)]
	public class UsuarioVO{
		public var id:uint;
		public var username:String;
		public var firstname:String;
		public var lastname:String;
		public var enabled:Boolean;
	}
}
</pre>
<p>La version de <a href="http://framework.zend.com/">Zend Framework</a> al escribirse este documento es la 1.10.<br />
Puedes encontrar la documentacion de Zend AMF en <a href="http://framework.zend.com/manual/en/zend.amf.server.html">http://framework.zend.com/manual/en/zend.amf.server.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2010/06/07/tips-sobre-class-mapping-con-zend-amf/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Transfiriendo valores NaN entre Zend AMF y Flex</title>
		<link>http://danielzegarra.net/2010/05/26/transfiriendo-valores-nan-entre-zend-amf-y-flex/</link>
		<comments>http://danielzegarra.net/2010/05/26/transfiriendo-valores-nan-entre-zend-amf-y-flex/#comments</comments>
		<pubDate>Wed, 26 May 2010 20:45:11 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend AMF]]></category>

		<guid isPermaLink="false">http://danielzegarra.net/?p=1170</guid>
		<description><![CDATA[[...]]]></description>
			<content:encoded><![CDATA[<p>Hay una discrepancia entre AS3 y PHP aun no solucionada por Zend AMF que puede llevar a un error no esperado cuando se trabajan con valores numericos. El problema consiste en que para PHP una variable es nula si <code>null</code>, sin embargo para AS3 el valor nulo de una variable depende de su tipo. Especificamente para las variables de tipo Number este valor es <a title="Number - Adobe® Flex™ 3.5 Language Reference" href="http://livedocs.adobe.com/flex/3/langref/Number.html#NaN" target="_blank"><code>NaN</code></a>.</p>
<p>Cuando Zend AMF devuelve una clase con variables nulas AS3 lo recibe asi, pero para AS3 las variables Number no pueden ser <code>null</code> y para salir de este problema convierte el <code>null</code> en 0 (cero). Y es asi como terminas teniendo variables con valores en cero en lugar del esperado <code>NaN</code>.</p>
<p>La manera mas facil de arreglarlo es hacerle un puente al problema utilizando setters para recibir el valor entregado por el servidor, validarlo y decidir si es un aceptarlo o no.</p>
<p>Se puede entender mejor viendo el siguiente ejemplo:</p>
<pre class="brush: as3; title: ; notranslate">
package DTO{
	[RemoteClass(alias=&quot;claseDTO&quot;)]
	[Bindable]
	public class claseDTO{
		/**
		 * Solo se tiene acceso a esta variable a travez de su getter/setter
		 */
		private var _numero:Number;

		/*
		 * Definiendo el getter/setter para la variable privada _numero.
		 * Recordar que Number es una subclase de Object.
		 */
		public function get numero():Object{
			return _numero;
		}
		public function set numero(val:Object):void{
			//Si el valor dado es un numero
			if(val is Number)
				_numero = val as Number;
		}

	}
}
</pre>
<p>Los comentarios son bienvenidos.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2010/05/26/transfiriendo-valores-nan-entre-zend-amf-y-flex/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Decidirse entre Zend AMF, AMFPHP, WebORB, &#8230;</title>
		<link>http://danielzegarra.net/2010/05/21/decidirse-entre-zend-amf-amfphp-weborb/</link>
		<comments>http://danielzegarra.net/2010/05/21/decidirse-entre-zend-amf-amfphp-weborb/#comments</comments>
		<pubDate>Fri, 21 May 2010 12:13:52 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[AMF]]></category>
		<category><![CDATA[AS2]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[AMFPHP]]></category>
		<category><![CDATA[WebORB]]></category>
		<category><![CDATA[Zend AMF]]></category>
		<category><![CDATA[ZendFramework]]></category>

		<guid isPermaLink="false">http://danielzegarra.net/?p=1166</guid>
		<description><![CDATA[[...]]]></description>
			<content:encoded><![CDATA[<p>Para mi, decidir que framework usar para conectar una aplicacion Flex/Flash con un servidor PHP es todo un dilema debido a que mi eleccion influrira mucho en mi calendario de trabajo. Supongo a muchos les  pasara que se familiarizan con un pequeño grupo de lenguajes y/o  frameworks y lo utiliza en todo proyecto que crea conveniente. Asi era yo con AMFPHP, el primer gateway AMF que conoci alla cuando Flash 8 era el ultimo lanzamiento de Macromedia.</p>
<p>En si tenemos tres o cuatro candidatos potenciales y estos son: <a href="http://zendframework.com/download/amf">Zend AMF</a>,  <a href="http://www.amfphp.org/">AMFPHP</a> y <a href="http://www.themidnightcoders.com/products/weborb-for-php/overview.html">WebORB</a>. A continuacion comento las caracteristicas de cada uno.</p>
<p><a href="http://www.amfphp.org/">AMFPHP </a>es creo, sin lugar a dudas, la mejor alternativa si deseas conectar tu aplicacion Flex o Flash con un servidor PHP (y este a su vez con la BD) y no deseas tener que pasar por una larga curva de aprendizaje. AMFPHP es ligero, incluye una gestion de roles bastante simple, no es necesaria su instalacion, soporta mapeo de clases (VOs) y por ultimo, incluye un navegador de servicios para que puedas probar los mismos rapidamente. Ademas, soporta AMF0 y AMF3 (por si usas AS2 o AS3) de forma transparente. Ademas, viene preparado para comsumir Web services. Entre sus desventajas estaba la falta de soporte. La persona detras del proyecto lo abandono dejandolo en una version beta (y sin la nueva documentacion completa) durante un par de años  pero recientemente su desarrollo <a href="http://wadearnold.com/blog/flash/amfphp/passing-the-amfphp-torch" target="_blank">acaba de ser retomado</a> y gracias a ello, se acaba de lanzar, por fin, la version 1.9 oficial.</p>
<p>El siguente es <a href="http://zendframework.com/download/amf">Zend AMF</a>, desarrollado por <a href="http://www.zend.com">Zend </a>(la empresa detras de PHP) es el mas apoyado de todas las alternativas debido a que tiene la venia de Adobe y, obviamente, es desarrollado por Zend. A pesar de esto, carece de  caracteristicas que AMFPHP o WebORB ya ofrecen (como seguridad integrada y un navegador de servicios) obligandote a implementarlas tu mismo o, lo que es mas facil, a vivir sin ellas. Pero su gran ventaja es que al ser una parte de Zend Framework (aunque se puede descargar de manera independiente) se acopla perfectamente a su arsenal de herramientas lo que es muy util, creeme. Hoy acabo de enterarme que el problema de la <a title="ZendAMF serialization slow?" href="http://framework.zend.com/issues/browse/ZF-7493" target="_blank">lenta serializacion de datos </a>que Zend AMF tenia en versiones anteriores acaba de ser solucionada de manera oficial en la version 1.10.4.</p>
<p>El tercero es <a href="http://www.themidnightcoders.com/products/weborb-for-php/overview.html">WebORB</a>. Si tuviera que definirlo en una sola palabra esa seria &#8220;Completo&#8221;. Tiene tantas caracteristicas que impresiona. Un administrador de servicios decente junto con opciones pensadas para ahorrarle al desarrollador la necesidad de escribir codigo, incluye su propio administrador de acceso a servicios y metodos ademas de un administrador centralizado para el mapeo de clases. Sin lugar a dudas es el que ofrece mas opciones a simple vista. El problema de WebORB es justo eso, ofrece tantas opciones que pueden confundir al novato, darle una sensacion de demasiada complejidad.</p>
<p>Escribo este post porque hace poco he pasado de AMFPHP a Zend AMF. Me costo hacer la mudanza debido a que tenia muchas clases que recibian matrices asociativas como parametros (AMFPHP mapeaba los objetos de Flash en arrays asociativos y Zend AMF lo hace como objetos) y basaba casi toda la implementacion de seguridad en el metodo <a href="http://www.joshuaostrom.com/2008/06/03/securing-amfphp-19-via-authentication/">beforeFilter </a>de cada clase/servicio.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2010/05/21/decidirse-entre-zend-amf-amfphp-weborb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cache de windows, una pesadilla</title>
		<link>http://danielzegarra.net/2009/03/25/cache-de-windows-una-pesadilla/</link>
		<comments>http://danielzegarra.net/2009/03/25/cache-de-windows-una-pesadilla/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 17:13:39 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[Archivos sin conexión]]></category>
		<category><![CDATA[Windows Vista]]></category>

		<guid isPermaLink="false">http://danielzegarra.net/?p=650</guid>
		<description><![CDATA[[...]]]></description>
			<content:encoded><![CDATA[<p>He perdido muchas horas de trabajo debido a supuestos errores al momento de compilar mi codigo usando Flash CS3. ¿Era raro ya? Modificaba una clase pero cuando compilaba mi aplicacion era como si no hubiese hecho cambios. Me di cuenta de eso luego de varias pruebas. Incluso escribia cualquier cosa en mi clase y volvia a compilar mi aplicacion y Flash me decia que todo estaba correcto a pesar de que escribi algo como &#8220;$1!6&#8243;3#&amp;%6$&#8221; en alguna zona aleatoria. Tenia que hacer cambios drásticos en mis archivos AS para que flash se diera cuenta del cambio y actualizara su cache.</p>
<p>Ayer me canse de este problema y decidi solucionar esta molestia de una vez por todas. Descartando que sea un problema de flash (porque antes no tenia este problema con la misma versión) supuse que seria Windows el culpable.</p>
<p>Y asi fue. El culpable es realmente un servicio de Windows llamado <em><strong>Archivos sin conexión</strong></em> el cual almacena archivos localmente para tener acceso a una copia de ellos cuando la PC se encuentre sin conexion a una red. Por alguna razón que no comprendo este servicio estaba cacheando archivos locales también.</p>
<p>Para desactivarlo ve a <em><strong>Panel de Control </strong></em>/ <em><strong>Herramientas Administrativas</strong></em> / <em><strong>Servicios</strong></em>. Alli Buscas el servicio <em><strong>Archivos sin conexion</strong></em> y le da sun clic secundario y eliges <em><strong>Propiedades</strong></em>.</p>
<p style="text-align: left;">
<div id="attachment_651" class="wp-caption aligncenter" style="width: 430px"><img class="size-full wp-image-651" title="Desactivando el servicio archivos sin conexión" src="http://danielzegarra.net/wp-content/uploads/2009/03/desactivando-el-servicio-archivos-sin-conexion.jpg" alt="Desactivando el servicio archivos sin conexión" width="420" height="492" /><p class="wp-caption-text">Desactivando el servicio archivos sin conexión</p></div>
<p style="text-align: left;">En la ventana que aparece dale un clic en el boton <em><strong>Detener </strong></em>y luego elije <em><strong>Deshabilitado </strong></em>en el combo de <em><strong>Tipo de inicio</strong></em>.</p>
<p style="text-align: left;">Talvez Microsoft ya haya soltado un parche para esto. Yo tengo Windows Vista Enterprise con SP1 pero sin actualizaciones instaladas (porque algunas actualizaciones de microsoft se comportar como un virus).</p>
]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2009/03/25/cache-de-windows-una-pesadilla/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Primeros pasos con el API para Flash de Google Maps</title>
		<link>http://danielzegarra.net/2009/03/21/primeros-pasos-con-google-maps-api-para-flash/</link>
		<comments>http://danielzegarra.net/2009/03/21/primeros-pasos-con-google-maps-api-para-flash/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 23:11:44 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Experimentos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[UIComponents]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google Maps]]></category>

		<guid isPermaLink="false">http://www.danielzegarra.net/?p=638</guid>
		<description><![CDATA[[...]]]></description>
			<content:encoded><![CDATA[<p>Por fin me decidi a probarlo.</p>
<p>Google Maps tiene un API que te permite incrustar sus mapas en tu aplicacion Flash (solo ActionScript 3). Imagina una libreta de direcciones online en la que los usuarios puedan definir visualmente el punto exacto donde viven (aunque habria que tomar en cuenta las implicancias de eso) y en tu DB solo almacenar la latitud y longitud de la elección. Incluso podrias medir la distancia entre dos puntos.</p>
<p>El SDK lo puedes encontrar aquí: <a title="Bajate el SDK" href="http://code.google.com/intl/es-ES/apis/maps/documentation/flash/intro.html#SWC_File">http://code.google.com/intl/es-ES/apis/maps/documentation/flash/intro.html#SWC_File</a><br />
Debes solicitar un API Key: <a title="Create una clave" href="http://code.google.com/intl/es-ES/apis/maps/documentation/flash/intro.html#API_Key">http://code.google.com/intl/es-ES/apis/maps/documentation/flash/intro.html#API_Key</a><br />
Creando tu primera aplicacion: <a title="Creando tu primera aplicacion" href="http://code.google.com/intl/es-ES/apis/maps/documentation/flash/tutorial-flash.html">http://code.google.com/intl/es-ES/apis/maps/documentation/flash/tutorial-flash.html</a><br />
Y la guia de referencia donde pueden encontrar toda la documentacion tecnica: <a title="API reference" href="http://code.google.com/intl/es-ES/apis/maps/documentation/flash/reference.html">http://code.google.com/intl/es-ES/apis/maps/documentation/flash/reference.html</a></p>
<p><strong>El Golf de San Isidro</strong></p>

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_0" width="550" height="400">
      <param name="movie" value="http://danielzegarra.net/wp-content/uploads/2009/03/ejemplogooglemapsapi.swf" />
      <param name="allowfullscreen" value="true" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://danielzegarra.net/wp-content/uploads/2009/03/ejemplogooglemapsapi.swf" width="550" height="400" allowfullscreen="true">
      <!--<![endif]-->
        
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>

<p>Puedes descargar las fuentes de este ejemplo en el siguiente enlace: <a href="http://danielzegarra.net/download/4" title="">Descargar Ejemplo de API de Google Maps</a></p>
]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2009/03/21/primeros-pasos-con-google-maps-api-para-flash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Primeros pasos con AMF y Zend Framework</title>
		<link>http://danielzegarra.net/2008/12/31/primeros-pasos-con-amf-y-zendframework/</link>
		<comments>http://danielzegarra.net/2008/12/31/primeros-pasos-con-amf-y-zendframework/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 10:12:51 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[AMF]]></category>
		<category><![CDATA[ZendFramework]]></category>

		<guid isPermaLink="false">http://danielzegarra.net/?p=493</guid>
		<description><![CDATA[[...]]]></description>
			<content:encoded><![CDATA[<p>Ahora que estoy de vacas tuve tiempo para leer la documentacion del framework de Zend para su PHP y esta bueno. </p>
<p>Decidi aprenderlo de una vez y empezar a usarlo en mis proyectos. </p>
<p>Una de las primeras cosas que busqué fue su compatibilidad con AMF puesto que estoy acostumbrado a usar AMFPHP para casi todo. Zend Framework viene con clases para trabajar con AMF y son clases muy buenas. </p>
<p>En 15 minutos arme mi gateway AMF en PHP con tan solo 7 lineas de codigo y cree un flash simple para probar mi servidor. </p>
<p>A este servidor solo le falta agregarle la autenticación y Zend Framework trae clases para eso tambien. </p>
<p>Puedes descargarte el Gateway + Service y Flash de ejemplo en el siguiente enlace.</p>
<a href="http://danielzegarra.net/download/1" title="Gateway AMF simple  creado usando ZendFramework ademas de un servicio y archivo flash de ejemplo">Descargar Gateway AMF usando ZF + Service y Flash de ejemplo</a>
<p>Necesita tener las librerìas de <a title="Ir a ZendFramework" href="http://framework.zend.com/" target="_blank">Zend Framework </a>junto al ejemplo.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2008/12/31/primeros-pasos-con-amf-y-zendframework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crossdomain.xml para Flash Player 9.0.115</title>
		<link>http://danielzegarra.net/2008/06/29/crossdomainxml-para-flash-player-90115/</link>
		<comments>http://danielzegarra.net/2008/06/29/crossdomainxml-para-flash-player-90115/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 00:54:00 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://dzegarra.wordpress.com/2008/06/29/crossdomainxml-para-flash-player-90115/</guid>
		<description><![CDATA[[...]]]></description>
			<content:encoded><![CDATA[<p>El archivo de politicas de flash (crossdomain.xml) le dice a Flash Player si un sitio web le concede permiso para interactuar con él.<br />
Lamentablemente la informacion sobre su uso y su estructura que provee Flash esta desfasada. Por ejemplo: El DOCTYPE sigue apuntando hacia macromedia.com.</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE cross-domain-policy
          SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"&gt;
&lt;cross-domain-policy&gt;
  &lt;site-control permitted-cross-domain-policies="all" /&gt;
  &lt;allow-access-from domain="*" /&gt;
&lt;/cross-domain-policy&gt;</pre>
<p>Esta configuración hará que flash player acepte todas las conexiones. Si deseas realizar una modificación te sugiero leas la documentacion que provee adobe. Como dije antes, no esta del todo actualizada pero lo esencial sigue ahí.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2008/06/29/crossdomainxml-para-flash-player-90115/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eventos AS3 en Flash 9</title>
		<link>http://danielzegarra.net/2008/03/27/eventos-as3-en-flash-9/</link>
		<comments>http://danielzegarra.net/2008/03/27/eventos-as3-en-flash-9/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 15:20:00 +0000</pubDate>
		<dc:creator>Daniel Zegarra</dc:creator>
				<category><![CDATA[AS3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[ActionScript Event]]></category>
		<category><![CDATA[Class]]></category>

		<guid isPermaLink="false">http://dzegarra.wordpress.com/2008/03/27/eventos-as3-en-flash-9/</guid>
		<description><![CDATA[[...]]]></description>
			<content:encoded><![CDATA[<p>Ya habia aprendido a disparar eventos en Flex, supuse que sería muy parecido en Flash9 y no me equivoque (bueno era obvio, los dos usan AS3).</p>
<p>Como dije, es parecido no igual. Me demoraría hallando las diferencias y explicandolas aquí, mejor dejo un ejemplo de la extensión de la clase que maneja los eventos en Flash9. Simple y practica.</p>
<p><strong>En AS2</strong></p>
<pre class="brush: java; title: ; notranslate">import mx.events.EventDispatcher;
mx.events.EventDispatcher.initialize(this);
var logEventos:Object = new Object();
logEventos.onNewLog = function(evtobj:Object):Void{
trace(&quot;Parametro dato2: &quot;+evtobj.dato2);
}
addEventListener(&quot;onNewLog&quot;, logEventos);
dispatchEvent(&quot;onNewLog&quot;, new Object({dato1:&quot;A&quot;, dato2:&quot;B&quot;, dato3:&quot;C&quot;}));
</pre>
<p><strong>En AS3</strong><br />
Archivo LogEvts.as</p>
<pre class="brush: java; title: ; notranslate">
package {
import flash.events.*;
public class LogEvts extends Event{
public var data:Object;
public function LogEvts(logObj:Object, type:String):void {
super(type, true);
this.data = logObj;
}
}
}
</pre>
<p><strong>En el .Fla<br />
</strong>
<pre class="brush: java; title: ; notranslate">
import LogEvts.as
private var logevts:LogEvts = LogEvts();
addChild(logevts);
function logsTrace(evtobj:LogEvts):void{
trace(&quot;Parametro dato2: &quot;+evt.data.dato2);
}
addEventListener(&quot;onNewLog&quot;, logsTrace);
logevts.dispatchEvent(new LogEvts(new Object({dato1:&quot;A&quot;, dato2:&quot;B&quot;, dato3:&quot;C&quot;}), &quot;onNewLog&quot;));
</pre>
<p>Y si te preguntas porque coloco el addEventListener en la raiz y no al objeto, es porque el evento es diaparado pasandole como parametro bubble=TRUE (en el as).<br />
Para entenderlo puede visitar el blog de Alberto Alcaraz, post: <a href="http://www.theklue.com/2007/09/16/sobre-los-eventos-en-as3/" target="_blank">sobre los eventos en AS3</a>.</p>
<p>Si bien los eventos personalizados en AS3 no son tan simples como en AS2. Sinceramente, me molesta tener que crear una clase para esto, pero la versatilidad es mucho mayor.</p>
]]></content:encoded>
			<wfw:commentRss>http://danielzegarra.net/2008/03/27/eventos-as3-en-flash-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

