martes, 18 de marzo de 2008

Huevo de Pascua en OpenOffice

Un "Huevo de Pascua" es una funcionalidad oculta, que suelen traer los DVD's de películas (opciones ocultas en los extras) o algunos programas. El caso que hoy nos ocupa corresponde OpenOffice, concretamente a Calc (la hoja de cálculo). Cuando en una celda cualquiera se escribe la siguiente fórmula (sin las comillas externas) "=game("StarWars")", aparecerá el juego del Invaders, para que te lo pases pipa en la oficina.

En la imagen que he capturado se puede ver este "Huevo de Pascua" en acción. La versión que he utilizado es OpenOffice v2.2 para Windows.

Los 100 mejores programas Open Source

Recientemente, Ubuntu Linux Help, ha publicado un artículo en el que recopila una lista de 100 programas open source, los cuales considera los mejores de su categoría. Dicho artículo está accesible desde el siguiente enlace: http://ubuntulinuxhelp.com/top-100-of-the-best-useful-opensource-applications/

El artículo describe en detalle las particularidades de cada programa.

Particularmente, una lista tan reducida me parece injusta con la cantidad de programas open source estupendos que existen, y muchos tenemos nuestras preferencias ante tanta diversidad.

A continuación la lista resumida:

AUDIO

  • Ardour

  • Audacity

  • Grip

  • Hydrogen

  • Jokosher

  • LMMS

  • MusE

  • Rosegarden

  • soundKonverter

  • Streamripper



DISEÑO GRAFICO 2D

  • Cenon

  • GIMPshop

  • Hugin

  • Inkscape

  • KoverArtist

  • Ktoon

  • Krita

  • MyPaint

  • OpenOffice Draw

  • Panorama Tools

  • Pixelize

  • Scribus

  • Skencil

  • Synfig

  • Xara Xtreme

  • Xara Xtreme for Linux



DISEÑO GRAFICO 3D

  • Art of Illusion

  • Blender

  • Crystal Space

  • FreeWRL

  • G3DViewer

  • K3DSurf

  • KPovModeler

  • PovRay

  • White Dune



VIDEO

  • AvideMUX

  • Cinelerra

  • CinePaint

  • Jahshaka

  • Kino

  • LiVES

  • recordMyDesktop

  • Slideshow creator



SISTEMA

  • APTonCD

  • Beagle

  • ClamAV

  • Conky

  • Ekiga

  • Endeavour Mark II

  • FileZilla

  • GParted

  • gZIP

  • K3b

  • MondoRescue

  • OpenBerg

  • OpenOffice

  • OpenSSH

  • PDFedit

  • Pidgin

  • PuTTY

  • Reconstructor

  • Rox-Filer

  • TrueCrypt

  • VNC

  • WINE

  • XFE



DESARROLLO

  • Bugzilla

  • Eclipse

  • Gambas

  • Geany

  • Gobby

  • jEdit

  • Netbeans

  • QuantaPlus

  • SciTE



PRODUCTIVIDAD

  • Basket Note Pads

  • Firefox

  • Gnome Do

  • Gnu Cash

  • HomeBank

  • inCollector

  • Katapult

  • Meld

  • OpenOffice

  • qOrganizer

  • RSSowl

  • Specto

  • Sunbird

  • Task Coach

  • Thunderbird

  • tkdiff

  • Zim



DESARROLLO WEB

  • Amaya

  • Aptana Studio

  • BlueFish

  • FontForge

  • gFTP

  • Kompozer

  • Kruler

  • SeaMonkey

  • Wink

  • Xampp

jueves, 13 de marzo de 2008

Convertir Windows en Linux

Para gustos están los colores, y en este mundillo de frikies y ciberpunks hay cosas curiosas como las que voy a comentar.

Ya existen programas que transforman el escritorio de tu "Ventanucos" en otro totalmente distinto. Y como no podía ser de otra manera, los hay que han creado su versión de Linux.

El primero de ellos se llama "Ubuntu Transformation Pack XP", y deja tu Windows XP irreconocible, con el aspecto de Ubuntu.



Para descargar este programa, tenemos el siguiente enlace:

http://rapidshare.com/files/30259173/Transformation_Pack_XP_to_Ubuntu.rar


Para los que están enamorados de la distribución Linux Fedora, tienen el "Fedora Transformation Pack":



Lo puedes descargar en el siguiente enlace:

http://rapidshare.com/files/98276765/FedoraTP1.0.zip

CDLibre: Más de 900 programas gratuitos

CDLibre cumple ya 5 años, recopilando programas libres y gratuitos para el sistema operativo Windows. Entre estos programas uno puede encontrar programas de astronomía, audio, bases de datos, desarrollo, educativos, gráficos, internet, juegos, matemáticas, ofimática, programación, vídeo, multimedia y utilidades. Para consultar el contenido de cada programa, junto con una explicación sobre el mismo, acceder al siguiente enlace: http://www.cdlibre.org/consultar/catalogo/index.html

Los programas pueden descargarse directamente en varios formatos, que se encuentran en el siguiente enlace: http://www.cdlibre.org/descargar/index.html

Carlos Pumares contra SGAE

Carlos Pumares, el polémico periodista, ha arremetido contra la Sociedad General de Autores (SGAE), y no le falta razón.

miércoles, 12 de marzo de 2008

San iGNUcio: por Padre Stallman

Aunque sea un poco viejo, la charla que Richard Stallman dió en la Conferencia Internacional del Software Libre en Extremadura, 
es digna de ser recordada para la posteridad.

martes, 4 de marzo de 2008

Acceso a Web Services desde Flex

En el anterior post vimos cómo acceder a un archivo XML guardado en nuestro disco duro, y representar la información del mismo en una matriz de datos. Pero una de las operaciones más habituales, a la hora de trabajar con interfaces gráficas, será la de extraer datos remotamente, normalmente mediante un servicio web, y exponerlos en pantalla.

Para el ejemplo que se trata aquí, se ha utilizado un Web Service realizado mediante Java, corriendo bajo Apache Tomcat 6.0, y desarrollado con Eclipse Europa, a través de AXIS 2.

El código Java es el siguiente:


package com.homatekno.ws;

import java.lang.StringBuffer;

public class CategoriesList {
public String getCategoriesList() {
StringBuffer sb = new StringBuffer();

sb.append("<?xml version='1.0' encoding='ISO-8859-1'?>\n");
sb.append("<category-list>\n");

sb.append("<category>\n");
sb.append("<id>01</id>\n");
sb.append("<name>Flores de interior</name>\n");
sb.append("<title>Flor interior</title>\n");
sb.append("<image></image>\n");
sb.append("</category>\n");

sb.append("<category>\n");
sb.append("<id>02</id>\n");
sb.append("<name>Flores de exterior</name>\n");
sb.append("<title>Flor exterior</title>\n");
sb.append("<image></image>\n");
sb.append("</category>\n");

sb.append("<category>\n");
sb.append("<id>03</id>\n");
sb.append("<name>Arbustos de interior</name>\n");
sb.append("<title>Arb. interior</title>\n");
sb.append("<image></image>\n");
sb.append("</category>\n");

sb.append("<category>\n");
sb.append("<id>04</id>\n");
sb.append("<name>Arbustos de exterior</name>\n");
sb.append("<title>Arb. exterior</title>\n");
sb.append("<image></image>\n");
sb.append("</category>\n");

sb.append("<category>\n");
sb.append("<id>05</id>\n");
sb.append("<name>Aromaticas</name>\n");
sb.append("<title>Aromaticas</title>\n");
sb.append("<image></image>\n");
sb.append("</category>\n");

sb.append("<category>\n");
sb.append("<id>06</id>\n");
sb.append("<name>Arboles de hoja caduca</name>\n");
sb.append("<title>Arbol caduca</title>\n");
sb.append("<image></image>\n");
sb.append("</category>\n");

sb.append("<category>\n");
sb.append("<id>07</id>\n");
sb.append("<name>Arboles de hoja perenne</name>\n");
sb.append("<title>Arbol perenne</title>\n");
sb.append("<image></image>\n");
sb.append("</category>\n");

sb.append("<category>\n");
sb.append("<id>08</id>\n");
sb.append("<name>Cactus</name>\n");
sb.append("<title>Cactus</title>\n");
sb.append("<image></image>\n");
sb.append("</category>\n");

sb.append("</category-list>");

return sb.toString();
}
}


Lo habitual sería acceder a base de datos, en lugar de hacerlo "a pelo".

Esta clase se convertirá, a través de los asistentes del IDE que se utilice (Eclipse, NetBeans, JBuilder, IntelliJ, etc.) en un servicio Web. También, mediante el IDE, se levantará el servicio a través del servidor de aplicaciones (Tomcat, JBoss, Weblogic, etc.) configurado.

Una vez creado y desplegado el Web Service, tendremos un archivo WSDL con la descripción del servicio Web. En nuestro caso, estará localizado en


http://localhost:8080/Demo01/wsdl/CategoriesList.wsdl


y su contenido será el siguiente:


<wsdl:definitions
targetNamespace="http://ws.homatekno.com">
<wsdl:types>

<schema elementFormDefault="qualified"
targetNamespace="http://ws.homatekno.com">

<element name="getCategoriesList">
<complexType/>
</element>

<element name="getCategoriesListResponse">

<complexType>

<sequence>
<element name="getCategoriesListReturn"
type="xsd:string"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>

<wsdl:message
name="getCategoriesListResponse">
<wsdl:part element="impl:getCategoriesListResponse"
name="parameters"/>
</wsdl:message>

<wsdl:message name="getCategoriesListRequest">
<wsdl:part element="impl:getCategoriesList" name="parameters"/>
</wsdl:message>

<wsdl:portType name="CategoriesList">

<wsdl:operation name="getCategoriesList">
<wsdl:input message="impl:getCategoriesListRequest"
name="getCategoriesListRequest"/>
<wsdl:output message="impl:getCategoriesListResponse"
name="getCategoriesListResponse"/>
</wsdl:operation>
</wsdl:portType>

<wsdl:binding name="CategoriesListSoapBinding"
type="impl:CategoriesList">
<wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="getCategoriesList">
<wsdlsoap:operation soapAction=""/>

<wsdl:input name="getCategoriesListRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>

<wsdl:output name="getCategoriesListResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>

<wsdl:service name="CategoriesListService">

<wsdl:port binding="impl:CategoriesListSoapBinding"
name="CategoriesList">
<wsdlsoap:address
location="http://localhost:8080/Demo01/services/CategoriesList"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>


Para probar el Web Service, directamente, se lanzaría la siguiente URL:


http://localhost:8080/Demo01/services/CategoriesList?method=
getCategoriesList


Siendo el resultado lo siguiente:


<soapenv:Envelope>
<soapenv:Body>
<getCategoriesListResponse>
<ns1:getCategoriesListReturn>
<?xml version='1.0' encoding='ISO-8859-1'?>
<category-list>
<category>
<id>01</id>
<name>Flores de interior</name>
<title>Flor interior</title>
<image></image>
...
</category>
</category-list>
</ns1:getCategoriesListReturn>
</getCategoriesListResponse>
</soapenv:Body>
</soapenv:Envelope>


Una vez comprobado que el Web Service está operativo y funcionando sin problemas, nos pondremos manos a la obra con el front-end de Flex.

Para invocar a un Web Service, se hará uso del objeto "mx:WebService":


<mx:WebService id="WSCategories"
wsdl="http://localhost:8080/Demo01/wsdl/CategoriesList.wsdl">
<mx:operation name="getCategoriesList"
result="getData(event)"
fault="getError(event)"/>
</mx:WebService>


En el parámetro "wsdl" se especifica la URL del archivo WSDL del Web Service a ejecutar.

El objeto "mx:operation" especifica el método a ejecutar del Web Service. En nuestro caso se ejecutará el método único "getCategoriesList", que no contiene parámetros". Este objeto posee otros parámetros, como "result" en el que se especifica el método (getData(event)) o acción a ejecutar cuando el Web Service se haya ejecutado sin problemas, y se trata el resultado. El parámetro "fault" indica el método (getError(event)) o acción en el caso de que el Web Service se haya ejecutado con errores.

El objeto "mx:WebService" define o prepara la ejecución del Web Service, pero no lo ejecuta. Para ello, nuestra interfaz contendrá un botón con el texto "Ejecutar WS", el cual, al hacer clic sobre él, lanzará invocará a un método, el cual lanzará el Web Service. El código del botón (objeto "mx:Button") es el siguiente:


<mx:Button x="10" y="10" label="Ejecutar WS"
id="btnRun" click="runWS()"/>


Los parámetros "x" e "y" definen la posición en el área de trabajo. El parámetro "label" contiene el texto a visualizar. El parámetro "click" define el método (runWS()) o acción a ejecutar cuando el usuario haga clic sobre el botón.

Para definir los métodos (getData(), getError() y runWS()), usaremos un bloque de código ActionScript dentro del bloque "mx:Application", en lugar de MXML. Este bloque contendrá el siguiente código:


<mx:Script>
<![CDATA[
import mx.collections.XMLListCollection;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;

[Bindable]
private var myXML:XML;

private function getData(event:ResultEvent):void{
myXML = new XML(event.result);
miTexto.text=myXML.toString();
}

private function getError(event:FaultEvent):void
{
miTexto.text=event.fault.message;
}

private function runWS():void {
WSCategories.getCategoriesList.send();
}
]]>
</mx:Script>


El bloque de código ActionScript queda englobado entre "mx:Script" + "[CDATA[".

Lo primero que se hace es importar los objetos a utilizar, a través de la sentencia "import".

El tag "[Bindable]" define los elementos que se enlazan o linkan. En nuestro caso se define una variable de tipo "XML", que gestionará el XML que se recuperará del Web Service.

El método "getData()", inicializa la variable XML, creando un nuevo objeto de tipo XML, y recogiendo el resultado retornado por el Web Service, el cual se encuentra en el parámetro "event" del método, y que es enviado desde el objeto "mx:WebService". Una vez recogido, se mostrará en el área de texto "miTexto" el contenido del XML (el área de texto se aborda más adelante).

El método "getError()" pone el mensaje de error devuelto por el Web Service en el área de texto "miTexto".

El método "runWS()" es el método que realmente ejecuta el Web Service, y que lo inicia el clic que hace el usuario sobre el botón. El resultado de este código lanzará los métodos "getData()" y "getError()" en caso de éxito o error. La única línea de este método hace que el objeto "WSCategories" (de tipo "mx:WebService") invoque al método "getCategoriesList" mediante la acción "send()".

El área de texto "miTexto" recogerá el resultado del WebService. El siguiente código define este objeto, de tipo "mx:TextArea":


<mx:TextArea x="10" y="203"
width="441" height="190"
id="miTexto" editable="false"
wordWrap="true"
cornerRadius="16"
fontFamily="Verdana" fontSize="8"
fontWeight="normal"
borderStyle="solid"
backgroundColor="#E6E1E1"
backgroundAlpha="0.5"/>


Se han agregado atributos especiales para dar efectos al componente. Así, el atributo "editable" permite indicar se se puede editar datos en el área de texto. El atributo "wordWrap" indica si el texto se reparte automáticamente cuando llena la línea, evitando el scrolling horizontal. El atributo "cornerRadius" indica cuánto se redondean los bordes del área de texto. Los atributos "fontFamily", "fontSize" y "fontWeight" definen el tipo de letra, el tamaño y el aspecto de ésta. El atributo "borderStyle" define el estilo del borde. El atributo "backgroundColor" define el color de fondo del área de texto. Por último, el atributo "backgroundAlpha" define el nivel de transparencia del componente (0.5 es un 50%).

Ya se ha visto cómo el resultado de la ejecución del Web Service se almacena en un objeto de tipo "XML". Este objeto contiene todo el XML, contando también con el nodo superior "<category-list>". Por ello, es necesario recoger la lista de datos, o los registros (por decirlo con algún símil) que necesitaremos representar en la tabla. Esta colección de datos son iguales, pues tienen X registros con el mismo número de campos. Para ello hay que buscar dentro de la jerarquía de nodos del XML, y bajar al nivel de nodo de esta lista. Para ello, se utilizará el objeto "mx:XMLListCollection", el cual será utilizado por la tabla para cargar los datos. Se realizará de la siguiente manera:


<mx:XMLListCollection id="myXMLList"
source="{myXML.category}"/>


Por último, se añade la matriz de datos o "DataGrid", cuyos atributos se explicaron en el anterior post (Un primer contacto con Flex). El código de éste es el siguiente:


<mx:DataGrid x="10" y="44"
width="441"
id="gridCategories"
dataProvider="{myXMLList}"
borderStyle="outset"
fontSize="8">
<mx:columns>
<mx:DataGridColumn id="ID"
dataField="id" headerText="ID"
width="15"/>
<mx:DataGridColumn id="Name"
dataField="name" headerText="Name"
width="50"/>
<mx:DataGridColumn id="Title"
dataField="title" headerText="Title"
width="50"/>
<mx:DataGridColumn id="Image"
dataField="image" headerText="Image"
width="50"/>
</mx:columns>
</mx:DataGrid>


Nótese que el atributo "dataProvider" del "DataGrid" apunta a la colección extraída del objeto XML.

El aspecto final de la aplicación será el siguiente:



El código completo de la aplicación Flex:


<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">

<mx:Script>
<![CDATA[
import mx.collections.XMLListCollection;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;

[Bindable]
private var myXML:XML;

private function getData(event:ResultEvent):void {
myXML = new XML(event.result);
miTexto.text=myXML.toString();
}

private function getError(event:FaultEvent):void {
miTexto.text=event.fault.message;
}

private function runWS():void {
WSCategories.getCategoriesList.send();
}
]]>
</mx:Script>

<mx:XMLListCollection id="myXMLList"
source="{myXML.category}"/>


<mx:WebService id="WSCategories"
wsdl="http://localhost:8080/Demo01/wsdl/CategoriesList.wsdl">
<mx:operation name="getCategoriesList"
result="getData(event)"
fault="getError(event)"/>
</mx:WebService>

<mx:DataGrid x="10" y="44"
width="441"
id="gridCategories"
dataProvider="{myXMLList}"
borderStyle="outset"
fontSize="8">
<mx:columns>
<mx:DataGridColumn id="ID"
dataField="id" headerText="ID"
width="15"/>
<mx:DataGridColumn id="Name"
dataField="name" headerText="Name"
width="50"/>
<mx:DataGridColumn id="Title"
dataField="title" headerText="Title"
width="50"/>
<mx:DataGridColumn id="Image"
dataField="image" headerText="Image"
width="50"/>
</mx:columns>
</mx:DataGrid>
<mx:Button x="10" y="10"
label="Ejecutar WS" id="btnRun"
click="runWS()"/>
<mx:TextArea x="10" y="203"
width="441" height="190"
id="miTexto" editable="false"
wordWrap="true" cornerRadius="16"
fontFamily="Verdana" fontSize="8"
fontWeight="normal"
borderStyle="solid"
backgroundColor="#E6E1E1"
backgroundAlpha="0.5"/>

</mx:Application>

lunes, 3 de marzo de 2008

Un primer contacto con Flex

Flex es un lenguaje de programación orientado a RIA (Rich Internet Applications), basado en la tecnología y el runtime de Flash. Este lenguaje nos permitirá crear aplicaciones web ricas en interfaces dinámicas y funcionales, con una infinidad de posibilidades.

Para el ejemplo que aquí se expone, se realizará una pequeña tabla que muestre los valores de un XML, los cuales estarán contenidos en un fichero. En un caso real, lo haríamos sobre una respuesta HTTP, tipo Web Services.

Esta tabla o matriz contendrá funcionalidades extra, tales como ordenar por una determinada columna, cambiar una columna de posición o hacer scrolling a través de los datos.

En primer lugar crearemos un fichero llamado "categorias.xml", el cual almacenaremos (para el ejemplo) en la raíz del disco duro "C:". Su contenido será el siguiente




<?xml version="1.0" encoding="ISO-8859-1"?>

<category-list>
<category>
<id>01</id>
<name>Flores de interior</name>
<title>Flor interior</title>
<image></image>
</category>

<category>
<id>02</id>
<name>Flores de exterior</name>
<title>Flor exterior</title>
<image></image>
</category>

<category>
<id>03</id>
<name>Arbustos de interior</name>
<title>Arb. interior</title>
<image></image>
</category>

<category>
<id>04</id>
<name>Arbustos de exterior</name>
<title>Arb. exterior</title>
<image></image>
</category>

<category>
<id>05</id>
<name>Aromaticas</name>
<title>Aromaticas</title>
<image></image>
</category>

<category>
<id>06</id>
<name>Arboles hoja caduca</name>
<title>Arbol caduca</title>
<image></image>
</category>

<category>
<id>07</id>
<name>Arboles hoja perenne</name>
<title>Arbol perenne</title>
<image></image>
</category>

<category>
<id>08</id>
<name>Cactus</name>
<title>Cactus</title>
<image></image>
</category>

</category-list>


Para crear la aplicación en Flex, podemos utilizar Flex Builder (es de pago, pero se puede utilizar durante 60 días), o bien utilizando el SDK y un editor cualquiera (como Java).

Flex Builder permite utilizar MXML y ActionScript, ambos combinados, en un mismo fichero, cuya extensión es ".mxml". MXML es un lenguaje en formato XML, específico para las aplicaciones de Adobe.

Las primeras líneas del código serán:



<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">


La primera línea es la típica que indica que el fichero está en formato XML. La segunda identifica dicho fichero como una aplicación MXML. Asimismo, indica que la disposición (layout) de los objetos que se dibujarán será absoluta, es decir, por coordenadas X,Y desde la esquina superior izquierda.

Toda aplicación en Flex comienza con esta línea, y acabará por está otra:



</mx:Application>


Para cargar el fichero XML, se utilizará la siguiente sentencia:



<mx:XML id="myXML" source="c:/categorias.xml" />


Por defecto, el formato será "e4x", el cual permitirá realizar operaciones directas, de una forma sencilla, sobre el xml, principalmente la navegación. Gracias a este formato, podremos acceder directamente al nodo del cual deseamos extraer la información (category), y ello se indica mediante la siguiente línea:



<mx:XMLListCollection id="goCategoryList"
source="{myXML.category}" />


Con ésta, se crea una lista de colección XML, llamada "goCategoryList", que se extrae a partir del objeto "myXML", accediendo al nodo "category".

A continuación se crea la tabla con la información contenida en esta lista de colección:



<mx:DataGrid x="10" y="113" dataProvider="{goCategoryList}"
width="645" id="gridCategories"
editable="false" enabled="true">
<mx:columns>
<mx:DataGridColumn id="ID"
dataField="id" headerText="ID" width="15"/>
<mx:DataGridColumn id="Name"
dataField="name" headerText="Name" width="50"/>
<mx:DataGridColumn id="Title"
dataField="title" headerText="Title" width="50"/>
<mx:DataGridColumn id="Image"
dataField="image" headerText="Image" width="50"/>
</mx:columns>
</mx:DataGrid>


El objeto "mx:DataGrid" representa una tabla o matriz, que Flex ya tiene prefabricada con las funcionalidades descritas anteriormente. En la construcción de la tabla, se puede definir de dónde provienen los datos (dataProvider), que en este caso se especifica la lista de colección XML. También se puede indicar si es editable o no (se pueden introducir campos para entradas de datos), la posición de la tabla en el área de trabajo (X e Y), el alto y el ancho (height y width), si está activo o no (enabled), así como el nombre o identificador del objeto table (id).

Dentro de este objeto se debe definir el conjunto de columnas que integrará la tabla, a través del objeto "mx:column". Este objeto contendrá el detalle de cada columna, a través del objeto "mx:DataGridColumn". Este objeto designa un nombre o identificador para la columna (id), el texto de la cabecera de la columna (headerText), y se asocia el nombre del nodo XML del campo a la columna (dataField).

El código completo es el siguiente:



<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">

<mx:XML id="myXML" source="c:/categorias.xml" />
<mx:XMLListCollection id="goCategoryList"
source="{myXML.category}" />

<mx:DataGrid x="10" y="113" dataProvider="{goCategoryList}"
width="645" id="gridCategories"
editable="false" enabled="true">
<mx:columns>
<mx:DataGridColumn id="ID"
dataField="id" headerText="ID" width="15"/>
<mx:DataGridColumn id="Name"
dataField="name" headerText="Name" width="50"/>
<mx:DataGridColumn id="Title"
dataField="title" headerText="Title" width="50"/>
<mx:DataGridColumn id="Image"
dataField="image" headerText="Image" width="50"/>
</mx:columns>
</mx:DataGrid>

</mx:Application>


El resultado final es el siguiente:




Espero que este primer ejemplo os anime a iniciaros en este fascinante mundillo de las aplicaciones RIA, especialmente con Flex.