Instalación de OTRS en Debian Wheezy + PostgreSQL + Apache

OTRS (Open-source Ticket Request System) es un software Help Desk de Código Abierto y de Gestión de Servicios de TI escrito en Perl y licenciado bajo AGPL.

-Instalar paquetes necesarios:

root@k8:/home/leninmhs#aptitude install libapache2-mod-perl2 libdbd-pg-perl libtimedate-perl libnet-dns-perl libnet-ldap-perl libio-socket-ssl-perl libpdf-api2-perl libsoap-lite-perl libgd-text-perl libtext-csv-xs-perl libjson-xs-perl libgd-graph-perl libapache-dbi-perl libyaml-libyaml-perl postgres apache2

Descargar OTRS: http://www.otrs.com/try/

OTRS Help Desk 3.3.9.tar.gz

 

root@k8:/home/leninmhs# tar xf otrs-3.3.9.tar.gz
root@k8:/home/leninmhs# mv otrs-3.3.9 /opt/otrs
root@k8:/home/leninmhs# cd /opt/

 

-Se configuran los usuarios:

root@k8:/opt# useradd -r -d /opt/otrs/ -c ‘OTRS user’ otrs
root@k8:/opt# usermod -G nogroup otrs

-Chequeamos que tenengamos todos los módulos Perl necesarios:

root@k8:/opt# cd/otrs/bin

root@k8:/opt/otrs/bin# ./otrs.CheckModules.pl
o Archive::Tar…………………ok (v1.90)
o Crypt::Eksblowfish::Bcrypt…….Not installed! (optional – For strong password hashing.)
o Crypt::SSLeay………………..ok (v0.58) Sigue leyendo

Perl – Leer valores de archivo LDIF con Net::LDAP::LDIF

perl_frase

perl_frase

El siguiente código fuente escrito en el lenguaje de programación Perl, lee un archivo LDIF exportado desde openldap, captura los valores que nos interesan de cada objeto (en nuestro caso uid, mail y displayname), para ir mostrándolos en el terminal mientras se esta ejecutando y genera un archivo plano resultante con los valores que necesitábamos. La magia de entender y manipular amigablemente archivos LDIF para lectura y escritura la realiza el modulo Net::LDAP::LDIF de CPAN. En Debian o derivados instalen el paquete libnet-ldap-perl.

 

#!/usr/bin/perl
# aptitude install libnet-ldap-perl
# Lee valores de archivo ldif

use Net::LDAP::LDIF;

$ldif = Net::LDAP::LDIF->new( "ldap.ldif", "r", onerror => 'undef' );
while ( not $ldif->eof( ) ) {
  $entry = $ldif->read_entry( );
  if ( $ldif->error ( ) ) {
   print "Error msg: ", $ldif->error( ), "\n";
   print "Error lines:\n", $ldif->error_lines( ), "\n";
  } else {
   $uid  = $entry->get_value("uid");
   $mail = $entry->get_value("mail");
   $displayname  = $entry->get_value("displayname");
   $result_ldif  = "$uid,$mail,$displayname \n";
   print $result_ldif;
   open (ARCHIVO_FINAL,">> result_ldif.csv") || die "No se puede abrir el archivo\n";
   print ARCHIVO_FINAL $result_ldif;
   }
}
$ldif->done ( );

Generar codigo QR desde postgreSQL con Perl

perl_frase

qr-leninmhsComo practica para probar y conocer como generar códigos QR en Perl, realizaremos el siguiente ejercicio: conectarnos a una base de datos, consultar el identificador único de cada producto en una tabla de nuestra base de datos postgres, generar el código QR de cada uno de los productos. Cada QR direccionara a un url compuesto por una pagina web + el identificador, con lo cual suponemos que en ese url hubiera la información con mas detalle del producto. La practica sera realizada en Debian GNU/Linux

Usaremos el modulo de CPAN Imager::QRCode para generar nuestros QR. Mas información: http://search.cpan.org/~kurihara/Imager-QRCode/lib/Imager/QRCode.pm

Para conectarnos y consultar la base de datos, usaremos la extensión para postgres de Class::DBI. Mas información: http://search.cpan.org/~rudy/DBD-Pg/Pg.pm

Ambos módulos los tendremos disponibles en nuestro Debian con: #aptitude install libimager-qrcode-perl libclass-dbi-pg-perl

Crearemos un archivo de texto con extensión .pl colocaremos y adaptaremos lo siguiente:

Código Fuente

#!/usr/bin/perl -w
use Imager::QRCode;
use DBI;

my $bd = DBI->connect("DBI:Pg:dbname=bd_ventas;host=192.168.0.1", "usuario_bd", "clave_bd", {'RaiseError' => 1});
my (@consulta, $sth);

$sth=$bd->prepare("SELECT id_producto FROM productos");
$sth->execute();

my $qrcode = Imager::QRCode->new(
size          => 8,
margin        => 1,
version       => 4,
level         => 'L',
casesensitive => 1,
lightcolor    => Imager::Color->new(255, 255, 255),
darkcolor     => Imager::Color->new(0, 0, 0),
);

while(@consulta = $sth->fetchrow_array() ){
$img = $qrcode->plot("http://paginaweb.com.ve/$consulta[0]", \%params);
$img->write(file => "$consulta[0].gif");
}#fin while

Explicación del código fuente

Nota: La numeración presentada a continuación corresponde a las lineas de código presentadas anteriormente.

Sigue leyendo

Redis – Tu base de datos libre en memoria

base de datos database memoria ram radis nosql

redisRedis es un motor de base de datos libre de tipo clave-valor (key-value) persistententes que residen en memoria ram y posteriormente vuelca el conjunto de datos almacenados al disco duro. Redis es cliente/servidor por lo que levanta su servicio y responde peticiones, cuenta con interfaz de red lo cual hace posible conectar clientes o nodos desde otros host.

Redis es key/value esto significa que solo entiende Claves y Valores, es decir, cadenas, listas, hash, conjuntos y conjuntos ordenados, de igual manera Redis provee mecanismos para manipular y consultar estas estructuras de datos. Al no pertenecer al mundo relacional automáticamente entra en el grupo de bases de datos libres de tipo NoSQL (Not Only SQL).

Se puede ejecutar operaciones atómicas sobre estos tipos, como agregar elementos a una cadena; incrementar el valor de un hash, empujando a una lista; intersección de conjuntos de computación, unión y diferencia, o conseguir el miembro de más alto rango en un conjunto ordenado.

Redis resuelve de manera sencilla y eficiente problemas que no necesitan la complejidad de las bases de datos relacionales, como lo es en la mayoría de los casos de usos el almacén y gestión de estructuras de datos temporales, por lo cual redis es mayoritariamente usado para incorporar soluciones sofisticadas de cache de datos ó como backend de operaciones en linea en escenarios de alta demanda. Redis no pierde tiempo pensando  en relaciones, restricciones ni tipos de datos, se enfoca en hacer eficientemente su trabajo que es establecer y recuperar (set y get) datos sobre las estructuras con las que cuenta.

memoria-ram-radis-nosql

memoria-ram-radis-nosql

Ahora bien, todo esto suena excelente, pero ¿para que querría alguien usar esto en la vida real?

  • Su compleja y mimada base de datos relacional que soporta toda la carga de sus operaciones, recientemente se le incorporo mensajería instantánea (si sus usuarios chatean entre si, con clientes y publico en general ) a la aplicación que hace uso de ella, se dio cuenta que esto que no es lo mas importante en su modelo de negocios, le esta colapsando su servicio. Pues transfiera la gestión de chat a Redis y luego totaliza la mensajería del dia y la manda como histórico a su base de datos principal.
  • Suponga que tiene un portal web con mucha trayectoria y miles de millones de contenidos, así como millones de visitas diarias, cuya pagina de inicio abarca el 90% de las visitas de su web, su pagina de inicio solo son 30 contenidos y otros elementos, pues en vez de recorrer su base de datos tradicional con los millones de contenidos en busca de los 30, simplemente los pone a disposición de la manera mas rápida posible.
  • Para análisis y procesamiento en tiempo real. Su país necesita implementar un sistema integral de atención a sus ciudadanos, ideal seria que la carga de consultas de los tickets vigentes resida en una solución como redis, y que el análisis y monitoreo del comportamiento de los usuarios en linea en el sistema también.
  • Gestión de sesiones de usuarios y soluciones de cache, entre muchas otras.

Actualmente Redis es usado por: Twitter, Instagram, GitHub, Flickr, DiggHeroku lo oferta en sus servicios, es soportado por muchos de los proveedores de plataforma como servicio, entre muchos otros de los grandes en internet.

Sigue leyendo

Perl – convertir ISO-8859-1 a UTF-8

perl-pdfPerl usa como codificación de caracteres a UTF-8 de forma predeterminada, sin embargo es común que perl tenga que interactuar con otros juegos de caracteres provenientes de fuentes de datos externos como archivos de texto, csv o bases de datos donde los caracteres sean representados típicamente en ISO-8859-1 también conocido como Latin1 si provienen de sistemas windows,colocándonos así en la tarea de tener que convertir ó transformar la codificación de los caracteres con los que estemos trabajando para así cumplir nuestros objetivos de programación.

El principal problema o dolor de cabeza de datos codificados en Latin1 presentes en entornos utf8 es la representación de caracteres especiales como (ñ y Ñ) y las letras acentuadas (con acentos) como [á,é,í,ó,ú,Á,É,Í,Ó,Ú,à,é,Á,É] que son mostrados con algo similar a: �.

El siguiente perl script usa el módulo Encode para transformar caracteres ISO-8859-1 provenientes de una base de datos MySQL a UTF-8, que para los efectos de esta entrada serán imprimidos por pantalla tanto la data original como la convertida en UTF-8.

#!/usr/bin/perl -w
use DBI;
use Encode;

$bd = DBI->connect("DBI:mysql:basededatos:host","usuario", "clave", { PrintError => 1}) || die $DBI::errstr;

$sth=$bd->prepare('SELECT * FROM noticias order by id asc limit 2000');
$sth->execute();

while(@consulta =$sth->fetchrow_array()){
print "id: ".++$incremeta_id;
print " Titulo original: ".$consulta[1]." - ";
print "Convertido UTF-8: ".encode('utf-8', $consulta[1])."\n";
}

print "\t\t\n $incremeta_id registros convertidos a UTF-8\n";

$sth->finish;

La función encode que vemos en la linea 13 recibe dos (2) parámetros. El primero el juego de caracteres que necesitamos y el segundo la cadena de texto (string) a realizar la conversión.

$utf8-string = encode("utf8", $string);
lenin@i5:~/Escritorio/convert$ time perl test-encode.pl
id: 1990 Titulo original: Se entreg� este a�o mil becas de Maestr�a y Doctorado – Convertido UTF-8: Se entregó este año mil becas de Maestría y Doctorado
id: 1991 Titulo original: Vecinos: “Grabaci�n aclara m�s la masacre” – Convertido UTF-8: Vecinos: “Grabación aclara más la masacre”
id: 1992 Titulo original: El inc�modo muerto – Convertido UTF-8: El incómodo muerto
id: 1993 Titulo original: Explosi�n de artefacto dej� tres heridos – Convertido UTF-8: Explosión de artefacto dejó tres heridos
id: 1994 Titulo original: Crudo repunt� a 26,60 d�lares por barril – Convertido UTF-8: Crudo repuntó a 26,60 dólares por barril
id: 1995 Titulo original: Peri�dico presentar� �Memoria – Convertido UTF-8: Periódico presentará “Memoria
id: 1996 Titulo original: Derechos del ni�o – Convertido UTF-8: Internet: Derechos del niño
id: 1997 Titulo original: Recolecci�n de basura – Convertido UTF-8: Recolección de basura
id: 1998 Titulo original: “No m�s cuentos” – Convertido UTF-8: “No  más cuentos”
id: 1999 Titulo original: GALER�A DE IM�GENES – Convertido UTF-8: GALERÍA DE IMÁGENES
id: 2000 Titulo original: Alcald�a entreg� donativo – Convertido UTF-8: Alcaldía entregó donativo
2000 registros convertidos a UTF-8
real 0m0.666s
user 0m0.052s
sys 0m0.020s
lenin@i5:~/Escritorio/convert$

Como resultado tenemos ya los caracteres legibles por pantalla, preparados para ser procesados, representados en otros medios ó almacenados en correcto UTF-8. El ejemplo fue realizado en Debian GNU-Linux.