lunes, noviembre 01, 2010

Actualizar desde postgresql-8.1 a postgresql-8.3

Cosas de cosas... en la oficina tenemos un servidor que estaba en etch y bueno, luego de revisar que tanto tenía funcionando, tomar la decisión... lo más importante es el servidor Postgresql así que a actualizarlo!

De dónde saqué cómo hacerlo? pues, el aptitude muy completo me lanzó:

Con lo que le pregunté a Google y me devolvió, entre otras cosas[0]:

Primeramente debe instalar las últimas versiones de los paquetes (postgresql-8.3 y postgresql-client-8.3)
# aptitude install postgresql-8.3
Tenga en cuenta que la instalación de postgresql-8.3 creará automáticamente un clúster por omisión 8.3/main. Tiene que borrar el clúster 8.3 existente
# pg_dropcluster --stop 8.3 main
Luego, necesita actualizar el clúster 8.1/main a 8.3
# pg_upgradecluster 8.1 main
Posteriormente, elimina el clúster 8.1/main después de actualizar los clústers que tenga.
# pg_dropcluster 8.1 main
Por último, elimina los paquetes postgresql-8.1 y postgresql-client-8.1
# aptitude purge postgresql-8.1 postgresql-client-8.1

Gracias gente!


[0]http://glosario-x.blogspot.com/2009/11/actualizar-desde-postgresql-81.html

viernes, octubre 01, 2010

Montando un Multisitio web con Drupal

Montando un Multisitio web con Drupal - séptima parte

Un multisitio es una características de algunos CMS que permiten crear varios sitios distintos utilizando código en forma compartida, y por ende, un mismo núcleo o base del CMS.[1]

Es así como podemos tener varios sitios con una administración más cómoda y sencilla. Claro que cada sitio puede tener sus propios temas y módulos, compartir unos ya existentes en el sitio por defecto... sí lo hay.

El proceso que describiremos será para un nuevo sitio, dentro de una instalación de drupal ya en funcionamiento, pero que podrá repetirse para sucesivos nuevos sitios.

Vale decir que estos pasos llegan gracias al valeroso aporte de ilo a través del irc de drupal-es en freenode ;-) quien amablemente me pidió que nombre a documentadosDOTcom[2]

Prerequesitos:
  • Linux
  • un sitrio con Drupal funcionando
La receta:
  • editar el /etc/hosts y añadir: 127.0.0.1 prueba
  • ir a: cd drupal/sites
  • crear el directorio: mkdir prueba
  • copiar: default/default-settings.php prueba/
  • copiar prueba/default-settings.php prueba/settings.php
  • en el navegador, ir a http://prueba/drupal

[1]http://cuencodigital.com/articulos/multisitios_en_drupal.html
[2]http://www.documentados.com/

viernes, julio 02, 2010

crosstab para consultas de tablas cruzadas

Esta no le he necesitado aún, pero me puse a revisarla para ver qué tal funciona y ver sí luego se le puede sacar provecho.

La documentación oficial[0] habla por sí sola, sobre lo que se quiere. hacerla funcionar no es complicado, pero tiene su engaño.

Lo que se tiene:

SELECT est_002::text, agri02_002::text, count(*)::numeric
FROM consulta_agri04 GROUP BY agri02_002, est_002 ORDER BY est_002, agri02_002;
est_002 | agri02_002 | count
----------+------------------------+-------
Mérida | CACAO | 83
Mérida | CAFE | 169
Mérida | CAÑA | 68
Mérida | CEREALES Y LEGUMINOSAS | 421
Mérida | FRUTALES | 746
Mérida | HORTALIZAS | 1277
Mérida | ORNAMENTALES | 41
Mérida | RAICES Y TUBERCULOS | 484
Táchira | CACAO | 12
Táchira | CAFE | 29
Táchira | CAÑA | 1
Táchira | CEREALES Y LEGUMINOSAS | 310
Táchira | FRUTALES | 209
Táchira | HORTALIZAS | 451
Táchira | RAICES Y TUBERCULOS | 222
Trujillo | CAFE | 26
Trujillo | CAÑA | 20
Trujillo | CEREALES Y LEGUMINOSAS | 97
Trujillo | FRUTALES | 174
Trujillo | HORTALIZAS | 361
Trujillo | RAICES Y TUBERCULOS | 127
Lo que se quiere:

est_002 |CACAO |CAFE |CAÑA
Mérida |83 |169 |68
Táchira |12 |29 |1
Trujillo | |26 |20
con ésta consulta verifico cuántas columnas tendré:
SELECT DISTINCT agri02_002 FROM consulta_agri04 ORDER BY agri02_002, ya que luego voy a necesitar esa información para definir la salida.

SELECT est_002, agri02_002, count(*)::numeric

Acá defindo, como primer campo, la columna pivote, el segunda campo, serán las columnas, y el tercer campo, los valores a rellenar en la tabla.

Acá defino as columnas de salida en la tabla:
AS lista(estado text, renglon1 text, renglon2 text, renglon3 text, renglon4 text, renglon5 text, renglon6 text, renglon7 text, renglon8 text)

primer campo, el pivot, los demás serán tantos como me devuelva la consulta con el DISTINCT.

De esta amnera, la consulta completa queda:
SELECT * FROM public.crosstab
(
'SELECT est_002, agri02_002, count(*)::numeric FROM consulta_agri04 GROUP BY agri02_002, est_002 ORDER BY est_002, agri02_002',
'SELECT DISTINCT agri02_002 FROM consulta_agri04 ORDER BY agri02_002'
) AS lista(estado text, renglon1 text, renglon2 text, renglon3 text, renglon4 text, renglon5 text, renglon6 text, renglon7 text, renglon8 text);

y devuelve:
estado | renglon1 | renglon2 | renglon3 | renglon4 | renglon5 | renglon6 | renglon7 | renglon8
----------+----------+----------+----------+----------+----------+----------+----------+----------
Mérida | 83 | 169 | 68 | 421 | 746 | 1277 | 41 | 484
Táchira | 12 | 29 | 1 | 310 | 209 | 451 | | 222
Trujillo | | 26 | 20 | 97 | 174 | 361 | | 127
(3 filas)



[0]http://www.postgresql.org/docs/8.3/interactive/tablefunc.html

viernes, abril 16, 2010

Configuración y ejecución con PL / R (PLR) en PostgreSQL

Algunos de los datos aquí provistos, provienen de [0], los cuales se encuentran en Inglés.

R es tanto un lenguaje como un medio para hacer el análisis estadístico. R está disponible como software libre bajo la GPL. Para aquellos familiarizados con entornos como S, MatLab, y SAS - R tiene el mismo propósito. Tiene poderosas construcciones para la manipulación de matrices, los paquetes para importar datos de fuentes de datos diversas como bases de datos relacionales, csv, hojas de cálculo, entre otras.

PL / R es una extensión del lenguaje de PostgreSQL que le permite escribir funciones PostgreSQL y funciones de agregación en el lenguaje estadístico R.

Con el lenguaje R puede escribir cosas como funciones de agregación para calcular la mediana, que no existe de forma nativa en PostgreSQL y sólo existe en una pocas bases de datos relacionales de forma nativa (por ejemplo Oracle) se me ocurre. Incluso en la función de Oracle no aparece hasta la versión 10.

Otro uso popular de R es para hacer diagramas de Voronoi...

Cuando se combina esto con PostGIS tiene un ambiente extremadamente poderoso para hacer cosas como vecino más cercano y búsquedas planeación de instalaciones.

Instalando R

En Debian Linux, aptitude install r-cran-base para obtener R. Sí a alguien se le ocurre hacer un search podrá encontrar un montón de cosas adicionales para R, como módulos por ejemplo, que cada quien instalará según necesite o quiera.

Instalando PL/R

En la lista de postgresql-es, cuando pregunté, Alvaro Herrera me respondió: "¿Probaste apt-get install postgresql-8.3-plr ?". ciertamente lo había buscado en los repos de Debian, pensando que quizás existía, y no lo había encontrado, asumí que sólo conseguiría el tar.gz de la página oficial de PL/R [1], pero, se me ocurrió preguntarle a google y zas! Ubuntu sí que lo tiene en un repos, así que me descargue el .deb a ver qué tal me iba, y bueno... dpkg -i y listo!

Por ahí leí que había que decirle a postgresql dónde está R, y la seña era agregar R_HOME = '/usr/lib/R/' a environment de postresql (en /etc). Reiniciar postgresql

Agregando el lenguaje a la BD

Luego, me di cuenta que un simple createlang plr no funcionaba, así que volví a google y... [2] psql -d mi_bd < /usr/share/postgresql/8.3/plr.sql. Ojo, es posible que esté en otro lado

Probando PL/R

SELECT * FROM plr_environ();
SELECT load_r_typenames();
SELECT * FROM r_typenames();
SELECT plr_array_accum('{23,35}', 42);

Next try to create a helper function (this was copied from (http://www.joeconway.com/plr/doc/plr-pgsql-support-funcs.html) - and test with the following

CREATE OR REPLACE FUNCTION plr_array (text, text) RETURNS text[] AS '$libdir/plr','plr_array' LANGUAGE 'C' WITH (isstrict);
select plr_array('hello','world');

Creating Median Function in PostgreSQL using R

create or replace function r_median(_float8) returns float as 'median(arg1)' language 'plr';
CREATE AGGREGATE median (sfunc = plr_array_accum, basetype = float8, stype = _float8, finalfunc = r_median );
create table foo(f0 int, f1 text, f2 float8);
insert into foo values(1,'cat1',1.21);
insert into foo values(2,'cat1',1.24);
insert into foo values(3,'cat1',1.18);
insert into foo values(4,'cat1',1.26);
insert into foo values(5,'cat1',1.15);
insert into foo values(6,'cat2',1.15);
insert into foo values(7,'cat2',1.26);
insert into foo values(8,'cat2',1.32);
insert into foo values(9,'cat2',1.30);
select f1, median(f2) from foo group by f1 order by f1;
[0]http://www.bostongis.com/PrinterFriendly.aspx?content_name=postgresql_plr_tut01
[1]http://www.joeconway.com/web/guest/pl/r
[2]http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg589297.html

martes, marzo 02, 2010

Las universidades españolas acuerdan promover el software libre

Buenas noticias para el código libre: la Conferencia de Rectores de las Universidades Españolas o CRUE, una asociación de 74 universidades públicas y privadas, ha acordado en una reunión que las universidades impulsarán los programas de código libre para situarse “en una posición de referencia en el ámbito de nuevas tecnologías”.


Ciertamente, aún queda mucho camino que recorrer en el tema del uso de software libre como prioridad para el aprovechamiento de los recursos en la parte acedémica, pero puede ser un avance...

La noticia completa aquí

viernes, enero 15, 2010

Instalando una impresora nueva: Epson Stylus T20

Agradecimientos públicos a otro blog [0]

El primer paso es descargar el archivo desde la web:

http://www.ircdshells.com.ar/linux/epson-pips.tar.gz

Entramos al directorio donde sea que sea que hayamos descargado el archivo, en mi caso:

# cd /home/emmanuel/Desktop

Descomprimimos el archivo:

# tar zxvf epson-pips.tar.gz

# cd epson-pips

Instalamos los drivers:

# sudo dpkg -i *.deb

Copiamos el archivo "ekpd":

# sudo cp ekpd /etc/init.d/ekpd

Damos Permiso de Ejecucion:

# sudo chmod +x /etc/init.d/ekpd

Agregamos ekpd para que se ejecute al inicio:

# sudo update-rc.d ekpd defaults

Instalamos 2 librerias:

# sudo apt-get install libtiff4 libpng3

Creamos el siguiente enlace simbolico:

# sudo ln -s /usr/lib/libtiff.so.4.2.1 /usr/lib/libtiff.so.3

Copiamos el archivo de configuracion:

# sudo cp /usr/local/EPAva/printer/st20/ekpdrc_st20 /etc/ekpdrc

Apartir de este punto, la impresora debe estar conectada!

Ejecutamos la aplicacion "ekpd-tool":

# sudo ekpd-tool

En mi caso los valores que puse son los siguientes:



Ahora iniciamos el demonio ekpd:

# sudo /etc/init.d/ekpd start

Ahora abrimos el configurador de impresoras, y taran! ahí ta!

[0]http://linuxapuntes.blogspot.com/2009/05/instalar-impresora-epson-stylus.html

lunes, enero 04, 2010

FLISOL 2010

El evento Latinoamericano más importante, en su edición 2010, será el próximo sábado 24 de abril, y Mérida no escapará a esta oportunidad.

Aún se está montando el evento, pero como todos los años, es un encuentro de experiencias que dejan emociones y satisfacciones.

Festival Latinoamericano de Instalación de Software LIbre

Pendientes!