p2 y RCP updates

Hace algunos días, Benno publicaba esta noticia acerca de sus problemas al intentar añadir el mecanismo de actualizaciones de p2 a una aplicación RCP que estaba desarrollando. Aunque hay bastante documentación al respecto, concretamente un tutorial de la propia gente de p2, añadir un mecanismo de actualizaciones no es tarea fácil. Vamos, mejor dicho, no se puede decir a ciencia cierta que sea posible.

Hace unos meses, con el libro de RCP en la mano, y algunos tutoriales (incluido el anterior) abiertos en diferentes pestañas del FIrefox, traté de añadir a una aplicación RCP que estamos desarrollando la consabida opción Check for updates del menú Help.

Básicamente, lo que queríamos, dado que la aplicación estaba enfocada a un tipo muy concreto de usuarios, es que se pudiera actualizar, pero sin tener que seleccionar plug-ins concretos, sino actualizar toda la RCP de manera transparente.

Sin embargo, y tal como le ha sucedido a Benno, tras varios días de comerme la cabeza, decidí abandonar la idea. La aplicación, en su primera versión oficial, no podrá actualizarse. Si es estrictamente necesario, ya le echaremos un vistazo. Y esperemos que para entonces p2 sea otra cosa… o tendremos que recurrir como él a InstallJammer.

Distribuciones personalizadas de Eclipse

Con la aparición de p2, el proyecto EPP (Eclipse Packaging Project) tiene un asistente web para construir tu propia distribución de Eclipse. Puedes escoger entre todos los plug-ins del release train Galileo. Simplemente pincha en el botón Download Wizard para comenzar a definir lo que tendrá tu distribución.

Una vez definida la distribución puedes bajarte un instalador p2 que te permitirá descargar la distribución completa. Para ello extrae el fichero que te has descargado y ejecuta la aplicación p2Installer que viene dentro de la carpeta eclipse. Te aparecerá un cuadro de diálogo como el siguiente:

Si vives en un sistema operativo de 64 bits y la aplicación no arranca, quizá es que está cogiendo la máquina virtual de Java de 64 bits. Tienes que arrancarla con una de 32. En mi Ubuntu, tengo instalado el JRE de 32 bits del Synaptic (busca «ia32» para paquetes de 32 bits) y he de ejecutar la aplicación de la siguiente forma:

p2Installer -vm /usr/lib/jvm/ia32-java-6-sun/jre/bin/

Nota: si estás utilizando Ubuntu 9.10, y tienes problemas con los botones, mira aquí.

It’s nice to be at home

sidelab is now part of Planet Eclipse, so time for presenting and saying something about us…

Micael Gallego and Francisco Gortázar are the two people behind this blog. We’ve been working for the last five years with Java, Eclipse and whatever technology that’s worth the effort, sometimes side by side, others not, but always having interesting talks about software, IDEs and development. So, why not share all the leasons learnt, and all the software developed, under a common umbrella? This is sidelab.

When it comes to Eclipse-related interests some things come to my mind. Let’s remember some of them just to give an overview of who we are…

I remember the LDT days, when IDEs were going multi-language, and people was trying to factor out what all these language had in common in a single framework. We spent hours reading the news from the LDT project. Grammarware has always been one of our interests.

It was also nice when the people at CDT refactored the project allowing others to benefit from their framework to implement their tools. This is how Pascaline could be developed.

In the early days of Eclipse, I recall developing a design pattern detector implemented on top of ASTView. Recently, I’ve tried ASTView just to make sure it is still there.

More recently, we’ve been giving a seminar on Mylyn, and another one on JNA/JNI in Eclipse. And some students are developing plug-ins such as veex, gcj4e, and jmh4e.

And last, but not least, Eclipse allows you to do things like EclipseGavab, the Eclipse distribution we’ve been using to teach programming: JDT, CDT, EclipseFP, Subversive, ECF, Pascaline, PFCDT, lots of plug-ins doing their best to ease students learn several paradigms, languages and tools. Eclipse has been used for almost 4 years as the unified IDE in Computer Science…

Great job by great people, let’s see if we can put our two cents in for the community.

Gadgets sociales en Eclipse

Si el otro día comentaba mi impresión general acerca de las redes sociales y la necesidad de algún tipo de integración de las mismas, el otro día me encontré con esto. Se trata de un proyecto bajo el paraguas del proyecto e4 que permite añadir OpenSocial gadgets (como los típicos gadgets de iGoogle) a una vista de Eclipse.

Los gadgets sociales son pequeños componentes web que tienen la particularidad de poder añadirse a webs o a otros gadgets. Esta es la forma en la que diferentes redes sociales pueden colaborar entre sí. Por ejemplo, mi cuenta LinkedIn muestra mis tweets en un gadget al efecto, y tengo una cuenta en HootSuite para integrar Tweeter, Facebook y LinkedIn, de forma que puedo cambiar mi estado simultáneamente en estas tres redes. Esta entrada en el blog de Boris Bokowski da algunos detalles más.

Al parecer la mayoría de los contenedores de gadgets están basados en Apache Shinding. Es decir, que lo que yo estaba pidiendo anteriormente ya existe de alguna forma, y la mayoría de las redes sociales (y otras webs) contemplan esta posibilidad de interactuar unas con otras. Esto es especialmente interesante, porque parece que por una vez es el usuario el que decide cómo componerlas y no le viene impuesto.

Volviendo al tema que nos ocupa, la gente detrás del proyecto e4 ha estado trabajando en la integración de gadgets en Eclipse, con un resultado que ya es al menos usable. Es interesante ver qué tipo de cosas nos va a permitir e4. La web de E4/OpenSocialGadgets nos sugiere algunos gadgets para probar, pero en principio, podemos añadir cualquier gadget.

Si tienes cuenta de iGoogle, puedes probar con los diferentes gadgets. Busca algún gadget que te parezca interesante y copia la url (la url debería apuntar a un fichero xml que describe el gadget).

Nota: no he sido capaz de ejecutar e4 bajo mi Linux 64 ni con la JVM de 32 ni con la de 64. Algún problema con las librerías nativas de 64 bits, supongo.

SWT Browser: ¿el navegador definitivo?

No, no es el navegador definitivo, pero es muy versátil. El componente SWT Browser encapsula un navegador en un componente SWT que se puede utilizar en cualquier interfaz de usuario basada en SWT. Llegados a este punto, parece algo bastante útil. Permite mostrar páginas web en aplicaciones de escritorio, simplemente incluyendo el componente en la interfaz de la aplicación.

Pero SWT Browser es mucho más. En este post, Lars Voggel muestra cómo ejecutar código Javascript en un componente SWT Browser. También muestra cómo llamar a código Java de nuestra aplicación desde el código Javascript que ejecuta el navegador.

Cada vez es más frecuente que nuestra aplicación se integre con servicios que provienen de la web: Google Maps, redes sociales, etc. En este sentido, SWT Browser nos puede ayudar enormemente en esta tarea.

Liberada la versión 101.11.1100101

Ahora que finaliza el año, comienzan a surgir las típicas listas de los 10 desarrollos claves del año, las diez adquisitiones más importantes del año, los diez fracasos más sonados, y así con tantos topics como se nos ocurra. Este año además, finaliza la década. Esto quiere decir que a todas estas listas, habrá que añadir las referidas a los mismos topics, pero a nivel de la década.

Si tuviéramos una lista referida a Java, y en concreto a los JSR (Java Specification Requests), hay uno del que se ha hablado bastante este año: JSR 294. JSR 294 pretende dividir la API Java en módulos. JSR 294 incluiría modificaciones en el lenguaje Java para permitir especificar dependencias entre módulos. Si uno está desarrollando una aplicación que produce logs, la aplicación puede definir una dependencia con el módulo java.logging.

Típicamente, la aplicación, además de indicar que depende de un determinado módulo, necesitará indicar también una versión o conjunto de versiones de ese módulo. Dado que uno puede depender de clases que sólo se incorporaron al módulo a partir de cierta versión, se hace necesario definir cuál es la mínima versión necesaria. Además, de vez en cuando las APIs se rompen por pura evolución (perdiendo la compatibilidad hacia atrás), por lo que lo habitual es que la versión sea realmente un rango de versiones.

En Eclipse, por ejemplo, los diferentes módulos especifican sus dependencias con un identificador de módulo (que debe ser único) y un conjunto de cuatro segmentos que identifican la versión concreta del módulo. Los tres primeros segmentos son numéricos, y se denominan major, minor y service. El último segmento es alfanumérico y se denomina qualifier. Realmente, los tres primeros son los importantes (de hecho las versiones oficiales de Eclipse normalmente sólo exponen estos tres primeros números).

El segmento major indica la versión de la API que contiene el producto. Es de esperar que si nos vasamos en Eclipse 3.x.x nuestro plug-in debería funcionar tanto en Eclipse Ganymede (3.4.x) como en Eclipse Galileo 3.5.x) o incluso en el futurible Eclipse Helios (3.6.x).

El segmento minor indica las características «visibles» presentes en el producto. Este número no se refiere a la API si no a las funcionalidades del producto. Un cambio en el minor segment normalmente significa que se ha modificado/añadido alguna funcionalidad del producto, pero no la API.

El segmento service indica características normalmente no visibles. Con este segmento se suelen identificar por ejemplo cambios debidos a la resolución de bugs en el producto.

El segmento qualifier se utiliza para identificar versiones «nocturnas», de integración, milestones, etc. También se utiliza para dotar a la versión de información como la fecha y hora de construcción del producto.

Y aquí empiezan los problemas. Mientras que en plataformas como Eclipse la especificación de versiones tiene una semántica clara, en el JSR 294 barajan un sistema de versiones que no dota de ninguna semántica a los diferentes segmentos. Sería posible especificar versiones utilizando por ejemplo números binarios (como el título de este post). Este no es un caso aislado, y determinados proyectos software muy conocidos utilizan sistemas de versionado con poca o nula semántica.

Alex Blewitt ha estado escribiendo algunos posts sobre el tema. Son muy divertidos y comenta los fantasiosos sistemas de versionado que podrían crearse atendiendo a la especificación de JSR 294.

Me ha llamado especialmente la atención el sistema basado en los números irracionales. Lo más asombroso de todo es que haya software que utilice efectivamente este sistema. ¿Qué sistema de versionado te gusta más?

Más componentes SWT

Habitualmente, si uno está desarrollando plug-ins, en algún momento necesita lidiar con la interfaz de usuario. En ese momento puede que nos demos cuenta de que los componentes SWT de los que disponemos no nos satisfacen totalmente, o directamente no existe un componente adecuado para la información que queremos mostrar.

Bueno, pues esto les pasa habitualmente a los desarrolladores de los diferentes proyectos Eclipse. Por ello han decidido que en lugar de que esos componentes queden ocultos en los proyectos donde se originaron, se agrupen dentro del proyecto Nebula. Nebula es un proyecto Eclipse (como lo puede ser CDT o JDT) destinado a albergar componentes SWT y JFace que se originan tanto en otros proyectos Eclipse como en proyectos independientes.

Así que si has hecho algún componente «customizado» SWT o has construido algún componente JFace para algún propósito específico, puedes publicarlo en el proyecto Nebula.

Planet Eclipse multi-lenguaje

En una comunidad como lo es la comunidad Eclipse se puede colaborar de muchas maneras. A veces parece que la única forma de colaboración es la de escribir código, pero en realidad se puede contribuir de muchas otras formas. Por ejemplo, hay mucha gente que escribe documentación en forma de páginas en un wiki, artículos, cursos o presentaciones, webinars, podcasts o demostraciones, o bien ayuda a otros en los foros, o comunica bugs o comenta sobre los bugs abiertos.

En Planet Eclipse estamos discutiendo la posibilidad de hacer de este agregador de feeds sobre el mundo Eclipse un agregador multi-lenguaje. Anímate y deja tus comentarios al respecto en el Bug #126525. Necesitas registrarte en Eclipse Bugzilla, pero lo puedes hacer simplemente con una cuenta de correo electrónico válida. Eso sí: la discusión es en inglés y hay que respetar ciertas normas de conducta. Para los que no han utilizado anteriormente Bugzilla este enlace es de lectura obligada.

¡Hay muchas formas de hacer Eclipse!

Vota el splash screen para este mes de Diciembre

Eclipse también se contagia del espíritu navideño que se puede respirar en estas fechas. Y lo hace personalizando el splash screen de la versión de integración que se construirá la semana que viene. Puedes votar el splash que más te guste… pero tienes que hacerlo antes de las 11 (GMT+1) de la noche del lunes. Pensaba que los dos primeros serían los más votados, pero me equivocaba. Vota y conocerás los preferidos.

BTW, el color verde de algunos de ellos me recuerda al cartel de nuestra charla de JNA y JNI (utilizando CDT y JDT):

Compendio de problemas con Eclipse en Ubuntu 9.10

Parece que Ubuntu 9.10 está siendo un quebradero de cabeza para los usuarios de Eclipse. Desde luego, yo me bajo del burro de Ubuntu 9.10 (y me vuelvo al 9.04) antes que bajarme del de Eclipse, no sé vosotros.

La cuestión es que parece haber tres problemas diferentes, que pueden afectar a diferentes versiones de Eclipse, y que pueden darse de manera simultánea, a saber:

  • Puede ser que los botones se comporten de manera errónea: se pueden pulsar, pero no realizan la acción asignada. Al sacar el ratón del botón, éste vuelve a su posición original sin hacer nada de utilidad. Este problema afecta a todas las versiones de Eclipse, y está resuelto a partir de la 3.6M3 y en la 3.5.2 (disponibles aquí). Si no tienes opción de cambiar de versión de Eclipse, porque no quieres una versión en desarrollo o porque necesitas esa en concreto, entonces este problema se puede solventar: a) utilizando el teclado: pulsando Enter se ejecuta la acción asociada al botón seleccionado; b) ejecutando eclipse desde un script que contenga lo siguiente:

  • #!/bin/sh
    export GDK_NATIVE_WINDOWS=1
    /opt/eclipse-3.5/eclipse

  • Puede ser que no se muestran los iconos en los menús de Eclipse. Los menús sin los iconos parecen vacíos. Esta cuestión se solventa activando los iconos en los menús en Ubuntu. Menú Sistema > Preferencias > Apariencia. En la pestaña Interfaz activar la opción «Mostrar iconos en los menús». Si tienes un Ubuntu en inglés, guess!
  • Puede ser que Eclipse parezca querer arrancar (es muy voluntarioso) pero que el resultado sea un cuadro de diálogo gris (que además no se puede cerrar). Este error yo no lo he sufrido personalmente, pero ha habido gente que me lo han comunicado en relación con EclipseGavab (de esta distribución hablaremos en otro momento). A mi EclipseGavab me funciona perfectamente en Ubuntu 9.10 salvo por los dos problemas anteriores. Este problema se debe al componente SWT Browser y la versión que espera del XULRunner (en el que está basado) que viene instalado en el sistema. Versiones de Eclipse entre la 3.4M5 y la 3.4RC2 requieren versiones de XULRunner anteriores a Mayo. Versiones de Eclipse >= 3.4RC3 requieren versiones de XULRunner posteriores a Mayo:
  • – swt 3.4M5-3.4RC2 with xulrunner 1.9/firefox 3.0 betas from before May
    – swt 3.4RC3 and newer with xulrunner 1.9/firefox 3.0 betas newer than early
    May

    (Fuente: https://bugs.eclipse.org/bugs/show_bug.cgi?id=235020#c2)

    A ver si entre todos evitamos tener que volver al 9.04…

    Update:
    para solucionar el último problema, podéis introducir lo siguiente en el eclipse.ini:
    -Dorg.eclipse.swt.browser.XULRunnerPath=/dev/null