Mostrando entradas con la etiqueta Eclipse. Mostrar todas las entradas
Mostrando entradas con la etiqueta Eclipse. Mostrar todas las entradas

martes, marzo 16, 2010

R-Eclipse: some screenshots

En el post anterior comentaba someramente la arquitectura y componentes de R-Eclipse además de las principales herramientas que he utilizado durante el desarrollo del mismo. En esta entrada os mostraré algunas capturas de pantalla que ilustran el aspecto general del IDE así como alguna de sus funcionalidades más relevantes.

  • Inclusión de un nuevo intérprete en el entorno:

  • Primera página en la creación de un proyecto R:

  • Compleción de código: Intellisense y plantillas

  • Outline view

  • Script explorer

  • Editor de código fuente R

  • Ejecuciones de tipo R

Las capturas anteriores dan una idea general de las funcionalidades principales del entorno de desarrollo (podéis acceder a más capturas de pantalla en el módulo de documentación disponible en el sistema de control de versiones).

lunes, marzo 15, 2010

R-Eclipse 1.0

Hace un tiempo comencé a construir un entorno de desarrollo integrado (IDE) para el lenguaje de programación R, y finalmente he decidido liberar una primera versión. El componente dista mucho de ser perfecto (y completo) pero sinceramente me siento muy orgulloso del trabajo realizado.

La herramienta está basada en la arquitectura de plugins de Eclipse, constando de cinco módulos (plugins/bundles) que a continuación describo de manera muy resumida:
  • Plugin r.core: núcleo de la aplicación. Incluye el analizador léxico y sintáctico del lenguaje, infraestructura básica para la construcción y recorrido del AST, indexado, mixin parsers, etc.
  • Plugin r.completion: añade a la herramienta la capacidad de realizar la compleción de código.
  • Plugin r.formatter: añade a la herramienta la capacidad de ordenación e indentación del código fuente.
  • Plugin r.launching: añade a la herramienta la capacidad de ejecución integrada de los programas R.
  • Plugin r.ui: contiene la mayor parte de componentes gráficos de la herramienta. Gestión de preferencias de formateo/indexación, editor R, preferencias de compleción de código, resaltado de palabras reservadas, templates, etc
  • Adicionalmente existe un módulo de documentación que contiene información de diversa índole
He utilizado maven como herramienta de gestión de dependencias y control del proyecto aunque en este mismo instante está un poco "manga por hombro" puesto que he estado haciendo varias pruebas para la generación de la feature final mediante  Buckminster.

Soy consciente de la existencia de varios bugs (y todos los que yo no habré detectado :) ) y de muchas características que podrían añadirse para mejorar la herramienta. A continuación resumo una pequeña lista de defectos/mejoras:
  •  Tal y como indicaba anteriormente, intentaré migrar por completo a Buckminster.
  • Añadir más pruebas (tanto unitarias como de integración)
  • Mejorar la compleción de código: ampliar los lugares donde se habilita la compleción del mismo y mejorar algunas de las características ya existentes.
  • Inclusión de un motor de ejecución remoto, de modo que se permita configurar un intérprete en una máquina diferente que sea capaz de ejecutar nuestros scripts R.
  • Inclusión de una consola interactiva. En la actualidad la consola simplemente integra los resultados de las ejecuciones de nuestros scripts, pero no permite la interactividad.
  • Incluir un depurador de código. Puede que sea la más complicada, pero, personalmente, creo que es la características más interesante junto con la ejecución remota descrita en el punto anterior.
  • Programación visual: diagrama R integrado. Creación de un diagrama que nos permita construir nuestros programas de manera gráfica mediante una paleta de funcionalidades. Estaría basado en Eclipse GMF y puede que entonces también se distribuyera la herramienta como cliente rico (Eclipse RCP)
  • . . . . 
Se puede obtener acceso al código fuente en modo lectura desde la siguiente URL: http://reclipse.googlecode.com/svn/trunk/. Si alguien quiere participar le puedo dar acceso al repositorio en modo escritura.

Hasta pronto!

PD: en la siguiente entrada añadiré unas capturas de pantalla para que se pueda tener una perspectiva general de la herramienta

viernes, noviembre 20, 2009

JDT Weaving Service (y II)

Tal y como os había prometido en el post anterior, ahora os dejo un pequeño proyecto con un único archivo que contiene un programa de ejemplo del lenguaje que nos hemos inventado en la entrada previa.

Podeis obtener una copia de trabajo desde la siguiente URL del servidor subversion en el que está alojado:

http://reclipse.googlecode.com/svn/trunk/com.blogspot.miguelinlas3.ajdt.demoexample

Gracias al plugin cosntruido en la entrada anterior, el archivo de código fuente obtenido en el checkout anterior se visualizaría del siguiente modo:


Como veis, hemos integrado nuestro lenguaje de ejemplo en el modelo JDT de Eclipse de una manera relativamente sencilla.

Posiblemente ahora comienze a tener algo más de tiempo libre así que intentaré aumentar la frecuencia de los posts. Puede que en las siguientes entradas cambiemos un poco estas últimas entradas dedicadas a los lenguajes y sus entornos y veamos algo más "empresarial".

Hasta pronto!

miércoles, noviembre 18, 2009

JDT Weaving Service

Tal y como comentabamos hace uno o dos posts, algunos equipos como AJDT o Scala IDE construyen el entorno de desarrollo para Eclipse basándose en el servicio de tejido de JDT (JDT Weaving Service).

Vamos a realizar un pequeño ejemplo para nuestro lenguaje (ficticio) de programación Demo, que corre sobre la máquina virtual de Java, integrándolo en el modelo JDT (voy a asumir que se disponen de una serie de conocimientos básicos de Eclipse).

En primer lugar necesitaremos tener disponibles las siguientes dependencias en nuestro entorno de desarrollo:
  • Eclipse 3.5 o superior.
  • AJDT 1.6.4 o superior (http://download.eclipse.org/tools/ajdt/35/update).
  • Servicio JDT de weaving debe estar activado.

Con el objetivo de facilitar el seguimiento de este pequeño ejemplo creo que será mejor disponer del proyecto desde el principio, por lo que, desde vuestro cliente subversion preferido obteneis una copia de trabajo desde la siguiente dirección:

http://reclipse.googlecode.com/svn/com.blogspot.miguelinlas3.ajdt.demo/trunk/

(y haceis un Import del proyecto en el Eclipse si habeis obtenido la copia de trabajo desde un cliente externo).

Una vez disponemos del proyecto accederemos al archivo plugin.xml y veremos los siguientes puntos de extensión:

Los puntos de extensión org.eclipse.contribution.weaving.* nos permiten extender el modelo JDT, integrando en él los componentes de nuestro lenguaje.

La clase principal es DemoSourceProvider, la cual contribuye al modelo mediante el punto de extensión org.eclipse.contribution.weaving.jdt.sourcetransformer.

El objetivo principal de la clase anterior consiste en traducir nuestro lenguaje (completamente absurdo :) ). Si la definición de un archivo de código fuente de nuestro lenguaje fuese algo como lo siguiente:

name: MyDemo {
x: 10
y: 5
z: 12
}

el traductor intentará convertirlo en algo como lo que sigue:

class MyDemo {
int x= 10;
int y= 5;
int z = 12;
}

Intentad darle un vistazo al código (son cuatro clases con muy poco código) y mañana os dejaré un proyecto de ejemplo que haga uso de esta construcción para que veais que realmente se integra nuestro absurdo lenguaje!

Hasta pronto!

jueves, noviembre 05, 2009

New Languages. Building IDE's

En los últimos años han surgido muchos lenguajes similares a Java que se ejecutan sobre la propia máquina virtual de este último (JVM) lo cual es un indicador bastante fiable de cual será el futuro del desarrollo de aplicaciones sobre esta plataforma.

Sin embargo, Eclipse y su solución JDT, no ofrecen soporte para la integración de estos nuevos lenguajes en su modelo subyacente. Por ejemplo, no existe un modo de incluir jerarquías de tipos,jerarquías de llamadas, etc de manera directa.

Una aproximación utilizada por muchos entornos de desarrollo de lenguajes actuales, como por ejemplo el caso de Scala, es la utilización de servicio de tejido de JDT. Las características principales son:

  • Utiliza AspectJ añadiendo puntos de unión al modelo JDT
  • Se encapsula en puntos de extensión de Eclipse, haciéndolo extensible a terceras partes.
  • Utiliza un proyecto de Eclipse conocido como Equinox Aspects que soporta el proceso de tejido en tiempo de carga en un entorno OSGI.
La construcción de entornos de desarrollo para otro tipo de lenguajes, que podríamos denominar de scripting, como puede ser JavaScript,Python,Tcl o Ruby se puede basar en un enfoque diferente al anterior, mediante el uso del proyecto DLTK de Eclipse (www.eclipse.org/dltk).

En próximas entradas analizaremos las claves de la construcción de un IDE para el lenguaje de programación R (www.r-project.org).

Hasta pronto!

jueves, diciembre 25, 2008

Spring DM and Eclipse RCP

He creado un pequeño screencast en el que se puede ver un modo sencillo de interacción entre una aplicación Eclipse RCP y Spring Dynamic Modules.

Es mi primer screencast y no tengo demasiada pericia con los programas de video, por lo que no he modificado el video para añadirle algún comentario explicativo. Probaré algún programilla como VirutalDub o las propias anotaciones disponibles en YouTube con el objetivo de ir mejorando de cara al futuro.

De momento os dejo con esta primera entrega. Espero que os guste:




En el equipo local se ve mucho mejor que colgado en la web. Desde YouTube se puede descargar el archivo original.

Hasta pronto.

miércoles, julio 23, 2008

SpringDM,Maven y Eclipse: Introduction

No pretendo ni mucho menos dar una explicación detallada (tampoco podría) de la especificación OSGI, ni de maven ni Spring Dynamic Modules. Únicamente me gustaría dar una brevísima introducción y un pequeño ejemplo de uso de estas tecnologías para la construcción de aplicaciones distribuidas.

OSGI Service Platform determina una arquitectura común para proveedores de servicios,desarrolladores, . . . . para desarrollar, desplegar y trabajar con servicios de manera coordinada.

OSGI Framework compone el núcleo de las especificaciones, facilitando un framework Java de propósito general que permite el despliegue de aplicaciones (conocidas como bundles). De manera muy simplificada, nos facilita un entorno dinámico de ejecución de aplicaciones en que podemos instalar,actualizar o eliminar aplicaciones "en caliente". Modularidad y versionamiento son otras de las características principales de esta especificación.

La arquitectura establecida por el framework anterior es la siguiente:

Spring Dynamic Modules, de ahora en adelante SpringDM, nos permite construir aplicaciones basadas en Spring de modo que puedan ser desplegadas en un entorno OSGI (trabaja con Equinox,Felix y Knopflerfish) ya hacer uso de todoos los servicios ofrecidos por el mismo.

La combinación de estas dos tecnologías nos ofrece innumerables ventajas de las que podríamos enumerar algunas de ellas:
  • Modelo de programación sencillo (y al que estamos habituados) el cual nos permitirá explotar todas las capacidades de la plataforma OSGI.
  • Capacidad de desplegar múltiples versiones de un mismo módulo de manera concurrente.
  • Instalación, actualización y eliminación dinámica en el entorno de ejecución.
  • Búsqueda y utilización de servicios ofrecidos por otros módulos desplegados en el sistema
  • . . . . . . (muchísimos más)
Como ya os supondreis, ésto no es ni una millonésima parte de las capacidades ofrecidas por estas tecnologías aunque creo que es una visión un poquito genérica que podría servir como punto intrductorio.
En la siguiente entrega construiremos un bundle que correrá bajo Equinox y ofrecerá un servicio. Asimismo construiremos otro bundle adicional, que correrá bajo el mismo entorno, y utilizará el servicio ofrecido por el primero de ellos.

En el futuro, espero que no demasiado lejano, intentaremos adentrarnos un poquito en el usode estas tecnologías para la construcción de clientes ricos distribuidos basados en Eclipse RCP.

martes, mayo 15, 2007

Como bien sabreis una gran parte de los desarrolladores Java utilizan el Eclipse. Pero como no sólo de Java vive el hombre :) también es posible utilizar dicho IDE para construir aplicaciones C++ y así aprovecharnos del fantástico entorno de desarrollo y demás opciones que Eclipse nos brinda. A través de este pequeño tutorial intentaré explicar como instalar el plugin correspondiente y crear un pequeño y sencillo proyecto demostración. Manos a la obra:

En primer lugar tenemos que instalar el plugin CDT. Para ello nos vamos a la ventana Help->Software Updates->Find and Install como muestra la siguiente imagen:



En la pantalla que nos aparece seleccionamos la opción: Search for new features to install. A continuación añadimos el sitio remoto desde donde descargaremos el plugin CDT: la siguiente imagen ilustra como configurar el sitio remoto.



Una vez seleccionado el plugin no tenemos más que darle a siguiente y esperar que el proceso finalize.

Estamos listos para crear nuestro primero proyecto C++ en Eclipse. Para ello nos vamos al menu File->New->Project y obtendremos una lista de todos los tipo de proyectos que podemos crear (entre ellos los de C++).



Nos aparecen dos tipos de proyectos: Managed Make and Standard Make. En el primero de ellos te ayuda a crear los makefile mientras que en el segundo tenemos que escribir el makefile nosotros mismos (personalmente prefiero la segunda opción).
Seleccionamos la opción que mejor se adapte a nuestras necesidades y tendremos un nuevo proyecto C++ listo para empezar. A partir de ahora tenemos disponibles muchas de las facilidades que nos ofrece eclipse: depurador, compleción de código,una vista similar a la de tareas Ant donde podremos añadir los diferentes targets de nuestro makefile, conexión a subversion de manera sencilla (ver plugins Subclipse o Subversive), . . . . . . . . . . . . . .

Una vez instalado el plugin y creado el nuevo proyecto podremos configurar todas las opciones en la ventana de preferencias del proyecto:



No explicaré todas las opciones porque podría tirarme aquí el resto de la mañana y , aun así, no serviría de mucho. Son bastante intuitivas y muy fáciles de configurar: selección del parser que nos genera los ejecutables,compilador a utilizar, declaración de variables de entorno, ......

Espero que os sirva de ayuda.

Hasta pronto!
Un abrazo!