viernes, abril 25, 2014

Postgresql complilar pldebugger

Les dejo un paso a paso para compilar el pldebugger.

  • Descargar el código fuente de la versión de Postgresql que tengamos.
wget http://ftp.postgresql.org/pub/source/v9.1.13/postgresql-9.1.13.tar.gz
cd postgresql-9.1.13
  • Ir al directorio contrib/ y clonar el pldebugger
git clone http://git.postgresql.org/git/pldebugger.git
  • Corremos el ./configure de postgresql
Subimos un directorio, porque es el ./configure del fuente de postgres
 
cd ..
pg_config --configure | ./configure


El pg_config lo que hará es pasarle los parámetros al configure de nuestra instalación.
  • Compilamos el subdirectorio src/
cd src/
make


    Esto permite evitar este error:

~/postgresql-9.1.13/contrib/pldebugger$ make gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -fpic -I../../src/pl/plpgsql/src -I. -I. -I../../src/include -D_GNU_SOURCE -c -o plpgsql_debugger.o plpgsql_debugger.c In file included from ../../src/include/postgres.h:48:0, from plpgsql_debugger.c:12: ../../src/include/utils/elog.h:69:28: error fatal: utils/errcodes.h: No existe el archivo o el directorio compilación terminada.
  • Ir al directorio contrib y clonar el pldebugger
git clone http://git.postgresql.org/git/pldebugger.git
cd pldebugger

  • Compilar e instalar
make
make install

  • Agregamos la referencia al plugin en postgresql.conf
Abrimos el archivo
sudo vim /etc/postgresql/9.1/main/postgresql.conf
   
Agregamos la variable shared_preload_libraries al final
shared_preload_libraries = '/usr/lib/postgresql/9.1/lib/plugin_debugger.so'

  • Reiniciamos en servicio postgresql
sudo service postgresql restart

  • Por último, instalar la extensión pldbgapi
CREATE EXTENSION pldbgapi;

En esta última parte tuve varios problemas con $libdir ya que en la instalación de postgresql indicaba un lugar distinto al make install del plugin. Yo lo solucione medio rustico copié la librería compilada al directorio donde postgresql guarda todos los .so y anduvo.

sudo cp /usr/local/pgsql/lib/plugin_debugger.so /usr/lib/postgresql/9.1/lib

Referencia: pldebugger.git

miércoles, enero 25, 2012

Orfeo Toolbox en Ubuntu

He instalado Orfeo Toolbox en Ubuntu 11.10 siguiendo las instrucciones del sitio de OTB. Solo tuve dificultades con la librería libotb3.11 porque existen algunos paquetes que dependen de esta: otb-wrapping-python y otb-wrapping-java y la aplicación Monteverdi depende de la libotb3.12.

Lo que hice fue, desinstalar la libotb3.11 e instalar la libotb3.12 y luego instale el resto de los paquetes otb-bin, monteverdi, etc.

Si al iniciar Monteverdi, este no responde es muy probable que les falte agregar a LD_LIBRARY_PATH la ubicación de las librerías de otb. Así que editan /etc/environment y agregan al final:

LD_LIBRARY_PATH=/usr/lib/otb

Deberían reiniciar la sesión y listo.

Así he logrado correr Monteverdi.

jueves, noviembre 18, 2010

Un repo para QGIS

Aprovechando que estamos cada vez más empapados con esto del GIS y siguiendo nuestra filosofía de priorizar el desarrollo de software libre hemos publicado un repositorio para plugins de Quamtun GIS.

Esperamos que de a poco podamos ir creciendo en la cantidad y en calidad de productos para esta fantástica herramienta.

El repositorio es: http://geointa.inta.gov.ar/qgis/plugins.xml

Se esperan comentarios...

Py2Exe, PyQt4... Y los iconos del resource?

Estuve usando el Py2Exe para distribuir una aplicación que debía correr sobre Windows. Con el único problema que me crucé fue al correr mi .exe ya que los iconos que supuestamente había incluido en mi archivo de recursos .qrc y posteriormente compilado con pyrcc4...no estaban.

Luego de descargar mi ira contra Qt Designer, el inocente de pyrcc4 y ni hablar de Py2Exe, encontré revolviendo en la web cual era el problema. Luego de correr la compilación con python setup.py py2exe hay que agregar las librerias (sí, las dlls) que leen los formatos de imágenes que usamos. Para PyQt4 (en Python 2.6) estas están en: C:\Python26\Lib\site-packages\PyQt4\plugins en el directorio que se llama "imageformats".

Lo que hay hacer es crear un directorio con el mismo nombre dentro de nuestro dist (creado por py2exe) y ahí agregar las librerías de los formatos que estamos usando.

Y listo!

sábado, marzo 13, 2010

Día Juliano en PostgreSQL


CREATE OR REPLACE FUNCTION to_julian(f date)
RETURNS integer AS
$BODY$
BEGIN
RETURN cast(to_char(f, 'J') as integer);
END;
$BODY$
LANGUAGE 'plpgsql'

jueves, marzo 11, 2010

Cambiar Sistema de Referencia con gdalwarp

GDALWARP es una práctica herramienta para cambiar fácilmente de un sistema de referencia a otro.

Usage: gdalwarp [--help-general] [--formats]
[-s_srs srs_def] [-t_srs srs_def] [-to "NAME=VALUE"]
[-order n] [-tps] [-rpc] [-geoloc] [-et err_threshold]
[-te xmin ymin xmax ymax] [-tr xres yres] [-ts width height]
[-wo "NAME=VALUE"] [-ot Byte/Int16/...] [-wt Byte/Int16]
[-srcnodata "value [value...]"] [-dstnodata "value [value...]"] -dstalpha
[-r resampling_method] [-wm memory_in_mb] [-multi] [-q]
[-cutline datasource] [-cl layer] [-cwhere expression]
[-csql statement] [-cblend dist_in_pixels]
[-of format] [-co "NAME=VALUE"]*
srcfile* dstfile

Ejemplo:

#$ gdalwarp -s_srs EPSG:4326 -t_srs EPSG:900913
input_img.tif output_img.tif

Donde:
-s_srs EPSG:4326 el sistema de referencia de origen
-t_srs EPSG:900913 el sistema de referencia de destino



martes, mayo 05, 2009

Agregar repositorio RPMForge a Centos 5

Por requerimientos mi trabajo tuve que empezar a trabajar con CentOS, al principio no me resultó muy complicado ya que hacia tiempo usaba GNU Linux aunque venia de Debian/Ubuntu.
Comencé a sentir las diferencias cuando usé el yum y me faltaban paquetes de todo tipo. Googleando un poco encontré que existe RPMForge como repositorio de RedHat, Fedora y CentOS.

Así que instalé el repositorio según los pasos de la wiki del site de CentOS.


Instalar el paquete yum-priorities



yum install yum-priorities

Habilitar el módulos desde /etc/yum/pluginconf.d/priorities.conf


[main]
enabled=1


Editar todos los archivos .repo (/etc/yum.repos.d) y agregarles el parámetro
priority=N (N es un número de 1 a 99)



La configuración recomendada es:


[base], [addons], [updates], [extras] ... priority=1
[centosplus],[contrib] ... priority=2

En rpmforge el valor de priority=N debe ser mayor a 10



Instalar el RPM de RPMForge, para eso descargamos según corresponda.



i386 http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
x86_64 http://apt.sw.be/redhat/el5/en/x86_64/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

Instalar la DAG's GPG key



rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

Verificamos el paquete que bajamos



rpm -K rpmforge-release-0.3.6-1.el5.rf.*.rpm

Ahora si, instalamos el rpm



rpm -i rpmforge-release-0.3.6-1.el5.rf.*.rpm

Testear la instalación



yum check-update


Listo, si todo esta bien deberían verificarse las actualizaciones y decir cuantos paquetes hay disponibles.


Bonus:
A la hora de probar la aplicación tuve problemas de TimeOut: http://fr2.rpmfind.net/linux/dag/redhat/el5/en/x86_64/rpmforge/repodata/primary.xml.gz: [Errno 12] Timeout:

Buscando mucho en la Web y después de leer muchas posibles soluciones, encontré la más simple. En el archivo /etc/yum.repos.d/rpmforge.repo se le agrega el parámetro de timeout (que por default son 30 segundos) con 300 (soy muy generozo)

lunes, marzo 30, 2009

Instalando pymssql en Ubuntu

Necesitaba leer unos datos que se encontraban en un MS SQL 2005 y recurrí directamente Python. Busqué un par de módulos que hay disponibles y verifiqué en PyAr ¿qué usa la gente que sabe? Me baje pymssql 1.0.1, instale y empecé a renegar.
Googleando un poco encontre que requiere del módulo Freetds-dev que es un protocolo para conectar MS SQL y Sybase sobre TCP/IP.

Así que sudo apt-get install freetds-dev

y después si, instale el pymssql y salio andando.

miércoles, febrero 04, 2009

Actualizar versión de Python en Debian

1) Instalé en este caso Python 2.5 en Debian Etch con

apt-get install python2.5

2) Modifiqué el archivo /usr/share/python/debian_defaults

Para que mi python por default sea la esta última versión.

[DEFAULT]
# the default python version
default-version = python2.5

# all supported python versions
supported-versions = python2.4, python2.5

# formerly supported python versions
old-versions = python2.3

# unsupported versions, including older versions
unsupported-versions = python2.3

3) Cambié el enlace simbólico /usr/bin/python para que apunte a python2.5

4) Por último, ejecute

pycentral updatedefault python2.4 python2.5

Listo!

server-0:/# python -V
Python 2.5

Espero sea de utilidad.

lunes, febrero 02, 2009

Instalación de MapGuide sobre XP con FDO para Postgis

MapGuide Open Source es una plataforma basada en web para desarrollar aplicaciones de GIS. Estuve tratando de instalarlo en un XP UE que corre en vbox sobre Ubuntu y después de muchas idas y vueltas (y a Ramiro y Ronco que me dieron una mano) salió andando. Acá dejo un paso a paso:
  1. Instalar MapGuide Server (MgServerSetup-x.x.x)

  2. Instalar la extención MgWebServerExtensionsSetup-x.x

  3. Agregar el FDO para Postgres Postgis

    1. Reemplazar las librerias que están en

%MAPGUIDE_INSTALL%\bin\FDO\ con las que están en FDOpg33.zip

    1. Agregar en providers.xml lo siguiente:

<FeatureProvider>
<Name>OSGeo.PostGIS.3.3</Name>
<DisplayName>OSGeo FDO Provider for PostGIS</DisplayName>
<Description>Read/write access to spatial and attribute data in an PostGIS.</Description>
<IsManaged>False</IsManaged>
<Version>3.3.0.0</Version>
<FeatureDataObjectsVersion>3.3.0.0</FeatureDataObjectsVersion>
<LibraryPath>.\PostGISProvider.dll</LibraryPath>
</FeatureProvider>

  1. Aplicar el parche para Firefox 3, esto si es la versión de mapguide 2.0 en versiones nuevas no es necesario.

    Hay que copiar y reemplazar los archivos que están en FixedFiles.zip

  2. En caso el caso de realizar una prueba y que de un error al conectar el con PostGIS probar con DependencyWalker para ver si PostGISProvider.dll requiere alguna dll que no exista.

viernes, enero 09, 2009

Agregar el template_postgis en PostgreSQL

Después de renegar un poquito con mi instalación de postgis en Ubuntu, puntualmente era que no tenia instalado el template_postgis. Revolví un poco en google y encontre esto (que es literalmente como se dice un COPY & PASTE!! de aquí). Lo único que tuve que modificar fue la ruta a los archivos lwpostgis.sql y spatial_ref_sys.sql

Nota: el archivo lwpostgis.sql también se puede encontrar como: postgis.sql, en mi Ubuntu (Karmic) el directorio donde se encuentran estos archivos es: /usr/share/postgresql/8.4/contrib/postgis-1.5/


# Create a database with UTF encoding
$ createdb -E UTF8 -O postgres -U postgres template_postgis

# Load the required language for PostGIS
$ createlang plpgsql -d template_postgis -U postgres

# Load postgis functions and spatial reference info
# which are sometimes installed in the postgres share directory ($ pg_config --sharedir)
# Also look for lwpostgis.sql and spatial_ref_sys.sql in (/usr/share/ or /usr/local/share/)

# Once you have found the correct location, load the first sql into your template db:
$ psql -d template_postgis -U postgres -f /usr/share/lwpostgis.sql


# Note: ignore any NOTICES, like 'psql:/usr/share/lwpostgis.sql:44: NOTICE: type "histogram2d" is not yet defined'
# You should see output like:
BEGIN
CREATE FUNCTION
CREATE OPERATOR
CREATE TYPE
CREATE AGGREGATE
COMMIT

# Then load the geographic projection tables
$ psql -d template_postgis -U postgres -f /usr/share/spatial_ref_sys.sql

# if you get an error about not being able to find `geos` add /usr/local/lib to /etc/ld.so.conf
# And run:
$ ldconfig # Then restart PostgreSQL

jueves, agosto 07, 2008

MapServer, PostGIS y los OID

Trabajando con estas herramientas me encontré con un problema que me rompió la cabeza. La bug se producía cuando intentaba desplegar unas capas vectoriales que tenía almacenadas en PostGIS donde MapServer me daba el siguiente error:

prepare_database(): Query error. Error executing POSTGIS DECLARE (the actual query) statement: 'DECLARE mycursor BINARY CURSOR FOR SELECT asbinary(force_collection(force_2d(the_geom)),'NDR'),gid::text from

rencana.kawasanbencana WHERE () and (the_geom && setSRID( 'BOX3D(….)'::BOX3D,1) )'

Postgresql reports the error as 'ERROR: syntax error at or near ")" LINE 1: ...DR'),gid::text from rencana.kawasanbencana WHERE () and (the... ^ '

More Help: Error with POSTGIS data variable. You specified 'check your .map file'. Standard ways of specifiying are :

(1) 'geometry_column from geometry_table'

(2) 'geometry_column from (sub query) as foo using unique column name using SRID=srid#' Make sure you put in the 'using unique column name' and 'using SRID=#' clauses in. For more help, please see http://postgis.refractions.net/documentation/
Mappostgis.c - version of Jan 23/2004.

La primera pista para solucionar el problema la encontré en la lista de MapServer (post del día 6/8/2008), donde dice que el error se debe a que la tabla donde están los datos a mostrar no tiene definido un OID.

Por último, del tutorial de PostGIS y de la data que me paso mi colega Bordignon encontre que Mapserver requiere un identificador único para cada uno de los registros espaciales y que PostgreSQL usa para eso OID.

La solución es crear un índice con el oid que tengamos definido.

CREATE INDEX [indexname] ON [tablename] ( oid );

Otra solución es que la tabla ya tenga definido el oid al momento de la creación. En este link se explica cómo hacerlo.

Por último, el error también se genera cuando se usa en el archivo .map la instrucción FILTER sin parámetros, es decir FILTER = ''. Esto produce que el query que se envía a PostgreSQL tenga un WHERE sin argumentos que dispara el error citado.


jueves, noviembre 15, 2007

XML con Python y ElementTree

Gracias a la sugerencia de un camarada de PyAr probé el módulo elementtree perteneciente a la librería estándar de Python, y la verdad que es realmente fácil manipular XML que este módulo.

Desde Ubuntu lo instale con:

apt-get install python-elementtree

Lo usé para parsear XML con la siguiente estructura:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE feeds SYSTEM "feeds.dtd">

<feeds>
<ENTRADAS>
<ID>1</ID>
<TITULO>La Política</TITULO>
<AUTOR>Groucho Marx</AUTOR>
<FECHA>1960-04-24</FECHA>
<HORA>13:34</HORA>
<TYPE>text/plain</TYPE>
<DESC>La política es el arte de buscar problemas, encontrarlos,
hacer un diagnóstico falso y aplicar después los remedios equivocados.</DESC>
</ENTRADAS>

(puede haber N entradas)

</feeds>
El código Python para acceder a cada valor de un elemento es el siguiente:


Así podría acceder a cada uno de los valores de los elementos. Para este ejemplo sólo muestro los ID.
Lo que no probé, porque no lo necesitaba para esto, es el manejo de Atributos pero por lo que miré al pasar es muy simple.

Espero les sirva.




sábado, noviembre 10, 2007

Ahora si...a full con Python

Me puse las pilas y comencé a "programar" algunas cosas en Python. Si bien no es mi primera experiencia con el lenguaje, ya que en el laburo estuve modificando unos scripts que vienen con aplicaciones de ESRI (ArcGIS)... este es mi lanzamiento oficial.

Como primer paso me suscribí a la lista de Python Argentina y la verdad que me han recibido muy bien.

Mi primer programa es una clase que necesito para mi trabajo final de licenciatura.

Simplemente lo que tengo que hacer es procesar, en forma periódica, un lote de archivos XML que tienen noticias y realizar algunas operaciones sobre esos textos.

Hasta ahora use los módulos:
  • xml.dom.minidom, con el que manipulo los archivos XML.
  • re, que uso para expresiones regulares.
Por ahora nada más. :-)

miércoles, noviembre 07, 2007

...il retorno ! ! !

Considerando el dicho popular que dice "...lo bueno se hace esperar" me tome un tiempo para ver si se me ocurria algo, lo único que puedo decir es: no tengan esperanzas de encontrar nada interesante acá. Simplemente porque estoy un poco escaso de ideas hace ya unos...mmm 28, sí 28 años.

lunes, mayo 07, 2007

Uso de query logs en DIR

Using query logs to establish vocabularies in distributed information retrieval
Por:
Milad Shokouhi, Justin Zobel, Saied Tahaghoghi, Falk Scholer

Los autores de este paper proponen la utilización de logs de queries (LQ) para recuperación de información distribuida. Según sus estudios los LQ en un motor de búsqueda, son un recurso valioso que puede ser usado para predecir cómo los usuarios interactuan con el sistema de búsqueda. Puntualmente, utilizan los términos de los LQ para guiar búsquedas en ambientes no cooperativos. También es aplicado para desarrollar estrategias de poda utilizando la información de los logs de queries para eliminar términos.

El objetivo de este trabajo es determinar cómo los logs de queries pueden ser usados para guiar futuras busquedas, en el contexto de la Recuperación de Información Distribuida.

Que lo disfruten. :-)

martes, marzo 20, 2007

La clave del éxito según Baeza

Leyendo un post del OjoBuscador encontré una publicación que analiza un artículo de Ricardo Baeza-Yates donde dice que “Para tener éxito se necesita primero gente visionaria y luego personas decididas a llevar a cabo sus visiones, con calidad y perseverancia. La fortuna es el premio a este tipo de esfuerzos”
Reflexión interesante viniendo de un maestro como Baeza. El artículo es La increíble historia de FAST ... disfrútenlo.

Encuesta de DELL sobre preferencias y usos de equipos con Linux

La empresa DELL acaba de habilitar una encuesta on-line para obtener información acerca del uso y preferencias de usuarios de Linux.

Fuente: Revista Informatica

martes, marzo 13, 2007

Configurar MySQL para que funcione con JDeveloper 10g y el contenedor OC4J embebido

Para configurar el Driver mysql-connector-java-x hay que descargar el .jar del sitio www.mysql.com la versión disponible en la actuallidad es la 5.0 (...apurense)

Los pasos a seguir son los siguientes:

  1. Primero hay que copiar el driver mysql-connector-java-x.x.x-bin.jar al directorio \j2ee\home\applib del JDeveloper para que se integre con el contenedor OC4J.
  2. Luego desde el JDeveloper hay probar la conexión con alguna DB, entonces hay que ir a View > Connection Navigator. Se crea una nueva conexión haciendo clic con el botón derecho del mouse en Connections y seleccionando del menú contextual New Database Connection. Hay que asignarle un nombre para la conexión y luego en la lista Connection Type escoja Controlador JDBC de Terceros.


  1. Luego hay que autenticarse para realizar la conexión con la DB.

  1. Luego se completan los datos del Driver JBDC que manejará las conexiones.

Se debe crear un nuevo Driver con New… se abrirá una ventana que permite registrar el Driver JDBC.

Ahí se introduce en Driver Class = com.mysql.jdbc.Driver, en Library se coloca el nombre de la librería que se puede buscar desde el botón Browser… Recuerde que la librería estaba en \j2ee\home\applib. Al seleccionar la librería se completa en forma automática la opción de Classpath.

En la ventana Connection se debe colocar la URL jdbc:mysql://:3306/ yo, para probar, utilicé la de prueba de MySQL test

  1. Al finalizar presione el botón Test Connection para verificar la conexión.

Hasta aquí sabemos que el driver está funcionando habría que utilizarlo con alguna aplicación y verificar si el contenedor OC4J funciona correctamente.

Muy pronto en el Camarón BitMap

En breve, si las obligaciones me lo permiten... hablare de las pruebas que estoy haciendo con la API Lucene para Java y cómo poder usarla para laburar con documentos en español... (parezco Caseros en Tele Escuela Técnica...).
Hasta pronto. (:-D)