From: | Felipe de Jesús Molina Bravo <fjmolinabravo(at)gmail(dot)com> |
---|---|
To: | pgsql <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | offtopic: instalacion plr con soporte para imagenes (mini how-to) |
Date: | 2009-10-09 17:48:25 |
Message-ID: | c31298e50910091048r77f95494p574f39f3fb35323a@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Que tal
Recientemente, instalamos plr. Se usará para aplicar métodos de validación y
generar graficas. En el servidor de base de datos no se tiene ambiente
grafico (X server).... los pasos realizados fueron los siguientes ....
espero sirva... al final están las ligas que me sirvieron de referencia ...
saludos
Ambiente
distribucion: Gentoo
kernel: 2.6.28 (vserver 2.3.0.36.4 )
R: 2.9.2
PL-R: 8.3.0.8
Para instalar PLR, suponiendo que ya tenemos instalado postgres
* En el directorio donde se encuentra el ebuild
(/usr/portage/dev-db/postgresql-server)
ebuild postgresql-server-8.4.1.ebuild unpack
ebuild postgresql-server-8.4.1.ebuild compile
* Ir al directorio temporal para la compilación:
/var/tmp/portage/dev-db/postgresql-server-8.4.1. Posicionado en el
directorio del contrib de postgres, desempacar PL-R
* Ir al directorio .../contrib/plr y teclear
make
make install
Con esto ya tenemos instalado plr. Para habilitar el plr en la bd, ejecutar
el script de plr.sql, el cual se encuentra en:
/usr/share/postgresql-8.4/contrib
Por lo regular en los servidores de base de datos no tenemos un X server,
por lo tanto para hacer que PL-R pueda generar las imágenes se instala Xvfb.
Se realizó de la siguiente forma:
* editar /etc/portage/package.use
dev-db/postgresql-server xml perl
dev-db/postgresql-base xml perl
dev-lang/R bash-completion nls readline jpeg png cairo X -doc -java
-lapack -minimal -threads -tk
x11-base/xorg-server xvfb minimal -xorg -dmx -kdrive -xprint -ipv6
x11-libs/cairo svg X
x11-libs/gtk+ minimal X jpeg
* instalar:
emerge xorg-server
emerge cairo
emerge gtk+
emerge dev-lang/R
* instalar librerias requeridas por R (los paquetes son obtenidos desde
cualquier mirror del CRAN):
R CMD INSTALL -l quantmod_0.3-12.tar.gz
R CMD INSTALL -l RGtk2_2.as.15.tar.gz
R CMD INSTALL -l cairoDevice_2.10.tar.za
::Esto instala las libreria requeridas y xvfb.
Para probar si todo esta listo:
* Iniciar xvfb:
Xvfb :5 -ac -screen 0 1024x768x24
* En otro terminal
localhost ~ $ DISPLAY=":5.0"
localhost ~ $ R
* En R:
> library("quantmod")
> library(cairoDevice)
> library(RGtk2)
> pixmap <- gdkPixmapNew(w=500, h=500, depth=24)
> gdkDrawableSetColormap(pixmap, gdkColormapGetSystem())
> asCairoDevice(pixmap)
> plot(c(1:10))
> plot_pixbuf <- gdkPixbufGetFromDrawable(NULL, pixmap,
pixmap$getColormap(), 0, 0, 0, 0, 500, 500)
> buffer <- gdkPixbufSaveToBufferv(plot_pixbuf, "png", character(0),
character(0))$buffer
> buffer
:al teclear la última linea debe de aparacer los valores hexadecimales de la
imagen ... ej:
[1] 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 01 f4 00 00 01
f4
[25] 08 02 00 00 00 44 b4 48 dd 00 00 00 03 73 42 49 54 08 08 08 db e1 4f
e0
[49] 00 00 1f a9 49 44 41 54 78 9c ed dd 79 58 94 f5 fe ff f1 7b d8 64 70
10
[73] 0b 42 49 45 51 0b 50 50 09 2d dc 4e ee c7 12 a5 70 cf c0 0d 35 cb d2
ab
.....
Si todo fue correcto, esta lista para ser usado en postgres. Antes de
iniciar el motor de postgres, es necesario declarar la variable Display.
* Editar /etc/conf.d/postgresql-8.4 y agregar:
DISPLAY=":5.0"
* Eidtar /etc/init.d/postgresql-8.4 y cambiar la linea que inicia el motor
por:
su -l ${PGUSER} \
-c "env PGDATA=\"${PGDATA}\" DISPLAY=\"${DISPLAY}\"
/usr/lib/postgresql-8.4/bin/pg_ctl start {WAIT_FOR_START} -o
'--silent-mode=true ${PGOPTS}'"
Iniciar el motor de bd y entrar a una bd. (suponemos que esta bd ya tiene
instalado plr)
* Para verificar que la variable de ambiente DISPLAY es correcta:
pba=# select * from plr_environ() where name = 'DISPLAY';
name | value
---------+-------
DISPLAY | :5.0
* crear la función:
CREATE OR REPLACE FUNCTION plr_plot_return_data() RETURNS CHARACTER[] AS $$
library("quantmod")
library(cairoDevice)
library(RGtk2)
pixmap <- gdkPixmapNew(w=500, h=500, depth=24)
gdkDrawableSetColormap(pixmap, gdkColormapGetSystem())
asCairoDevice(pixmap)
plot(c(1:10))
plot_pixbuf <- gdkPixbufGetFromDrawable(NULL, pixmap,
pixmap$getColormap(), 0, 0, 0, 0, 500, 500)
buffer <- gdkPixbufSaveToBufferv(plot_pixbuf, "png", character(0),
character(0))$buffer
return(buffer)
* ejecutar
pba=# select plr_plot_return_data();
si en la salida tenemos algo parecido a:
{89,50,4e,47,0d,0a,1a,0a,00,00,00,0d,49,48,44,52,00,00,01,f4,00,00,01,
.....
todo esta correcto.
Finalmente, esto ya podría ser usados desde un cgi ó algo parecido ... en
nuestro caso, mason:
<%once>
use DBI;
use Data::Dumper;
</%once>
<%perl>
$r->content_type("image/png");
my $dbh = DBI->connect("DBI:Pg:dbname=pba;host=xxx;port=xxx",'cta',
'pssw');
print -1 unless ($dbh);
my $sth = $dbh->prepare("SELECT ARRAY_TO_STRING(plr_plot_return_data(),
'')");
$sth->execute();
my @array = $sth->fetchrow_array;
$r->print(pack "H*", $array[0]);
</%perl>
Ligas donde obtuve la información
http://ubuntuforums.org/archive/index.php/t-613149.html
http://archive.netbsd.se/?ml=pgsql-general&a=2007-12&m=5999899
From | Date | Subject | |
---|---|---|---|
Next Message | Emanuel Calvo Franco | 2009-10-09 18:00:03 | Re: offtopic: instalacion plr con soporte para imagenes (mini how-to) |
Previous Message | ceduardo | 2009-10-09 17:45:31 | Re: OT. Lista JAVA |