Blog de Daniel Zegarra Rotating Header Image

Flex: Clase datagridColumnSelector

Esta es una clase que hice para Flex para mostrar y ocultar las columnas de cualquier instancia de DataGrid sin ensuciarse con mucho codigo.

Menu contextual del DataGrid

Menu contextual del DataGrid

Se puede implementar en solo una linea de codigo:

new datagridColumnSelector(datagridInstance, [campoignorado1]);

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.

Cambiando algunas propiedades por defecto:

datagridColumnSelector.label_hide = "Ocultar";
datagridColumnSelector.label_show = "Mostrar";
var selector:datagridColumnSelector = new datagridColumnSelector(data_dg);
selector.hidden = ["col3"];

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.
Nota que el valor del atributo headerText en cada DataGridColumn es usado en el menu contextual para que el usuario pueda identificar la columna.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application layout="vertical" creationComplete="init()"
	xmlns:mx="http://www.adobe.com/2006/mxml"
	backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#FFFFFF, #E7E7E7]"
	paddingBottom="8" paddingLeft="8" paddingRight="8" paddingTop="8" horizontalAlign="left" viewSourceURL="srcview/index.html">

	<mx:Script>
		<![CDATA[
			import net.danielzegarra.utils.datagridColumnSelector;

			protected function init():void{
				new datagridColumnSelector(data_dg, ["col3"]);
			}
		]]>
	</mx:Script>

	<mx:Label text="Haga un clic secundario sobre el DataGrid para mostrar u ocultar columnas."/>
	<mx:DataGrid id="data_dg" width="100%" height="100%">
		<mx:columns>
			<mx:DataGridColumn headerText="Columna 1" dataField="col1"/>
			<mx:DataGridColumn headerText="Columna 2" dataField="col2"/>
			<mx:DataGridColumn headerText="Columna 3" dataField="col3"/>
			<mx:DataGridColumn headerText="Columna 4" dataField="col4" visible="false"/>
			<mx:DataGridColumn headerText="Columna 5" dataField="col5" visible="false"/>
		</mx:columns>
	</mx:DataGrid>
</mx:Application>

Y el resultado:

Ver la fuente | Descargar datagridColumnSelector Class

Nota: Funciona tambien con Air aunque es preferible usar las clases nativas de Adobe Air.

Seguir los partidos del mundial

Si no puedes darte el lujo de un televisor en la oficina ni ver el los partidos por internet, al menos puedes seguirlos pasivamente.

Aqui puedes obtener un widget de escritorio (Adobe Air) para seguir los partidos del mundial en directo, ver el calendario de partidos y sus resultados conforme se vayan completando.

Calendario de partidos

Calendario de partidos

No sera tan entretenido como ver el partido en vivo y en directo pero al menos te enteraras de sus eventos importantes y… te distraes mucho menos.

Tips sobre Class mapping con Zend AMF

En resumen Class mapping 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.

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.

  • Define la variable $_explicitType con el alias en cada clase deseas mapear o usa el metodo getASClassName() en lugar de registrar cada mapeo con $serveramf->setClassMap(). Dara mas flexibilidad a tu aplicacion.
  • 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.
    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 $serveramf->addDirectory(). Si el alias elegido para las clases es, por dar un ejemplo, VO.Usuario Zend AMF buscara la clase VO_Usuario en la ruta VO/Usuario.php.
    Ten en cuenta esto solo si usas addDirectory() para definir la ubicacion de tus servicios y no deseas usar setClassMap() para registrar cada alias.

Las siguientes dos clases se mapearan correctamente entre PHP y AS3 de forma bidireccional.

Ruta: [ServicesPath]/VO/Usuario.php

<?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("_",".",get_class($this));
	}

	public $id;
	public $username;
	public $firstname;
	public $lastname;
	public $enabled;
}
?>

Nota: En este ejemplo uso getASClassName() 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.

Y por otro lado tenemos su clase homologa en AS3:

Ruta: /net/danielzegarra/VO/UsuarioVO.as

package net.danielzegarra.VO{
	//Recuerde que no es necesario que el alias tenga relacion
	//con el nombre de la clase
	[RemoteClass(alias="VO.Usuario")]
	public class UsuarioVO{
		public var id:uint;
		public var username:String;
		public var firstname:String;
		public var lastname:String;
		public var enabled:Boolean;
	}
}

La version de Zend Framework al escribirse este documento es la 1.10.
Puedes encontrar la documentacion de Zend AMF en http://framework.zend.com/manual/en/zend.amf.server.html

Shoutcast gratis

freestreamhosting.org ofrece su servicio de hosting de manera gratuita para streaming de audio (especificamente el servicio shoutcast de nullsoft).

Si ya has probado shoutcast para tener tu estacion de radio en internet sabras que necesitas una conexion de banda ancha dedicada a la salida. Una conexion casera ADSL de 2Mb suele tener no mas de 32kb destinada para la salida. Si cada oyente consumira 10kb entonces tu radio no podra tener mas de 3 oyentes.

La solucion es tener al servidor en una red con salida a internet de alta veolcidad y al emisor de la radio en una red normal. El emisor entrega el audio al servidor y el servidor lo reparte entre los oyentes.

Puedes crear una cuenta gratuita en freestreamhosting.org y tener tu radio en el aire en cuestion minutos.

Para mas informacion sobre como emitir audio con shoutcast puedes leer el tutorial que hice hace mucho tiempo aqui.

Televisión Bolivariana de Venezuela

Me puse ha escuchar un poco de televisión venezolana y todo parecía muy normal hasta que empezó la tanda comercial y con ella todo ese sistema de lavado de cerebro que ha montado Chavez para convertir a los ciudadanos en súbditos.

Hay que reconocer que Chavez no es tonto, parecerá tonto por su manera de comportarse cuando se siente amenazado o cuando quiere atacar a alguien y no puede controlar ese montón de odio que tiene dentro, pero no lo es o al menos, el equipo de trabajo detrás suyo hace un trabajo tan genial que lo salvan.

Tan solo hay que ver no mas de 30 minutos de television venezolana. Si bien el mensaje de fondo es “viva Venezuela” y “debemos estar orgullosos de nuestro país” todos estos mensajes están fuertemente ligados al nombre de Chavez, como si no se pudiera separar la identidad venezolana y todas las cosas buenas de Venezuela de él. Los comerciales en el canal que publico mas abajo son casi en su totalidad nacionalistas, muy bien hechos la verdad, algunas son frases del presidente comentando sobre cosas que son imperialistas y envenedadas (a la vez que suena una musiquita de fondo con un tema cultural como si de un erudito se tratase) y hay que memorizarlas como si de leyes se tratarsen.

En los noticieron encuentras algunas inferencias incorrectas, por ejemplo:

La narradora dice:

El presidente Chavez se reunión con la delegación italiana para firmar unos acuerdos de cooperación. En la reunión el canciller italiano expreso su apoyo a la revolución bolivariana, etc etc y enfatizo que el actual potencial venezolano no se hubiera logrado sin esta revolución, etc, etc.

Y entonces se calla la narradora y se escucha lo que dice el canciller a través de su traductora y se oye algo como:

Venezuela es un solido proveedor energético y estamos entusiasmados de este tratado, etc, etc.

(Las citas no son exactas, las escribi como las recuerdo)

Si te fijas, que el canciller diga que Venezuela es un buen proveedor energético no quiere decir que sea gracias al nuevo gobierno bolivariano (el petróleo ya estaba ahí mucho tiempo antes) y menos que esto no haya podido lograrse sin la revolución.

Esto es parecido a lo que pasaba en el gobierno de Fujimori. Habian proyectos sociales (el vaso de leche es uno de los mas conocidos) que la verdad que si eran buenos y ayudaban a mucha gente, el gobierno siempre intentaba dar la impresion de hacer todo bien, de preocuparse por sus ciudadanos, si tomaban el congreso era por que no podian mejorar el pais con los politicos actuales (y no porque no querian tener supervisores que descubrieran sus fechorias), compraban los canales para que muestren solo lo que el gobierno deseaba y no informara de los delitos que se cometian en estos circulos. Si alguien se armaba de valentia e intentaba llegar al pueblo, la prensa, la principal herramienta de comunicacion masiva le daria hipocritamente la espalda.

Eso si, Fujimori y Valdimiro eran mas solapas, no como Chavez que nacionaliza los canales que no van con su punto de vista sin ningun miedo a las represalias del pueblo.

Supongo que al principio uno se da cuenta de estas cosas, pero con el tiempo se te hace costumbre y cuando te encuentres con un canal de televisión en el que no aparecen los colores de la bandera por mas de 10 segundos sentirás que algo raro tiene, talvez es imperialista, talvez esta ENVENENADA!!!

Aquí les dejo una transmisión en vivo de un canal de la República Bolivariana de Venezuela:

Y que diablos significa Bolivariana???, viene de Bolivar si, pero, acaso esa palabra existe?? Según Wikipedia ese tipo de república no existe (talvez en la Wikipedia venezolana si aparezca).

Realmente nunca vuelvo a Perú si algún presidente (posiblemente Humala) cambia de nombre al país por República TupacAmarista de Perú (o algo similar).

Ojo: El que un presidente tenga a muchas personas apoyandolo no quiere decir que sea correcto, Fujimori aun tiene miles de seguidores necios que consideran que el fin justifico los medios. Al final, pienso que cada pueblo se merece al gobernante que elige.  En Peru estuvimos a punto de elegir a Humala en las elecciones pasadas, eso nos dice algo: el Peru casi se merece a Humala como presidente.