viernes, diciembre 31, 2004

Generador de portales en Java y en español

Es el motor creado para mostrar javahispano.org, lo han hecho ellos y es BSD.

http://canyamo.sourceforge.net/

Además también está siendo usado para el cliente web de jLibrary, una interesante aplicación para catalogar documentos.

miércoles, diciembre 22, 2004

jLibrary

Puede ser interesante para la gestión documental que queremos hacer para artículos.

http://jlibrary.javahispano.net/

viernes, diciembre 17, 2004

User-defined logical structures

En eclipse ya se pueden definir formas más adecuadas para mostrar en depuración los valores de las variables. Especialmente útil para colections, puede ampliarse a cualquier clase que construyamos.

Esto es lo que pone en la lista de mejoras:

User defined logical structures

The Java debugger now lets you control what gets shown in the variables view for different types of objects. For example, collections can be displayed as a simple array of values, instead of the gory details on how that particular collection object is implemented.

This is done from the Java > Debug> Logical Structures preference page, where you associate with a specific class or interface either a single expression (for example, this.toArray()) or a series of named expressions. When the object is to be shown in the variables view, the expressions are evaluated to produce the values to display.

3D Interactivo??

https://ensmer.dev.java.net/

¿Que meter en un generador de compiladores?

Pues eso, antes de que se me olvide hay que recordar que en el compilador hay que ver:

- El uso de XML para definir o especificar el compilador
- El uso de anotaciones para definir o especificar el compilador
- El uso de AOP para constuir las acciones semánticas del compilador
- Hay que usar el patrón observador jerarquico y compararlo con AOP.
- Usar la separación entre la API pública del AST formada por interfaces y las clases de implementación. Sobre todo por la herencia múltiple y porque no se quieren publicar a las herramientas que hagan uso de él ciertos métodos usados internamente.
- ¿Cómo representamos en el AST los errores sintácticos?. ¿Haciendo objetos dummy que elevan RuntimeExceptions cuando se crean como resultado de una recuperación de errores?
- ¿Cómo usar gclib para crear visitadores en tiempo de ejecución de forma eficiente?
- Hay que tener un formato para serializar un AST con los atributos establecidos en disco.
- Hay que ver cómo reconocer bajo demanda el fuente para que no esté siempre en memoria si no es necesario. Puesto que el AST estará formado por objetos normales, habrá que usar reflection o algo. La idea es que en vez de modificar una clase del AST el desarrollador creará una clase con una referencia a la del AST. De forma que sea posible dejar en memoria estos objetos y serializar el AST.
- Hay que usar un nuevo tipo de visitadores que permitan ejecutar acciones para los objetos de determinadas clases. Pero no recorrer el árbol completamente, si no sólo los objetos de las clases "marcadas". Por ejemplo, realizar un fase de búsqueda previa y luego ejecutar las acciones semánticas. El objetivo es mantener en caché la lista de objetos para que las acciones posteriores se realicen más rápidamente.
- Realizar el patrón observer jerarquico sólo para algunas clases. De forma que no tiene porque realizarse en todos los objetos.
- Para que la gente sepa como usar la API del AST. Se debe proporcionar una herramienta que transforme un código válido en el lenguaje de programación en un código Java que permita construir ese mismo código fuente usando la API, eso ayudará mucho a comprender la API.
- Hay que tener el soporte de ficheros y directorios en la propia API generada por el compilador, de forma que los visitadores puedan recorrer estos elementos como objetos del AST.
- Por supuesto, los ficheros se pueden mapear a buffers de texto, es decir a componentes de texto Swing.
- Compilación incremental
- Generación de pretty-printers
- Modificar el orden de recorrido de los visitadores de una forma más ordenada. Por ejemplo, si en la lista de miembros aparecen intercalados métodos, atributos y otros tipos, puede ser interesante recorrer todos los miembros de un tipo todos a la vez. Además, este tipo de ordenaciones deberán poder ser accedidas a travás de métodos a listas de esos tipos. De una forma automática.
- Soporte para una sintaxis que permita especificar consultas sobre el código. Algo así como patrones de código que se "acojen" a códigos específicos. Es decir, crear una API de búsqueda genérica, independiente del lenguaje.
- Objetos que no están en el fuente pero que son "puestos automáticamente" por el compilador, por ejemplo, el constructor sin parámentros, la llamada al constuctor de la clase padre, el import de java.lang, etc... Es decir, hay que poder configurar en el visitador si se recorren estos objetos o no, porque no están realmente en el código. La clase Node, debe disponer de un método para saber si ese objeto es ficticio o no.
- Dejar la gramática disponible en runtime (si es necesrio). Esto podría permitir metaprogramación pero más semántica, más orientada a la gramática. Por ejemplo para crear gráficos más simples, vistas en modo árbol, etc... Hay que ver cual es la mejor forma de representar esta gramática.
- Hay que hacer que los errores sintácticos sean (en la medida de los posible) cercanos a la especificación de alto nivel por interfaces. Es decir, hay que usar nombres coherentes para los interfaces, y los errores tienen que referenciarlos a ellos, no a la gramática.
- El sistema de proporcionar formas para la depuración de la gramática. De alguna forma sencilla y estándar el usuario debe poder ver el progreso de reconocimiento. Por ejemplo proporcionar una miniherramienta tipo ENVIDO pero para depurar la gramática.
- Se deben proporcionar formas de reconocer partes de la gramática aisladas. Creando talblas nuevas (poco eficiente pero rápido de desarrollar) o bien de forma integrada al analizador LALR.
- Investigar las formas de representar un AST "ambiguo". Es decir, un AST que realmente no es un árbol si no muchos árboles en ciertas partes. Se podría mantener en memoria la primera alternativa de las posibles y luego ir cambiándolas bajo demanda, para probar su viabilidad con métodos semánticos.


Registro para saber lo que el alumno sabe de Java

La idea es usar el registro de uso para analizar la forma de aprendizaje de los alumnos. No sólo evaluando con el resultado final de un ejercicio, si no por el proceso que lleva a su resolución.

Grabar el uso de la herramienta

En JIdea se registra el uso de la herramienta para alertar al usuario de las características que usa y las que no usa. Sobre todo para que no pasa que llevas mil años usando un programa y llega alguien y te descubre una funcionalidad que llevabas desde el principio buscando y nunca habías encontrado.

Proyecto Educativo de Eclipse

http://eclipse.org/ecesis/

miércoles, diciembre 15, 2004

Comparativa de los sistemas de pesistencia en Java, desde Sun

Muy buena comparativa de los sistemas de persistencia en Java. Además está realizada por Sun y se supone que se ha realizado para la próxima generación de sistemas de persistencia que están preparando, que (se supone) unificará todos estos mecanismos o al menos los integrará.

http://research.sun.com/techrep/2004/smli_tr-2004-136.pdf

domingo, diciembre 12, 2004

http://cglib.sourceforge.net/

Herramienta para generar código en tiempo de ejecución. Es algo así como la metaprogramción de escritura, no sólo de lectura cómo reflection de Java.

API para crear un pool de conexiones JDBC

http://proxool.sourceforge.net/

¿Que sistema de persistencia usar?

Sólo JDBC, DODS, JDO, EJB, Hibernate, Castor????

Habrá que mirarlos todos, de una vez por todas, para hacerse una idea de lo que usar cuando necesitemos persistencia.

viernes, diciembre 03, 2004

Groovy: Evolución de Java en Java

Un lenguaje con muchas mejoras al lenguaje Java, ejecutado en la JVM y como Servlet, desde el que se pueden usar APIS en Java y con integración con Eclipse, JIdea, etc...

¿Que mas se puede pedir?

Es open source y está siendo desarrollado en el JCP (Java Community Process)

http://groovy.codehaus.org

Apache BSF II (Debugger Framework)

Debugging support has been added to BSF over the last year. In its current form, only debugging of Javascript in JSPs is supported. The focus has been to design an API that would permit a generic debugging framework for multiple scripting engines; however, this has remained an goal for BSF 3.0. Included in the debugging support for BSF 2.3 is a rudimentary command-line debugger named jsdb, which acts as a client to a debugging server that is managed by the BSFManager.
An example of a production debugger using the BSF debugging engine is at http://www.eclipse.org/.

Apache Bean Scripting Framework

http://jakarta.apache.org/bsf/

Bean Scripting Framework (BSF) is a set of Java classes which provides scripting language support within Java applications, and access to Java objects and methods from scripting languages. BSF allows one to write JSPs in languages other than Java while providing access to the Java class library. In addition, BSF permits any Java application to be implemented in part (or dynamically extended) by a language that is embedded within it. This is achieved by providing an API that permits calling scripting language engines from within Java, as well as an object registry that exposes Java objects to these scripting language engines.

Entre otros, BSF soporta:

JavaScript
Java
XSL

Ideal para hacer herramientas educativas para estos lenguajes.

Espiritu de Java

"It's more important that Java programs be easy to read than to write."
- Graham Hamilton,
Sun Fellow in the Java Platform Team, Sun Microsystems

We're starting to think about potential language features for Dolphin. I've been reflecting on the principles that James Gosling so brilliantly infused into the original Java language and which we've tried to preserve as it evolves. The core principle involves making programs easy to understand. The Java language is powerful but simple, easy to read, with a consistent, clear meaning. It's more important that Java programs be easy to read than to write. That may sound trivial, but it isn't.

Looking back at C++, there were a whole set of factors at work that make reading source code difficult: First, the C++ language itself became very complex. Many new ideas were added incrementally and, unfortunately, the seams show. Second, the C++ language consciously chose to emphasize "power" and "flexibility". That sounds nice initially, but, unfortunately, it also means that there is very little you can rely on and almost any simple program statement can have weird side effects. In C++ the statement "a = b;" must be approached with caution. Finally, the macro pre-processor reinforced the "power" aspect, but again at risks to comprehension.

The Java language took a very different approach through attempting to be an unobtrusive language. As a developer, you should be able to focus on what your application code is doing and on how it interacts with libraries. Code should do what it seems to do -- developers shouldn't need to worry about clever language side effects or about what "=" means this week.

This focus on clarity and readability has affected the Java language in deep ways. It has led to a focus on keeping the language simple and clear. It has led to fairly conservative uses of syntax and minimized the places where user defined code can modify base semantics. For example, there's a strong focus on having "one language" which means the same thing everywhere. A Java developer should be able to start reading a chunk of new Java source code and rely on a consistent set of language semantics. So part of Sun's investment in the Java language includes a strong focus on both a very precise specification (currently driven by Sun's esteemed computational theologist Gilad Bracha) and also an extensive language compatibility test suite.

Principles are good, but so are pragmatics. If we stuck too rigorously to our principles, we'd probably never dare make any changes to the language. It is natural for things to evolve, and we want to be able to make developers more productive, within the spirit of the language. But we are also very conscious that adding individually useful features may slowly undermine the deep values of the language.

Looking forward to Dolphin, I suspect we'll stay conservative on changes, as each change adds complexity. We're unlikely to add a macro preprocessor or any general form of operator overloading, or full-blown AOP, or any other mechanism for redefining and obscuring core semantics. But we will look for new language ideas that help developers with common problems. For example, one area I'm personally interested in is some kind of "friends" import mechanism to make large multi-package projects easier to manage.

jueves, noviembre 25, 2004

Wiki con Java

http://yawiki.jzonic.org/wiki.jz?page=yawiki:WelcomePage

Portal de trucos con Swing

http://www.desktopdeveloper.com/

Otro framework Web/Swing

http://swingwork.codecrate.com/

Framework Swing/Web/DDBB

http://www.springframework.org/

Convertir un Jar en un Exe (sin VM)

http://jsmooth.sourceforge.net/index.php

Libro de Swing Avanzado

http://www.sourcebeat.com/TitleAction.do?id=10

Página sobre generadores de compiladores en Java

http://java-source.net/open-source/parser-generators

Es una página con referencias a varios generadores de compiladores en Java. Los generadores son los ya conocidos ANTLR, JavaCC, SableCC, JFlex y CUP, pero además hay algunos otros que puede ser interesante tener en cuenta.

En cualquier caso, la referencia parece estar actualizada, es decir, que si algo interesante sale en ella está bien tenerla en cuenta.

Domain Specific Language Debugger Framework (DDF) Project

http://www.cis.uab.edu/wuh/DDF/

Parece ser un sistema, basado en eclipse, para construir depuradores de forma sistemática.

Mi primer post

Bueno, este "post" es el primero. Para ver cómo funciona. Ya veremos a ver que tal funciona el invento....

Veamos, esto es una prueba de negrita, esto de cursiva, esto un enlace y esto es una imágen (bueno... no se puede meter directamente, hay que colocarla online en algún sitio).