Upload de archivos con Flex 2
En estos días estoy haciendo un admin para un sitio web, estoy utilizando Flex con PHP y MySQL. Esta herramienta me está simplificando mucho las cosas, lo que antes eram varios xhtmls otros tantos php y si queremos que quede mas usable otros muchos js para hacer un ajax, hoy son solo unas 50 lineas en un mxml y otro poco de código en Actionscript. Trabajando, me topé con un problema, hacer un upload de archivos con Flex, mucha info no encontré en internet, así que me las arreglé bastante solo, aquí comparto el resultado, espero que sirva.
Archivo mxml:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal"
creationComplete = "init()">
<mx:Script source="subir.as"/>
<mx:Panel title="Subir Imagen"
paddingBottom="10"
paddingLeft="10"
paddingRight="10"
paddingTop="10">
<mx:Form width="100%" height="100%">
<mx:FormItem label="Imagen">
<mx:Text id="file_path"/>
<mx:ProgressBar id="uploadProgress" label="" mode="manual" />
<mx:ControlBar horizontalAlign="right">
<mx:Button id="browseUpload" label="Buscar..." click="buscar()"/>
<mx:Button id="startUpload" label="Upload..." click="subir()" />
</mx:ControlBar>
</mx:FormItem>
</mx:Form>
</mx:Panel>
</mx:Application>
Archivo Actionscript:
import flash.net.URLRequest;
import flash.net.URLRequestMethod
private const UPLOAD_URL:String = "upload.php";
private var imagesFilter:FileFilter = new FileFilter("Images", "*.jpg;*.gif;*.png");
private var photoShop:FileFilter = new FileFilter("Archivos Photoshop", "*.psd");
private var fileref:FileReference = new FileReference();
private function buscar():void {
fileref.browse([imagesFilter,photoShop]);
}
/**
* cuando se ha seleccionado el archivo coloco el nombre en el text
* y habilito el botón subir
*/
private function seleccionar(event:Event):void {
startUpload.enabled = true;
file_path.text = fileref.name;
}
/**
* subo el archivo
*/
private function subir():void{
var request:URLRequest = new URLRequest();
request.method = URLRequestMethod.GET;
request.url = UPLOAD_URL;
fileref.upload(request);
}
/**
* chequeo el progreso
*/
private function progressHandler(event:ProgressEvent):void {
uploadProgress.setProgress(event.bytesLoaded, event.bytesTotal);
}
private function completeHandler(event:Event):void {
uploadProgress.label = "UPLOAD COMPLETE";
}
/**
* inicializo la applicación
*/
private function init():void{
startUpload.enabled = false;
fileref.addEventListener(Event.SELECT, seleccionar);
fileref.addEventListener(ProgressEvent.PROGRESS, progressHandler);
fileref.addEventListener(Event.COMPLETE, completeHandler);
}
Los Natas en Rosario
Como no solo de Flex, Flash y Actionscript vive el hombre, el sábado fui a ver a los tres hombres presentando El Hombre Montaña.
Muy buen show, en un lugar donde solo éramos unos cuantos, El Sótano. Pocos temas de su último disco quedaron afuera comenzando con Carl Sagan 1 del disco Ciudad de Brahman a manera de intro y continuando con por El Bolsero, Amanecer Blanco y casi todos los temas de El Hombre Montaña, pasando por su Hit (?) Meteoro 2028 (tema que me cansé de escuchar desde el CD, pero en vivo suena espectacular) y cerrando con la versión de München Sessions de Traicion en el Arrocero.
Nuevamente Los Natas reafiramaron que la mejor banda de Stoner Rock nacional.
Ah, el show lo abrió una banda local llamada "Los Impedidos", instrumental. Me gustó como sonaron, el día que pueda realizar mi película (?) los voy a llamar para que hagan el soundtrack.
Ejemplo del HTTPService de Flex 2: last.fm
En uno de mis posts anteriores publiqué un "RSS reader" utilizando Actionscript 3 y Flex 2.
Ahora realicé una prueba similar, pero con mi ranking de artistas más escuchados en last.fm:
(requiere Flash Player 9)
En este caso no utilicé la Class XML de Actionscript 3 para parsear el XML, lo cargué con la Class HTTPService de Flex 2. Es realmente simple, acá va el código:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="horizontal"
creationComplete="fmRequest.send()" >
<mx:Style>
Application {
background-color: #ffffff;
color: #000033;
theme-color: #1167B8;
}
Panel {
header-colors: #1167B8, #1167B8;
shadow-direction: right;
}
</mx:Style>
<mx:HTTPService
id="fmRequest"
url="http://ws.audioscrobbler.com/1.0/user/locopro/topartists.xml"
useProxy="false" />
<mx:Panel width="420" height="400" layout="horizontal"
title="Mi ranking en Last.fm">
<mx:DataGrid x="20" y="20" id="dgArtists" width="400" height="350" dataProvider="{fmRequest.lastResult.topartists.artist}">
<mx:columns>
<mx:DataGridColumn headerText="Rank" dataField="rank" width="50"/>
<mx:DataGridColumn headerText="Artist" dataField="name"/>
<mx:DataGridColumn headerText="Plays" dataField="playcount" width="50"/>
</mx:columns>
</mx:DataGrid>
</mx:Panel>
</mx:Application>
Para compilar esto solo hay que salvarlo con un archivo con extensión mxml y compilarlo con el SDK de Flex 2.
10 Razones para usar Flex
Que buenas 10 razones para usar Flex
Me quedo con esta:
Rich Media Support. The Flash platform has absolutely blind-sided the previously dominant media players on the Web (Real, Windows Media). It is light and works without installing this or that. Flex makes it simple to embed both audio and video content right into your applications.
Principalmente para detractores de Flash-Flex, la primer razón para no usarlo es "hay que descargarse un Player". Pero en ese player "sirve" para todo, video, sonido, interactividad. Y es mucho más amigable que el Windows Media, Quick Time, Real Player u otros.
Flex y Accesibilidad
Interesante informe esctito por Andrew Kirkpatrick y Bob Regan, dos desarrolladores expertos en accesibilidad de Adobe, sobre accesiblilidad de los componentes de Flex. Tema que me preocupa mucho en el momento de ponerme a trabajar con esta herramienta.
Link: Flex Component Accessibility
Via: onflex.org
ActionScript 3: XML - RSS Reader
Estoy haciendo varias pruebas con Actionscript 3. Y para probar estoy usando Flex 2, lo que sigue sería mi "Hola Mundo", básico, pero es un avance:
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
public function initApp():void
{
var XML_URL:String ="http://www.cristianhernandez.org/blog/?feed=rss2";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
}
function xmlLoaded(evtObj:Event):void {
var loader:URLLoader = URLLoader(evtObj.target);
var externalXML = new XML(loader.data);
for each (var item:XML in externalXML..item) {
var itemTitle:String = item.title.toString();
var itemDescription:String = item.description.toString();
var itemLink:String = item.link.toString();
mainTxt.htmlText += "<p><b>"+itemTitle+"</b><br />"+itemDescription+"</p>";
}
}
initApp():
Y para hacerlo funcionar en Flex, solo hay que pasarlo en un archivo mxml de la siguiente forma:
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*"
layout="vertical"
creationComplete = "initApp()" >
</mx><mx :Script>
< ![CDATA[
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
public function initApp():void
{
var XML_URL:String = "http://www.cristianhernandez.org/blog/?feed=rss2";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
}
function xmlLoaded(evtObj:Event):void {
var loader:URLLoader = URLLoader(evtObj.target);
var externalXML = new XML(loader.data);
for each (var item:XML in externalXML..item) {
var itemTitle:String = item.title.toString();
var itemDescription:String = item.description.toString();
var itemLink:String = item.link.toString();
mainTxt.htmlText += "<p><b>"+itemTitle+"</b><br />"+itemDescription+"";
}
}
]]>
</mx>
<mx :TextArea id = "mainTxt" width="400" height="307"/>
La próxima va con comentarios y más explicado.
Ejemplo (requiere Flash Player 9)
Billete con Spam
Me parece estúpido que una persona crea que reenviando un mail a otras tantas va a tener felicidad eterna, dinero, un celular o impedir que cobren por usar Hotmail.
Pero hacer una "cadena" con un billete me parece que es demasiado:
.
Eso me demuestra dos cosas, que hay gente para todo y que estas estupideces no solo están en internet.
Windows Live Mail (Beta)

Después de tanto tiempo, entré a mi vieja (y apestada de spam) cuenta de Hotmail, y resulta que ahora es Windows Live Mail. No me gusta, para nada. No se, talvéz estoy muy acostumbrado a Gmail, pero la nueva versión del mail de Microsoft parece menos usable que la anterior, y la enterior era bastante mala. No me gusta esa forma de mostrar los mails, como si fuesen "iframes noventosos", que la publicidad ocupe tanto porcentaje del area visual y que tenga un peso visual tan grande. Lo único que puedo rescarar de esta versión es que le pusieron funcionalidades al botón derecho del mouse, mi pregunta es: ¿Quién usa el botón derecho del mouse en internet?.
Conclusión, spamers: sigan divirtiéndose con mi cuenta de Hotmail (o como se llame), no lo voy a abrir muy seguido.
Mis alternativas a Microsoft Office
Confieso que mi primer contacto con una PC fue con Microsoft Word, hace bastante tiempo.
Siempre vi a office como un mal necesario, como algo que todo el mundo usa porque está en Windows y porque lo usa todo el mundo, nada más.
Desde hace un tiempo, cuando el entorno me lo permite, estoy usando algunas ‘alternativas’ a este paquete. En realidad son alternativas al formato en si, no a los programas.
Power Point:
El Power Point es la que menos me gusta de todas, por este motivo nunca la aprendí a usar (no se que pasó primero). Para reemplazar esta aplicación tengo dos alternativas. Macromedia (Adobe) Flash que desde la versión 7 tiene la característica de poder crear presentaciones con slides y S5.
Word:
Creo que en los momentos donde solo hay que documentar texto para lectura personal o para enviar a alguien un html bien armado puede funcionar mejor que un .doc, por los siguientes motivos:
- Standard funciona en cualquier computadora que tenga algún explorador instalado, un requerimiento básico. No requiere ningún software en especial
- Tamaño: Un archivo doc, en blanco, sin nada escrito, pesa 20K. Esto sube cuando le empezamos a poner info, un html menos de 1K.
Excel no suelo usar.
Porsupuesto esto no es algo que pueda hacer en cualquier circunstacia, pero me parece bueno empezar a pensar que un paquete de herramientas monopolizado por una empresa no tendría que convertirse en un standard de trabajo.
