Inteligencia de Negocios con PostgreSQL

Para los que tenemos tiempo trabajando con PostgreSQL no es ningún secreto que existen soluciones como Pentaho con las que podemos lograr resultados profesionales, claro que no es sencillo pero los resultados tampoco lo son.

Existen otras opiciones como Open Flash Charts que son mas limitadas pero al mismo tiempo más sencillas de implementar obteniendo resultados más rápidamente.

Estos son los dos extremos, sin embargo, existe otra solución que hace algunos días apareció en la lista de correo de PostgreSQL, se llama HTSQL, es gratuito para proyectos basados en motores de bases de datos de código abierto, en donde no se paga ni siquiera por el soporte.

Es impresionante, para muestra bastan los ejemplos que ponen en su página, donde vemos como una consulta que conllevaría ligar varias tablas se puede generar en una o dos líneas de código con esta solución. Un Ejemplo tomado de su página:

Supongamos que necesitamos generar la siguiente consulta:

SELECT "school"."name",
       COALESCE("program"."count", 0),
       COALESCE("department"."count", 0)
FROM "ad"."school" AS "school"
LEFT OUTER JOIN (
  SELECT COUNT(TRUE) AS "count",
         "program"."school"
  FROM "ad"."program" AS "program"
  GROUP BY 2
) AS "program"
ON ("school"."code" = "program"."school")
LEFT OUTER JOIN (
  SELECT COUNT(TRUE) AS "count",
         "department"."school"
  FROM "ad"."department" AS "department"
  GROUP BY 2
) AS "department"
ON ("school"."code" = "department"."school")
ORDER BY "school"."code" ASC

Esta consulta nos sirve para obtener un listado de escuelas con una cuenta de programas y departamentos en la escuela ordenados por el código de la escuela. Algo que parece sencillo pero que al momento de llevarlo a SQL y sobre todo para los principiantes no lo es tanto. Pues bien con HTSQL esto se lograría con:

/school{name, count(program),
        count(department)}

Y listo, como pueden ver la diferencia en código y legibilidad es muy significativa.

Mas información aquí.

El problema de la privacidad con Google

Para todos aquellos que gustamos de utilizar el navegador de la omnipresente google pero que necesitamos mayor privacidad existen varias alternativas.

1. Google Sharing
Este es un addon de Mozilla Firefox que básicamente utiliza un proxy para enrutar todas nuestras solicitudes a través de este y ocultar nuestra información de conexión. Se puede descargar aquí.

2. TOR
TOR (The Onion Router) es un proyecto que funciona de manera parecida a un proxy, pero en este caso el enrutamiento de nuestras solicitudes se genera a través de las máquinas de las personas que en ese momento se encuentran en línea, es decir yo puedo realizar una búsqueda desde mi computadora en México y TOR se encarga de enviar esta a través de varios equipos, con saltos al azar con lo que al final mi búsqueda puede parecer haber salido de Tailandia por ejemplo. Se puede obtener mayor información aquí.

3. Starting Page
Starting Page es un proyecto de buscador que básicamente hace que nuestras búsquedas en google se hagan a través de su servidor el cual en ningún momento recoge información nuestra, con lo que nuestros datos, al menos en lo que refiere a google quedan protegidos. Más información aquí.

Existen muchas opciones más, cada una con sus defectos y virtudes, y como en cualquier cuestión de seguridad a mayor grado de protección mayores son los recursos necesarios, y no solo materiales sino por ejemplo en el caso de la protección de nuestra información al navegar por internet podemos optar por combinar estas tecnologías y hacer que nuestra conexión a internet sea más lenta pero eso sí, más segura.

Espero que esta información les sirva.

SUA y el Error 20599

Hoy en una instalación al estar intentando imprimir un reporte en SUa me lanzaba este error:

SUA 20599 Cannot open SQL

Esta instalación la había pasado de otro equipo a este, los dos tenían la misma versión de SUA instalada con los últimos parches, la solución es simple.

1. Entrar al directorio C:\Archivos de Programa\SUA
2. Ahí se encuentra un archivo llamado Conexión.dsn
3. Click derecho y Abrir con…
4. De la lista que aparece seleccionamos NotePad
5. Hay una línea que dice cual es la ubicación del archivo SUA.MDB que es donde se guardan todos los datos, es una base de datos Access.
6. Es seguro que esta línea tenga la ubicación en donde se encontraba instalado el SUA en el otro equipo, yo lo había pasado de un equipo con Windows en inglés así que la línea decía C:\Program Files\SUA
Lo cambié a C:\Archivos de Programa\SUA
Y asunto arreglado.

También es importante verificar que se encuentre el el archivo P2SODBC.DLL en el directorio C:\WINDOWS\CRYSTAL y que sea la misma versión que la que se encuentra en el directorio C:\WINDOWS\SYSTEM32.

Fechas y Horas en Postgres

¿ Quién no ha tenido la necesidad de insertar una fecha y hora en un registro en alguna tabla para fines de auditoria ?

Normalmente en estos casos yo personalmente guardo en cada registro:

  • Quien, cuándo y desde dónde creó el registro
  • Quién, cuándo y desde dónde hizo la última modificación en el registro

Adicional a estos datos, tengo una tabla de bitácora que me guarda información sobre las actividades importantes de los usuarios en el sistema.

Para la parte de los datos de cuando se ha creado o modificado un registro siempre he utilizado timestamp, PostgreSQL acepta los siguientes tipos para el manejo de Fechas:

  • timestamp
  • timestamp with time zone
  • date
  • time
  • time with time zone
  • interval

Para obtener el dato de la hora actual de PostgreSQL se pueden utilizar cualquiera de las sguientes instrucciones:

  • CURRENT_DATE : Fecha Actual
  • CURRENT_TIME : Hora Actual
  • CURRENT_TIMESTAMP : Fecha y Hora Actual
  • LOCALTIME
  • LOCALTIMESTAMP

CURRENT_TIME y CURRENT_TIMESTAMP entregan la fecha y hora actual sin el dato de la zona horario, caso contrario de LOCALTIME y LOCALTIMESTAMP. Cabe decir que es posible agregar un parámetro precision para indicar hasta cuandos dígitos se quiere llegar de resolución. Ademas se puede utilizar NOW() para obtener fecha y hora actuales que en este caso es equivalente a CURRENT_TIMESTAMP.

Fuera de los datos normales fechas y horas tanto con la zona horaria o sin esta, existe el dato interval que básicamente guarda un período de tiempo transcurrido.

PostgreSQL inlcuye un amplio rango de funciones para operar con fechas y horas:

age(timestamp, timestamp): Entrega el tiempo transcurrido entre dos fechas con horario dadas, ejemplo:

Si necesitamos saber cuanto tiempo ha transcurrido desde el día 01 de Enero de 1980 a la fecha podemos utilizar:

SELECT age('1980-01-01 00:00:00','2009-07-08 13:00:00')

Esto nos devolverá algo como:

-29 years -6mons -7days -13:00:00 (esto corresponde al momento en que se estaba publicando esta entrada :D )

Si se omite el segundo parámetro el sistema nos mostrará el tiempo transcurrido desde la fecha especificada hasta la fecha, hora minuto, segundo y milésimas de segundo actuales.

date_part(parámetro, timestamp): Obtiene la parte de la fecha que se especifíque en parámetro, los valores pueden ser:

  • century: Devuelve el siglo de la fecha dada
  • day: Devuelve el día del mes de la fecha dada
  • decade: Devuelve el año divido entre 10
  • dow: Devuelve el número del día de la semana donde Domingo = 0 y Sábado = 6
  • doy: Devuelve el número de día dentro del año especificado
  • epoch: Devuelve el número de segundos para la fecha y hora especificada a partir de 1970-01-01 00:00:00-00
  • hour: Devuelve la hora de la fecha y hora especificada (0-23)
  • microseconds: Devuelve los segundos, incluyendo sus fracciones multiplicados por 1’000,000
  • millenium:  Devuelve el milenio de la fecha y hora especificada
  • milliseconds: Devuelve los segundos, incluyendo sus fracciones multiplicadas por 1,000
  • minute: Devuelve los minutos (0-59)
  • month: Devuelve el número del mes (1-12)
  • quarter: Devuelve el cuatrimestre del año para la fecha especificada (1-4)
  • second: Devuelve el segundo de la fecha dada (0-59)
  • timezone: La zona horaria en UTC
  • timezone_hour: La hora de la zona horaria
  • timezone_minute: El minuto de la zona horaria
  • week: Devuelve el número de la semana dentro de la fecha dada
  • year: Devuelve el número del año dentro de la fecha dada

Espero continuar ampliando esta información próximamente.

NomiPAQ Error Procesando Línea 0 (Unable to get information from SQL Server localhost))

Hace unos días realice una recuperación de datos de un servidor que se había dañado, había que pasar los datos de un sistema para nominas de Computación en Acción, NomiPAQ, a otro equipo, asi que revisando el sistema, este funciona de entrada con SQL Server Express 2005, asi que tome los datos del directorio data de SQL Server y el directorio de reportes de Empresa, instalé el sistema en otro equipo e hice la unión (attach) de las bases de dato las cuales primero copie al directorio Data de SQL Server, arranqué el NomiPAQ y todo parecía funcionar correcto hasta que se intentó correr un reporte, entonces apareció el siguiente error:

Error procesando línea 0 (Unable to get information from SQL Server’s localhost)

Y simplemente no mostraba ni siquiera los filtros para ejecutar el reporte.

La solución en si es bastante simple:

1. Hay que ir al grupo de programas de SQL Server Express 2005 y en la Herramienta de Configuración arrancar el sevicio de Exploración de SQL Server Express (Browse) que seguramente va a estar deshabilitado así que primero hay que ponerlo en arranque automático.
2. Ahí mismo hay que indicarle al SQL Server que ademas del servicio normal también deberá prestar servicios para TCP/IP y Named Pipes, hay que activarlos ambos, luego reiniciamos el servicio de SQL Server y el del Explorador de SQL Server.

Y listo, el sistema comenzó a funcionar sin problemas.

Acelerar el inicio de Firefox en Windows Vista

He encontrado un truco en la página de Firefox Hispano para acelerar el inicio de Firefox en cualquier versión 3.x

Sin embargo el método comentado en el sitio está enfocado a XP, para los que sufrimos con la desgracia de tener un equipo con Vista este es el método para acelerar el inicio de Firefox. El truco básicamente es limpiar las bases de datos SQLite que el programa utiliza como medio de almacenamiento.

1. Es necesario tener instalado SQLite. Es OpenSource y lo pueden descargar desde aquí. Si alguien creía que no se podia tener un RDBMS en menos de 1Mb, pues esta es la muestra.

2. Los archivos donde Firefox almacena información se encuentran en:

C:\Users\[Usuario]\AppData\Mozilla\Firefox\Profiles\[ID del Perfil]\

3. Ahí se pueden encontrar uno o varios archivos con extensión .sqlite, para cada uno de estos se debe ejecutar el siguiente comando:

sqlite [Nombre Archivo].sqlite "VACUUM"

4. Dependiendo del tamaño del archivo se puede llevar algun tiempo para compacatarlo, una vez que termine se deberá notar una disminución en el tamaño del o los archivos compactados.

Y listo.

Instalar software de google en Ubuntu 9.04

Existen algunos paquetes interesantes en los repositorios de google que vale la pena instalar, básicamente:

  • Google Desktop
  • Google Picasa y
  • Google Gadgets

Para instalar estos paquetes en Ubuntu es necesario agregar los repositorios de google a nuestra lista de fuentes de software, que se hace editando el archivo sources.list:

sudo vim /etc/apt/sources.list

Enseguida debemos añadir estas dos líneas:

deb http://dl.google.com/linux/deb/ stable non-free
deb http://dl.google.com/linux/deb/ testing non-free

En mi caso estoy añadiendo tanto el repositorio estable como el de pruebas, sin embargo si no son tan animados como yo pueden habilitar sólo el primer repositorio.

Una vez que tenemos los repositorios habilitados vamos a obtener la llave de google que nos permitirá verificar todos los paquetes descargados desde sus servidores:

wget https://dl-ssl.google.com/linux/linux_signing_key.pub

Enseguida agregamos la llave a nuestra lista de llaves con:

sudo apt-key add linux_signing_key.pub

Y actualizamos la lista de paquetes:

sudo apt-get update

Ahora podemos comenzar a instalar los paquetes desde los repositorios de google:

sudo apt-get install google-desktop-linux picasa google-gadgets-common google-gadgets-gtk

Y listo. Espero les sirva.

Instalar Apache2 con SSL en Ubuntu 9.04 (Jaunty)

Esta es una guía para ayudar en la instalación de Apache2 con soporte para SSL en un servidor Ubuntu 9.04 (Jaunty). Esta guía asume que para esto ya se tiene instalado un stack LAMP (Linux, Apache, MySQL y PHP) en la máquina donde se desea realizar la instalación. No será necesario contar con el stack completo sin embargo si es necesario al menos contar con Apache2 instalado en el equipo.

Para verificar que efectivamente contamos con todos los requisitos tecleamos en la terminal:

sudo apt-get install apache2 apache2.2-common apache2-utils openssl openssl-blacklist openssl-blacklist-extra

Leer más

Instalar Ubuntu 9.04 desde la red

Hace unos días necesité reinstalar un servidor que anteriormente utilizaba el sistema operativo de las ventanitas, para reutilizarlo decidí darle una oportunidad a la nueva versión de Ubuntu Server 9.04.

El problema con este servidor es que la unidad de CD ya no le funciona, y ademas por ser un equipo algo viejo no puede arrancar desde unidades USB. Así que mi única opción ha sido instalar el sistema vía Red.

Leer más

Instalar impresora PDF en Ubuntu 9.04

He tenido la necesidad de instalar una impresora PDF en Ubuntu, actualmente trabajo con la versión 9.04 (Jaunty Jackalope) y el proceso no ha sido muy complicado. Basta con hacer lo siguiente:

1. Crear un directorio dentro de tu directorio personal (/home/mi_usuario) que se llame PDF con permisos 750

mkdir PDF
chmod 750 PDF

2. En una terminal ejecutar:

sudo apt-get install cups-pdf

3. Luego de que se termine de instalar el paquete hay que reiniciar el servicio de cups:

sudo /etc/init.d/cups restart

4. Listo, ahora si vamos a Sistema -> Impresoras vamos a tener una impresora nombrada PDF.

Y listo, todos los documentos que enviemos a imprimir quedarán guardados en la carpeta que hemos creado (/home/mi_usuario/PDF) con el nombre del archivo que hemos impreso.

Algunas personas han reportado problemas con estos pasos ya que no se genera ningun archivo PDF. La solución puede ser primero, desinstalar cups-pdf, y volver a instalarlo, o en su defecto ejecutar desde una terminal:

sudo aa-complain cupsd

Y listo, deberá funcionar sin mayores problemas.

Espero les sirva.

Seguir

Get every new post delivered to your Inbox.