martes, mayo 12, 2009

Blog personal en civinova.org

El otro día comenzó un nuevo proyecto que mi amigo Ibán está llevando con mucha ilusión. Se llama http://civinova.org y http://civinova.com. Como indica en la web :

CiviNova Es una ciudad virtual dedicada a la cultura donde los usuarios (ciudadanos) cuentan con todo lo necesario para dar a conocer su obra. Para los creadores hay gremios de escritores, pintores, músicos... Y para todos, grupos de literatura, arte, música, cine... ¿Te lo vas a perder?

civi Nova es, además, una revista, una editorial y un hosting para alojamiento y creación de webs culturales.

Es decir, civinova es una nueva red social y una revista de cultura en la que cualquiera que se considere creador y/o artista puede empezar a dar a conocer su obra sin complicaciones y ver las creaciones de otros miembros de la "ciudad".

El proyecto está aún en una fase inicial en la que se han puesto en marcha las herramientas básicas necesarias, pero se espera que la cosa vaya creciendo. Animo a todo el mundo desde mi humilde blog a que os acerquéis a echar un vistazo y si os atrevéis, a crear vuestro perfil de ciudadano. Yo por mi parte he decidido que mi blog personal sea ahora el de civinova http://www.civinova.org/pg/blog/guevonaso . No sé que pasará con http://guevonaso.blogspot.com, supongo que seguirá existiendo, pero no lo sé. En cualquier caso, desde aquí deseo toda la suerte del mundo a Ibán en su proyecto

lunes, mayo 04, 2009

Actualizando hola mundo struts 2

Este es un post corto. He reorganizado un poco el código del proyecto de hola mundo del post anterior. Estoy intentando hacer que el proyecto se pueda desplegar usando maven, ya comentaré mis experiencias. La verdad es que está siendo un poco más frustrante de lo que pensé en un momento. Un buen enlace para ver como hacerlo en castellano: Hola mundo con google App Engine y maven. Esta traducido y resumido de otro blog que además tiene en uno de sus comentarios una referencia a esto mismo y que además está creando un "archetype" para maven para crear proyecto de google. Muy didactico seguir la secuencia completa.

Por ahora me conformo con haber podido simplifiar el ejemplo anterior para poder ampliarlo poco a poco.

domingo, abril 26, 2009

Struts 2 en google-app-engine

Buenas, he tenido estas últimas semanas mucho (pero mucho) trabajo y no he podido añadir nada nuevo al blog por falta de tiempo. La noticia java durante este tiempo ha sido (a parte de la compra de Sun por parte de Oracle) el hecho de que google haya dado soporte Java en su engine además de python.

La noticia es genial para todos los que queríamos hacer una aplicación web pública sin costes y sin tener que depender de PHP. El servicio puede hacerse de pago, puesto que la version gratuita tiene una serie de limitaciones de ancho de banda y consumo de CPU, pero sin publicidad incluida.

Pero yo no quería hablar de las bondades del servicio de google, si no de como poder utilizar algún framework dentro de este. Casi a la vez que salió la noticia he encotrado varios sitios hablando del tema, enumero aqui :

Y mi aportación a este mundo es recoger esta informacion y explicar en cuatro pasos simples el hola mundo de Struts 2. No se hasta que punto funcionará todo, pero por probar que no quede.

Asumo que ya se ha configurado eclipse y habeis hecho el primer "Hola Mundo" usando el AppEngine SDK.

Una vez tenemos nuestra aplicación de pruebas funcionando, pasamos al siguiente paso, nos bajamos las librerias de struts. Las podemos encontrar en la página oficial o usando maven. Yo me las he descargado a mano, la versión que contiene solo los jar necesarios y la que contiene las applicaciones de ejemplo (llamada struts-2.1.6.apps.zip ).

Mi intención es simplemente ejecutar el "HelloWorld", por lo que descomprimo el helloworld.war.

El siguiente paso es tan simple como copiar las librerias en la carpeta "lib" y modificar el web.xml añadiendo el filtro de Struts, los JSPs de ejemplo y las clases de ejemplo y los XML que la aplicacion a mi proyecto creado con eclipse.

La estructura del proyecto eclipse queda algo tal y como se muestra en la imagen a continuacion.

Si tal y como tenemos el proyecto ahora mismo, la aplicación falla. Nos provocará un error provocado por las restricciones que el engine de google ha introducido en su máquina virtual y que hacen incompatible el funcionamiento por defecto del OGNL. La solución la he encontrado en uno de los enlaces anteriores que me ha llevado a esta entrada de un foro. En ella se describe que la solución es muy simple, crear un listener que nos permita configurar la gestión de seguridad de OGNL.

El codigo del listener sería:

public class InitListener implements
ServletContextListener
{
public InitListener()
{ }

public void
contextInitialized(ServletContextEvent sce)
{
OgnlRuntime.setSecurityManager(null);
}
// El resto de metodos necesarios se dejan vacios.

Incluimos el listener en el web.xml :

<web-app>
<!-— El filtro de struts 2 -->
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
    <listener-class>es.guevonaso.InitListener</listener-class>
</listener>
<servlet>
    <servlet-name>guevonaso</servlet-name>
    <servlet-class>es.guevonaso.guevonasoServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>guevonaso</servlet-name>
    <url-pattern>/guevonaso</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
Una vez funcionando nos mostrará un mensaje de error de que las sesiones no están configuradas. Para eso solo debemos de modificar el fichero appengine-web.xml y añadir el parámetro "sessions-enabled":
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>guevonaso</application>
  <version>1</version>
  <!-- Configure java.util.logging -->
  <system-properties>
      <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
  </system-properties>
  <sessions-enabled>true</sessions-enabled>
</appengine-web-app>

Y listo, esto nos permite tener un hola mundo empleando struts 2. Ahora es cosa de verificar hasta que punto podemos usar esta librería. Mientras tanto, el codigo de este ejemplo lo podéis encontrar donde siempre en http://code.google.com/p/guevonaso-codes/, con la salvedad de que no he subido los ficheros binarios "JAR", de la carpeta "lib". Y la aplicación de pruebas esta en : http://guevonaso.appspot.com/example

  • El ejemplo de un formulario
  • Hola mundo

viernes, marzo 13, 2009

Pequeño cambio

Hace tiempo incluí en el blog el Pingbox de yahoo. Lo quité porque ralentizaba mucho la carga, ahora lo he vuelto a añadir, esta vez hago una "carga por petición", de forma que dándole al botón de la derecha se carga y me ahorro que se cargue a todos los visitantes.

Espero que os guste el cambio.

jueves, marzo 12, 2009

Informacion util de Struts 2

Esta entrada es sólo lo que yo llamo un apunte de algo interesante. Aunque no lo he encontrado yo creo que merece la pena mencionarlo, es una lista de las tags para Struts 2 y como funciona.

http://mundogeek.net/archivos/2009/02/13/etiquetas-struts-2/

Struts 2 es una de esas espinitas que tengo clavadas, me parece un framework muy interesante y las pruebas que he hecho me da la sensación de que está muy conseguido, quizás en el momento en que lo use intensivamente cambie mi opinión de como es.

En cualquier caso, es un un buen enlace para tener a mano.

viernes, marzo 06, 2009

Esquema de Aplicación GIS para WEB

Después de mucho sopesar, me parecía demasiado obvio explicar como instalar y configurar un servidor de mapas (geoserver) para que estén disponibles nuestra información geográfica, así como configurar un cliente web (OpenLayers) para su visualización.

Pero si me parecía de interés publicar un diagrama que nos permita tener un esquema visual de producto completo.
Entiéndase como producto, una aplicación GIS, que se pueda acceder desde la WEB.

Así pues, os dejo el diagrama.

jueves, marzo 05, 2009

Tus datos geográficos representados sobre GoogleMaps

Aunque en una entrada posterior hablaré sobre las proyecciones, ahora me sirve como introducción, indicar que uno de los problemas que nos podemos encontrar es trabajar con datos que son de diferente tipo de proyección.

Para estas latitudes, es muy común trabajar con el sistema de referencia Datum ED 50/UTM 30N o si estamos más situados al oeste, como puede ser Huelva o Galicia, podríamos estar hablando de Datum ED 50/UTM 29N.

Estas proyecciones son válidas para un rango geográfico. Fuera de este rango geográfico, simplemente no son válidas para georeferenciar.
Es por esto que google utiliza otros sistemas de referencia, normalmente WGS 84 que además se corresponde con el sistema de referencia de la mayoría de los GPS por omisión.

Aquí hay un concepto que no tengo del todo claro, pero si sé que tiene que ver con el modelo matemático de la esfera terrestre utilizado.
Para que nos entendamos. Si queremos solapar nuestros datos sobre cualquier mapa de google, deberíamos de utilizar el sistema de referencias Spherical Mercator de google.

Vale, a modo de resumen, el problema es, que tengo sistemas de referencias diferentes y que tengo que "transformar" a uno en concreto para trabajar siempre sobre el mismo sistema de referencias. Si has llegado a la misma conclusión, es que estamos en la misma onda.

Bien, estamos de acuerdo en el problema, pero todavía nos queda establecer una estrategia para resolverlo.
La estrategia que yo he adoptado (que seguro que no es la única y quizás tampoco la mejor) es crear una vista de mis datos geográficos, pero transformados a este nuevo sistema de referencia (Spherical Mercator de google).

Bueno, en este caso podemos estar de acuerdo o no con la solución, pero nos ponemos manos a la obra para implementarla.

Antes de nada (tarde o temprano, nos daríamos cuenta de ello), os informo de que en nuestra base de datos que hemos creado y poblado con tanto esmero, no existe el sistema de referencia Spherical Mercator de google. Bueno, no pasa nada. Lo metemos.

Para meterlo, lanzamos la siguiente query.

INSERT into spatial_ref_sys (
   srid, auth_name, auth_srid, srtext, proj4text
  ) values (
   900913 ,'EPSG',900913,
  'GEOGCS["WGS 84", 
   DATUM["World Geodetic System 1984", 
   SPHEROID["WGS 84", 6378137.0, 298.257223563,
   AUTHORITY["EPSG","7030"]], 
   AUTHORITY["EPSG","6326"]],
   PRIMEM["Greenwich", 0.0, 
   AUTHORITY["EPSG","8901"]], 
   NIT["degree",0.017453292519943295], 
   AXIS["Longitude", EAST], 
   AXIS["Latitude", NORTH],
   AUTHORITY["EPSG","4326"]],
   PROJECTION["Mercator_1SP"],
   PARAMETER["semi_minor", 6378137.0], 
   PARAMETER["latitude_of_origin",0.0], 
   PARAMETER["central_meridian", 0.0], 
   PARAMETER["scale_factor",1.0], 
   PARAMETER["false_easting", 0.0], 
   PARAMETER["false_northing", 0.0],
   UNIT["m", 1.0],
   AXIS["x", EAST], 
   AXIS["y", NORTH],
   AUTHORITY["EPSG","900913"]] |',
   '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 
    +x_0=0.0 +y_0=0 +k=1.0 +units=m 
    +nadgrids=@null +no_defs'
 );
CUIDADO aqui se ha puesto la sentencia con retorno de carros en las cadenas de texto, es posible que copiar y pegar no funcione directamente.

Vale, ya tenemos el sistema de referencia con el que vamos a trabajar. Ahora necesitamos hacer una vista, que contenga toda la información de mis elementos espaciales (features) en dicho sistema de referencia.

CREATE OR REPLACE VIEW [view_table_name] AS 
 SELECT [table_name].[table_field1], 
        [table_name].[table_field2], 
        st_transform(st_setsrid(
           [table_name].[geom_field], 
           23030
           ), 900913
        ) 
 AS the_geom
 FROM [table_name];

Hay que tener en cuenta que podemos poner tantos campos como necesitemos o tenga la tabla en cuestión.

Por otra parte, se asigna el alias the_geom al campo que contendrá los datos de georeferencia, que es el nombre que asigna por omisión el loader de postGis (shp2pgsql)

Con esto ya tenemos una vista con los datos en la proyección correcta para solaparla con los mapas de Google Maps.

Fuentes:
  • http://trac.openlayers.org/wiki/SphericalMercator