Ya lo comentamos en una entrada anterior, los rumores eran insistentes sobre la inminente llegada de un nuevo lenguaje a Google AppEngine. Y por fin ha llegado, AppEngine estrena hoy algunas novedades, y entre ellas la más solicitada por todos los usuarios, el soporte para el lenguaje Java. Eso sí, tan sólo podrán probar la versión preliminar de esta caracterísitica los primeros 10000 usuarios que lo soliciten accediendo a este enlace.

Google AppEngine ha sido desde el principio un serivicio muy interesante, pero algunos desarrolladores lo descartaban porque las restricciones en cuanto al lenguaje de programación a utilizar eran muy grandes, sólo se soportaba el lenguaje Python, algo que hacía que en muchos casos resultara complicado migrar aplicaciones ya existentes a esta plataforma.

Con la llegada de Java este servicio se hará mucho más popular, permitiendo a más personas explotar las características de esta plataforma y de toda la infraestructura proporcionada por Google (de forma gratuita hasta unos límites bastante permisivos [límites, más límites], o bien pagando por el servicio para disminuir esas limitaciones [precios]).

Algunos datos sobre las nuevas características de Google AppEngine en relación al lenguaje Java:

  • Se soportan las versiones de Java 5 y 6, y los estandares Java Servlet y Java Server Pages (JSP). Al igual que en el caso de Python, también existirán algunas restricciones en el entorno de ejecución para java. Así, por ejemplo, tan sólo se podrá hacer uso de las siguientes APIs de la librería estandar de java [JRE Class White List], aunque como puede comprobarse la lista de las permitidas es inmensa.
  • Para el acceso a datos se puede utilizar tanto la propia API de datos AppEngine como las interfaces estandar Java Data Objects 2.3 (JDO) o Java Persistence API 1.0 (JPA).
  • Los servicios de Caché y Correo de AppEngine también se pueden utilizar a través de las interfaces estandar JCache (JSR 107) y JavaMail, así como el acceso HTTP/HTTPS a otros hosts mediante la API básica java.net.URLConnection.
  • El acceso a los servicios de login y manipulación de imágenes se realiza mediante APIs propias de AppEngine.

Como parte del soporte para el lenguaje java, Google también ha desarrollado un nuevo plugin [AppEngine Eclipse Plugin] para el entorno de desarrollo Eclipse que facilitará el desarrollo, prueba y despliegue de aplicaciones java sobre la plataforma AppEngine, e incluso el desarrollo de aplicaciones con la nueva versión de Google Web Toolkit 1.6 (GWT) y su publicación sobre AppEngine o cualquier otro entorno. Este plugin es compatible con las versiones de Eclipse 3.3 (Europa) y 3.4 (Ganymede).

Para más información sobre el soporte java de AppEngine se puede consultar la web oficial con la documentación preliminar de desarrollo.

Como última nota en relación al nuevo soporte java de Google AppEngine quiero mencionar la posibilidad utilizar AppEngine con otros lenguajes basados en la máquina virtual java, como describe por ejemplo Guillaume Laforge en este artículo, donde explica cómo utilizar el lenguaje Groovy en AppEngine.

Además del soporte para Java, Google AppEngine ha presentado más novedades interesantes:

  • Soporte para tareas programadas (servicio CRON).
  • Soporte para Google Web Toolkit 1.6 (GWT).
  • Soporte para Google Secure Data Connector.
  • Nueva herramienta para importar datos de forma masiva a AppEngine. Y anuncian que en breve estará también disponible una herramienta para exportar datos.

A la vista de todas estas novedades es innegable que Google AppEngine se ha posicionado con fuerza en el apartado de hospedaje de aplicaciones web escalables, frente a importantes competidores como los también famosos Amazon Web Services (AWS).

, , , , , ,

Comentemos algunas noticias de los últimos días.

Hace un par de días se publicaron las nuevas versiones finales de Mono (2.4) y MonoDevelop (2.0). La actualización de Mono 2.4 se centra principalmente en la mejora de la estabilidad y rendimiento de la plataforma, aunque también incluye mejoras interesantes en ASP.NET como el soporte para aplicaciones precompiladas de ASP.NET generadas con Visual Studio, o en Windows Forms como las mejoras en cuanto a DataBinding del control DataGridView. Por su parte, también se ha publicado la versión final de MonoDevelop 2.0, cuyas novedades ya las detallamos en una entrada anterior. También podéis consultar las novedades en la web oficial de MonoDevelop (release notes).

Por otro lado la librería SwingX, de la que también hablamos detenidamente en un artículo anterior, también ha publicado su versión 0.9.6, supuestamente la última antes de la versión final 1.0. Según se comprueba en la lista de novedades se trata principalmente de una versión de mantenimiento para arreglar algunos errores y reorganizar código (ojo, hay breaking changes).

En relación a las novedades de Microsoft estos últimos días hemos sido bombardeados con las noticias que iban apareciendo en el MIX ’09. Y entre ellas dos novedades: el lanzamiento de la primera beta de Silverlight 3 (beta1) junto a algunas herramientas de desarrollo como Expression Blend 3 y la presentación de la nueva plataforma .NET RIA Services de la que hablaremos más adelante. Además, durante el evento también se lanzó la versión final de ASP.NET MVC 1.0 [si te interesa un libro gratuito sobre ASP.NET MVC 1.0 accede a esta entrada].

Por último, un par de noticias relacionadas con el tema que me está ocupando estos últimos días: el lenguaje Python y Google AppEngine.

La primera de ellas es que Google está trabajando en una nueva versión de Python (basada en CPython) que pretende ser 5 veces más rápido que la rama 2.6 actual del lenguaje. El proyecto se llama Unladen Swallow y se pueden consultar todos los detalles en su página oficial en Google Code.

La segunda tiene que ver con los rumores que han empezado a aparecer sobre el siguiente lenguaje que será soportado por el servicio Google AppEngine. Actualmente tan sólo se soporta el lenguaje Python, pero todo apunta a que el siguiente de la lista será nada más y nada menos que Java, y que podría anunciarse esta novedad en la próxima Google I/O developer conference. Sin embargo esto no son más que rumores, y en caso de ser cierto, aún están por ver las limitaciones sobre el lenguaje que impondrían los chicos de Google como condición para utilizarlo sobre su servicio de hospedaje de aplicaciones web. En definitiva, aún nos toca esperar un poco.

Edito (02/04): Dada la enorme repercusión de los rumores sobre el nuevo lenguaje soportado por Google AppEngine, ayer 1 de abirl (algo así como el día de los inocentes en muchos lugares fuera de España) en el blog oficial de este servicio se publicó una simpática broma donde se anunciaba que el nuevo lenguaje sería FORTRAN 77, y que incluso se podían enviar a cierta dirección de Google los conjuntos de tarjetas perforadas de las viejas aplicaciones para que ellos las convirtieran en una bonita aplicación web. ¿Alguien habrá enviado sus tarjetas? :)

, , , , , , , , ,

Voy a comenzar este tutorial de Python para programadores presentando un poco las diferentes versiones, distribuciones y herramientas disponibles para el desarrollo de aplicaciones en este lenguaje.

En primer lugar hay que destacar que actualmente existen dos ramas del lenguaje: Python 2.x y Python 3.x (también conocido como Python 3000 o Py3K). La diferencia entre ambas no la marca simplemente algunas mejoras y el número de versión sino las importantes diferencias entre ellas que hacen que incluso se haya perdido la compatibilidad hacia entre versiones. De ahí la importancia de la elección entre Python 2.x o 3.x. Se pueden consultar algunas de las diferencias más importantes entre Python 2.x y Python 3.x en su web de documentación.

En cuanto a las distribuciones disponibles tenemos aún más alternativas. La distribución original y más extendida es CPython, que compila código para su propio runtime incluido en la instalación. Sin embargo, existen otras muchas implementaciones del lenguaje sobre otras plataformas, aunque hay que considerar en cada caso sus diferencias con CPython. Por nombrar las más interesantes:

  • Jython, implementación del lenguaje Python para la plataforma Java. Diferencias entre Jython y CPython.
  • IronPython, implementación del lenguaje Python para la plataforma .NET. Diferencias entre IronPython y CPython.

Le toca el turno a los entornos de desarrollo (IDEs) para Python. Existen algunos buenos IDEs comerciales para Python, como Wingware o Komodo, pero me voy a centrar en otras alternativas gratuitas y/o open source que son igualmente válidas, si no mejores.

En primer lugar podemos encontrar algunos IDEs completos como IDLE (incluido con la propia distribución de CPython, bastante básico) o PyScripter. Sin olvidar por supuesto que podemos utilizar nuestro editor de texto favorito (Vim, Emacs, Notepad++, …) para la edición de código y ejecutar las aplicaciones desde la línea de comandos.

Pero dado que esto pretende ser un tutorial de Python dirigido a programadores Java y .NET, existe otra alternativa más interesante para el desarrollo con Python, y consiste en utilizar algún plugin Python para nuestro propio IDE Java o .NET. Así, las opciones más extendidas son:

  • Netbeans + Python. Extensión de Netbeans que permite el desarrollo de aplicaciones Python sobre Netbeans. Esta extensión se encuentra aún en desarrollo por lo que su funcionalidad y estabilidad podrían no ser aún las deseadas.
  • Eclipse + PyDev. Plugin de Eclipse para el desarrollo con Python y Jython. Incorpora las opciones típicas: completado de código, coloreado de código, refactorización, depuración y muchas otras.
  • Visual Studio + IronPython. Implementación de Python para la plataforma .NET. Incluye integración con Visual Studio para poder aprovechar las características de este IDE en el desarrollo de aplicaciones Python.
  • SharpDevelopr + IronPython. En la última versión del fantástico IDE SharpDevelop se incluye soporte para el desarrollo con IronPython.
  • IronPython Studio. IDE completo desarrollado sobre la plataforma Visual Studio Shell, es decir, IDE construido sobre la base de Visual Studio pero completamente independiente de éste último.

En mi caso particular, he elegido la distribución de CPython versión 2.5 y utilizaré Eclipse y PyDev como entorno de desarrollo. Los motivos son simples, es ésta la versión de Python que soporta por ahora Google App Engine, que será el servicio de hosting Python que utilizaré durante las pruebas.

En la siguiente entrada de la serie detallaré la instalación y preparación del entorno de desarrollo indicado (Python 2.5 + Eclipse + PyDev).

, , , , , , , ,

Y si ayer hablábamos de nuevos recursos para el desarrollo de aplicaciones de escritorio hoy le toca el turno a las aplicaciones web, que también están de enhorabuena con la aparición de las nuevas versiones de Moonlight y JavaFX.

Tal como anunció ayer en su blog Miguel de Icaza, Moonlight estrena por fin su versión 1.0. Por aportar un poco de información, Moonlight es una implementación open source de la tecnología Silverlight de Microsoft para sistemas Linux. Se trata de un proyecto de Novell en el que también colabora Microsoft aportando los tests de pruebas de Silverlight y proporcionando de forma gratuita Microsoft Media Pack para los usuarios de Linux (conjunto de codecs que permiten la reproducción de medios compatibles con Silverlight [wmv, wma, mp3, etc...]). Moonlight 1.0 está basado en Silverlight 1.0, se ejecuta sobre el propio motor javascript del navegador y se distribuye en forma de plugins para Firefox 2 y Firefox 3. En la entrada publicada por Miguel de Icaza podéis encontrar mucha más información sobre la nueva versión e incluso un poco de historia del proyecto para quien esté interesado. Añadir además que Novell ya se encuentra trabajando en la próxima versión, Moonlight 2, que según el roadmap del proyecto debe ver la luz en septiembre de 2009 (aunque la primera beta debería aparecer en mayo). Esta segunda versión estará basada ya en Silverlight 2 y se ejecutará sobre un motor de ejecución .NET (Mono) y no sobre Javascript como la actual.

Por otro lado JavaFX, la tecnología de Sun que pretende competir con Silverlight/Moonlight (de Microsoft/Novell) y Flash/Flex (de Adobe) dentro del campo RIA (Rich Internet Applications), también estrena su versión JavaFX 1.1, cuya principal novedad es el soporte para la gran mayoría de los dispositivos móviles y proveedores de servicios actuales. Debo reconocer que no conozco demasiado esta plataforma, pero destaco el hecho de ejecutarse sobre el propio runtime de java, ya instalado en millones de equipos, lo que está haciendo que consiga muchos adeptos. Cabe también mencionar, que al igual que en el caso de Moonlight, Sun también tiene previsto publicar este mismo año su segunda versión de JavaFX 2.0, que incluirá mejoras en el lenguaje y aumentará el conjunto de componentes disponibles para el desarrollo.

En fin, la batalla por el pastel RIA está en pleno auge, ya veremos dónde acaba y quién es el vencedor.

, , , , , ,

Para los que como yo aún creen en el desarrollo de aplicaciones de escritorio con java, estos últimos días han aparecido algunas novedades al respecto.

Hoy voy a destacar las nuevas versiones de tres proyectos que creo interesantes a la hora de mejorar el aspecto y funcionalidad de nuestras aplicaciones.

En primer lugar Flamingo, que estrena su versión 4.0. Para quienes no conozcan este proyecto, Flamingo es una implementación Swing del control Ribbon (y sus controles asociados) incluido en las aplicaciones de Office 2007.  Podéis consultar una lista con las novedades de la nueva versión en este artículo del blog Pushing Pixels. En la siguiente imagen podéis ver el aspecto del control:

Control Ribbon Flamingo

Control Ribbon Flamingo

Una noticia algo más antigua pero que viene muy en relación a esta última es la nueva versión 0.9.5 de la librería de controles SwingX. Este proyecto no es más que una extensión del propio Swing, donde se pretenden mejorar muchos de los controles existentes e incluir algunos controles nuevos. Así, por ejemplo, SwingX añade funciones avanzadas de ordenación, filtrado, selección y resaltado a controles basicos de Swing como tablas (JTable), árboles (JTree) y listas (JList), añade nuevas funcionalidades a otros controles como cuadros de diálogo (JDialog) o paneles (JPanel), e incluye algunos controles nuevos no presentes en Swing como JXTreeTable, JXLoginPanel o JXDatePicker para la presentación de tablas jerarquizadas, controles de autenticación o cuadros de selección de fecha. Podéis encontrar más información en la web de SwingLabs y en su wiki. Un ejemplo del control JXTreeTable puede verse en la siguiente imagen:

Ejemplo JXTreeTable

Ejemplo JXTreeTable

Por último, el proyecto Substance publica su nueva versión 5.1 en la que mejora su rendimiento y retoca algunos de sus skins, entre otras mejoras. Substance nos proporciona uno de los más atractivos look&feel para aplicaciones Swing que existen actualmente, y aunque históricamente ha tenido algunos problemas de rendimiento parece que en la últimas revisiones se está mejorando bastante en ese sentido. Además, Substance tiene el valor añadido de incluir soporte para los otros dos proyectos comentados en esta entrada, Flamingo y SwingX, lo que significa que si utilizamos Substance junto a controles de estas librerías podremos estar seguros de que su aspecto será totalmente consistente con el resto de la interfaz de usuario. Podéis encontrar una lista con las últimas novedades en el blog Pushing Pixels. En la siguiente imagen podéis comprobar el aspecto de Flamingo bajo el L&F Substance utilizando el skin Office Silver (la primera imagen de esta entrada se correspondía con el skin Office Blue):

Flamingo bajo Substance Office Silver

Flamingo bajo Substance Office Silver

En cuanto a los requerimientos de los componentes mencionados cabe mencionar que Flamingo y Substance necesitan Java 6 o superior para su correcto funcionamiento mientras que a SwingX le basta Java 5.

, , , , ,

Hoy me he topado con un proyecto curioso. ¿Te gusta Visual Basic 6 (VB6)? ¿Sigues programando bajo esta plataforma? ¿Te gustaría que tus aplicaciones escritas en VB6 funcionaran no sólo en Windows sino también en otros sistemas operativos como Linux o Mac OS?

La solución obvia a este problema es traducir la aplicación de VB6 a otro lenguaje “independiente” del sistema operativo como por ejemplo Java, para el que como todos sabemos existe un runtime para la mayoría de los sistemas operativos, pero dicha tarea puede requerir una cantidad de trabajo enorme y generar durante la traducción un número de errores aún mayor debido a las grandes diferencias existentes entre ambos lenguajes.

No tengo conocimiento de la existencia de ningún conversor/traductor automático de VB6 a Java, pero hoy he encontrado un proyecto que puede ayudar enormemente a salvar estas dificultades, al menos en proyectos VB6 no demasiado complejos. Este proyecto se llama Jabaco (es gratuito (freeware) aunque requiere registro) y nos propone un nuevo lenguaje compatible casi al 100% con VB6 y un compilador capaz de generar a partir de este código bytecode ejecutable por la Máquina Virtual Java (JVM).

Jabaco (Editor de Código)

Jabaco (Editor de Código)

El compilador de Jabaco viene acompañado además por un IDE sencillo, al estilo del propio IDE de VB6, que proporciona las opciones de edición básicas de un sistema de este tipo (coloreado de sintáxis, autocompletado de código, intellisense…) y un depurador relativamente funcional. Cuenta además con un editor visual de formularios muy parecido al de Visual Studio 6 (que generará internamente código basado en Swing) que permite editar fácilmente la capa de presentación de la aplicación.

Jabaco (Editor de Formularios)

Jabaco (Editor de Formularios)

Una opción interesante es que proporciona además la posibilidad de importar y convertir proyectos de VB6 ya existentes, generando el proyecto correspondiente en Jabaco. Tiene por supuesto algunas dificultades a la hora de convertir llamadas a funciones de la API de Win32, funciones que deberemos implementar de alguna otra forma si queremos que la aplicación resultante pueda ejecutarse sobre otros sistemas operativos distintos a Windows.

En cuanto a las opciones de generación de la aplicación señalar que Jabaco nos da la posibilidad de generar la aplicación final en formato EXE o JAR, aunque en el primer caso se acabará llamando igualmente al runtime de java para ejecutar la aplicación.

En la web oficial de Jabaco podéis encontrar más información, capturas de pantalla e incluso un video donde se demuestran algunas funciones de la aplicación.

En fin, un recurso más a tener en cuenta a la hora de migrar viejos proyectos a plataformas más actuales. Espero que a alguien le pueda ser de utilidad.

, , , ,

Para comenzar con las entradas sobre inteligencia artificial hoy os paso el enlace a un libro gratuito sobre inteligencia artificial en java. Este libro nos llega de la mano de Mark Watson y trata el tema desde un punto de vista completamente práctico, presentando las distintas herramientas java y recursos disponibles en el ámbito de cada uno de los conceptos tratados.

Los contenidos del libro son los siguientes:

  1. Técnicas de búsqueda
  2. Razonamiento automático con PowerLoom
  3. Web semántica con RDF, SPARQL, Sesame, OWL…
  4. Sistemas expertos con Drools
  5. Algoritmos genéticos
  6. Redes neuronales
  7. Aprendizaje automático con Weka
  8. Procesamiento de lenguaje natural con WordNet, JAWS…
  9. Extracción de información con Open Calais, Lucene…

El libro [en inglés] se encuentra en formato PDF y se distribuye gratis, bajo licencia Creative Commons, desde la siguiente web:

Mark Watson’s Open Content Free Books

Sin duda, un buen recurso al que merece la pena echar un vistazo y tenerlo como buen punto de partida en el uso de algunas herramientas java relacionadas con la inteligencia artificial.

, , , , ,

Otra de las decisiones que he tomado este año con respecto al blog ha sido ampliar su temática introduciendo algunos temas más específicos que los tratados hasta el momento.

Así, a partir de ahora ire publicando en este blog algunos artículos sobre uno de los temas que más me interesan dentro del campo de la informática actual: la Inteligencia Artificial. Y en principio no me pongo límites, pretendo tratar desde conceptos básicos hasta temas complejos, intentando llegar [siempre que sea posible] a la implementación de cada sistema o técnica y no quedándonos en una mera descripción teórica [algo muy común en las páginas con documentación sobre este tema].

A modo de introducción, enumero a continuación algunos de los campos y técnicas de la Inteligencia Artificial que iran apareciendo por este blog en próximas entradas:

  • Aprendizaje Automático [Machine Learning]
  • Procesamiento de Lenguaje Natural [Natural Language Processing (NLP)]
  • Minería de Datos [Data Mining]
  • Videojuegos [Game IA]
  • Búsqueda Avanzada de Soluciones [AI Search Techniques]
  • Ingeniería del Conocimiento [Knowledge Engineering]
  • Lógica Difusa [Fuzzy Logic]
  • Sistemas Expertos [Expert Systems]
  • Algoritmos Genéticos [Genetic Algorithms]
  • Redes Neuronales [Artificial Neural Networks (ANN)]
  • Árboles de decisión [Decision Trees]
  • Etc…

En breve, publicaré las primeras entradas sobre Inteligencia Artificial.

, , ,

Introducción a ANTLR v3

Esta entrada forma parte de una serie de artículos dedicados al proyecto FKScript, construcción de un compilador y una máquina virtual para un lenguaje de script con C# y ANTLR, entre los cuales podrás encontrar una descripción detallada de cada módulo, documentación técnica, ejemplos y tutoriales de uso que pueden ser de tu interés. No olvides consultar la página principal de FKScript para más información.

Tomando la definición de su propia web, ANTLR es una herramienta que proporciona un marco de trabajo para la construcción de reconocedores, intérpretes, compiladores y traductores de lenguajes a partir de gramáticas enriquecidas con acciones. En resumen proporciona todo lo necesario para el desarrollo de este tipo de sistemas, entre los más importantes:

  • Construcción de analizadores léxicos.
  • Construcción de analizadores sintácticos.
  • Mecanismos de construcción y recorrido de árboles de sintaxis abstracta (AST).
  • Mecanismos de tratamiento de plantillas.
  • Mecanismos de detección y recuperación de errores.

Como ventajas adicionales que diferencian a ANTLR de otras herramientas similares podemos citar la posibilidad de generar el código de salida en diferentes lenguajes como Java, C, C++, C# o Python, y el hecho de disponer de un entorno de desarrollo propio llamado ANTLRWorks que nos permitirá construir de una forma bastante amigable las gramáticas de entrada a la herramienta, proporcionando representaciones gráficas de las expresiones y árboles generados, e incluyendo un intérprete y depurador propio.

Como recursos para empezar a conocer esta herramienta recomiendo los siguientes:

A medida de avancemos en la construcción de nuestro sistema de scripts trataré de ir comentando muchas de las posibilidades que ofrece ANTLR para el desarrollo de cada módulo, publicando ejemplos y por supuesto los fuentes completos del sistema.

, , , , ,

Descargas JRtfTree

En esta sección se mostrarán todas las descargas disponibles para el proyecto JRtfTree:

Versión v0.1.1 beta [143 Kb]

Fuentes completos de la librería JRtfTree v0.1.1b, fichero JAR, y documentación javadoc.

, , , ,