tag:blogger.com,1999:blog-72581681333633803692024-02-07T18:30:42.699-06:00Through me the way among the people lost.El objetivo de este blog es el de hacer publicos muchos de los trucos, hacks, codigos y experiencias que he acumulado al rededor del tiempo, y claro porque no, divertirme y pasar un buen rato en compañia de ustedes.Unknownnoreply@blogger.comBlogger47125tag:blogger.com,1999:blog-7258168133363380369.post-86814548774710884222010-09-12T19:45:00.004-05:002012-06-24T05:26:20.040-05:00Agregar el driver JDBC de postgresql a Crystal Reports XIPostgreSQL<br /> Clase Driver: org.postgresql.Driver<br /> URL de Conexión: jdbc:postgresql://<server>:<port>/<database><br /> Fichero .jar/.zip: postgresql.jar<br /><br /><br />Para agregar el soporte del driver JDBC de postgresql a Crystal Reports XI lo que debemos hacer es:<br /><br />1. copiar el archivo JAR del controlador (postgresql-8.4-701.jdbc4.jar) almacenado por lo regular en: C:\Program Files\PostgreSQL\pgJDBC aunque puede variar la ubicación, en la ruta "C:\Program Files\Common Files\Business Objects\3.0\java\lib\external" del Crystal Reports XI.<br /><br />Una vez copiado el archivo jar, necesitamos editar el archivo: CRConfig.xml almacenado en "C:\Program Files\Common Files\Business Objects\3.0\java". Agradando el path de conexión hacia el nuevo driver dentro de la etiqueda <Classpath>...</Classpath>.<br /><br />Un ejemplo de mi archivo CRConfig.xml ya modificando la etiqueta <Classpath> y resaltando la linea agregada seria: <br /><br /><Classpath>C:\Program Files\Common Files\Business Objects\3.0\java/lib/crlovmanifest.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/CRLOVExternal.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/CRDBJavaServerCommon.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/CRDBJavaServer.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/CRDBJDBCServer.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/CRDBXMLServer.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/CRDBJavaBeansServer.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/external/CRDBXMLExternal.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/external/log4j.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/cecore.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/celib.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/ebus405.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/corbaidl.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/external/freessl201.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/external/asn1.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/external/certj.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/external/jsafe.jar;C:\Program Files\Common Files\Business Objects\3.0\java/lib/external/sslj.jar;<b>C:\Program Files\Common Files\Business Objects\3.0\java\lib\external\postgresql-8.4-701.jdbc4.jar;</b>${CLASSPATH}</Classpath><br /><br />Listo...<br /><br />Unknownnoreply@blogger.com8tag:blogger.com,1999:blog-7258168133363380369.post-23035807600595087122010-03-05T21:17:00.002-06:002012-06-24T05:26:34.029-05:00Problemas al instalar Sybase SQL Anywhere 11 en Fedora Core 12Hola amigos, el día de hoy tuve la ocurrencia de instalar SQL Anywhere 11 en mi servidor con Fedora Core 12 de 64 Bits y todo fallaba. La razón era que necesitaba habilitar el soporte para aplicaciones de 32 bits en mi fedora y la forma de habilitarlo fue instalando el paquete sdl.i686 de la siguiente manera:<br /><br />#yum install SDL.i686<br /><br /><br />Y listo ya jalo el instalador y todo lo demas. Saludos cordiales.<br /><br />Unknownnoreply@blogger.com10tag:blogger.com,1999:blog-7258168133363380369.post-12010682900661381222010-02-18T22:55:00.006-06:002012-06-24T05:26:48.318-05:00Configurar el modem router adsl tp-link modelo TD-W8901G con Infinitum de telmex para mandar al diablo al router 2wire, thompson o algún otro similar.Primero que nada hola a todos, el motivo de este post es el de mostrar como se configura el modem router TP-Link TD-W8901G para deshacernos de los router que nos da hellmex para la conexión infinitum aquí en México.<br /><br />Bueno, el principal problema para meter este dispositivo a la red de telmex es cuando tenemos que configurar el circuito virtual ATM. con los valores VPI: 8 y VCI: 81 asi como habilitar Bridge Interface a activa.<br /><br />A continuación pongo una imagen de como quedaría la configuración de nuestro modem router:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbs2Q_kGW1kuJMum7C1u3-J-Jcbph-1QZHSbGmkkULzVBfMLjmdWIFDsM2zfAjYcsEZp0RlRXUgR3FplppomVTOChG6D3YhsHVtfLdXhutxVRV-Kjb1_PCbw8nhd7ZkN9k-iQtRHQh-OQ/s1600-h/tplink.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 276px; height: 400px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbs2Q_kGW1kuJMum7C1u3-J-Jcbph-1QZHSbGmkkULzVBfMLjmdWIFDsM2zfAjYcsEZp0RlRXUgR3FplppomVTOChG6D3YhsHVtfLdXhutxVRV-Kjb1_PCbw8nhd7ZkN9k-iQtRHQh-OQ/s400/tplink.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5440030316417143538" /></a><br /><br />Es importante notar que este router tolera hasta 8 circuitos virtuales y para el caso de infinitum solo necesitamos uno y no importa el orden, yo por ejemplo elegí el PVC2.<br /><br />Esto es todo por ahora y espero les ahorre tiempo a la hora de configurar estos dispositivos con infinitum de telmex.<br /><br /><br />Unknownnoreply@blogger.com13tag:blogger.com,1999:blog-7258168133363380369.post-12092450281204425802009-11-01T14:06:00.001-06:002012-06-24T05:27:34.920-05:00EN LA MUERTEDe la niñita Adela Mitchell y Perla<br /><br /> (A sus padres)<br /><br /> ¡Ay, el mayor dolor de los dolores<br /> no es recordar los días de ventura<br /> en medio de la mísera amargura,<br /> como lo dijo Dante.<br /> no; que el mayor dolor de los dolores<br /> es contemplar la pálida hermosura<br /> de la hija idolatrada,<br /> emblema del amor y la ternura<br /> presa del estertor de la agonía<br /> y ver como se extingue su mirada<br /> que ayer nos sonreía<br /> lánguida, vaga, incierta:<br /> ¡tocar sus manos y sentirla fría!<br /> ¡besar su rostro y encontrarla muerta!<br /><br /><br />Luis Benjamín Cisneros. Lima, 1899.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7258168133363380369.post-11508727608533039052009-08-22T02:33:00.002-05:002012-06-24T05:27:47.556-05:00Fedora Core 11 problemas con libstdc++.so.5Hola a todos, hace unos dias queria instalar el servidor Glassfish de SUN en un Fedora Core 11 nuevo y me tope con un error muy peculiar y este era que no tenia el sibstdc++.so.5 en mi sistema, aqui muestro el error:<br /><br />./java_app_platform_sdk-5_07-linux.bin: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory<br /><br />Pues me puse a buscar la susodicha libreria y me tope que si estaba pero en la versión 6, afortunadamente aqui en fedora es facil corregir este problema y solo basta hacer un yum con los siguientes parametros:<br /><br />yum install compat-libstdc++-33.i586 compat-libstdc++-296.i586<br /><br />y listo, todo solucionado.<br /><br />Saludos cordiales.<br /><br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7258168133363380369.post-20496686734267494412009-07-27T00:34:00.003-05:002012-06-24T05:28:04.532-05:00Cambiar el locale en fedoraPara cambiar el lenguaje y charset solo basta con modificar el archivo: <br /><br />/etc/sysconfig/i18n<br /><br />La variable LANG se modifica por cualquier charset instalado en fedora como puede ser es_MX.UTF8 o es_MX.ISO-8859-1<br /><br />Saludos cordiales.<br /><br />Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-7258168133363380369.post-51496261639795925002009-07-02T15:27:00.004-05:002012-06-24T05:28:50.278-05:00¿Problemas con el codigo de pagina en postgresql para windows? Aqui esta lo que a mi me funciono...Este problema es muy frecuente cuando empezamos a usar postgresql sobre todo en windows y es que cuando insertamos datos en nuestras tablas con caracteres acentuados, eñes o cualquier otro caracter raro, no se visualiza correctamente. Esto es debido a un problema de codificación entre el cliente y el servidor, pero el problema se soluciona facilmente porque en realidad no es un problema de postgres sino de nosotros.<br /><br />1) Abrimos una terminal de msdos (cmd) o command prompt y ahi seteamos la codificacion WIN1252 para permitirnos un rango mas amplio de caracteres. El comando queda asi: <code>chcp 1252</code>.<br /><br />2) Modificamos el tipo de letra de la consola a <b>"Lucida Console"</b>.<br /><br />3) Seteamos el client_encoding de postgres a Win1252 de la siguiente manera: <br /><br /><code><br />set client_encoding=win1252;<br /></code><br /><br />4) Eso es todo.<br /><br />Saludos.<br /><br />Unknownnoreply@blogger.com5tag:blogger.com,1999:blog-7258168133363380369.post-2752281743172966762009-07-02T00:41:00.003-05:002012-06-24T05:29:06.800-05:00Eliminando la cuenta del servicio de postgres en windowsHola a todos, hoy baje la esperada version 8.4 de postgresql y como lo probe en windows me tope con un problema que ya me habia pasado antes pero no le di importancia y este fue:<br /><br />Cuando intente instalar el nuevo postgres despues de desinstalar la version anterior, creo que la 8.3.7 bajo windows vista pues resulta que no me acordaba del password que le habia puesto al usuario postgres que levanta el servicio y pues no podia instalar el nuevo porque no avanzaba de la pantalla en la que pide el password del usuario postgres. Pues bien lo que se me ocurrio fue borrar la cuenta anterior y dejar que el instalador de postgres creara una nueva cuenta de postgres. El como lo hice fue de la siguiente manera:<br /><br />1) Abrir una ventana de msdos o command prompt en modo administrador, sin ofender a los amigos de command prompt en particular a Alvaro Herrera que le mando saludos.<br /><br />2) Ahora digite: net user /delete postgres<br /><br />3) Eso fue todo...<br /><br />Y pues ya pude instalar mi postgres nuevo.<br /><br />Saludos. <br /><br />Unknownnoreply@blogger.com8tag:blogger.com,1999:blog-7258168133363380369.post-57080131408468954522009-01-17T01:24:00.000-06:002012-06-24T05:29:15.864-05:00Montando un CD o DVD en SCO Openserver 5.xmount -r -fHS -o lower /dev/cd0 /mntUnknownnoreply@blogger.com1tag:blogger.com,1999:blog-7258168133363380369.post-77992619611670340352008-11-13T01:15:00.001-06:002012-06-24T05:29:50.180-05:00Evitar cierres inesperados de DW CS3.Hola a todos, ultimamente tuve problemas con el dreamweaver cs3 porque se me cerraba mucho, mas con archivos grandes y despues de googlear un rato me tope con la siguiente info que me soluciono el problema. <br /><br />La liga de esta info es: http://www.dwug.es/go/411 .<br /><br />Y aqui pego el texto.<br /><br />—Por Andres Cayon <br />Gracias a Alejandro Rodriguez, de MAUG, por informar del bug:<br /><br />Si eres usuario de Windows (XP o Vista) y recientemente estás notando que Dreamweaver se cuelga con relativa frecuencia al trabajar con archivos ASP y PHP provocando el cierre de la aplicación, puede que se deba a que el cambio al horario de invierno ha corrompido la caché del programa.<br /><br />Este error no afecta a los usuarios de Mac.<br /><br />Se desconoce si es un problema de Dreamweaver o de Windows (desde aquí nos inclinamos por lo segundo), pero la solución es relativamente sencilla:<br /><br />Resumimos los consejos de la technote publicada por Adobe:<br /><br />1.- Cerrar DW si lo tienes abierto<br />2.- Borrar el archivo WinFileCache-AD76BB20.dat que se encuentra en la siguiente ruta:<br /><br />Windows Vista:<br />C:\Users\[username]\AppData\Roaming\Adobe\Dreamweaver 9\Configuration <br />Windows XP:<br />C:\Documents and Settings\[username]\Application Data\Adobe\Dreamweaver 9\Configuration <br />3.- Reiniciar DW; el nuevo archivo de caché se recreará automáticamenteUnknownnoreply@blogger.com1tag:blogger.com,1999:blog-7258168133363380369.post-36953679160367830802008-09-24T06:00:00.003-05:002012-06-24T05:30:17.811-05:00Salmo 23 - Salmo de DavidFuente: http://biblos.com/<br /><br /><br /><< Salmos 23 >><br />Psalm 23 Spanish: Modern <br /><br />--------------------------------------------------------------------------------<br />1 (Salmo de David) Jehovah es mi pastor; nada me faltará.<br />2 En prados de tiernos pastos me hace descansar. Junto a aguas tranquilas me conduce.<br /><br />3 Confortará mi alma y me guiará por sendas de justicia por amor de su nombre.<br /><br />4 Aunque ande en valle de sombra de muerte, no temeré mal alguno, porque tú estarás conmigo. Tu vara y tu cayado me infundirán aliento.<br /><br />5 Preparas mesa delante de mí en presencia de mis adversarios. Unges mi cabeza con aceite; mi copa está rebosando.<br /><br />6 Ciertamente el bien y la misericordia me seguirán todos los días de mi vida, y en la casa de Jehovah moraré por días sin fin.<br /><br /><br />--------------------------------------------------------------------------------<br /><br /><br /><br /><< Salmos 23 >><br />Psalm 23 Spanish: La Biblia de las Américas (1997) <br /><br />--------------------------------------------------------------------------------<br />El SEÑOR es mi pastor<br /><br />Salmo de David.<br /><br />1 El SEÑOR es mi pastor, <br />nada me faltará. <br />2 En lugares de verdes pastos me hace descansar; <br />junto a aguas de reposo me conduce. <br />3 El restaura mi alma; <br />me guía por senderos de justicia <br />por amor de su nombre. <br />4 Aunque pase por el valle de sombra de muerte, <br />no temeré mal alguno, porque tú estás conmigo; <br />tu vara y tu cayado me infunden aliento. <br />5 Tú preparas mesa delante de mí en presencia de mis enemigos; <br />has ungido mi cabeza con aceite; <br />mi copa está rebosando. <br />6 Ciertamente el bien y la misericordia me seguirán todos los días de mi vida, <br />y en la casa del SEÑOR moraré por largos días.<br /><br />--------------------------------------------------------------------------------<br /><br /><br /><br /><< Salmos 23 >><br />Psalm 23 Spanish: La Nueva Biblia de los Hispanos (2005) <br /><br />--------------------------------------------------------------------------------<br />1 Salmo de David. El SEÑOR es mi pastor, Nada me faltará.<br />2 En lugares de verdes pastos me hace descansar; Junto a aguas de reposo me conduce.<br /><br />3 El restaura mi alma; Me guía por senderos de justicia Por amor de Su nombre.<br /><br />4 Aunque pase por el valle de sombra de muerte, No temeré mal alguno, porque Tú estás conmigo; Tu vara y Tu cayado me infunden aliento.<br /><br />5 Tú preparas mesa delante de mí en presencia de mis enemigos; Has ungido mi cabeza con aceite; Mi copa está rebosando.<br /><br />6 Ciertamente el bien y la misericordia me seguirán todos los días de mi vida, Y en la casa del SEÑOR moraré por largos días.<br /><br />--------------------------------------------------------------------------------<br /><br /><br /><br /><< Salmos 23 >><br />Psalm 23 Spanish: Reina Valera (1909) <br /><br />--------------------------------------------------------------------------------<br />1 Salmo de David. JEHOVA es mi pastor; nada me faltará.<br />2 En lugares de delicados pastos me hará yacer: Junto á aguas de reposo me pastoreará.<br /><br />3 Confortará mi alma; Guiárame por sendas de justicia por amor de su nombre.<br /><br />4 Aunque ande en valle de sombra de muerte, No temeré mal alguno; porque tú estarás conmigo: Tu vara y tu cayado me infundirán aliento.<br /><br />5 Aderezarás mesa delante de mí, en presencia de mis angustiadores: Ungiste mi cabeza con aceite: mi copa está rebosando.<br /><br />6 Ciertamente el bien y la misericordia me seguirán todos los días de mi vida: Y en la casa de Jehová moraré por largos días.<br /><br />--------------------------------------------------------------------------------<br /><br /><br /><br /><< Salmos 23 >><br />Psalm 23 Spanish: Sagradas Escrituras (1569) <br /><br />--------------------------------------------------------------------------------<br />1 Salmo de David. El SEÑOR es mi pastor; no desfalleceré. <br />2 En lugares de delicados pastos me hará yacer; junto a aguas de reposo me pastoreará. <br /><br />3 Convertirá mi alma; me guiará por sendas de justicia por su nombre. <br /><br />4 Aunque ande en valle de sombra de muerte, no temeré mal alguno ; porque tú estarás conmigo; tu vara y tu cayado me confortarán. <br /><br />5 Aderezarás mesa delante de mí, en presencia de mis angustiadores; ungiste mi cabeza con aceite; mi copa está rebosando. <br /><br />6 Ciertamente el bien y la misericordia me seguirán todos los días de mi vida; y en la Casa del SEÑOR reposaré para siempre. <br /><br />--------------------------------------------------------------------------------Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7258168133363380369.post-57972919263390272232008-05-05T01:17:00.002-05:002012-06-24T05:30:55.394-05:00Un sencillo ejemplo de restricciones CHECK con expresiones regulares en PostgreSQLHola a todos, si bien es cierto las expresiones regulares son un tema complejo y el motivo de este texto no es enseñarlas, mas bien escribir un ejemplo pequeño de como se usan expresiones regulares dentro de un Constraint Check en PostgreSQL. Para quienes quieran aprender mas de expresiones regulares bien les valdria revisar los siguientes URLs:<br /><br />1) http://www.postgresql.org/docs/8.3/static/functions-matching.html<br /><br />2) http://www.monografias.com/trabajos29/introduccion-expresiones-regulares/introduccion-expresiones-regulares.shtml<br /><br />Aqui pongo el ejemplo de una expresión regular diseñada para verificar que los numeros introducidos en un campo deben de tener una longitud de 7 caracteres.<br /><br />Ej:<br /><br />create table 7numeros (<br /> numero char(7) constraint longitud7 check (numero ~ E'^\\d{7}$' = true)<br />);<br /><br />sicodelico=# insert into numeros7 values ('1');<br />ERROR: el nuevo registro para la relación «numeros7» viola la restricción check «longitud7»<br /><br />sicodelico=# insert into numeros7 values ('1234567');<br />INSERT 0 1<br /><br />-- <br />Saludos.<br /><br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7258168133363380369.post-46909690691368589192008-05-04T20:27:00.008-05:002012-06-24T05:31:34.447-05:00fgrep.sh - Obtener el nombre de un archivo en base a su contenido.Hola a todos, el dia de hoy publico aqui una función muy util que escribi hace ya algun tiempo. Un pequelo script de shell que sirve para buscar dentro de los archivos un patron especifico.<br /><br /><pre><br />#!/bin/bash<br /><br /># Autor : Julio Cesar Sánchez González (c)2008 GPL<br /># Fecha : 08-Feb-2007.<br /># Ultimo Update: 08-Feb-2007.<br /># Descripcion : Busca en el directorio actual un patron <br /># regular dentro de cada archivo y regresa <br /># el nombre del archivo en el que se <br /># encontro dicho patron.<br /># Uso : fgrep.sh <patron><br />#<br /><br />for i in `find -type f`; do<br /> ret=`grep "$1" $i`;<br /> <br /> if [ "$ret" != "" ]; then<br /> echo $i;<br /> fi<br />done<br /></pre><br /><br />Por ejemplo, supongamos que queremos modificar el DocumentoRoot de nuestro apache2 y como ya es casi una costumbre, cada distribucion de linux parte el archivo de configuracion httpd.conf en multiples archivos mas pequeños pero aveces mas dificiles de identificar. <br /><br />Por ejemplo en mi ubuntu 8.04 un listado del directorio de configuracion de apache seria algo como esto:<br /><br /><pre><br />root@andromeda:/etc/apache2# ls -alF<br />total 30<br />drwxr-xr-x 7 root root 320 2008-05-04 16:04 ./<br />drwxr-xr-x 148 root root 7456 2008-05-04 16:26 ../<br />-rw-r--r-- 1 root root 10587 2008-02-01 21:57 apache2.conf<br />drwxr-xr-x 2 root root 72 2008-05-04 16:04 conf.d/<br />-rw-r--r-- 1 root root 378 2008-02-01 21:57 envvars<br />-rw-r--r-- 1 root root 0 2008-05-04 16:04 httpd.conf<br />drwxr-xr-x 2 root root 2792 2008-05-04 16:16 mods-available/<br />drwxr-xr-x 2 root root 800 2008-05-04 16:04 mods-enabled/<br />-rw-r--r-- 1 root root 59 2008-02-01 21:57 ports.conf<br />drwxr-xr-x 2 root root 96 2008-05-04 16:08 sites-available/<br />drwxr-xr-x 2 root root 80 2008-05-04 16:04 sites-enabled/<br />root@andromeda:/etc/apache2# <br /></pre><br /> <br />Algunos archivos y directorios que tendria que revisar uno por uno mediante cat o emacs para saber cual es el archivo que tengo que modificar y el cual almacena la directiva "DocumentRoot" que a simple vista es un poco dificil de ver.<br /><br />Bueno, pues para eso hice este script que almacene en un archivo de nombre: fgrep.sh y almacene en /sbin.<br /><br />Su uso es bastante sencillo y si alguin lo mejora seria bueno que me lo enviaran para publicarlo ya que este pequeño script fue escrito al vuelo y no he tenido tiempo de mejorarlo.<br /><br />Ej:<br /><br /><pre><br />root@andromeda:/etc/apache2# fgrep.sh DocumentRoot<br />./sites-available/default --> Dentro del archivo "default" se<br /> encuentra "DocumentRoot" :)<br /></pre><br /> <br />Sin mas por el momento, me despido de ustedes y espero que les sea util como a mi.<br /><br /><br />-- <br />SaludosUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-7258168133363380369.post-10166853029389539072008-04-18T18:57:00.002-05:002012-06-24T05:32:01.812-05:00Creando una funcion postgresql para eliminar acentos y dieresis.Hola a todos, el motivo que me orillo a desarrollar una funcion para eliminar acentos fue el de simplificar las busquedas de palabras acentuadas en la base de datos postgresql. Hasta la version 8.2 mientras tenia mis esquemas en Latin1 empleaba la funcion to_ascii para este proposito pero actualmente empleando la codificacion UTF8 dicha funcion ya no servia. Asi que me di con la tarea de diseñar una funcioncita para este proposito, y queda asi empleando una funcion SQL y translate:<br /><br /><code><br />create or replace function sinacentos (text) returns text AS $$<br /> select translate($1,'áéíóúÁÉÍÓÚäëïöüÄËÏÖÜ','aeiouAEIOUaeiouAEIOU');<br />$$ language sql; <br /></code><br /><br />Un ejemplo con esta funcion quedaria de la siguiente manera:<br /><br />Primero un simple select de una tabla demo con palabras con acentos:<br /><br />sicodelico=# select id, otro from foobar;<br />id | otro ----+--------<br /> 1 | algo<br /> 2 | algo<br /> 3 | algo<br /> 4 | algo<br /> 2 | algo<br /> 5 | México<br /> 6 | México<br /> 7 | Niño<br /> 1 | Mexico<br />(9 filas) <br /><br />Ahora la misma consulta procesada con nuestra funcion:<br /><br />sicodelico=# select id, sinacentos(otro) as otro from foobar;<br /> id | otro<br />----+------------<br /> 1 | algo<br /> 2 | algo<br /> 3 | algo<br /> 4 | algo<br /> 2 | algo<br /> 5 | Mexico<br /> 6 | Mexico<br /> 7 | Niño<br /> 1 | Mexico<br />(9 filas)<br /><br /><br />Ahora una busqueda con el conteo total de las palabras que concuerden con México, MËXICO, MÉXICO, etc...<br /><br />sicodelico=# select count(*) from foobar where upper(sinacentos(otro)) = upper(sinacentos('méxico'));<br /> count <br />-------<br /> 3<br />(1 fila)<br /><br />Con la consulta anterior ya tenemos una forma de buscar entre nuestros registros sin preocuparnos por las palabras que significan lo mismo pero aveces estan escritas sin acento o en mayusculas o minusculas.<br /><br />-- <br />Saludos.<br /><br />Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-7258168133363380369.post-42720703292995288532008-02-24T01:26:00.002-06:002012-06-24T05:32:27.330-05:00Problemas al instalar PostgreSQL 8.3 en ubuntu aun desinstalando PostgreSQL 8.2 con apt-get removeHola, el dia de hoy me tope con la necesidad de migrar mi servidor postgresql 8.2 instalado mediante apt-get a la version 8.3, si bien es cierto la instalacion mediante apt-get es muy simple el problema se origino cuando quise instalar el postgres 8.3.<br /><br />Pues como decia primero desinstale el antiguo postgres de la siguiente manera:<br /><br />apt-get remove postgresql-8.2 postgresql-common y otros.<br /> <br />Pues ya hecho esto instale el nuevo postgres 8.3 igual con apt-get. Los paquetes que elegi fueron:<br /><br />* postgresql<br />* postgresql-8.3<br />* postgresql.client-8.3<br />* postgresql-client-common<br />* postgresql-common<br />* postgresql-contrib-8.3<br />* postgresql-doc<br />* postgresql-plperl-8.3<br />* postgresql-pltcl-8.3<br />* postgresql-server-dev-8.3<br /><br />Y con apt-get se descargaron y al momento de instalar marco un error 2 y quedaba inconclusa la configuracion de dichos paquetes. Despues de analizar un poco el problema me di cuenta que aun existian los directorios y archivos de la anterior version 8.2, asi que procedi a borrarlos primero. Los directorios que borre fueron:<br /><br />Dentro de /etc<br /><br />- ./postgresql<br />- ./postgresql-common<br /><br />y Dentro de /var/lib<br /><br />- ./postgresql<br /><br />Todos estos directorios pertenecian a la version 8.2 y como la 8.3 se instala en los mismos me generaba este error en la instalacion. El apt-get remove desinstalo los paquetes pero no borro los directorios que habia creado el anterior postgres ocasionando todos estos problemas.<br /><br />Ya por ultimo procedi a reinstalar el postgresql 8.3 el cual se instalo sin problemas.<br /><br />Tal vez el otro archivo que hay que borrar tambien es el script de inicio dentro de /etc/init.d que se llama postgresql-8.2.<br /><br />Saludos y buenas noches.<br /><br /><br />Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-7258168133363380369.post-90577863417538735622008-01-01T05:05:00.000-06:002012-06-24T05:32:47.242-05:00Almacenar direcciones IP como numero entero largo en PostgresqlLa mejor forma de almacenar direcciones IP es como numero entero no solo en PostgreSQL sino en cualquier base de datos, ya que un numero entero siempre ocupara menos bytes que una cadena de caracteres.<br /><br />Para nuestro ejemplo usaremos la direccion IP 189.142.115.28.<br /><br /><b>IP:</b>189.142.115.28<br />Primer Octeto: 189<br />Segundo Octeto: 142<br />Tercer Octeto: 115<br />Cuarto Octeto: 28<br /><br />El algoritmo es muy simple de implementar para nuestra fortuna y quedaria asi:<br /><br />(Primer Octeto * 256³) + (Segundo Octeto * 256²) + (Tercer Octeto * 256) + (Cuarto Octeto) = Direccion IP representada con entero.<br /><br />Por lo tanto sustituyendo quedaria:<br /><br />(189 * 16777216) + (142 * 65536) + (115 * 256) + 28 = 3180229404<br /><br />En donde 3180229404 es equivalente a 189.142.115.28.<br /><br />Ahora bien la implementacion de una funcion en PostgreSQL usando SQL como lenguaje de programacion quedaria de la siguiente forma:<br /><br /><code><br />CREATE OR REPLACE FUNCTION inet_aton(text) RETURNS bigint AS '<br />SELECT<br />split_part($1,''.'',1)::int8*(256*256*256)+<br />split_part($1,''.'',2)::int8*(256*256)+<br />split_part($1,''.'',3)::int8*256+<br />split_part($1,''.'',4)::int8;<br />' LANGUAGE 'SQL';<br /></code><br /><br />Si creamos esta funcion en nuestro postgresql, una tipica salida quedaria asi:<br /><br /><pre><br />geodb=> select inet_aton('189.142.115.28');<br /> inet_aton <br />------------<br /> 3180229404<br />(1 row)<br /></pre><br /><br /><br /><br /><h3>Implementando la funcion <i>inet_ntoa</i>, capaz de convertir una direccion IP en entero a su correspondiente direccion en cadena de texto.</h3><br /><br />Para lograrlo es muy simple, solo basta con desplazar los bits adecuados como se nota a simple vista en la siguiente funcion postgresql implementada en el lenguaje SQL.<br /><br /><code><br />CREATE OR REPLACE FUNCTION inet_ntoa(bigint) RETURNS text AS '<br />SELECT (($1>>24) & 255::int8) || ''.'' ||<br />(($1>>16) & 255::int8) || ''.'' ||<br />(($1>>8) & 255::int8) || ''.'' ||<br />($1 & 255::int8) as result<br />'<br />LANGUAGE 'SQL';<br /></code><br /><br />Y pues listo, eso es todo, nos vemos luego.<br /><br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7258168133363380369.post-3936236751389261772007-10-31T05:51:00.001-06:002012-10-18T21:39:59.342-05:00Frases celebresI wrote when I didn't know the life. Now that I understand what it means. The life can't be written, just can lived.<br />
<br />
Oscar Wilde<br />
<br />
El que no posee el don de maravillarse ni de entusiasmarse, más le valdría estar muerto, porque sus ojos están cerrados".<br />
<br />
Albert Einsten<br />
<br />
<br />
Si de nada sirve vivir, busca algo porque morir.<br />
<br />
Fito Paez<br />
<br />
<br />
Un pesimista es un optimista bien informado.<br />
<br />
Jean Paul Sartre<br />
<br />
<br />
Nunca hay viento favorable para el que no sabe hacia dónde va.<br />
<br />
Séneca<br />
<br />
<br />
En nuestros locos intentos renunciamos a lo que somos por lo que esperamos ser.<br />
<br />
Shakespeare<br />
<br />
<br />
Miremos más que somos padres de nuestro porvenir que no hijos de nuestro pasado.- <br />
<br />
Miguel de Unamuno<br />
<br />
<br />
El hombre esta hecho del mismo material con el que se fabrican los sueños.<br />
<br />
Shakespeare<br />
<br />
<br />
No hay venganza como el olvido. <br />
<br />
Baltasar Gracián<br />
<br />
<br />
Vengarse de una ofensa es ponerse al nivel del enemigo: perdonarlo es colocarse sobre él. <br />
<br />
Rochefoucauld<br />
<br />
<br />
Un acto de justicia permite cerrar un capítulo; un acto de venganza escribe un capítulo nuevo. <br />
<br />
Marilyn Savant<br />
<br />
<br />
El principio y el fin son una misma cosa. Los vivos y los muertos forman una sola unidad porque la vida esta permanentemente renovada por la muerte.<br />
<br />
M. WestUnknownnoreply@blogger.com1tag:blogger.com,1999:blog-7258168133363380369.post-81114604624118822962007-10-20T04:39:00.000-05:002012-06-24T05:33:30.257-05:00Habilitar resoluciones mayores a 1024x768 (Intel VGA)En ubuntu es muy sencillo solo necesitamos instalar el paquete 915resolution con apt de la siguiente forma:<br /><br /><code><br />apt-get install 915resolution<br /></code><br /><br />Me imagino que en otras versiones de linux debe de funcionar, seria bueno que alguno de ustedes que lo probara nos lo dijera :).<br /><br />Saludos a todos.<br /><br /><br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7258168133363380369.post-69913561263074416222007-10-14T22:37:00.000-05:002012-06-24T05:33:47.823-05:00Corrección del brillo de la pantalla en LinuxPara ajustar el brillo de la pantalla nos valemos de la instruccion xgamma de la siguiente manera: xgamma -gamma 1.0 o cualquiera segun como nos sirva en nuestro monitor.Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-7258168133363380369.post-71108668823165146822007-10-14T20:06:00.000-05:002012-06-24T05:34:14.269-05:00Aprendamos a comunicarnos por medios electronicos.No envie archivos adjuntos en formato Microsoft Word, un formato<br />privativo y secreto, por lo que nosotros no podemos leerlo. Envie el<br />texto puro, HTML o PDF, entonces todos podrémos leerlo.<br /><br />Enviar a la gente documentos en formato Word tiene efectos<br />perniciosos, porque esta práctica los insta a utilizar software de<br />Microsoft. En efecto, Usted se convierte en un sostén del monopolio de<br />Microsoft. Este problema específico es un gran obstáculo a la adopción<br />más amplia de GNU/Linux. ¿Podría, por favor, reconsiderar el uso del<br />formato Word en la comunicación con otras personas?Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7258168133363380369.post-26327073271809332442007-09-12T15:39:00.000-05:002012-06-24T05:34:31.713-05:00Casting al crear indices para campos tipo fecha en PostgresqlLa forma de realizar un casting para la creacion de indices en postgresql es mediante cast, un ejemplo de un indice BTREE se muestra a continuacion sobre una tabla con un campo tipo DATE a indexar:<br /><br />CREATE INDEX idx_fecha_salida ON produccion_large USING BTREE (cast(fecha_salida as date));Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-7258168133363380369.post-28782849638119813212007-09-12T15:14:00.000-05:002012-06-24T05:34:57.576-05:00Habilitar la cuenta de administrador en Windows Vista Home Premium y Home BasicLa forma de habilitar la cuenta de administrador en windows vista home premium es mediante el comando net user aplicado de la siguiente manera:<br /><br />1.- Primero damos click en el menu inicio y a continuacion escribimos <b>cmd</b> en el cuadro "inicio / buscar".<br /><br />2.- En la lista de resultados de busqueda, hacemos click con el boton secundario sobre el simbolo de sistema (cmd) y a continuacion hacemos click en "RUN AS ADMINISTRATOR". Con esto obtenemos un shell con privilegios de administrador.<br /><br />3.- Ya en el command prompt, escribimos lo siguiente:<br /><br /><code><br />NET USER ADMINISTRADOR /ACTIVE:YES<br /></code><br /><br />4.- Ya con esto tenemos habilitada nuestra cuenta de administrador y solo bastara fijar su contraseña.<br /><br /><br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7258168133363380369.post-19120938094597037052007-08-16T01:03:00.000-05:002012-06-24T05:35:19.570-05:00Tablas y Secuencias TemporalesHola a todos, hoy se me ocurre escribir sobre tablas y secuencias temporales en postgresql. Las tablas temporales y secuencias temporales son aquellas que solo viven mientras la conexion esta activa y despues son destruidas por el backend de postgresql cuando nos desconectamos. Son similares a las tablas y secuencias normales salvo que son de corta duracion y para crearlas solo basta agregar la palabra temporary a la sintaxis ya conocida, por ejemplo:<br /><br />CREATE TEMPORARY TABLE clientes AS select * from clientes;<br /><br />CREATE TEMPORARY SEQUENCE alguna_secuencia START 1;<br /><br />Saludos.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7258168133363380369.post-28035273691443360592007-08-14T02:41:00.000-05:002012-06-24T05:36:36.011-05:00Obtimizando Select count(*) para tablas con mas de 10 millones de registros en PostgresqlHola a todos, el dia de hoy me complace escribir sobre la optimización de la consulta select count(*) en postgresql, cuando tenemos tablas muy grandes a veces el problema es el tiempo que se lleva al procesar una consulta lineal del tipo select count(*), obviamente el primer mecanismo seria crear un indice sobre dicha tabla empleando CREATE INDEX. Por ejemplo en una tabla que tengo de nombre produccion tengo al rededor de 11916936 registros, ya son muchos registros :). <br /><br />A continuación muestro la estructura interna de la tabla produccion:<br /><br /><pre><br />sicodelico=> \d produccion;<br /> Tabla «public.produccion»<br /> Columna | Tipo | Modificadores <br />-------------------+---------+---------------------------------------------------------<br /> id | integer | not null default nextval('produccion_id_seq'::regclass)<br /> no_serie | integer | not null default 0<br /> id_modelo | integer | not null<br /> id_personal | integer | not null<br /> fecha_fabricacion | date | not null default '2005-01-01'::date<br /> fecha_salida | date | <br />Índices:<br /> «produccion_pkey» PRIMARY KEY, btree (id)<br />Restricciones de llave foránea:<br /> «produccion_id_modelo_fkey» FOREIGN KEY (id_modelo) REFERENCES modelos(id)<br /> «produccion_id_personal_fkey» FOREIGN KEY (id_personal) REFERENCES personal(id)<br /><br /></pre><br /><br />Pues bien, empezemos creando el indice de la tabla produccion para busquedas mediante numero_serie de la siguiente manera:<br /><br /><code><br />CREATE INDEX no_serie_idx ON produccion(no_serie);<br /></code><br /><br />Aqui es necesario hacer notar que el crear muchos indices puede traer consecuencias nefastas, ya que cada indice ocupa espacio en disco, y muchos indices pueden ralentizar nuestro sistema por el I/O excedente.<br /><br />Bueno, bueno, ahora lo que necesitamos hacer es ordenar fisicamente (esto es a nivel de cluster) la información, basandonos en el indice ya creado.<br /><br />Para hacer esta ordenación nos valemos del comando CLUSTER de postgresql.<br /><br /><code><br />CLUSTER no_serie_idx on produccion;<br /></code><br /><br />Ya con esto tenemos ordenados nuestros datos con forme a los clusters contiguos del disco duro y con esto evitamos desplazamientos inecesarios de la cabeza lectora del disco duro.<br /><br />En mi ejemplo tarde 34 segundos para completar el select count(*).<br /><br />Aqui muestro la salida del Explain Analyze:<br /><br /><pre><br />sicodelico=> EXPLAIN ANALYZE SELECT count(*) from produccion;<br /> QUERY PLAN <br />---------------------------------------------------------------------------------------------------------------------------------------<br /> Aggregate (cost=231018.70..231018.71 rows=1 width=0) (actual time=33775.520..33775.522 rows=1 loops=1)<br /> -> Seq Scan on produccion_large (cost=0.00..201226.36 rows=11916936 width=0) (actual time=0.068..17800.818 rows=11916936 loops=1)<br /> Total runtime: 33775.597 ms<br /></pre><br /><br />Cuando hice la prueba sin optimizar el disco tardo poco mas de 1 minuto, y sin indice mejor ya ni lo menciono.<br /><br /><br />Saludos.Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-7258168133363380369.post-55529138773267654452007-08-11T11:13:00.000-05:002012-06-24T05:37:00.727-05:00Eliminar restriccion Primary Key en PostgreSQLPara eliminar la restriccion primary key en postgresql empleariamos la sintaxis siguiente:<br /><br /><code><br />ALTER TABLE mitabla DROP CONSTRAINT mitabla_pkey;<br /></code><br /><br />En donde mitabla es el nombre de la tabla obviamente y mitabla_pkey es el indice primary key.<br /><br />Saluditos.Unknownnoreply@blogger.com0