Apuntes del taller GvSIG 2.0

Estos son los apuntes que tomé sobre gvSIG 2.0 en las últimas Jornadas GvSIG.

Pre-requisitos:

  • Java
  • Eclipse
  • Ant (preferiblemente)
  • Maven (preferiblemente)
  • gvSIG (esto es recursivo :))

La principal ventaja de gvSIG 2.0 es que puedes crear un plugin sin saber cómo funciona gvSIG ni tener que compilarlo. Tenemos una instalación de gvSIG que despliega unos binarios que genera el workspace. Pero no tenemos que tocar los fuentes de gvSIG, salvo que algo no funcione (bugs) o haya que añadir alguna funcionalidad al núcleo. Preferentemente no lo toques, mejor consulta con los desarrolladores del núcleo de gvSIG y ellos intentarán encargarse.

This are the notes that I took over gvSIG 2.0 on the latests Jornadas GvSIG.

Pre-requisites:

  • Java
  • Eclipse
  • Ant (should)
  • Maven (should)
  • gvSIG (this is recursive :))

The main advantage of gvSIG 2.0 is that you can create a new plugin without knowing how does gvSIG work or having to compile it. We already have a gvSIG installation that deploys the binaries to the workspace. But we don’t have to change the source code of gvSIG, unless something doesn’t work (bugs) or we have to add some new functionality to the core. Better if you don’t touch it,ask the gvSIG developers and they will take care.

Alta concurrencia en Java

Cuando nos enfrentamos a aplicaciones con una alta concurrencia, solemos encontrarnos con una serie de problemas tipo. En este artículo me centraré en los problemas de recursos (cpu y memoria), dejando los problemas de sincronización para otro futuro artículo. De momento me centraré en los problemas más típicos y sus soluciones más directas.

Cuando descubrimos los hilos y las ventajas del procesamiento en paralelo puede ocurrir que acabemos abusando de su uso. Si el problema es que tenemos una gran cantidad de hilos (¿100? ¿1000?) simultáneos, el procesador estará saltando de uno a otro sin parar, sin dejar que realmente terminen, por muy corta que sea su ejecución real. Y con el tiempo se irán encolando más y más hilos que sólo ralentizarán el proceso. A eso hay que sumarle que el coste de crear y destruir hilos puede llegar a ser significativo cuando hablamos de tantos hilos a la vez.
When facing high concurrency applications, we often find a number of generic problems. In this article I will focus on the problems of resources (CPU and memory), allowing synchronization problems for another future article. For now on, I will focus on the most typical and most direct solutions.

When we discover threads and the advantages of parallel processing it can happen that we end up abusing their use. We have a lot of threads (100 ¿? 1000?) simultaneously, and the processor will be jumping from one to another without stopping, not letting them finish, no matter how fast is their real excution. And over time there will be more and more threads only slowing down the process. To the cost of execution of each thread, we must consider also the added cost of creating and destroying threads, which can become significant when we talk about so many threads at once.
Continue reading Alta concurrencia en Java

Mapa sencillo en Java

Muchas veces uno no sabe por dónde empezar cuando quiere adentrarse en el mundo de la programación GIS. Demasiadas librerías, demasiados IDE, pero a la hora de la verdad todo el mundo presupone que ya tienes una base y todo es un caos.

Para los principiantes yo recomendaría que le echaran un vistazo a un proyecto bastante nuevo que pretende extender Swing (la librería gráfica por excelencia de Java) con widgets geográficos. De esta forma, añadir un mapa a una aplicación de escritorio Java sería una tarea tan sencilla como añadir un botón o un campo de texto.
Sometimes you don’t know where to start when you enter the world of GIS programming. Too many libraries, IDEs, but the truth is, everyone assumes you already have a base and everything become chaos.

For beginners I would recommend that you take a look at a fairly new project aimed at extending Swing (the default graphics java library) with geographical widgets. In this way, add a map to a Java desktop application would be a task as simple as adding a button or text field.
Continue reading Mapa sencillo en Java

Event Listeners Personalizados en Java

Aunque el patrón Observer está implementado nativamente en Java, a veces necesitamos realizar un manejo de eventos que se adapte mejor a nuestras necesidades.

El problema del manejo de eventos es muy sencillo: Tenemos un objeto que va a ir cambiando de estado. Sin tocar su código, debemos ser capaces de “engancharlo” a otros objetos para que estén pendientes de estos cambios de estado y actúen en consecuencia. Este “enganche” debe poder activarse y desactivarse dinámicamente durante la ejecución.
Although the pattern Observer is implemented natively in Java, sometimes we need to make an event management that suits better our needs.

The problem of event handling is very simple: We have an object that will be changing its state. Without touching its code, we should be able to “hook” to other objects that are pending status changes and act accordingly. This “hook” must be turned on and off dynamically at runtime.
Continue reading Event Listeners Personalizados en Java