<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7258168133363380369</id><updated>2012-02-02T18:27:57.869-06:00</updated><title type='text'>Through me the way among the people lost.</title><subtitle type='html'>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.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>47</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-8681454877471088422</id><published>2010-09-12T19:45:00.004-05:00</published><updated>2010-09-12T20:13:06.568-05:00</updated><title type='text'>Agregar el driver JDBC de postgresql a Crystal Reports XI</title><content type='html'>PostgreSQL&lt;br /&gt;     Clase Driver: org.postgresql.Driver&lt;br /&gt;     URL de Conexión: jdbc:postgresql://&lt;server&gt;:&lt;port&gt;/&lt;database&gt;&lt;br /&gt;     Fichero .jar/.zip: postgresql.jar&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para agregar el soporte del driver JDBC de postgresql a Crystal Reports XI lo que debemos hacer es:&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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 &lt;Classpath&gt;...&lt;/Classpath&gt;.&lt;br /&gt;&lt;br /&gt;Un ejemplo de mi archivo CRConfig.xml ya modificando la etiqueta &lt;Classpath&gt; y resaltando la linea agregada seria: &lt;br /&gt;&lt;br /&gt;&lt;Classpath&gt;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;&lt;b&gt;C:\Program Files\Common Files\Business Objects\3.0\java\lib\external\postgresql-8.4-701.jdbc4.jar;&lt;/b&gt;${CLASSPATH}&lt;/Classpath&gt;&lt;br /&gt;&lt;br /&gt;Listo...&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-8681454877471088422?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/8681454877471088422/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=8681454877471088422' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/8681454877471088422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/8681454877471088422'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2010/09/agregar-el-driver-jdbc-de-postgresql.html' title='Agregar el driver JDBC de postgresql a Crystal Reports XI'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-2303580760059508712</id><published>2010-03-05T21:17:00.002-06:00</published><updated>2010-03-05T21:22:09.554-06:00</updated><title type='text'>Problemas al instalar Sybase SQL Anywhere 11 en Fedora Core 12</title><content type='html'>Hola 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:&lt;br /&gt;&lt;br /&gt;#yum install SDL.i686&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Y listo ya jalo el instalador y todo lo demas. Saludos cordiales.&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio C. Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-2303580760059508712?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/2303580760059508712/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=2303580760059508712' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2303580760059508712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2303580760059508712'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2010/03/problemas-al-instalar-sybase-sql.html' title='Problemas al instalar Sybase SQL Anywhere 11 en Fedora Core 12'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-1201068290066138122</id><published>2010-02-18T22:55:00.006-06:00</published><updated>2010-02-19T13:06:00.117-06:00</updated><title type='text'>Configurar 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.</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;A continuación pongo una imagen de como quedaría la configuración de nuestro modem router:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QnMZ3xskUh0/S37ewBFmUvI/AAAAAAAADvo/voQ59q3xYJM/s1600-h/tplink.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 276px; height: 400px;" src="http://3.bp.blogspot.com/_QnMZ3xskUh0/S37ewBFmUvI/AAAAAAAADvo/voQ59q3xYJM/s400/tplink.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5440030316417143538" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Esto es todo por ahora y espero les ahorre tiempo a la hora de configurar estos dispositivos con infinitum de telmex.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-1201068290066138122?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/1201068290066138122/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=1201068290066138122' title='5 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1201068290066138122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1201068290066138122'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2010/02/configurar-el-modem-router-adsl-tp-link.html' title='Configurar 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.'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_QnMZ3xskUh0/S37ewBFmUvI/AAAAAAAADvo/voQ59q3xYJM/s72-c/tplink.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-1209245028120442580</id><published>2009-11-01T14:06:00.001-06:00</published><updated>2009-11-01T14:06:23.189-06:00</updated><title type='text'>EN LA MUERTE</title><content type='html'>De la niñita Adela Mitchell y Perla&lt;br /&gt;&lt;br /&gt;     (A sus padres)&lt;br /&gt;&lt;br /&gt;     ¡Ay, el mayor dolor de los dolores&lt;br /&gt;     no es recordar los días de ventura&lt;br /&gt;     en medio de la mísera amargura,&lt;br /&gt;     como lo dijo Dante.&lt;br /&gt;     no; que el mayor dolor de los dolores&lt;br /&gt;     es contemplar la pálida hermosura&lt;br /&gt;     de la hija idolatrada,&lt;br /&gt;     emblema del amor y la ternura&lt;br /&gt;     presa del estertor de la agonía&lt;br /&gt;     y ver como se extingue su mirada&lt;br /&gt;     que ayer nos sonreía&lt;br /&gt;     lánguida, vaga, incierta:&lt;br /&gt;     ¡tocar sus manos y sentirla fría!&lt;br /&gt;     ¡besar su rostro y encontrarla muerta!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Luis Benjamín Cisneros. Lima, 1899.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-1209245028120442580?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/1209245028120442580/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=1209245028120442580' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1209245028120442580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1209245028120442580'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2009/11/en-la-muerte.html' title='EN LA MUERTE'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-1150872760853303905</id><published>2009-08-22T02:33:00.002-05:00</published><updated>2009-08-22T02:40:05.340-05:00</updated><title type='text'>Fedora Core 11 problemas con libstdc++.so.5</title><content type='html'>Hola 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:&lt;br /&gt;&lt;br /&gt;./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&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;yum install compat-libstdc++-33.i586 compat-libstdc++-296.i586&lt;br /&gt;&lt;br /&gt;y listo, todo solucionado.&lt;br /&gt;&lt;br /&gt;Saludos cordiales.&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-1150872760853303905?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/1150872760853303905/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=1150872760853303905' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1150872760853303905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1150872760853303905'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2009/08/fedora-core-11-problemas-con-libstdcso5.html' title='Fedora Core 11 problemas con libstdc++.so.5'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-2049668673426749441</id><published>2009-07-27T00:34:00.003-05:00</published><updated>2009-07-31T00:56:20.888-05:00</updated><title type='text'>Cambiar el locale en fedora</title><content type='html'>Para cambiar el lenguaje y charset solo basta con modificar el archivo: &lt;br /&gt;&lt;br /&gt;/etc/sysconfig/i18n&lt;br /&gt;&lt;br /&gt;La variable LANG se modifica por cualquier charset instalado en fedora como puede ser es_MX.UTF8 o es_MX.ISO-8859-1&lt;br /&gt;&lt;br /&gt;Saludos cordiales.&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González&lt;br /&gt;&lt;br /&gt;---------------&lt;br /&gt;Ahora me he convertido en la muerte destructora de mundos, la fuente de las cosas que vendran.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-2049668673426749441?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/2049668673426749441/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=2049668673426749441' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2049668673426749441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2049668673426749441'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2009/07/cambiar-el-locale-en-fedora.html' title='Cambiar el locale en fedora'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-5149626163979592500</id><published>2009-07-02T15:27:00.004-05:00</published><updated>2009-07-02T22:42:07.884-05:00</updated><title type='text'>¿Problemas con el codigo de pagina en postgresql para windows? Aqui esta lo que a mi me funciono...</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;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: &lt;code&gt;chcp 1252&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;2) Modificamos el tipo de letra de la consola a &lt;b&gt;"Lucida Console"&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;3) Seteamos el client_encoding de postgres a Win1252 de la siguiente manera: &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;set client_encoding=win1252;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;4) Eso es todo.&lt;br /&gt;&lt;br /&gt;Saludos.&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;br /&gt;knowhow@sistemasyconectividad.com.mx&lt;br /&gt;www.sistemasyconectividad.com.mx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-5149626163979592500?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/5149626163979592500/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=5149626163979592500' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5149626163979592500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5149626163979592500'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2009/07/problemas-con-el-codigo-de-pagina-en.html' title='¿Problemas con el codigo de pagina en postgresql para windows? Aqui esta lo que a mi me funciono...'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-275228174317296676</id><published>2009-07-02T00:41:00.003-05:00</published><updated>2009-07-02T00:47:04.364-05:00</updated><title type='text'>Eliminando la cuenta del servicio de postgres en windows</title><content type='html'>Hola 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:&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;2) Ahora digite: net user /delete postgres&lt;br /&gt;&lt;br /&gt;3) Eso fue todo...&lt;br /&gt;&lt;br /&gt;Y pues ya pude instalar mi postgres nuevo.&lt;br /&gt;&lt;br /&gt;Saludos, &lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;br /&gt;knowhow@sistemasyconectividad.com.mx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-275228174317296676?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/275228174317296676/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=275228174317296676' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/275228174317296676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/275228174317296676'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2009/07/eliminando-la-cuenta-del-servicio-de.html' title='Eliminando la cuenta del servicio de postgres en windows'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-5708013140846895452</id><published>2009-01-17T01:24:00.000-06:00</published><updated>2009-01-17T01:25:21.186-06:00</updated><title type='text'>Montando un CD o DVD en SCO Openserver 5.x</title><content type='html'>mount -r -fHS -o lower /dev/cd0 /mnt&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-5708013140846895452?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/5708013140846895452/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=5708013140846895452' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5708013140846895452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5708013140846895452'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2009/01/montando-un-cd-o-dvd-en-sco-openserver.html' title='Montando un CD o DVD en SCO Openserver 5.x'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-7799261961167034035</id><published>2008-11-13T01:15:00.001-06:00</published><updated>2008-11-13T01:17:51.614-06:00</updated><title type='text'>Evitar cierres inesperados de DW CS3.</title><content type='html'>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. &lt;br /&gt;&lt;br /&gt;La liga de esta info es: http://www.dwug.es/go/411 .&lt;br /&gt;&lt;br /&gt;Y aqui pego el texto.&lt;br /&gt;&lt;br /&gt;—Por Andres Cayon &lt;br /&gt;Gracias a Alejandro Rodriguez, de MAUG, por informar del bug:&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Este error no afecta a los usuarios de Mac.&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;Resumimos los consejos de la technote publicada por Adobe:&lt;br /&gt;&lt;br /&gt;1.- Cerrar DW si lo tienes abierto&lt;br /&gt;2.- Borrar el archivo WinFileCache-AD76BB20.dat que se encuentra en la siguiente ruta:&lt;br /&gt;&lt;br /&gt;Windows Vista:&lt;br /&gt;C:\Users\[username]\AppData\Roaming\Adobe\Dreamweaver 9\Configuration &lt;br /&gt;Windows XP:&lt;br /&gt;C:\Documents and Settings\[username]\Application Data\Adobe\Dreamweaver 9\Configuration &lt;br /&gt;3.- Reiniciar DW; el nuevo archivo de caché se recreará automáticamente&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-7799261961167034035?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/7799261961167034035/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=7799261961167034035' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/7799261961167034035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/7799261961167034035'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2008/11/evitar-cierres-inesperados-de-dw-cs3.html' title='Evitar cierres inesperados de DW CS3.'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-3695367916036783080</id><published>2008-09-24T06:00:00.003-05:00</published><updated>2008-09-24T06:08:23.540-05:00</updated><title type='text'>Salmo 23 - Salmo de David</title><content type='html'>Fuente: http://biblos.com/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;&lt; Salmos 23 &gt;&gt;&lt;br /&gt;Psalm 23 Spanish: Modern   &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;1 (Salmo de David) Jehovah es mi pastor; nada me faltará.&lt;br /&gt;2 En prados de tiernos pastos me hace descansar. Junto a aguas tranquilas me conduce.&lt;br /&gt;&lt;br /&gt;3 Confortará mi alma y me guiará por sendas de justicia por amor de su nombre.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;5 Preparas mesa delante de mí en presencia de mis adversarios. Unges mi cabeza con aceite; mi copa está rebosando.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;&lt; Salmos 23 &gt;&gt;&lt;br /&gt;Psalm 23 Spanish: La Biblia de las Américas (1997)   &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;El SEÑOR es mi pastor&lt;br /&gt;&lt;br /&gt;Salmo de David.&lt;br /&gt;&lt;br /&gt;1 El SEÑOR es mi pastor, &lt;br /&gt;nada me faltará. &lt;br /&gt;2 En lugares de verdes pastos me hace descansar; &lt;br /&gt;junto a aguas de reposo me conduce. &lt;br /&gt;3 El restaura mi alma; &lt;br /&gt;me guía por senderos de justicia &lt;br /&gt;por amor de su nombre. &lt;br /&gt;4 Aunque pase por el valle de sombra de muerte, &lt;br /&gt;no temeré mal alguno, porque tú estás conmigo; &lt;br /&gt;tu vara y tu cayado me infunden aliento. &lt;br /&gt;5 Tú preparas mesa delante de mí en presencia de mis enemigos; &lt;br /&gt;has ungido mi cabeza con aceite; &lt;br /&gt;mi copa está rebosando. &lt;br /&gt;6 Ciertamente el bien y la misericordia me seguirán todos los días de mi vida, &lt;br /&gt;y en la casa del SEÑOR moraré por largos días.&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;&lt; Salmos 23 &gt;&gt;&lt;br /&gt;Psalm 23 Spanish: La Nueva Biblia de los Hispanos (2005)   &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;1 Salmo de David. El SEÑOR es mi pastor, Nada me faltará.&lt;br /&gt;2 En lugares de verdes pastos me hace descansar; Junto a aguas de reposo me conduce.&lt;br /&gt;&lt;br /&gt;3 El restaura mi alma; Me guía por senderos de justicia Por amor de Su nombre.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;5 Tú preparas mesa delante de mí en presencia de mis enemigos; Has ungido mi cabeza con aceite; Mi copa está rebosando.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;&lt; Salmos 23 &gt;&gt;&lt;br /&gt;Psalm 23 Spanish: Reina Valera (1909)   &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;1 Salmo de David. JEHOVA es mi pastor; nada me faltará.&lt;br /&gt;2 En lugares de delicados pastos me hará yacer: Junto á aguas de reposo me pastoreará.&lt;br /&gt;&lt;br /&gt;3 Confortará mi alma; Guiárame por sendas de justicia por amor de su nombre.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;5 Aderezarás mesa delante de mí, en presencia de mis angustiadores: Ungiste mi cabeza con aceite: mi copa está rebosando.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;&lt; Salmos 23 &gt;&gt;&lt;br /&gt;Psalm 23 Spanish: Sagradas Escrituras (1569)   &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;br /&gt;1 Salmo de David. El SEÑOR es mi pastor; no desfalleceré. &lt;br /&gt;2 En lugares de delicados pastos me hará yacer; junto a aguas de reposo me pastoreará. &lt;br /&gt;&lt;br /&gt;3 Convertirá mi alma; me guiará por sendas de justicia por su nombre. &lt;br /&gt;&lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;5 Aderezarás mesa delante de mí, en presencia de mis angustiadores; ungiste mi cabeza con aceite; mi copa está rebosando. &lt;br /&gt;&lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------------&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-3695367916036783080?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/3695367916036783080/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=3695367916036783080' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/3695367916036783080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/3695367916036783080'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2008/09/salmo-23-salmo-de-david.html' title='Salmo 23 - Salmo de David'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-5797291926339027223</id><published>2008-05-05T01:17:00.002-05:00</published><updated>2008-05-05T01:27:41.601-05:00</updated><title type='text'>Un sencillo ejemplo de restricciones CHECK con expresiones regulares en PostgreSQL</title><content type='html'>Hola 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:&lt;br /&gt;&lt;br /&gt;1) http://www.postgresql.org/docs/8.3/static/functions-matching.html&lt;br /&gt;&lt;br /&gt;2) http://www.monografias.com/trabajos29/introduccion-expresiones-regulares/introduccion-expresiones-regulares.shtml&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Ej:&lt;br /&gt;&lt;br /&gt;create table 7numeros (&lt;br /&gt;   numero char(7) constraint longitud7 check (numero ~ E'^\\d{7}$' = true)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;sicodelico=# insert into numeros7 values ('1');&lt;br /&gt;ERROR:  el nuevo registro para la relación «numeros7» viola la restricción check «longitud7»&lt;br /&gt;&lt;br /&gt;sicodelico=# insert into numeros7 values ('1234567');&lt;br /&gt;INSERT 0 1&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;Ahora me he convertido en la muerte, destructora de mundos.&lt;br /&gt;Soy la Muerte que se lleva todo, la fuente de las cosas que vendran.&lt;br /&gt;&lt;br /&gt;www.sistemasyconectividad.com.mx        http://darkavngr.blogspot.com/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;TIP 5: ¿Has leído nuestro extenso FAQ?&lt;br /&gt;         http://www.postgresql.org/docs/faqs.FAQ.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-5797291926339027223?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/5797291926339027223/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=5797291926339027223' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5797291926339027223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5797291926339027223'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2008/05/un-sencillo-ejemplo-de-restricciones.html' title='Un sencillo ejemplo de restricciones CHECK con expresiones regulares en PostgreSQL'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-4690969069136858919</id><published>2008-05-04T20:27:00.008-05:00</published><updated>2008-05-05T22:26:56.143-05:00</updated><title type='text'>fgrep.sh - Obtener el nombre de un archivo en base a su contenido.</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;# Autor        : Julio Cesar Sánchez González (c)2008 GPL&lt;br /&gt;# Fecha        : 08-Feb-2007.&lt;br /&gt;# Ultimo Update: 08-Feb-2007.&lt;br /&gt;# Descripcion  : Busca en el directorio actual un patron &lt;br /&gt;#                regular dentro de cada archivo y regresa &lt;br /&gt;#                el nombre del archivo en el que se &lt;br /&gt;#                encontro dicho patron.&lt;br /&gt;# Uso          : fgrep.sh &lt;patron&gt;&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;for i in `find -type f`; do&lt;br /&gt;    ret=`grep "$1" $i`;&lt;br /&gt;    &lt;br /&gt;    if [ "$ret" != "" ]; then&lt;br /&gt;       echo $i;&lt;br /&gt;    fi&lt;br /&gt;done&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;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. &lt;br /&gt;&lt;br /&gt;Por ejemplo en mi ubuntu 8.04 un listado del directorio de configuracion de apache seria algo como esto:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;root@andromeda:/etc/apache2# ls -alF&lt;br /&gt;total 30&lt;br /&gt;drwxr-xr-x   7 root root   320 2008-05-04 16:04 ./&lt;br /&gt;drwxr-xr-x 148 root root  7456 2008-05-04 16:26 ../&lt;br /&gt;-rw-r--r--   1 root root 10587 2008-02-01 21:57 apache2.conf&lt;br /&gt;drwxr-xr-x   2 root root    72 2008-05-04 16:04 conf.d/&lt;br /&gt;-rw-r--r--   1 root root   378 2008-02-01 21:57 envvars&lt;br /&gt;-rw-r--r--   1 root root     0 2008-05-04 16:04 httpd.conf&lt;br /&gt;drwxr-xr-x   2 root root  2792 2008-05-04 16:16 mods-available/&lt;br /&gt;drwxr-xr-x   2 root root   800 2008-05-04 16:04 mods-enabled/&lt;br /&gt;-rw-r--r--   1 root root    59 2008-02-01 21:57 ports.conf&lt;br /&gt;drwxr-xr-x   2 root root    96 2008-05-04 16:08 sites-available/&lt;br /&gt;drwxr-xr-x   2 root root    80 2008-05-04 16:04 sites-enabled/&lt;br /&gt;root@andromeda:/etc/apache2# &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Bueno, pues para eso hice este script que almacene en un archivo de nombre: fgrep.sh y almacene en /sbin.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Ej:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;root@andromeda:/etc/apache2# fgrep.sh DocumentRoot&lt;br /&gt;./sites-available/default --&gt; Dentro del archivo "default" se&lt;br /&gt;                              encuentra "DocumentRoot" :)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;  &lt;br /&gt;Sin mas por el momento, me despido de ustedes y espero que les sea util como a mi.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;Ahora me he convertido en la muerte, destructora de mundos.&lt;br /&gt;Soy la Muerte que se lleva todo, la fuente de las cosas que vendran.&lt;br /&gt;&lt;br /&gt;www.sistemasyconectividad.com.mx http://darkavngr.blogspot.com/&lt;br /&gt;-- &lt;br /&gt;TIP 3: Si encontraste la respuesta a tu problema, publícala, otros te lo agradecerán&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-4690969069136858919?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/4690969069136858919/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=4690969069136858919' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4690969069136858919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4690969069136858919'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2008/05/fgrepsh-obtener-el-nombre-de-un-archivo.html' title='fgrep.sh - Obtener el nombre de un archivo en base a su contenido.'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-1016685302938953907</id><published>2008-04-18T18:57:00.002-05:00</published><updated>2008-04-18T19:12:26.087-05:00</updated><title type='text'>Creando una funcion postgresql para eliminar acentos y dieresis.</title><content type='html'>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:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;create or replace function sinacentos (text) returns text AS $$&lt;br /&gt;   select translate($1,'áéíóúÁÉÍÓÚäëïöüÄËÏÖÜ','aeiouAEIOUaeiouAEIOU');&lt;br /&gt;$$ language sql; &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Un ejemplo con esta funcion quedaria de la siguiente manera:&lt;br /&gt;&lt;br /&gt;Primero un simple select de una tabla demo con palabras con acentos:&lt;br /&gt;&lt;br /&gt;sicodelico=# select id, otro from foobar;&lt;br /&gt;id |  otro ----+--------&lt;br /&gt; 1 | algo&lt;br /&gt; 2 | algo&lt;br /&gt; 3 | algo&lt;br /&gt; 4 | algo&lt;br /&gt; 2 | algo&lt;br /&gt; 5 | México&lt;br /&gt; 6 | México&lt;br /&gt; 7 | Niño&lt;br /&gt; 1 | Mexico&lt;br /&gt;(9 filas) &lt;br /&gt;&lt;br /&gt;Ahora la misma consulta procesada con nuestra funcion:&lt;br /&gt;&lt;br /&gt;sicodelico=# select id, sinacentos(otro) as otro from foobar;&lt;br /&gt; id | otro&lt;br /&gt;----+------------&lt;br /&gt;  1 | algo&lt;br /&gt;  2 | algo&lt;br /&gt;  3 | algo&lt;br /&gt;  4 | algo&lt;br /&gt;  2 | algo&lt;br /&gt;  5 | Mexico&lt;br /&gt;  6 | Mexico&lt;br /&gt;  7 | Niño&lt;br /&gt;  1 | Mexico&lt;br /&gt;(9 filas)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ahora una busqueda con el conteo total de las palabras que concuerden con México, MËXICO, MÉXICO, etc...&lt;br /&gt;&lt;br /&gt;sicodelico=# select count(*) from foobar where upper(sinacentos(otro)) = upper(sinacentos('méxico'));&lt;br /&gt; count &lt;br /&gt;-------&lt;br /&gt;     3&lt;br /&gt;(1 fila)&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;Ahora me he convertido en la muerte, destructora de mundos.&lt;br /&gt;Soy la Muerte que se lleva todo, la fuente de las cosas que vendran.&lt;br /&gt;&lt;br /&gt;www.sistemasyconectividad.com.mx        http://darkavngr.blogspot.com/&lt;br /&gt;&lt;br /&gt;-- &lt;br /&gt;TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-1016685302938953907?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/1016685302938953907/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=1016685302938953907' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1016685302938953907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1016685302938953907'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2008/04/creando-una-funcion-postgresql-para.html' title='Creando una funcion postgresql para eliminar acentos y dieresis.'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-4272070329299528853</id><published>2008-02-24T01:26:00.002-06:00</published><updated>2008-02-24T01:42:01.330-06:00</updated><title type='text'>Problemas al instalar PostgreSQL 8.3 en ubuntu aun desinstalando PostgreSQL 8.2 con apt-get remove</title><content type='html'>Hola, 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.&lt;br /&gt;&lt;br /&gt;Pues como decia primero desinstale el antiguo postgres de la siguiente manera:&lt;br /&gt;&lt;br /&gt;apt-get remove postgresql-8.2 postgresql-common y otros.&lt;br /&gt; &lt;br /&gt;Pues ya hecho esto instale el nuevo postgres 8.3 igual con apt-get. Los paquetes que elegi fueron:&lt;br /&gt;&lt;br /&gt;* postgresql&lt;br /&gt;* postgresql-8.3&lt;br /&gt;* postgresql.client-8.3&lt;br /&gt;* postgresql-client-common&lt;br /&gt;* postgresql-common&lt;br /&gt;* postgresql-contrib-8.3&lt;br /&gt;* postgresql-doc&lt;br /&gt;* postgresql-plperl-8.3&lt;br /&gt;* postgresql-pltcl-8.3&lt;br /&gt;* postgresql-server-dev-8.3&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;Dentro de /etc&lt;br /&gt;&lt;br /&gt;- ./postgresql&lt;br /&gt;- ./postgresql-common&lt;br /&gt;&lt;br /&gt;y Dentro de /var/lib&lt;br /&gt;&lt;br /&gt;- ./postgresql&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Ya por ultimo procedi a reinstalar el postgresql 8.3 el cual se instalo sin problemas.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Saludos y buenas noches.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-4272070329299528853?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/4272070329299528853/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=4272070329299528853' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4272070329299528853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4272070329299528853'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2008/02/problemas-al-instalar-postgresql-83-en.html' title='Problemas al instalar PostgreSQL 8.3 en ubuntu aun desinstalando PostgreSQL 8.2 con apt-get remove'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-9057786341753873562</id><published>2008-01-01T05:05:00.000-06:00</published><updated>2008-01-03T04:31:30.337-06:00</updated><title type='text'>Almacenar direcciones IP como numero entero largo en Postgresql</title><content type='html'>La 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.&lt;br /&gt;&lt;br /&gt;Para nuestro ejemplo usaremos la direccion IP 189.142.115.28.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;IP:&lt;/b&gt;189.142.115.28&lt;br /&gt;Primer Octeto: 189&lt;br /&gt;Segundo Octeto: 142&lt;br /&gt;Tercer Octeto: 115&lt;br /&gt;Cuarto Octeto: 28&lt;br /&gt;&lt;br /&gt;El algoritmo es muy simple de implementar para nuestra fortuna y quedaria asi:&lt;br /&gt;&lt;br /&gt;(Primer Octeto * 256&amp;sup3;) + (Segundo Octeto * 256&amp;sup2) + (Tercer Octeto * 256) + (Cuarto Octeto) = Direccion IP representada con entero.&lt;br /&gt;&lt;br /&gt;Por lo tanto sustituyendo quedaria:&lt;br /&gt;&lt;br /&gt;(189 * 16777216) + (142 * 65536) + (115 * 256) + 28 = 3180229404&lt;br /&gt;&lt;br /&gt;En donde 3180229404 es equivalente a 189.142.115.28.&lt;br /&gt;&lt;br /&gt;Ahora bien la implementacion de una funcion en PostgreSQL usando SQL como lenguaje de programacion quedaria de la siguiente forma:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CREATE OR REPLACE FUNCTION inet_aton(text) RETURNS bigint AS '&lt;br /&gt;SELECT&lt;br /&gt;split_part($1,''.'',1)::int8*(256*256*256)+&lt;br /&gt;split_part($1,''.'',2)::int8*(256*256)+&lt;br /&gt;split_part($1,''.'',3)::int8*256+&lt;br /&gt;split_part($1,''.'',4)::int8;&lt;br /&gt;' LANGUAGE 'SQL';&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Si creamos esta funcion en nuestro postgresql, una tipica salida quedaria asi:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;geodb=&gt; select inet_aton('189.142.115.28');&lt;br /&gt; inet_aton  &lt;br /&gt;------------&lt;br /&gt; 3180229404&lt;br /&gt;(1 row)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Implementando la funcion &lt;i&gt;inet_ntoa&lt;/i&gt;, capaz de convertir una direccion IP en entero a su correspondiente direccion en cadena de texto.&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CREATE OR REPLACE FUNCTION inet_ntoa(bigint) RETURNS text AS '&lt;br /&gt;SELECT (($1&gt;&gt;24) &amp; 255::int8) || ''.'' ||&lt;br /&gt;(($1&gt;&gt;16) &amp; 255::int8) || ''.'' ||&lt;br /&gt;(($1&gt;&gt;8) &amp; 255::int8) || ''.'' ||&lt;br /&gt;($1 &amp; 255::int8) as result&lt;br /&gt;'&lt;br /&gt;LANGUAGE 'SQL';&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y pues listo, eso es todo, nos vemos luego.&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;br /&gt;knowhow@sistemasyconectividad.com.mx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-9057786341753873562?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/9057786341753873562/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=9057786341753873562' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/9057786341753873562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/9057786341753873562'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2008/01/almacenar-direcciones-ip-como-numero.html' title='Almacenar direcciones IP como numero entero largo en Postgresql'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-393623675138926177</id><published>2007-10-31T05:51:00.001-06:00</published><updated>2007-10-31T06:02:33.585-06:00</updated><title type='text'>Frases celebres</title><content type='html'>El que no posee el don de maravillarse ni de entusiasmarse, más le valdría estar muerto, porque sus ojos están cerrados".&lt;br /&gt;&lt;br /&gt;Albert Einsten&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Si de nada sirve vivir, busca algo porque morir.&lt;br /&gt;&lt;br /&gt;Fito Paez&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Un pesimista es un optimista bien informado.&lt;br /&gt;&lt;br /&gt;Jean Paul Sartre&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nunca hay viento favorable para el que no sabe hacia dónde va.&lt;br /&gt;&lt;br /&gt;Séneca&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En nuestros locos intentos renunciamos a lo que somos por lo que esperamos ser.&lt;br /&gt;&lt;br /&gt;Shakespeare&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Miremos más que somos padres de nuestro porvenir que no hijos de nuestro pasado.- &lt;br /&gt;&lt;br /&gt;Miguel de Unamuno&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;El hombre esta hecho del mismo material con el que se fabrican los sueños.&lt;br /&gt;&lt;br /&gt;Shakespeare&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;No hay venganza como el olvido. &lt;br /&gt;&lt;br /&gt;Baltasar Gracián&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Vengarse de una ofensa es ponerse al nivel del enemigo: perdonarlo es colocarse sobre él. &lt;br /&gt;&lt;br /&gt;Rochefoucauld&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Un acto de justicia permite cerrar un capítulo; un acto de venganza escribe un capítulo nuevo. &lt;br /&gt;&lt;br /&gt;Marilyn Savant&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;M. West&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-393623675138926177?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/393623675138926177/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=393623675138926177' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/393623675138926177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/393623675138926177'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/10/frases-celebres.html' title='Frases celebres'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-8111460462411882296</id><published>2007-10-20T04:39:00.000-05:00</published><updated>2007-10-20T05:09:50.189-05:00</updated><title type='text'>Habilitar resoluciones mayores a 1024x768 (Intel VGA)</title><content type='html'>En ubuntu es muy sencillo solo necesitamos instalar el paquete 915resolution con apt de la siguiente forma:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;apt-get install 915resolution&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Me imagino que en otras versiones de linux debe de funcionar, seria bueno que alguno de ustedes que lo probara nos lo dijera :).&lt;br /&gt;&lt;br /&gt;Saludos a todos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-8111460462411882296?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/8111460462411882296/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=8111460462411882296' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/8111460462411882296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/8111460462411882296'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/10/habilitar-resoluciones-mayores-1024x768.html' title='Habilitar resoluciones mayores a 1024x768 (Intel VGA)'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-6991356126307441622</id><published>2007-10-14T22:37:00.000-05:00</published><updated>2007-10-14T22:39:54.073-05:00</updated><title type='text'>Corrección del brillo de la pantalla en Linux</title><content type='html'>Para 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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-6991356126307441622?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/6991356126307441622/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=6991356126307441622' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/6991356126307441622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/6991356126307441622'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/10/correccin-del-brillo-de-la-pantalla-en.html' title='Corrección del brillo de la pantalla en Linux'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-7110866882316514682</id><published>2007-10-14T20:06:00.000-05:00</published><updated>2007-10-14T20:07:00.921-05:00</updated><title type='text'>Aprendamos a comunicarnos por medios electronicos.</title><content type='html'>No envie archivos adjuntos en formato Microsoft Word, un formato&lt;br /&gt;privativo y secreto, por lo que nosotros no podemos leerlo. Envie el&lt;br /&gt;texto puro, HTML o PDF, entonces todos podrémos leerlo.&lt;br /&gt;&lt;br /&gt;Enviar a la gente documentos en formato Word tiene efectos&lt;br /&gt;perniciosos, porque esta práctica los insta a utilizar software de&lt;br /&gt;Microsoft. En efecto, Usted se convierte en un sostén del monopolio de&lt;br /&gt;Microsoft. Este problema específico es un gran obstáculo a la adopción&lt;br /&gt;más amplia de GNU/Linux. ¿Podría, por favor, reconsiderar el uso del&lt;br /&gt;formato Word en la comunicación con otras personas?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-7110866882316514682?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/7110866882316514682/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=7110866882316514682' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/7110866882316514682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/7110866882316514682'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/10/aprendamos-comunicarnos-por-medios.html' title='Aprendamos a comunicarnos por medios electronicos.'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-2632707327180933244</id><published>2007-09-12T15:39:00.000-05:00</published><updated>2007-09-12T15:44:57.675-05:00</updated><title type='text'>Casting al crear indices para campos tipo fecha en Postgresql</title><content type='html'>La 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:&lt;br /&gt;&lt;br /&gt;CREATE INDEX idx_fecha_salida ON produccion_large USING BTREE (cast(fecha_salida as date));&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-2632707327180933244?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/2632707327180933244/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=2632707327180933244' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2632707327180933244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2632707327180933244'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/09/casting-al-crear-indices-para-campos.html' title='Casting al crear indices para campos tipo fecha en Postgresql'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-2878284963811981321</id><published>2007-09-12T15:14:00.000-05:00</published><updated>2007-09-26T18:08:21.881-05:00</updated><title type='text'>Habilitar la cuenta de administrador en Windows Vista Home Premium y Home Basic</title><content type='html'>La forma de habilitar la cuenta de administrador en windows vista home premium es mediante el comando net user aplicado de la siguiente manera:&lt;br /&gt;&lt;br /&gt;1.- Primero damos click en el menu inicio y a continuacion escribimos &lt;b&gt;cmd&lt;/b&gt; en el cuadro "inicio / buscar".&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;3.- Ya en el command prompt, escribimos lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;NET USER ADMINISTRADOR /ACTIVE:YES&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;4.- Ya con esto tenemos habilitada nuestra cuenta de administrador y solo bastara fijar su contraseña.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-2878284963811981321?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/2878284963811981321/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=2878284963811981321' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2878284963811981321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2878284963811981321'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/09/habilitar-la-cuenta-de-administrador-en.html' title='Habilitar la cuenta de administrador en Windows Vista Home Premium y Home Basic'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-1912093809459703705</id><published>2007-08-16T01:03:00.000-05:00</published><updated>2007-08-16T01:12:17.896-05:00</updated><title type='text'>Tablas y Secuencias Temporales</title><content type='html'>Hola 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:&lt;br /&gt;&lt;br /&gt;CREATE TEMPORARY TABLE clientes AS select * from clientes;&lt;br /&gt;&lt;br /&gt;CREATE TEMPORARY SEQUENCE alguna_secuencia START 1;&lt;br /&gt;&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-1912093809459703705?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/1912093809459703705/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=1912093809459703705' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1912093809459703705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1912093809459703705'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/08/tablas-y-secuencias-temporales.html' title='Tablas y Secuencias Temporales'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-2803527369144336059</id><published>2007-08-14T02:41:00.000-05:00</published><updated>2007-08-14T04:39:54.533-05:00</updated><title type='text'>Obtimizando Select count(*) para tablas con mas de 10 millones de registros en Postgresql</title><content type='html'>Hola 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 :). &lt;br /&gt;&lt;br /&gt;A continuación muestro la estructura interna de la tabla produccion:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sicodelico=&gt; \d produccion;&lt;br /&gt;                              Tabla «public.produccion»&lt;br /&gt;      Columna      |  Tipo   |                      Modificadores                      &lt;br /&gt;-------------------+---------+---------------------------------------------------------&lt;br /&gt; id                | integer | not null default nextval('produccion_id_seq'::regclass)&lt;br /&gt; no_serie          | integer | not null default 0&lt;br /&gt; id_modelo         | integer | not null&lt;br /&gt; id_personal       | integer | not null&lt;br /&gt; fecha_fabricacion | date    | not null default '2005-01-01'::date&lt;br /&gt; fecha_salida      | date    | &lt;br /&gt;Índices:&lt;br /&gt;    «produccion_pkey» PRIMARY KEY, btree (id)&lt;br /&gt;Restricciones de llave foránea:&lt;br /&gt;    «produccion_id_modelo_fkey» FOREIGN KEY (id_modelo) REFERENCES modelos(id)&lt;br /&gt;    «produccion_id_personal_fkey» FOREIGN KEY (id_personal) REFERENCES personal(id)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pues bien, empezemos creando el indice de la tabla produccion para busquedas mediante numero_serie de la siguiente manera:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CREATE INDEX no_serie_idx ON produccion(no_serie);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Para hacer esta ordenación nos valemos del comando CLUSTER de postgresql.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CLUSTER no_serie_idx on produccion;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;En mi ejemplo tarde 34 segundos para completar el select count(*).&lt;br /&gt;&lt;br /&gt;Aqui muestro la salida del Explain Analyze:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sicodelico=&gt; EXPLAIN ANALYZE SELECT count(*) from produccion;&lt;br /&gt;                                                              QUERY PLAN                                                               &lt;br /&gt;---------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt; Aggregate  (cost=231018.70..231018.71 rows=1 width=0) (actual time=33775.520..33775.522 rows=1 loops=1)&lt;br /&gt;   -&gt;  Seq Scan on produccion_large  (cost=0.00..201226.36 rows=11916936 width=0) (actual time=0.068..17800.818 rows=11916936 loops=1)&lt;br /&gt; Total runtime: 33775.597 ms&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Cuando hice la prueba sin optimizar el disco tardo poco mas de 1 minuto, y sin indice mejor ya ni lo menciono.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-2803527369144336059?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/2803527369144336059/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=2803527369144336059' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2803527369144336059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2803527369144336059'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/08/obtimizando-select-count-para-tablas.html' title='Obtimizando Select count(*) para tablas con mas de 10 millones de registros en Postgresql'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-5552913877326765445</id><published>2007-08-11T11:13:00.000-05:00</published><updated>2007-08-11T11:15:36.721-05:00</updated><title type='text'>Eliminar restriccion Primary Key en PostgreSQL</title><content type='html'>Para eliminar la restriccion primary key en postgresql empleariamos la sintaxis siguiente:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ALTER TABLE mitabla DROP CONSTRAINT mitabla_pkey;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;En donde mitabla es el nombre de la tabla obviamente y mitabla_pkey es el indice primary key.&lt;br /&gt;&lt;br /&gt;Saluditos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-5552913877326765445?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/5552913877326765445/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=5552913877326765445' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5552913877326765445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5552913877326765445'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/08/eliminar-restriccion-primary-key-en.html' title='Eliminar restriccion Primary Key en PostgreSQL'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-6696981570716274018</id><published>2007-08-11T05:59:00.000-05:00</published><updated>2007-08-18T02:56:01.790-05:00</updated><title type='text'>Postgresql y el particionamiento de tablas (Partitioning Tables)</title><content type='html'>A veces cuando estamos manejando tablas con un numero grande de registros, varios millones o mas es necesario particionar las tablas para obtener un mejor desempeño a la hora de consultar dichas tablas. A este proceso se le suele denominar "Partitioning" y es le metodo usado para descomponer una enorme tabla (father) en un cojunto de tablas hijas (child).&lt;br /&gt;&lt;br /&gt;Algunas de las enormes ventajas son:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Desempeño mejorado para la obtencion de registros (Querys).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Desempeño mejorado para la actualización (update).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Indices mas pequeños para cada tabla hija contra indices grandes y dificiles de colocar en memoria en una tabla grande.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Eliminación rapida de registros. Empleando DROP TABLE en vez de DELETE.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Los datos pueden ser migrados o respaldados en medios economicos y pequeños como DVDs, discos duros extraibles, etc.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;En postgresql el tipo de partitioning soportado se denomina particionado mediante herencia de tablas. Cada partición puede ser creada como una tabla hija de una unica tabla padre. La tabla padre normalmente debe de ser una tabla vacia, que representara a todo el conjunto de datos.&lt;br /&gt;&lt;br /&gt;Los dos tipos de particionado mas comunes en postgresql son:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Particionar por rangos. La tabla es particionada mediante rangos definidos en base a la columna de llave primary o cualquier columna que no se solape entre los rangos de valores asignados a diferentes tablas hijas.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Particionar por lista. La tabla es particionada listando los valores de cada una de las llaves en cada particion.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;En postgresql para poder utilizar dicha técnica es necesario seguir algunos pasos:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Crear la tabla "maestra", de la cual todas las tablas hijas heredaran. &lt;b&gt;Esta tabla no contendra datos, no debe de tener ningun tipo de restricción (check), no debe de tener indice ni nada por el estilo.&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Crear todas las tablas hijas heredando de la tabla maestra. Por lo regular estas tablas heredaran todos los campos de la tabla padre y no es necesario crearlos nosotros mismos.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Agregar a todas las tablas hijas las restricciones correspondientes sobre los datos que albergaran. Algunos ejemplos de esto serian: CHECK ( pais IN ('México', 'Argentina')), CHECK ( id_cliente BETWEEN 100 AND 200 ) ... CHECK ( id_cliente BETWEEN 5000 AND 5200), en estos dos ultimos ejemplos para evitar traslapes entre los ids de clientes.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Para cada particion, crear un indice para la columna(s) llave, tambien se pueden poner los indices que a cada quien le convengan. El indice para la llave primaria no es estrictamente necesario, pero en la mayoria de los casos ayuda mucho. Si tu necesitas una llave unica o llave primaria, necesitaras crearla para cada tabla hija.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Definir una regla (RULE) o trigger para redirigir las modificaciones de la tabla padre (master) a la apropiada particion.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Verificar que este habilitado a on el parametro constraint_exlusion (SET constraint_exclusion = on;) en el archivo de configuracion postgresql.conf para que los querys sean optimizados para el partitioning.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Pues bien, procedamos a realizar un ejemplo con esto.&lt;br /&gt;&lt;br /&gt;Empecemos creando la tabla maestra para nuestro ejemplo.&lt;br /&gt;&lt;br /&gt;El esquema de la tabla quedaria de la siguiente forma:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sicodelico=&gt; \d produccion;&lt;br /&gt;     Tabla «public.produccion»&lt;br /&gt;     Columna      |  Tipo   | Modificadores&lt;br /&gt;-------------------+---------+---------------&lt;br /&gt;id                | integer | not null&lt;br /&gt;no_serie          | integer |&lt;br /&gt;id_modelo         | integer |&lt;br /&gt;id_personal       | integer |&lt;br /&gt;fecha_fabricacion | date    |&lt;br /&gt;fecha_salida      | date    |&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Una vez creada la tabla maestra procedemos a crear las tabla hijas que en nuestro ejemplo particionaremos en base al modelo del producto fabricado, que seran 4 tablas hijas en base a los 4 modelos almacenados en nuestra base de datos.&lt;br /&gt;&lt;br /&gt;Un leve vistazo de la tabla de modelos nos arroja lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sicodelico=&gt; SELECT * from modelos order by id;&lt;br /&gt;id |     modelo      |    caracteristicas     |     descripcion      | imagen&lt;br /&gt;----+-----------------+------------------------+----------------------+--------&lt;br /&gt; 1 | ODIN            | 5 litros por minuto    | calentador de paso   |                           &lt;br /&gt; 2 | DELTA 01        | 7 litros por minuto    | calentador de paso   |&lt;br /&gt; 3 | DELTA 01-PLUS   | 9 litros por minuto    | calentador de paso   |&lt;br /&gt; 4 | DELTA 02        | 13 LITROS POR MINUTO   | CALENTADOR DE PASO   |&lt;br /&gt;&lt;br /&gt;(4 filas)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ahora crearemos las tablas hijas heredando de la tabla "produccion", aqui es donde se crean las restricciones (CHECK) para los datos que albergaran cada tabla hija.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CREATE TABLE produccion_odin ( CHECK (id_modelo = 1) ) INHERITS (produccion);&lt;br /&gt;CREATE TABLE produccion_delta01 ( CHECK (id_modelo = 2) ) INHERITS (produccion);&lt;br /&gt;CREATE TABLE produccion_delta01plus ( CHECK (id_modelo = 3) ) INHERITS (produccion);&lt;br /&gt;CREATE TABLE produccion_delta02 ( CHECK (id_modelo = 4) ) INHERITS (produccion);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Las restricciones CHECK tambien se pueden agregar despues mediante la sintaxis del ALTER TABLE.&lt;br /&gt;&lt;br /&gt;Mediante las restricciones impuestas en las tablas aseguramos que no almacenen información que no les corresponde, por ejemplo que en la tabla produccion_odin que contiene registro de todos los calentadores del modelo ODIN no tengan calentadores de otros modelos, como DELTA02.&lt;br /&gt;&lt;br /&gt;Ahora necesitamos crear los indices para cada tabla hija creada segun nos convenga para agilizar la busqueda de registros o garantizar la unicidad de los mismos, si necesitamos alguna llave primaria, aqui es donde podemos crearla.&lt;br /&gt;&lt;br /&gt;Para el caso de las llaves primarias nos valemos de la sintaxis del ALTER TABLE como por ejemplo: &lt;b&gt;ALTER TABLE produccion_odin ADD PRIMARY KEY (id);&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Para nuestro ejemplo nos conformamos con unos simples indices Btree. Quedarian de la siguiente manera:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CREATE INDEX produccion_odin_id ON produccion_odin (id);&lt;br /&gt;CREATE INDEX produccion_delta01_id ON produccion_delta01 (id);&lt;br /&gt;CREATE INDEX produccion_delta01plus_id ON produccion_delta01plus (id);&lt;br /&gt;CREATE INDEX produccion_delta02_id ON produccion_delta02 (id);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Bien, ahora procederemos a crear el juego de reglas para garantizar el llenado en cascada de los datos y que cuando estos caigan en la tabla maestra sean redirigidos a sus respectivas tablas.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;-- Regla para produccion_odin&lt;br /&gt;CREATE RULE produccion_odin_insert_rule AS&lt;br /&gt;ON INSERT TO produccion WHERE&lt;br /&gt;   ( id_modelo = 1 )&lt;br /&gt;DO INSTEAD&lt;br /&gt;   INSERT INTO produccion_odin VALUES ( NEW.id,&lt;br /&gt;                                        NEW.no_serie,&lt;br /&gt;                                        NEW.id_modelo,&lt;br /&gt;                                        NEW.id_personal,&lt;br /&gt;                                        NEW.fecha_fabricacion,&lt;br /&gt;                                        NEW.fecha_salida);&lt;br /&gt;&lt;br /&gt;-- Regla para produccion_delta01&lt;br /&gt;CREATE RULE produccion_delta01_insert_rule AS&lt;br /&gt;ON INSERT TO produccion WHERE&lt;br /&gt;   ( id_modelo = 2 )&lt;br /&gt;DO INSTEAD&lt;br /&gt;   INSERT INTO produccion_delta01 VALUES ( NEW.id,&lt;br /&gt;                                        NEW.no_serie,&lt;br /&gt;                                        NEW.id_modelo,&lt;br /&gt;                                        NEW.id_personal,&lt;br /&gt;                                        NEW.fecha_fabricacion,&lt;br /&gt;                                        NEW.fecha_salida);&lt;br /&gt;&lt;br /&gt;-- Regla para produccion_delta01plus&lt;br /&gt;CREATE RULE produccion_delta01plus_insert_rule AS&lt;br /&gt;ON INSERT TO produccion WHERE&lt;br /&gt;   ( id_modelo = 3 )&lt;br /&gt;DO INSTEAD&lt;br /&gt;   INSERT INTO produccion_delta01plus VALUES ( NEW.id,&lt;br /&gt;                                        NEW.no_serie,&lt;br /&gt;                                        NEW.id_modelo,&lt;br /&gt;                                        NEW.id_personal,&lt;br /&gt;                                        NEW.fecha_fabricacion,&lt;br /&gt;                                        NEW.fecha_salida);&lt;br /&gt;&lt;br /&gt;-- Regla para produccion_delta02&lt;br /&gt;CREATE RULE produccion_delta02_insert_rule AS&lt;br /&gt;ON INSERT TO produccion WHERE&lt;br /&gt;   ( id_modelo = 4 )&lt;br /&gt;DO INSTEAD&lt;br /&gt;   INSERT INTO produccion_delta02 VALUES ( NEW.id,&lt;br /&gt;                                        NEW.no_serie,&lt;br /&gt;                                        NEW.id_modelo,&lt;br /&gt;                                        NEW.id_personal,&lt;br /&gt;                                        NEW.fecha_fabricacion,&lt;br /&gt;                                        NEW.fecha_salida);&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ya con esto tenemos gestionada la metodologia para la inserción en multiples tablas, tambien es importante notar que se pueden usar triggers en vez de reglas para este fin.&lt;br /&gt;&lt;br /&gt;Ahora procedemos a crear una vista que contendra todos los valores como si se tratase de una tabla enorme:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CREATE VIEW produccion_total AS&lt;br /&gt;          SELECT * FROM produccion_odin&lt;br /&gt;UNION ALL SELECT * FROM produccion_delta01&lt;br /&gt;UNION ALL SELECT * FROM produccion_delta01plus&lt;br /&gt;UNION ALL SELECT * FROM produccion_delta02;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Con esto ya tenemos nuestro esquema de tablas particionado, solo nos falta habilitar el obtimizador de consultas para evitar la busqueda de algun dato en todas las particiones y eso se hace asi desde dentro de psql:&lt;br /&gt;&lt;br /&gt;SET constraint_exclusion = on; &lt;br /&gt;&lt;br /&gt;o modificando el postgresql.conf de la siguiente manera, anexando la siguiente linea:&lt;br /&gt;&lt;br /&gt;constraint_exclusion = on&lt;br /&gt;&lt;br /&gt;Pues ya con esto me despido y espero les sirva.&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio C. Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-6696981570716274018?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/6696981570716274018/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=6696981570716274018' title='1 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/6696981570716274018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/6696981570716274018'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/08/postgresql-y-el-particionamiento-de.html' title='Postgresql y el particionamiento de tablas (Partitioning Tables)'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-7022804172783641967</id><published>2007-08-11T05:49:00.000-05:00</published><updated>2007-08-11T05:55:12.504-05:00</updated><title type='text'>Indices Parciales en Postgresql</title><content type='html'>Postgresql soporta lo denominado indice parcial con expresiones arbitrarios el cual es un indice construido sobre un subconjunto de los registros de una tabla.&lt;br /&gt;&lt;br /&gt;Un motivo para la utilización de este tipo de indices esta justificado con la siguiente premisa: si todas las consultas que a usted le resulten útiles caen dentro de un cierto rango ¿por qué construir un índice sobre toda la tabla y sufrir el costo de espacio y tiempo asociado a ello?&lt;br /&gt;&lt;br /&gt;Un ejemplo de este tipo de indices quedaria de la siguiente forma:&lt;br /&gt;&lt;br /&gt;CREATE INDEX sueldos_idx ON sueldos(sueldo) WHERE sueldo &gt; 15000.00 and sueldo &lt; 30000.00;&lt;br /&gt;&lt;br /&gt;Aqui el indice se crea solo para los sueldos almacenados entre 15000.00 y 30000.00 y si en una fabrica la mayoria de los empleados recaen en esos sueldos, aqui es donde se utilizaria ahorrando espacio por el indice generado.&lt;br /&gt;&lt;br /&gt;Saludos,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-7022804172783641967?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/7022804172783641967/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=7022804172783641967' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/7022804172783641967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/7022804172783641967'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/08/indices-parciales-en-postgresql.html' title='Indices Parciales en Postgresql'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-2055777481761827640</id><published>2007-08-10T17:19:00.000-05:00</published><updated>2007-08-10T17:24:36.891-05:00</updated><title type='text'>Cambiar el propietario de una tabla en PostgreSQL</title><content type='html'>Para cambiar el propietario de una tabla x en postgres nos valemos del comando alter para efectuar dicha operación, la sintaxis para este proposito seria de la siguiente manera:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ALTER TABLE tablax OWNER TO usuario_nuevo;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Para que la siguiente instrucción surta efecto solo basta ser el propietario de la tabla o ser el usuario PostgreSQL.&lt;br /&gt;&lt;br /&gt;Saludos a todos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-2055777481761827640?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/2055777481761827640/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=2055777481761827640' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2055777481761827640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2055777481761827640'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/08/cambiar-el-propietario-de-una-tabla-en.html' title='Cambiar el propietario de una tabla en PostgreSQL'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-174999754176476493</id><published>2007-08-01T05:17:00.000-05:00</published><updated>2007-08-01T14:58:51.906-05:00</updated><title type='text'>Configurar el protocolo SSL en Apache 2.2 con Ubuntu Feisty Fawn</title><content type='html'>Hola a todos, el dia de hoy voy a documentar el como instalar en nuestro ubuntu feisty fawn el protocolo SSL (Secure Socket Layer) para nuestro Apache 2.2.&lt;br /&gt;&lt;br /&gt;A diferencia de lo que pensaba antes de hecharlo a andar, es muy facil instalarlo.&lt;br /&gt;&lt;br /&gt;Pues comencemos.&lt;br /&gt;&lt;br /&gt;1. Primero que nada necesitamos instalar el servidor web apache que en ubuntu y cualquier distribucion basada en debian es cosa de un simple apt-get.&lt;br /&gt;&lt;br /&gt;# apt-get install apache2&lt;br /&gt;&lt;br /&gt;2. Ahora nos toca habilitar el modulo de SSL en nuestro recien instalado apache.&lt;br /&gt;&lt;br /&gt;#a2enmod ssl&lt;br /&gt;&lt;br /&gt;3. Aqui deberiamos de poder crear el certificado ssl mediante el comando apache2-ssl-certificate, pero para nuestra desgracia, al parecer en esta versión de ubuntu no se incluyo y necesitamos realizar unos pasos adicionales para subsanar dicho error :( , y quedaria asi.&lt;br /&gt; &lt;br /&gt;Necesitamos descargar el siguiente archivo: &lt;a href="http://launchpadlibrarian.net/7477840/apache2-ssl.tar.gz"&gt;apache2-ssl.tar.gz&lt;/a&gt; y ya una vez descargado procedemos a descomprimirlo, lo cual nos deja dos archivos en nuestro directorio. Uno con el nombre de &lt;i&gt;ssleay.cnf&lt;/i&gt; el cual deberemos copiar en &lt;b&gt;/usr/share/apache2&lt;/b&gt; y otro con nombre &lt;i&gt;apache2-ssl-certificate&lt;/i&gt; que copiaremos a &lt;b&gt;/usr/sbin&lt;/b&gt;, ahora solo falta crear el directorio en donde residira el certificado ssl y el cual es &lt;b&gt;/etc/apache2/ssl&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Listo, con esto ya tenemos el comando para generar el certificado de autenticidad, y podemos proceder a configurar nuestro Apache2 con SSL :) .&lt;br /&gt;&lt;br /&gt; 4. Creamos nuestro certificado de la siguiente manera:&lt;br /&gt;&lt;br /&gt;# apache2-ssl-certificate&lt;br /&gt;&lt;br /&gt;El comando nos arroja la siguiente salida esperando algunas respuestas:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;creating selfsigned certificate&lt;br /&gt;replace it with one signed by a certification authority (CA)&lt;br /&gt;&lt;br /&gt;enter your ServerName at the Common Name prompt&lt;br /&gt;&lt;br /&gt;If you want your certificate to expire after x days call this programm&lt;br /&gt;with -days x&lt;br /&gt;Generating a 1024 bit RSA private key&lt;br /&gt;........++++++&lt;br /&gt;....................++++++&lt;br /&gt;writing new private key to '/etc/apache2/ssl/apache.pem'&lt;br /&gt;-----&lt;br /&gt;You are about to be asked to enter information that will be incorporated&lt;br /&gt;into your certificate request.&lt;br /&gt;What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;There are quite a few fields but you can leave some blank&lt;br /&gt;For some fields there will be a default value,&lt;br /&gt;If you enter '.', the field will be left blank.&lt;br /&gt;-----&lt;br /&gt;Country Name (2 letter code) [GB]:MX&lt;br /&gt;State or Province Name (full name) [Some-State]:Distrito Federal&lt;br /&gt;Locality Name (eg, city) []:Mexico&lt;br /&gt;Organization Name (eg, company; recommended) []:Sistemas y Conectividad&lt;br /&gt;Organizational Unit Name (eg, section) []:Sistemas y Conectividad&lt;br /&gt;server name (eg. ssl.domain.tld; required!!!) []:localhost&lt;br /&gt;Email Address []:webmaster@localhost&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5. Ahora necesitamos crear algunos archivos de configuracion para apache y para eso nos valemos de cualquier editor de textos como emacs o vi.&lt;br /&gt;&lt;br /&gt;Nos basamos en los archivos de configuracion estandar de apache en nuestro ubuntu de la siguiente manera:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl&lt;br /&gt;ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora modifiquemos el archivo /etc/apache2/sites-enabled/ssl con cualquier editor de textos y agreguemos el numero de puerto de escucha de Apache2 SSL y algunas cosas mas como habilitar la directiva &lt;i&gt;SSLEngine&lt;/i&gt; a &lt;b&gt;On&lt;/b&gt; y fijar la ruta de &lt;i&gt;SSLCertificateFile&lt;/i&gt; a &lt;b&gt;/etc/apache2/ssl/apache.pem&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# Agregar puerto 443 default para SSL en NameVirtualHost&lt;br /&gt;NameVirtualHost *:443&lt;br /&gt;&lt;VirtualHost *:443&gt;&lt;br /&gt;        ServerAdmin webmaster@localhost&lt;br /&gt;        &lt;br /&gt;        # Modificar el DocumentRoot hacia el directorio &lt;br /&gt;        # que querramos para SSL&lt;br /&gt;        DocumentRoot /home/www/ssl/htdocs&lt;br /&gt;        &lt;Directory /&gt;&lt;br /&gt;                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;                AllowOverride All&lt;br /&gt;        &lt;/Directory&gt;&lt;br /&gt;&lt;br /&gt;        # Opciones de configuracion de nuestro directorio SSL&lt;br /&gt;        &lt;Directory /var/www/ssl/htdocs&gt;&lt;br /&gt;                Options Indexes FollowSymLinks MultiViews &lt;br /&gt;                AllowOverride All&lt;br /&gt;                Order allow,deny&lt;br /&gt;                allow from all&lt;br /&gt;                # This directive allows us to have apache2's default start page&lt;br /&gt;                # in /apache2-default/, but still have / go to the right place&lt;br /&gt;                #RedirectMatch ^/$ /apache2-default/&lt;br /&gt;        &lt;/Directory&gt;&lt;br /&gt;&lt;br /&gt;        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;        &lt;Directory "/usr/lib/cgi-bin"&gt;&lt;br /&gt;                AllowOverride None&lt;br /&gt;                Options ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;                Order allow,deny&lt;br /&gt;                Allow from all&lt;br /&gt;        &lt;/Directory&gt;&lt;br /&gt;&lt;br /&gt;        ErrorLog /var/log/apache2/error.log&lt;br /&gt;&lt;br /&gt;        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;        # alert, emerg.&lt;br /&gt;        LogLevel warn&lt;br /&gt;&lt;br /&gt;        CustomLog /var/log/apache2/access.log combined&lt;br /&gt;        ServerSignature On&lt;br /&gt;&lt;br /&gt;        # Aqui agregamos el soporte SSL para nuestro apache asi como la ruta &lt;br /&gt;        # del certificado creado anteriormente.&lt;br /&gt;        SSLEngine On&lt;br /&gt;        SSLCertificateFile /etc/apache2/ssl/apache.pem&lt;br /&gt;&lt;br /&gt;    Alias /doc/ "/usr/share/doc/"&lt;br /&gt;    &lt;Directory "/usr/share/doc/"&gt;&lt;br /&gt;        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;        AllowOverride None&lt;br /&gt;        Order deny,allow&lt;br /&gt;        Deny from all&lt;br /&gt;        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;    &lt;/Directory&gt;&lt;br /&gt;&lt;br /&gt;&lt;/VirtualHost&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;6. Ahora necesitamos modificar el archivo: /etc/apache2/sites-enabled/000-default agregandole el puerto 80 al servidor web para las conexiones no seguras. El cambio quedaria asi:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# Puerto 80 predeterminado para el servidor web sin SSL&lt;br /&gt;NameVirtualHost *:80&lt;br /&gt;&lt;br /&gt;# Tambien aqui le agregamos el puerto 80 &lt;br /&gt;&lt;VirtualHost *:80&gt;&lt;br /&gt;        ServerAdmin webmaster@localhost&lt;br /&gt;        &lt;br /&gt;        DocumentRoot /home/www/&lt;br /&gt;        &lt;Directory /&gt;&lt;br /&gt;                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;                AllowOverride All&lt;br /&gt;        &lt;/Directory&gt;&lt;br /&gt;        &lt;Directory /var/www/&gt;&lt;br /&gt;                Options Indexes FollowSymLinks MultiViews &lt;br /&gt;                AllowOverride All&lt;br /&gt;                Order allow,deny&lt;br /&gt;                allow from all&lt;br /&gt;                # This directive allows us to have apache2's default start page&lt;br /&gt;                # in /apache2-default/, but still have / go to the right place&lt;br /&gt;                #RedirectMatch ^/$ /apache2-default/&lt;br /&gt;        &lt;/Directory&gt;&lt;br /&gt;&lt;br /&gt;        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;        &lt;Directory "/usr/lib/cgi-bin"&gt;&lt;br /&gt;                AllowOverride None&lt;br /&gt;                Options ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;                Order allow,deny&lt;br /&gt;                Allow from all&lt;br /&gt;        &lt;/Directory&gt;&lt;br /&gt;&lt;br /&gt;        ErrorLog /var/log/apache2/error.log&lt;br /&gt;&lt;br /&gt;        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;        # alert, emerg.&lt;br /&gt;        LogLevel warn&lt;br /&gt;&lt;br /&gt;        CustomLog /var/log/apache2/access.log combined&lt;br /&gt;        ServerSignature On&lt;br /&gt;&lt;br /&gt;    Alias /doc/ "/usr/share/doc/"&lt;br /&gt;    &lt;Directory "/usr/share/doc/"&gt;&lt;br /&gt;        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;        AllowOverride None&lt;br /&gt;        Order deny,allow&lt;br /&gt;        Deny from all&lt;br /&gt;        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;    &lt;/Directory&gt;&lt;br /&gt;&lt;br /&gt;&lt;/VirtualHost&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Esos son los unicos cambios que se deben realizar en el archivo de default.&lt;br /&gt;&lt;br /&gt;7. Ahora solo nos falta agregar el nuevo puerto (443) en el archivo /etc/apache2/ports.conf para que apache realice un fork() y cree el servidor a la escucha en ese puerto. El archivo ya modificado quedaria asi:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;juliocs@andromeda:~$ cat /etc/apache2/ports.conf&lt;br /&gt;Listen 80&lt;br /&gt;Listen 443&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;8 Ya con esto solo nos falta reiniciar el apache con el comando:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# /etc/init.d/apache2 force-reload&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Aqui muestro la salida del comando nmap contra localhost mostrando a nuestro apache con SSL habilitado:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;juliocs@andromeda:~$ nmap localhost&lt;br /&gt;&lt;br /&gt;Starting Nmap 4.20 ( http://insecure.org ) at 2007-08-01 05:53 CDT&lt;br /&gt;Interesting ports on localhost (127.0.0.1):&lt;br /&gt;Not shown: 1684 closed ports&lt;br /&gt;PORT     STATE SERVICE&lt;br /&gt;21/tcp   open  ftp&lt;br /&gt;22/tcp   open  ssh&lt;br /&gt;80/tcp   open  http&lt;br /&gt;111/tcp  open  rpcbind&lt;br /&gt;139/tcp  open  netbios-ssn&lt;br /&gt;443/tcp  open  https&lt;br /&gt;445/tcp  open  microsoft-ds&lt;br /&gt;631/tcp  open  ipp&lt;br /&gt;902/tcp  open  iss-realsecure-sensor&lt;br /&gt;977/tcp  open  unknown&lt;br /&gt;2049/tcp open  nfs&lt;br /&gt;3306/tcp open  mysql&lt;br /&gt;5432/tcp open  postgres&lt;br /&gt;&lt;br /&gt;Nmap finished: 1 IP address (1 host up) scanned in 0.247 seconds&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ya por mi parte es todo y nos vemos pronto.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Atentamente,&lt;br /&gt;&lt;br /&gt;Julio Cesar Sánchez González.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-174999754176476493?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/174999754176476493/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=174999754176476493' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/174999754176476493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/174999754176476493'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/08/configurar-el-protocolo-ssl-en-apache.html' title='Configurar el protocolo SSL en Apache 2.2 con Ubuntu Feisty Fawn'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-3316766277596804261</id><published>2007-07-28T01:44:00.001-05:00</published><updated>2008-05-13T02:03:48.493-05:00</updated><title type='text'>Importar datos externos a nuestra base de datos PostgreSQL mediante un script PHP</title><content type='html'>Hola a todos, este documento bien podria ser la continuación del documento anterior "Importar datos externos a nuestra base de datos PostgreSQL mediante COPY" pero ahora nos toca usar PHP para la importación de datos CSV hacia nuestra querida base de datos PostgreSQL.&lt;br /&gt;&lt;br /&gt;Primero que nada empezemos por definir nuestra tabla que contendra los datos. La tabla tiene las siguientes caracteristicas para el ejemplo en cuestion:&lt;br /&gt;&lt;br /&gt;              Tabla «public.clientes_csv»&lt;br /&gt;      Columna       |          Tipo          | Modificadores&lt;br /&gt;---------------------+------------------------+---------------&lt;br /&gt;id                  | integer                |&lt;br /&gt;rfc                 | character varying(15)  |&lt;br /&gt;nombre_razon_social | character varying(80)  |&lt;br /&gt;direccion           | character varying(120) |&lt;br /&gt;telefonos           | character varying(50)  |&lt;br /&gt;&lt;br /&gt;sicodelico=&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Y ahora pasamos a mostrar un fragmento del archivo de excel con los datos a importar.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QnMZ3xskUh0/RqroyTESduI/AAAAAAAAAAU/ulquWi0FsHo/s1600-h/tabla_xls.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_QnMZ3xskUh0/RqroyTESduI/AAAAAAAAAAU/ulquWi0FsHo/s320/tabla_xls.jpg" alt="" id="BLOGGER_PHOTO_ID_5092138279505131234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Guardamos el archivo para excel en formato CSV, quedandonos un archivo de texto plano en formato ascii y separado por comas. Es vital recordar que debemos eliminar los encabezados o datos que no deseemos importar a nuestra base de datos.&lt;br /&gt;&lt;br /&gt;El archivo quedaria de la siguiente forma:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;289,"ROAB","ABIGAIL ROCHA","MIRAMONTES","4554-4455"&lt;br /&gt;311,"AHE821025DLA","ABUD HERMANOS S.A DE C.V.","SANTO DEGOLLADO 895 TEQISQUIAPAN SAN LUIS POTOSI","6766-7788"&lt;br /&gt;26,"MBA831017P83","ACABADOS CONTEMPORANEOS","AV.DIVICION DEL NORTE #2001 COLONIA SANTA CRUZ ATOYAC DELEGACION BENITO JUAREZ","5677-5644"&lt;br /&gt;50,"ASH020827694","ACABADOS SHUMA S.A DE C.V","25 PONIENTE 3513 BELICIARIO DOMINGEZ PUEBLA PUEBLA","2345-1033"&lt;br /&gt;38,"AUHY760723CJA","AGUILERA HERNANDEZ YANET","AV.ERMITA IZTAPALAPA #655 PROGRESO DEL SUR IZTAPALAPA MEX.DF","1234-4567"&lt;br /&gt;354,"MAROAA","ALAN AXEL MARIN ROBLES","VENDEDOR DE DELTA","3458-4564"&lt;br /&gt;326,"ABC051019AX6","ALBERCAS BOMBAS Y CALENTADORES S.A DE C.V.","TANKAH MZA 11 LOTE 16 SMZA 27 POR AV. BENITO JUAREZ CANCUN Q.ROO","1234-5676"&lt;br /&gt;41,"BOMA720502825","ALEJANDRA BOLAÑOS MORALES","LIBERTAD #58 LOCAL 4 Y 5 SAN SIMON TICUMAC DEL. BENITO JUAREZ","9890-5678"&lt;br /&gt;207,"ERETQL","ALEJANDRA TERESA HERNANDEZ","CHALCO # 26 COLONIA EL CONDE NAUCALPAN EDO DE MEXICO","1234-5643"&lt;br /&gt;212,"ONAL","ALEJANDRO GONZALEZ","VENTA DE CALENTADOR CON DESCUENTO","4532-2332"&lt;br /&gt;344,"COCA601222LKG","ALEJANDRO SALVADOR COLINAS COSIO","TUXTLA GUTIERREZ CHIAPAS","2332-4554"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;El archivo tiene el nombre de clientes.csv, ahora procedamos a mostrar el codigo PHP que nos servira para importarlo a nuestra base de datos mediante un formulario.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt; //&lt;br /&gt; // Hecho Por: Julio Cesar Sánchez González - juliocesar_dark@hotmail.com &lt;br /&gt; // Fecha: 27 / Jul / 2007.&lt;br /&gt; // &lt;br /&gt; // El programa se distribuye como tal, sin garantías de ningun tipo y&lt;br /&gt; // esta liberado bajo la licencia publica general de GNU (GPL).&lt;br /&gt; // &lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Importación de un archivo CSV de excel hacia &lt;br /&gt;PostgreSQL&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;form action="" method="POST" enctype="multipart/form-data"&amp;gt;&lt;br /&gt; &amp;lt;tr&amp;gt;&lt;br /&gt;   &amp;lt;td&amp;gt;Subir archivo CSV:&amp;lt;/td&amp;gt;&lt;br /&gt;   &amp;lt;td&amp;gt;&amp;lt;input type="file" name="archivo_csv" &lt;br /&gt;                       id='archivo'&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt; &amp;lt;/tr&amp;gt;&lt;br /&gt; &amp;lt;tr&amp;gt;&lt;br /&gt;   &amp;lt;td colspan="2" align="center"&amp;gt;&lt;br /&gt;     &amp;lt;input type="submit" value="E N V I A R"&amp;gt;&lt;br /&gt;     &amp;lt;input type="reset" value="C A N C E L A R"&amp;gt;&lt;br /&gt;   &amp;lt;/td&amp;gt;&lt;br /&gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt; $file_upload = $_FILES["archivo_csv"]["name"];&lt;br /&gt; $tmp_name = $_FILES["archivo_csv"]["tmp_name"];&lt;br /&gt; $size = $_FILES["archivo_csv"]["size"];&lt;br /&gt; $tipo = $_FILES["archivo_csv"]["type"];&lt;br /&gt;&lt;br /&gt; if($size &amp;gt; 0){&lt;br /&gt;   echo "&amp;lt;h3&amp;gt;Archivo origen: $file_upload&amp;lt;/h3&amp;gt;";&lt;br /&gt;   echo "&amp;lt;h3&amp;gt;Archivo destino: $tmp_name&amp;lt;/h3&amp;gt;";&lt;br /&gt;   echo "&amp;lt;h3&amp;gt;Tamaño del archivo: ".($size/1024)." Kb.&amp;lt;/h3&amp;gt;";&lt;br /&gt;   echo "&amp;lt;h3&amp;gt;Tipo MIME: $tipo&amp;lt;/h3&amp;gt;";&lt;br /&gt;  &lt;br /&gt;   // Comprobamos si el archivo a subir es CSV&lt;br /&gt;   if($tipo == "text/csv"){&lt;br /&gt;     $conex = "host=localhost port=5432 dbname=sicodelico \&lt;br /&gt;               user=juliocs password='foobar'";&lt;br /&gt;     $CONN = pg_connect($conex) or die ("Error en el socket \&lt;br /&gt;                                         de conexión");&lt;br /&gt;    &lt;br /&gt;     echo "Conectando con la base de datos...&amp;lt;br&amp;gt;";&lt;br /&gt;     echo "Insertando los datos recuperados del archivo \&lt;br /&gt;           en la base de datos...&amp;lt;br&amp;gt;";&lt;br /&gt;    &lt;br /&gt;     $fp = fopen($tmp_name, "r");&lt;br /&gt;    &lt;br /&gt;     // Procesamos linea a linea el archivo CSV y &lt;br /&gt;     // lo insertamos en la base de datos&lt;br /&gt;     while($datos = fgetcsv ($fp, 1000, ",")){&lt;br /&gt;       $query = "INSERT INTO clientes_csv (id, rfc, \ &lt;br /&gt;                 nombre_razon_social, direccion, \&lt;br /&gt;                 telefonos) VALUES ('$datos[0]', '$datos[1]', \&lt;br /&gt;                 '$datos[2]', '$datos[3]', '$datos[4]')";&lt;br /&gt;      &lt;br /&gt;       //echo $query;&lt;br /&gt;      &lt;br /&gt;       pg_query($CONN, $query);&lt;br /&gt;     }&lt;br /&gt;    &lt;br /&gt;     pg_close($CONN);&lt;br /&gt;   }else{&lt;br /&gt;     echo "&amp;lt;h3&amp;gt;El formato para el archivo especificado \&lt;br /&gt;                     no es válido.&amp;lt;/h3&amp;gt;";&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Aqui tenemos una imagen del formulario en funcionamiento:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_QnMZ3xskUh0/RqrsvTESdvI/AAAAAAAAAAc/T9FIjhaLIdg/s1600-h/formjpg.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_QnMZ3xskUh0/RqrsvTESdvI/AAAAAAAAAAc/T9FIjhaLIdg/s400/formjpg.jpg" alt="" id="BLOGGER_PHOTO_ID_5092142626012034802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;y esta seria la salida de un select en el monitor psql de postgres con los datos ya importados:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_QnMZ3xskUh0/RqruAzESdwI/AAAAAAAAAAk/h1S32jlkJuA/s1600-h/psql.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_QnMZ3xskUh0/RqruAzESdwI/AAAAAAAAAAk/h1S32jlkJuA/s400/psql.jpg" alt="" id="BLOGGER_PHOTO_ID_5092144026171373314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Creo que eso es todo por hoy, ademas que ya son las 2:18 de la mañana y aunque suelo trabajar de noche mañana tengo una cita de negocios. Una ultima cosa, el codigo PHP lo tuve que cortar con "\" diagonal invertida ya que no se apreciaba bien del todo por el ancho del blog :( .&lt;br /&gt;&lt;br /&gt;Buenas noches a todos y hasta la proxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-3316766277596804261?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/3316766277596804261/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=3316766277596804261' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/3316766277596804261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/3316766277596804261'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/07/importar-datos-externos-nuestra-base-de.html' title='Importar datos externos a nuestra base de datos PostgreSQL mediante un script PHP'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_QnMZ3xskUh0/RqroyTESduI/AAAAAAAAAAU/ulquWi0FsHo/s72-c/tabla_xls.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-4608889393244945175</id><published>2007-07-26T14:14:00.000-05:00</published><updated>2007-12-27T04:44:01.802-06:00</updated><title type='text'>Compilar programas en "C" para acceso a datos PostgreSQL</title><content type='html'>Para compilar un programa escrito en C que emplee la libreria libpq de PostgreSQL es necesario tener instalado los archivos de desarrollo includes para C.&lt;br /&gt;&lt;br /&gt;En el siguiente caso probado en Fedora Core 4 funcionaba instalado desde las fuentes.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;gcc testpq.c -I/usr/local/pgsql/include -L/usr/local/pgsql/lib -lpq -o testpq&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Pero para ubuntu instalado mediante apt-get quedaria de la siguiente forma:&lt;br /&gt;&lt;br /&gt;gcc libpqe.c -o libpqe -I/usr/include/postgresql/ -L/usr/include/postgresql -lpq&lt;br /&gt;&lt;br /&gt;A continuacion pongo un pequeño programa en C que accesa a una base de datos postgresql y sirve como ejemplo para probar la compilacion de codigo C con las librerias libpq:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/*&lt;br /&gt;/ Programa     : sqlt.c&lt;br /&gt;/ Autor        : Julio Cesar Sánchez González (juliocesar_dark@hotmail.com) GNU GPL.&lt;br /&gt;/ Fecha        : 25 - Mayo - 2006.&lt;br /&gt;/ Ultimo Update: 25 - Mayo - 2006.&lt;br /&gt;/ Revisión     : 2&lt;br /&gt;/ Descripción  : Obtiene un conjunto resultado de una base de datos postgres proporcionandole la consulta y la base. &lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include "libpq-fe.h"&lt;br /&gt;#include &lt;string.h&gt;&lt;br /&gt;&lt;br /&gt;void exit_nicely(PGconn *);&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[]){&lt;br /&gt;&lt;br /&gt;  if(argc != 5){&lt;br /&gt;    perror ("Sintaxix: sqlt &lt;host&gt; &lt;db&gt; &lt;login&gt; &lt;\"query\"&gt;\n");&lt;br /&gt;    exit(EXIT_FAILURE);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  char *pghost,&lt;br /&gt;       *pgport,&lt;br /&gt;       *pgoptions,&lt;br /&gt;       *pgtty,&lt;br /&gt;       *dbname,&lt;br /&gt;       *query,&lt;br /&gt;       *cursor_command,&lt;br /&gt;       *login,&lt;br /&gt;       *pwd;&lt;br /&gt;  int nFields;&lt;br /&gt;  int i, j;&lt;br /&gt;&lt;br /&gt;  pghost = argv[1];&lt;br /&gt;  dbname = argv[2];&lt;br /&gt;  login  = argv[3];&lt;br /&gt;  pwd    = NULL;&lt;br /&gt;  query  = argv[4];&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;  PGconn *conn;&lt;br /&gt;  PGresult *result;&lt;br /&gt;&lt;br /&gt;  // pghost = "localhost";&lt;br /&gt;  pgport = NULL;&lt;br /&gt;  pgoptions = NULL;&lt;br /&gt;  pgtty = NULL;&lt;br /&gt;  // dbname = "memoria_sql";&lt;br /&gt;  &lt;br /&gt;  //conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbname);&lt;br /&gt;  conn = PQsetdbLogin(pghost, pgport, pgoptions, pgtty, dbname, login, pwd);&lt;br /&gt;&lt;br /&gt;  if(PQstatus(conn) == CONNECTION_BAD){&lt;br /&gt;    fprintf(stderr, "ConexiÃ³n fallida con la base de datos %s\n", dbname);&lt;br /&gt;    fprintf(stderr, "%s", PQerrorMessage(conn));&lt;br /&gt;    exit_nicely(conn);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // Transaccion&lt;br /&gt;  result = PQexec(conn, "BEGIN");&lt;br /&gt;&lt;br /&gt;  if(!result || PQresultStatus(result) != PGRES_COMMAND_OK){&lt;br /&gt;    fprintf(stderr, "Imposible realizar transaccion\n");&lt;br /&gt;    PQclear(result);&lt;br /&gt;    exit_nicely(conn);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  PQclear(result);  // Limpiamos el result para evitar fugas de memoria&lt;br /&gt;&lt;br /&gt;  cursor_command = (char *) malloc((size_t)1024*sizeof(char));&lt;br /&gt;&lt;br /&gt;  sprintf(cursor_command, "DECLARE mycursor CURSOR FOR %s", query); &lt;br /&gt;&lt;br /&gt;  result = PQexec(conn, cursor_command);&lt;br /&gt;&lt;br /&gt;  if(!result || PQresultStatus(result) != PGRES_COMMAND_OK){&lt;br /&gt;    fprintf(stderr,"DeclaraciÃ³n de CURSOR fallida\n");&lt;br /&gt;    PQclear(result);&lt;br /&gt;    exit_nicely(conn);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  PQclear(result);&lt;br /&gt;&lt;br /&gt;  result = PQexec(conn, "FETCH ALL in mycursor");&lt;br /&gt;&lt;br /&gt;  if(!result || PQresultStatus(result) != PGRES_TUPLES_OK){&lt;br /&gt;    fprintf(stderr,"El comando no regreso ninguna tupla.\n");&lt;br /&gt;    PQclear(result);&lt;br /&gt;    exit_nicely(conn);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  nFields = PQnfields(result);&lt;br /&gt;  &lt;br /&gt;  for(i = 0; i &lt; PQntuples(result); i++){&lt;br /&gt;&lt;br /&gt;    printf ("\n\n=========================\n\t=&gt; Registro: %d\n=========================\n\n", i+1);&lt;br /&gt;&lt;br /&gt;    for(j = 0; j &lt; nFields; j++){&lt;br /&gt;      printf("%-15s: %-15s\n", PQfname(result, j), PQgetvalue(result, i, j));&lt;br /&gt;      &lt;br /&gt;    //printf("\n");&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  PQclear(result);&lt;br /&gt;&lt;br /&gt;  result = PQexec(conn, "CLOSE mycursor");&lt;br /&gt;&lt;br /&gt;  PQclear(result);&lt;br /&gt;&lt;br /&gt;  // Aseguramos la transaccion&lt;br /&gt;  result = PQexec(conn, "COMMIT");&lt;br /&gt;&lt;br /&gt;  PQclear(result);&lt;br /&gt;&lt;br /&gt;  PQfinish(conn);&lt;br /&gt;&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void exit_nicely(PGconn *conn){&lt;br /&gt;  PQfinish(conn);&lt;br /&gt;  exit(1);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Saludos...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-4608889393244945175?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/4608889393244945175/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=4608889393244945175' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4608889393244945175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4608889393244945175'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/07/compilar-programas-en-c-para-acceso.html' title='Compilar programas en &quot;C&quot; para acceso a datos PostgreSQL'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-2779214859194297888</id><published>2007-07-26T13:15:00.000-05:00</published><updated>2007-10-31T05:49:33.967-06:00</updated><title type='text'>Tiempo fugaz</title><content type='html'>Hoy desperte con un dejo de tristeza, al mirar que todo lo construido se derrumba, al pensar en mis viejos amigos, antiguos amores, que se yo, tanto nos perdemos con el paso del tiempo y ni siquiera nos damos cuenta.&lt;br /&gt;&lt;br /&gt;Solo pasa el tiempo, o el tiempo nos pasa, no lo se, pero a todo esto le llamamos vida. Vivimos creyendo que somos importantes para la vida, pero la vida es mas importante para nosotros.&lt;br /&gt;&lt;br /&gt;Somos tan egoistas, pensando en el pasado y queriendo regresar a el, que no nos damos cuenta a lo mucho que renunciamos en el presente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-2779214859194297888?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/2779214859194297888/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=2779214859194297888' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2779214859194297888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2779214859194297888'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/07/tiempo-fugaz.html' title='Tiempo fugaz'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-4501724142303602535</id><published>2007-07-24T15:49:00.000-05:00</published><updated>2007-07-25T15:58:11.834-05:00</updated><title type='text'>Cambiar los passwords de usuario en PostgreSQL</title><content type='html'>Primero que nada nos convertimos en superusuario:&lt;br /&gt;&lt;br /&gt;$su root&lt;br /&gt;&lt;br /&gt;Ya teniendo privilegios nos convertimos en usuario postgres que es el superusuario de la base de datos pero un simple mortal para el filesystem.&lt;br /&gt;&lt;br /&gt;#su postgres&lt;br /&gt;&lt;br /&gt;ya como postgres solo falta entrar en la base de datos principal "template1"&lt;br /&gt;&lt;br /&gt;$psql template1 &lt;br /&gt;&lt;br /&gt;y de ahi, cambiamos el password del usuario en cuestion.&lt;br /&gt;&lt;br /&gt;alter user nombre_usuario with encrypted password "x password";&lt;br /&gt;&lt;br /&gt;y yeah, asi de facil.&lt;br /&gt;&lt;br /&gt;Bye...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-4501724142303602535?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/4501724142303602535/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=4501724142303602535' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4501724142303602535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4501724142303602535'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/07/cambiar-los-passwords-de-usuario-en.html' title='Cambiar los passwords de usuario en PostgreSQL'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-3115478618444856920</id><published>2007-07-24T02:17:00.000-05:00</published><updated>2007-07-25T15:58:23.580-05:00</updated><title type='text'>Problemas con parseInt("08") &amp; parseInt("09") de Javascript</title><content type='html'>El problema se suscita cuando necesitamos convertir la cadena de texto "08" o "09" en un valor entero y al emplear parseInt nos regresa el valor 0. Pero ¿Porque?, pues simple, parseInt emplea como estandar la base de codificación octal y en octal no existen los valores 08 y 09, para solucionarlo debemos de emplear la notación complementaria de parseInt.&lt;br /&gt;&lt;br /&gt;Como un ejemplo vale mas que mil palabras, pues aqui esta el ejemplo:&lt;br /&gt;&lt;br /&gt;var m = parseInt("08", 10);&lt;br /&gt;&lt;br /&gt;con esto obtenemos el valor convertido en entero de la cadena "08" en "m".&lt;br /&gt;&lt;br /&gt;Saludos...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-3115478618444856920?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/3115478618444856920/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=3115478618444856920' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/3115478618444856920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/3115478618444856920'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/07/problemas-con-parseint08-parseint09-de.html' title='Problemas con parseInt(&quot;08&quot;) &amp; parseInt(&quot;09&quot;) de Javascript'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-8818300765180809099</id><published>2007-07-14T03:24:00.000-05:00</published><updated>2007-08-18T15:24:10.351-05:00</updated><title type='text'>Obtener el numero de dias que lleva transcurrido el año en PostgreSQL (Fecha jualiana)</title><content type='html'>Con la siguiente query, obtenemos el numero de dias transcurridos del año en curso. La solución emplea aritmetica de fechas y fue probada en PostgreSQL 8.2 sobre Ubuntu Linux.&lt;br /&gt;&lt;br /&gt;SELECT date_trunc('days', now() - (select cast(date_trunc('year', current_date) as date) as curr_year)::date) + interval '1 day' as dias_transcurridos;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Otra forma simplificada de esto seria mediante la funcion to_char() de postgresql y quedaria de la siguiente forma:&lt;br /&gt;&lt;br /&gt;SELECT to_char(now(), 'ddd');&lt;br /&gt;&lt;br /&gt;Saludos ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-8818300765180809099?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/8818300765180809099/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=8818300765180809099' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/8818300765180809099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/8818300765180809099'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/07/obtener-el-numero-de-dias-que-lleva.html' title='Obtener el numero de dias que lleva transcurrido el año en PostgreSQL (Fecha jualiana)'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-5325835503605277330</id><published>2007-06-27T03:01:00.000-05:00</published><updated>2007-07-06T17:17:50.528-05:00</updated><title type='text'>INSERT ... RETURNING y Conociendo el valor insertado en PostgreSQL</title><content type='html'>Algunas veces nos topamos con la necesidad de recuperar un cierto valor despues de una insercion en postgresql, como puede ser el valor asignado a un id de forma automatica mediante nextval o alguna valor seteado manualmente. A continuación muestro las diferentes formas para lograr esto sin un maximo de esfuerzo:&lt;br /&gt;&lt;br /&gt;Supongamos que tenemos creadas la secuencia: clientes_id_seq y la usaremos dentro de una inserción.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;INSERT INTO clientes (id, nombre, telefono) &lt;br /&gt;VALUES (nextval('clientes_id_seq'), 'Juan Pérez','3455-6678');&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Para conocer el id insertado podemos usar la funcion: &lt;i&gt;currval()&lt;/i&gt; de la siguiente forma:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;select currval('clientes_id_seq');&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Otro metodo alternativo, y sobre todo cuando no manejamos secuencias es emplear INSERT RETURNING cuya sintaxis es la siguiente y que solo esta disponible en las versión 8.2 de PostgreSQL:&lt;br /&gt;&lt;br /&gt;INSERT INTO clientes (id, nombre, telefono) values (5,'Juan Pérez','3455-6678') RETURNING id; &lt;br /&gt;&lt;br /&gt;Tal vez aqui no se note la importancia del insert returning pero si el insert es dinamico mediante un script en algun lenguaje de programación la utilidad salta a simple vista.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-5325835503605277330?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/5325835503605277330/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=5325835503605277330' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5325835503605277330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5325835503605277330'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/insert-returning-y-conociendo-el-valor.html' title='INSERT ... RETURNING y Conociendo el valor insertado en PostgreSQL'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-5575752103555484662</id><published>2007-06-27T02:42:00.000-05:00</published><updated>2007-06-27T03:00:46.729-05:00</updated><title type='text'>Habilitar o desabilitar Triggers en PostgreSQL</title><content type='html'>Existen diversas formas para habilitar o desabilitar los triggers en postgresql, sobre todo de version a version.&lt;br /&gt;&lt;br /&gt;A continuacion se muestran ejemplos en diferentes versiones.&lt;br /&gt;&lt;br /&gt;Para PostgreSQL 8.1 o posterior es muy simple, solo basta con:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ALTER TABLE nombre_tabla ENABLE/DISABLE TRIGGER mi_trigger;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;La cosa se complica con versiónes anteriores a la version 8.0 ya que tenemos que modificar los catalogos del sistema, como se muestra a continuacion:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Desabilitarlos&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;UPDATE pg_catalog.pg_class SET reltriggers = 0 WHERE oid = 'nombre_tabla'::pg_catalog.regclass;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Habilitarlos&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;UPDATE pg_catalog.pg_class SET reltriggers = (SELECT pg_catalog.count(*) FROM pg_catalog.pg_trigger WHERE pg_class.oid = tgrelid) WHERE oid = 'nombre_tabla'::pg_catalog.regclass;&lt;br /&gt;&lt;br /&gt;Y eso es todo por el momento, saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-5575752103555484662?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/5575752103555484662/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=5575752103555484662' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5575752103555484662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5575752103555484662'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/habilitar-o-desabilitar-triggers-en.html' title='Habilitar o desabilitar Triggers en PostgreSQL'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-311763116738460280</id><published>2007-06-26T13:42:00.000-05:00</published><updated>2007-06-26T14:29:10.592-05:00</updated><title type='text'>Ejemplo de frontend para el comando WHOIS en PHP y Linux con exec()</title><content type='html'>El uso de la instrucción exec() de PHP es muy poderoso y peligroso ya que mediante dicha funcion es posible accesar al sistema operativo del servidor en donde esta instalado PHP.&lt;br /&gt;&lt;br /&gt;El siguiente ejemplo en PHP muestra como hacer una interfaz de usuario sencilla para el cliente WHOIS en sistemas LINUX o UNIX y es una implementación muy sencilla que muestra el uso de la instrucción exec() de PHP que como su contraparte en Lenguaje C o Perl realiza la misma acción.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Whois Frontend&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;form name='whois' action="" method="POST"&amp;gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt; &amp;lt;td&amp;gt;Dominio a Consultar:&amp;lt;/td&amp;gt;&lt;br /&gt; &amp;lt;td&amp;gt;&amp;lt;input type="text" name="fqdn" value="google.com" size="30"&amp;gt;  &amp;lt;input type="submit"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt; // Con este bucle creamos las variables dinamicamente enviadas mediante POST y asi no es necesario&lt;br /&gt; // escribirlas una o una, aunque en este ejemplo es trivial ya que se usa una sola variable fqdn existiran&lt;br /&gt; // programas en la vida real que manejen cientos de variables simultaneamente.&lt;br /&gt; foreach ($_POST as $clave =&amp;gt; $valor)&lt;br /&gt;   $$clave= $valor;&lt;br /&gt;&lt;br /&gt; $comando= "whois $fqdn";&lt;br /&gt;  &lt;br /&gt; exec($comando, $res);&lt;br /&gt;&lt;br /&gt; echo "&amp;lt;pre&amp;gt;";&lt;br /&gt; foreach($res as $line)&lt;br /&gt;   echo $line."&amp;lt;br&amp;gt;";&lt;br /&gt; echo "&amp;lt;/pre&amp;gt;";&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-311763116738460280?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/311763116738460280/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=311763116738460280' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/311763116738460280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/311763116738460280'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/ejemplo-de-frontend-para-el-comando.html' title='Ejemplo de frontend para el comando WHOIS en PHP y Linux con exec()'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-5407880797458840589</id><published>2007-06-25T23:22:00.000-05:00</published><updated>2007-06-25T23:34:20.278-05:00</updated><title type='text'>Acentos en PHP, PostgreSQL y Apache 2</title><content type='html'>Es muy facil toparnos con problemas a la hora del despliegue de información con los caracteres latinos como el acento, las dieresis, las ñ, etc. El problema es debido a la codificación estandar en ambientes Linux que es UNICODE o UTF8 como tambien le llaman. Aunque el manejar UNICODE es una gran ventaja por el almacenamiento multilingüe, aveces parece todo lo contrario ya que la codificación estandar en windows es ISO-8859-1 al menos para America Latina y otros paises que manejan el español como lengua predeterminada.&lt;br /&gt;&lt;br /&gt;Aqui la solución es configurar nuestro soporte para ISO-8859-1 en PostgreSQL, Apache y PHP para que nuestras aplicaciones web y bases de datos manejen el mismo charset.&lt;br /&gt;&lt;br /&gt;Para habilitar dicho charset en PHP es muy simple, solo basta con editar el archivo php.ini almacenado dentro de /etc en la mayoria de las distribuciones linux y descomentar la linea como se muestra a continuación: &lt;br /&gt;&lt;br /&gt;&lt;code&gt;default_charset = "iso-8859-1"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Para habilitar ahora el soporte en Apache basta con editar el archivo httpd.conf o alguno relacionado segun la distribución, en mi caso en ubuntu seria el archivo /etc/apache2/apache2.conf&lt;br /&gt;&lt;br /&gt;y descomentar la linea siguiente como se muestra a continuación:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;AddDefaultCharset ISO-8859-1&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;ya por ultimo solo nos faltaria crear nuestra base de datos usando el tipo de codificación latina como se muestra a continuación:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;createdb -U postgres --encoding=Latin1 --owner=propietario mibasededatos&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ya con esto tenemos funcionando nuestro servidor web y nuestra aplicación con acceso de datos en ISO-8859-1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-5407880797458840589?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/5407880797458840589/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=5407880797458840589' title='3 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5407880797458840589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/5407880797458840589'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/acentos-en-php-postgresql-y-apache-2.html' title='Acentos en PHP, PostgreSQL y Apache 2'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-1224931018226141142</id><published>2007-06-25T23:17:00.000-05:00</published><updated>2007-06-25T23:21:15.584-05:00</updated><title type='text'>Arrancar EMACS en modo consola dentro de XTERM</title><content type='html'>Para poder trabajar con emacs desde una consola sin ejecutar automaticamente el xemacs, esto es que se abra el editor emacs en modo terminal como cuando estamos dentro de alguna TTY solo basta con redirigir el modo grafico con el siguiente comando desde el shell:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$ export DISPLAY=&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y listo, emacs ya no se abrira en una ventana por separado, sino dentro de la terminal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-1224931018226141142?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/1224931018226141142/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=1224931018226141142' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1224931018226141142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1224931018226141142'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/arrancar-emacs-en-modo-consola-dentro.html' title='Arrancar EMACS en modo consola dentro de XTERM'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-2909607136281206569</id><published>2007-06-25T23:11:00.000-05:00</published><updated>2007-06-25T23:13:36.465-05:00</updated><title type='text'>Pasos a seguir para modificar el charset interno (UTF8 a ISO-88591) del cluster de postgresql en ubuntu.</title><content type='html'>Primero se preguntaran ¿para que cambiarlo?, ¿que gano?, bueno, pues lo mismo pensaba yo, hasta un infortunado dia que necesite usar la funcion upper incorporada dentro de postgresql en un trigger y me di cuenta que la letra acentuada aparecia en minuscula y las demas letras aparecian bien en mayusculas y lo mismo pasaba con las ñ y las dieresis ö, pues bien, lo primero que se me ocurrio es ver si se trataba de un bug o solo era problema mio de configuración. Pues bien mande un correo a la lista de postgresql y el buen Alvaro Herrera me confirmo que en su sistema trabajaba bien la funcion upper y lower, asi que descarte el problema del bug, hice pruebas y me di cuenta que con Unicode si trabajaba bien dicha funcion pero no con ISO-8859-1 entonces otro buen compañero de la lista de nombre Alejandro Gasca me comento que los locale podrian estar mal configurados.&lt;br /&gt;&lt;br /&gt;Como muchos sabran ubuntu emplea casi para todo UTF8 y ahi estaba el problema, pues despues de mucho googlear y de investigar me tope con el comando locale -a que muestra los charset instalados en el sistema y me di cuenta que por ningun lado aparecia ISO-8859-1.&lt;br /&gt;&lt;br /&gt;Pues segui googleando y me tope que era muy facil agregar dicho charset, solo bastaba con editar el archivo /var/lib/locales/supported.d/es y agregar el siguiente texto en una nueva linea:&lt;br /&gt;&lt;br /&gt;es_MX.ISO-8859-1 ISO-8859-1&lt;br /&gt;&lt;br /&gt;Guardamos cambios y generamos la nueva lista de charsets con:&lt;br /&gt;&lt;br /&gt;locale-gen&lt;br /&gt;&lt;br /&gt;y listo, ya tenia la codificación ISO-8859-1 en mi sistema con ubuntu, ahora seguia lo bueno, reconstruir el cluster de postgresql, que como todos sabemos viene preempacado en ubuntu y se instala solito, tal como esta. Pues aqui tienen los pasos y espero que les funciona como a mi.&lt;br /&gt;&lt;br /&gt;1.- Respaldamos todas las bases si existen ;)&lt;br /&gt;&lt;br /&gt;2.- Paramos el ORDBMS Postgresql con:&lt;br /&gt;/etc/init.d/postgresql-8.2 stop&lt;br /&gt;&lt;br /&gt;3.- Nos ubicamos en el directorio de datos del cluster:&lt;br /&gt;cd /var/lib/postgresql/8.2&lt;br /&gt;&lt;br /&gt;Un leve vistazo mediante ls -alF en el directorio pgdata nos damos cuenta que es un vinculo simbolico :( y que apunta a la ruta antes citada.&lt;br /&gt;&lt;br /&gt;4.- El directorio "main" contiene el cluster de la base de datos con codificación UTF-8, el directorio main lo renombramos para tener un punto de restauración si algo falla.&lt;br /&gt;&lt;br /&gt;mv main main.old&lt;br /&gt;&lt;br /&gt;5.- Creamos un nuevo directorio main para que el script de inicio de ubuntu ni lo note ;)&lt;br /&gt;&lt;br /&gt;mkdir main&lt;br /&gt;&lt;br /&gt;y cambiamos al propietario de dicho directorio con:&lt;br /&gt;&lt;br /&gt;chown -R postgres.postgres main&lt;br /&gt;&lt;br /&gt;6.- Ejecutamos initdb que en ubuntu feisty-fawn esta en: /usr/lib/postgresql/8.2/bin/ y ya con el nuevo charset ISO-8859-1&lt;br /&gt;&lt;br /&gt;su postgres -c '/usr/lib/postgresql/8.2/bin/initdb -U postgres --locale=es_MX.ISO88591 --encoding=Latin1 --lc-collate=Latin1 -D /var/lib/postgresql/8.2/main'&lt;br /&gt;&lt;br /&gt;7.- Ya por ultimo creamos las ligas simbolicas server.crt, server.key y root.crt necesarias para nuestro guion /etc/init.d/postgresql-8.2 de nuestro ubuntu.&lt;br /&gt;&lt;br /&gt;ln -s /etc/postgresql-common/root.crt root.crt&lt;br /&gt;ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem server.crt&lt;br /&gt;ln -s /etc/ssl/private/ssl-cert-snakeoil.key server.key&lt;br /&gt;&lt;br /&gt;8.- Y listo, iniciamos nuevamente el servicio de postgresql y somos muy felices porque ya tenemos nuestro postgresql configurado con el charset ISO-8859-1.&lt;br /&gt;&lt;br /&gt;/etc/init.d/postgresql-8.2 start&lt;br /&gt;&lt;br /&gt;Saludos a todos :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-2909607136281206569?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/2909607136281206569/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=2909607136281206569' title='4 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2909607136281206569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/2909607136281206569'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/pasos-seguir-para-modificar-el-charset.html' title='Pasos a seguir para modificar el charset interno (UTF8 a ISO-88591) del cluster de postgresql en ubuntu.'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-499411469685262237</id><published>2007-06-25T01:52:00.000-05:00</published><updated>2007-06-25T03:32:03.487-05:00</updated><title type='text'>Importar datos externos a nuestra base de datos PostgreSQL mediante COPY</title><content type='html'>Algo muy importante en nuestra base de datos, es sin duda eso, los datos, ¿que hariamos sin ellos?, ¿que proposito tendria entonces tener una base de datos?&lt;br /&gt;&lt;br /&gt;Muy bien, nuestra base de datos ya esta creada, tenemos un esquema relacional perfecto y tenemos normalizadas las tablas, ahora necesitamos poblar dichas tablas, pero no escribirlas de una en una.&lt;br /&gt;&lt;br /&gt;Supongamos que la información la conseguimos en formato digital o es información almacenada en un archivo de hoja de calculo o algo por el estilo.&lt;br /&gt;&lt;br /&gt;Aqui necesitamos primero que nada un formato estandar para poder mover la información de un formato propietario (por ejemplo excel, xls) a nuestras tablas de la base de datos, en este caso las tablas creadas previamente en postgresql.&lt;br /&gt;&lt;br /&gt;Ese formato estandar se llama &lt;b&gt;&lt;i&gt;"CSV"&lt;/i&gt;&lt;/b&gt; o valores separados por comas.&lt;br /&gt;&lt;br /&gt;Veamos un ejemplo de un archivo en excel que contiene algunos de los codigos postales de la Ciudad de México.&lt;br /&gt;&lt;br /&gt;Archivo: CodigosPostalesMexicanos.xls&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_QnMZ3xskUh0/Rn99NvuL_WI/AAAAAAAAAAM/jKfMZbsuy4k/s1600-h/foo.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_QnMZ3xskUh0/Rn99NvuL_WI/AAAAAAAAAAM/jKfMZbsuy4k/s320/foo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5079916579799170402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pues bien, este archivo de excel lo queremos insertar dentro de nuestra base de datos ahora el problema es como lo hacemos. Lo bueno es que la solución es muy facil, simplemente lo guardamos como archivo de texto separado por comas o CSV y a continuación lo abrimos con un editor de texto y eliminamos todo lo que no tenga que ver con la información que vamos a importar, como por ejemplo encabezados de columna, etc.&lt;br /&gt;&lt;br /&gt;Archivo: codigos_postales.csv&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"d_codigo","d_asenta","d_tipo_asenta","D_mnpio","d_estado"&lt;br /&gt;"01000","San Angel","Colonia","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01010","Los Alpes","Colonia","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01020","Guadalupe Inn","Colonia","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01028","Secretaria de Contraloria y Desarrollo Administrativo","Gran usuario","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01029","Infonavit","Gran usuario","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01030","Axotla","Pueblo","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01030","Florida","Colonia","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01040","Campestre","Colonia","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01048","Las Aguilas","Unidad habitacional","Alvaro Obregon","Distrito Federal"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Si notan la primera linea contiene el encabezado que aparecia en excel, es muy importante eliminar esa o las lineas que no sean necesarias para evitar errores a la hora de importarlas, y quedaria asi:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"01000","San Angel","Colonia","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01010","Los Alpes","Colonia","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01020","Guadalupe Inn","Colonia","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01028","Secretaria de Contraloria y Desarrollo Administrativo","Gran usuario","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01029","Infonavit","Gran usuario","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01030","Axotla","Pueblo","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01030","Florida","Colonia","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01040","Campestre","Colonia","Alvaro Obregon","Distrito Federal"&lt;br /&gt;"01048","Las Aguilas","Unidad habitacional","Alvaro Obregon","Distrito Federal"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ya hecho lo anterior lo guardamos y procedemos a crear la tabla en nuestra base de datos postgresql como se muestra a continuación:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;\d codigos_postales&lt;br /&gt;          Tabla «public.codigos_postales»&lt;br /&gt;   Columna      |          Tipo          | Modificadores&lt;br /&gt;-------------------+------------------------+---------------&lt;br /&gt;cp                | character(5)           |&lt;br /&gt;asentamiento      | character varying(255) |&lt;br /&gt;tipo_asentamiento | character varying(120) |&lt;br /&gt;municipio         | character varying(120) |&lt;br /&gt;estado            | character varying(120) |&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;La forma de crear el esquema anterior es muy simple ya que utiliza SQL estandar y en postgres quedaria como sigue:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CREATE TABLE codigos_postales (&lt;br /&gt; cp char(5),&lt;br /&gt; asentamiento varchar(120),&lt;br /&gt; tipo_asentamiento varchar(120),&lt;br /&gt; municipio varchar(120),&lt;br /&gt; estado varchar(120)&lt;br /&gt;);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ya lo unico que nos falta es poblar dicha tabla con el comando COPY y CSV. Pues manos a la obra, y queda asi:&lt;br /&gt;&lt;br /&gt;COPY codigos_postales FROM '/tmp/codigos_postales.csv' DELIMITERS ',' CSV;&lt;br /&gt;&lt;br /&gt;Recordemos que el comando COPY lo escribimos dentro de psql y que el propietario del archivo codigos_postales debe de poder ser leido por el usuario postgres en cuestion, en unix con un simple chmod 644 /tmp/codigos_postales.csv quedaria para poder ser leido por el postmaster de postgresql. Otra cosa importante a notar es que el unico que tiene permiso para hacer esta importación es el usuario postgres y debe de tener tambien permiso de lectura sobre el directorio en cuestion, en este caso /tmp. En windows la ruta del archivo es sustituida por la ruta correspondiente en Windows, por ejemplo "c:\temp\codigos_postales.csv".&lt;br /&gt;&lt;br /&gt;Esta forma de importación es muy importante sobre todo cuando queremos migrar datos entre distintas plataformas o bases de datos que no nos ofrezcan alguna herramienta de migración mediante acceso a datos como ADO, ODBC, etc. O si lo que queremos es importar datos de archivos estadisticos o de excel.&lt;br /&gt;&lt;br /&gt;Si ahora lo que queremos  es crearle una llave primaria a la tabla codigos postales, lo que podemos hacer es jugar un poco con los datos de la siguiente forma:&lt;br /&gt;&lt;br /&gt;ALTER TABLE codigos_postales add column id serial;&lt;br /&gt;&lt;br /&gt;Con esto logramos crear una columna nueva de nombre "id" y es de tipo serial que ademas de ser un tipo entero tambien crea una secuencia implicita para poder incrementar el id de cada registro de una forma facil y segura.&lt;br /&gt;&lt;br /&gt;ahora necesitamos poblar ese campo id si es que postgresql no le asigno ya un numero, seria de la siguiente forma: &lt;b&gt;UPDATE codigos_postales SET id = nextval('codigos_postales_id_seq');&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ya nadamas nos falta aplicar la restriccion de llave primaria y eso lo logramos con:  &lt;b&gt;ALTER TABLE codigos_postales ADD PRIMARY KEY (id);&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Y con esto terminamos nuestro ejemplo de importación mediante CSV con el comando COPY.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-499411469685262237?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/499411469685262237/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=499411469685262237' title='9 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/499411469685262237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/499411469685262237'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/importar-datos-externos-nuestra-base-de.html' title='Importar datos externos a nuestra base de datos PostgreSQL mediante COPY'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_QnMZ3xskUh0/Rn99NvuL_WI/AAAAAAAAAAM/jKfMZbsuy4k/s72-c/foo.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-3723184680354002300</id><published>2007-06-25T01:32:00.000-05:00</published><updated>2007-06-25T01:51:49.597-05:00</updated><title type='text'>Crear, alterar o reiniciar una secuencia en PostgreSQL</title><content type='html'>En postgresql como en oracle para poder generar un numero unico facilmente necesitamos de lo que se conoce como secuencia. Para los usuarios de MySQL esto es algo nuevo ya que en mysql para un campo numero autoincrementable solo basta con poner null, aqui necesitamos algo mas de trabajo pero sin duda tener una secuencia es algo muy poderoso.&lt;br /&gt;&lt;br /&gt;Para poder crear una secuencia en postgresql nos valemos del comando create sequence, y como un ejemplo vale mas que mil palabras, pues aqui tenemos el ejemplo completo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Creando la secuencia serie:&lt;br /&gt;&lt;br /&gt;Ya dentro del monitor psql tecleamos:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;code&gt;CREATE SEQUENCE foo start 100;&lt;/code&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Si queremos borrarla, basta con hacer &lt;b&gt;DROP SEQUENCE foo;&lt;/b&gt; y si lo que queremos es reiniciarla a un valor lo podemos hacer de dos formas.&lt;br /&gt;&lt;br /&gt;La primera es mediante la función setval que se emplearia de la siguiente manera: &lt;b&gt;SELECT setval('foo',1500,'t');&lt;/b&gt;. Si lo que queremos es reiniciarla para que empieze nuevamente desde el primer valor en este caso podemos  borrarla o reiniciarla de la siguiente forma: &lt;b&gt;ALTER SEQUENCE foo restart 1;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Con esto damos un primer vistazo a las secuencias que seran parte fundamental para el manejo de llaves primarias.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-3723184680354002300?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/3723184680354002300/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=3723184680354002300' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/3723184680354002300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/3723184680354002300'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/crear-alterar-o-reiniciar-una-secuencia.html' title='Crear, alterar o reiniciar una secuencia en PostgreSQL'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-6133480790166668146</id><published>2007-06-24T03:16:00.000-05:00</published><updated>2007-06-24T03:22:48.010-05:00</updated><title type='text'>Registrar el lenguaje PL/PGSQL</title><content type='html'>Aveces con el uso cotidiano de postgresql nos surge la necesidad de poder usar funciones, procedimientos almacenados o triggers dentro de nuestra base de datos pero casi siempre al menos en linux el soporte para plpgsql necesita habilitarse.&lt;br /&gt;&lt;br /&gt;Pues aqui tienen los pasos para registrar el buen lenguaje PL/PGSQL similar al PLSQL de Oracle.&lt;br /&gt;&lt;br /&gt;Como usuario Postgres efectuamos los siguiente en el bash o interprete de comandos:&lt;br /&gt;&lt;br /&gt;$ createlang plpgsql template1 &lt;br /&gt;&lt;br /&gt;Asi ya queda generado en la plantilla principal y aplica a todas nuestras bases de datos. O si lo que quieren es crear el lenguaje en una base de datos que ya tengan es la misma sintaxis, solo que en vez de template1 sera el nombre de la base que usen, por ejemplo:&lt;br /&gt;&lt;br /&gt;$ createlang -U postgres plpgsql mibasededatos&lt;br /&gt;&lt;br /&gt;Aqui el operador -U le indica al comando que se conecte con la base de datos como usuario postgres.&lt;br /&gt;&lt;br /&gt;Saludos...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-6133480790166668146?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/6133480790166668146/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=6133480790166668146' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/6133480790166668146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/6133480790166668146'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/registrar-el-lenguaje-plpgsql.html' title='Registrar el lenguaje PL/PGSQL'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-4578859854528187998</id><published>2007-06-24T03:07:00.000-05:00</published><updated>2008-01-09T13:23:51.560-06:00</updated><title type='text'>Cambiar el password de un usuario en postgresql</title><content type='html'>Para poder asignarle un password a un usuario o incluso cambiarlo en la base de datos PostgreSQL solo necesitamos realizar los siguientes pasos:&lt;br /&gt;&lt;br /&gt;1. Nos convertimos en usuario root, en linux por supuesto, aunque en windows tambien funciona no hay como postgresql en linux.&lt;br /&gt;&lt;br /&gt;$ su root&lt;br /&gt;&lt;br /&gt;2. Ahora nos convertimos en el usuario postgres que es el administrador del gestor relacional.&lt;br /&gt;&lt;br /&gt;# su postgres&lt;br /&gt;&lt;br /&gt;Ya por ultimo entramos al monitor de psql en la base de datos principal "template1"&lt;br /&gt;&lt;br /&gt;$ psql template1 &lt;br /&gt;&lt;br /&gt;y aqui dentro escribimos:&lt;br /&gt;&lt;br /&gt;alter user nombre_usuario with encrypted password 'password';&lt;br /&gt;&lt;br /&gt;y listo, asi podemos cambiar nuestras contraseñas las veces que queramos en PostgreSQL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-4578859854528187998?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/4578859854528187998/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=4578859854528187998' title='2 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4578859854528187998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4578859854528187998'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/cambiar-el-password-de-un-usuario-en.html' title='Cambiar el password de un usuario en postgresql'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-4418405618385481220</id><published>2007-06-24T02:39:00.001-05:00</published><updated>2011-05-25T03:33:29.224-05:00</updated><title type='text'>Entre el cielo y el infierno</title><content type='html'>Esta es una copia de mi archivo motd de mi sistema y un poco de ascii art :)&lt;br /&gt;&lt;br /&gt;Linux geminis 2.6.15-26-686 #1 SMP PREEMPT Thu Aug 3 03:13:28 UTC 2006 i686 GNU/Linux&lt;br /&gt;                                                                                                  &lt;pre&gt;&lt;br /&gt;                                                                                                  &lt;br /&gt;                                                             ..............                       &lt;br /&gt;                                                             ................                     &lt;br /&gt;                                                           ....................                   &lt;br /&gt;                                                       ....::....            ....                 &lt;br /&gt;                                                   ....::::::::..                                 &lt;br /&gt;                                               ....::;;;;ii;;::::                                 &lt;br /&gt;                         ..........::::........::::;;iittttii;;::..                               &lt;br /&gt;                   ....::::,,,,;;;;;;;;;;;;;;;;iittjjLLLLLLjjtt;;::..                             &lt;br /&gt;               ....::::;;iiiittttttttttttttttttttffLLGGDDGGLLjjtt;;::..                           &lt;br /&gt;             ..::::iittLLLLGGGGDDDDDDDDGGGGGGGGGGGGDDWWWWEEDDGGfftt;;::..                         &lt;br /&gt;           ....,,iittLLDDWWWWWWWW##WWWWWWWWDDDDDDDDWWWWWWWWWWDDGGjjtt,,::..                       &lt;br /&gt;           ..::iittGGDDWW##################WWWWWWWWWWWWWWWWWWWWDDGGffii;;::..                     &lt;br /&gt;         ..::;;ttffGGWW######################WWWWWWWW########WWWWDDLLjjii::..                     &lt;br /&gt;         ..,,iijjLLDDWW######################WWWWWWWWWWWWWWWWWWWWDDGGLLttii::..                   &lt;br /&gt;       ..::;;iijjLLGGDDWW##################WWWWWWWWWWWWWWWWWWWWWWDDGGLLjjii;;::..                 &lt;br /&gt;       ..::;;iijjLLGGDDDDWWWW##########WWWWWWWWWWWWWWWWWWWWWWWWWWDDGGLLjjttii::::                 &lt;br /&gt;     ....::iiiijjLLLLGGDDDDWWWWWWWWWWWWWWWWWWWWDDDDDDDDWWWWWWWWWWDDGGLLffttii,,::..               &lt;br /&gt;     ..::::iittjjffLLGGDDDDWWWWWWWWWWWWDDDDDDDDDDDDDDDDDDWWWWDDDDDDGGLLjjttii;;::....             &lt;br /&gt;     ..::::iittjjLLLLGGDDDDWWWWWWWWWWWWDDDDDDDDDDDDDDDDDDEEDDDDDDDDGGLLjjttii;;::::..             &lt;br /&gt;     ..::,,iittffLLLLGGDDDDWWWWWWWWWWWWWWDDDDDDDDDDDDDDWWWWWWDDDDDDGGLLffttttii;;::..             &lt;br /&gt;     ..::,,iijjLLLLGGGGDDDDWWWWWWWWWWWWWWWWDDDDDDDDDDWWWWWWWWWWEEDDDDGGLLjjttii;;::..             &lt;br /&gt;     ..::,,ttjjLLLLGGGGDDKKWWWWWW##WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWDDGGGGLLjjttii::::..           &lt;br /&gt;     ..::,,ttjjLLLLGGDDDDEEWWWWWW######WWWWWWWWWWWWWWWWWWWW##WWWWWWWWDDGGLLLLttii;;::..           &lt;br /&gt;     ..::;;ttjjLLGGGGDDDDDDWWWWWW########WWWWWWWWWWWWWWWW######WWWWWWDDDDGGLLjjtt;;::..           &lt;br /&gt;     ..::iittjjLLGGGGGGDDDDDDWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWDDDDGGLLffttii;;....         &lt;br /&gt;     ..::iittjjLLGGGGGGGGDDDDDDDDWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWDDDDGGGGGGLLffjjttii::..         &lt;br /&gt;     ..::iittjjLLGGGGGGGGGGGGGGGGGGDDDDDDDDDDDDDDDDDDDDDDDDDDGGGGGGGGGGLLLLLLttttttii,,::         &lt;br /&gt;     ..::;;iittjjffffffffffffffffLLLLLLLLLLLLGGGGLLLLGGGGLLLLLLLLLLffjjjjttttttiittii;;::..       &lt;br /&gt;     ..::,,;;iiii;;;;;;;;;;;;iiiiiiiiiittttttttjjttttttttttttiiiiii;;,,::;;;;iiiiiiii;;::..       &lt;br /&gt;     ..::::,,::::::::::::::::::::::::,,;;;;iiiiiiiiiiii;;;;;;,,::::::::......::::::::::::..       &lt;br /&gt;     ..::::::::::::........  ........::::::::;;;;;;;;,,::::........            ............       &lt;br /&gt;     ..::::::::..........        ......::::::::;;;;,,::......                                     &lt;br /&gt;     ..::::....                        ....::::iiii,,::..                                         &lt;br /&gt;     ..::::....                          ..::,,iiii;;::..                                         &lt;br /&gt;     ..::....                            ..;;;;ttttii::..                                         &lt;br /&gt;     ..::....                            ::iittLLfftt,,..                                         &lt;br /&gt;     ..::::..                          ..::ttLLDDGGjj;;::                                         &lt;br /&gt;   ..::::::..                          ..;;ttGGDDDDLLii::                                         &lt;br /&gt;   ..::;;::::....                    ..,,iiffDDWWDDLLtt;;..                                       &lt;br /&gt;   ..,,ii;;::::::..  ..      ......::::iiiiLLDDWWEEGGttii,,..                            ......   &lt;br /&gt; ..::;;iiii;;;;,,,,..::::::::::::;;iiiiiijjGGDDWWDDGGjjttii;;::::........  ............::,,::..   &lt;br /&gt; ..::;;iittiiiiii;;;;;;,,;;;;;;iiiiiiiittLLGGDDWWDDGGLLttiiiiii;;::::::::......::::::::;;ii;;::   &lt;br /&gt; ..::;;iittttttttttttttttjjjjjjjjjjttttffLLDDEEWWGGLLLLjjttttttttttiiiiii;;iiiiiiiiiittttttii,,.. &lt;br /&gt; ..::;;iiiittttjjffLLLLLLGGLLLLLLffjjjjffffGGDDWWGGffjjttttttttttjjffjjjjttjjttttjjjjffjjttii;;:: &lt;br /&gt; ..,,iiiittttjjffLLGGGGDDDDDDGGGGLLLLffLLLLGGDDEEGGjjiiiiiittttjjffLLGGGGGGGGGGGGGGGGLLLLjjttii:: &lt;br /&gt;   ::;;ttttjjffLLLLGGDDDDDDDDDDGGLLLLffLLLLGGDDDDGGjjttiiiittttttffLLGGDDDDDDDDGGGGGGLLLLffjjii,, &lt;br /&gt;   ..::ttjjjjLLLLLLGGDDKKWWDDDDGGLLLLLLLLLLGGDDDDGGjjttttiittttttjjLLGGLLGGDDDDGGGGGGLLLLLLjjtt:: &lt;br /&gt;     ..;;ttjjffLLLLGGDDDDEEDDDDGGLLLLLLLLLLGGGGDDGGLLjjttttttttttttjjLLLLGGGGGGGGGGGGLLLLfftt;;:: &lt;br /&gt;       ::;;ttjjLLLLGGGGDDDDDDGGLLLLLLffLLLLGGGGDDLLLLjjttttttttttttjjffLLLLLLLLLLLLLLLLffttii::.. &lt;br /&gt;         ::;;iijjjjLLGGGGGGGGGGLLLLLLjjLLffLLGGDDffjjttiittttttttttttttjjLLLLLLLLLLLLjjtt;;::..   &lt;br /&gt;         ..::;;iijjLLLLGGGGLLLLLLLLLLjjttttjjLLGGttii;;::ttttttiiiittjjjjjjjjjjjjjjjjttii::..     &lt;br /&gt;           ::::,,iijjffLLLLjjjjjjtttttt::::,,ttjj::..  ::iiiiii;;iiiiiittttttttttttii::..         &lt;br /&gt;           ::::::,,ttjjffffjjttttiiiiii;;::::;;ii,,::::;;;;;;;;;;;;iiiittttttttiiii,,             &lt;br /&gt;           ..::::::;;ttjjjjttttiiii;;;;;;;;;;;;;;::::::::::::,,,,;;iiiitttttt;;::....             &lt;br /&gt;           ..::::::::iijjjjjjttttii;;;;,,::::::::..........::::,,;;iittttttii::......             &lt;br /&gt;           ....::::::iijjLLjjjjttttii;;::::......        ..::,,;;iiiitttttt::::::::..             &lt;br /&gt;           ....::::::iittffjjffjjttiiii,,::....          ..::;;;;iittjjttii::;;,,::..             &lt;br /&gt;           ....::::::;;ttttttffjjttttii;;,,::....    ....::;;iiiittttjjtt::::::::::               &lt;br /&gt;           ....::::::,,iittttjjjjjjtttt;;,,::::......::::;;;;iiiittttttii::,,::::..               &lt;br /&gt;             ..::::::::;;;;iiiitttttttt;;;;;;::::::::::;;;;iiiiiiiittii;;::::::::..               &lt;br /&gt;             ..::::::::::::;;;;iiiiiiii;;;;;;,,::::::,,;;;;iiii;;iiii,,::::::::::..               &lt;br /&gt;             ..::,,::::::::::::;;;;::::::::::::::::::::::::::;;::::::::::::::::::..               &lt;br /&gt;             ..::,,::::::::::::,,::::::::::::::::::::::::::::;;::::::::::::::::::..               &lt;br /&gt;             ..::::::::::::::::::::::::..::::::::::::::::..::::::::::::::::::::..                 &lt;br /&gt;               ..::::::::..::::,,::::::::,,,,..::::::::::::::::::::::::::::::::..                 &lt;br /&gt;               ..::::::::::::::;;::::;;::,,,,..::::,,::::..::::::::::::::,,,,::..                 &lt;br /&gt;               ..::::::::::::::;;::::;;,,,,,,::::::::..::  ....::::::,,,,,,,,::..                 &lt;br /&gt;               ....::::::::::::::::::,,::::::::......    ..::::::::::;;;;,,::....                 &lt;br /&gt;                 ..::::::::::::,,::,,::::::::::....::  ..::::::::;;;;;;;;,,::..                   &lt;br /&gt;                 ....::::::::::::::;;::::::..::..::::,,::,,::::;;;;;;;;;;,,::..                   &lt;br /&gt;                 ....::::::::::,,,,;;,,,,,,::::::::::,,::;;,,;;;;;;ii;;;;::::                     &lt;br /&gt;                   ....::::::,,,,,,;;;;;;;;;;iiiiiiii;;;;;;ii;;iiiiii;;;;::::                     &lt;br /&gt;                   ....::::,,;;;;;;;;iiiittjjjjLLLLffffjjiiiiiiiiii;;;;::::..                     &lt;br /&gt;                     ....::,,;;;;;;,,iittttjjjjffLLffjjttiiiiiiiiii;;,,::..                       &lt;br /&gt;                       ....::,,;;;;iiiiiittttjjjjjjjjjjttiiiiiiiiii;;::::..                       &lt;br /&gt;                           ::::;;iiiiiiiiiiiittttttttttttiiiiiiii;;,,::..                         &lt;br /&gt;                         ....::,,;;;;iiii;;;;iiii;;;;iiii;;;;;;,,::::..                           &lt;br /&gt;                           ..::::,,;;;;;;,,,,;;;;,,,,;;;;,,,,::::....                             &lt;br /&gt;                           ....::::::::::::::::::::::::::::::....                                 &lt;br /&gt;                             ....::::::::::::::::::::........                                     &lt;br /&gt;                                   ..................                                             &lt;br /&gt;                                                                                                  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Through me the way is to the city dolent;&lt;br /&gt;Through me the way is to eternal dole;&lt;br /&gt;Through me the way among the people lost.&lt;br /&gt;&lt;br /&gt;Justice incited my sublime Creator;&lt;br /&gt;Created me divine Omnipotence,&lt;br /&gt;The highest Wisdom and the primal Love.&lt;br /&gt;&lt;br /&gt;Before me there were no created things,&lt;br /&gt;Only eterne, and I eternal last.&lt;br /&gt;All hope abandon, ye who enter in!&lt;br /&gt;&lt;br /&gt;  *&lt;br /&gt;   *&lt;br /&gt;  ***                                                                          &lt;br /&gt;&lt;br /&gt;Per me si va ne la città dolente,&lt;br /&gt;per me si va ne l'etterno dolore,&lt;br /&gt;per me si va tra la perduta gente.&lt;br /&gt;&lt;br /&gt;Giustizia mosse il mio alto fattore:&lt;br /&gt;fecemi la divina podestate,&lt;br /&gt;la somma sapienza e 'l primo amore.&lt;br /&gt;&lt;br /&gt;Dinanzi a me non fuor cose create&lt;br /&gt;se non etterne, e io etterno duro.&lt;br /&gt;Lasciate ogne speranza, voi ch'intrate".&lt;br /&gt;&lt;br /&gt;  *&lt;br /&gt;   *&lt;br /&gt;    ***&lt;br /&gt;&lt;br /&gt;Por mi se va a la ciudad doliente,&lt;br /&gt;por mi se va al eterno dolor,&lt;br /&gt;por mi se va con la perdida gente.&lt;br /&gt;&lt;br /&gt;La Justicia movio a mi supremo Autor;&lt;br /&gt;me hizo la divina potestad,&lt;br /&gt;la suma sabiduría y el amor primero.&lt;br /&gt;&lt;br /&gt;Antes de mí no hubo nada creado,&lt;br /&gt;a excepción de los seres eternos, y yo duro eternamente.&lt;br /&gt;Dejad toda esperanza los que entráis.&lt;br /&gt;&lt;br /&gt;  *&lt;br /&gt;   *&lt;br /&gt;   ***&lt;br /&gt;&lt;br /&gt;Ahora me he convertido en la muerte, destructora de mundos.&lt;br /&gt;Soy la Muerte que se lleva todo, la fuente de las cosas que vendran.&lt;br /&gt;&lt;br /&gt;Soy el espectro de aquellos que dominan los pueblos, el arte politico de los conquistadores, el silencio de los secretos, el conocimiento de los conocedores.&lt;br /&gt;&lt;br /&gt;Soy yo quien recalienta, retiene, o deja ir la lluvia; yo soy la inmortabilidad y la muerte; soy yo quien soy, el ser y el no ser.&lt;br /&gt;&lt;br /&gt;D1rkAvenger&lt;br /&gt;&lt;br /&gt;|_|0|_|&lt;br /&gt;|_|_|0|&lt;br /&gt;|0|0|0|&lt;br /&gt;&lt;br /&gt;We were young full of hopes. Now, we're old full of remorse...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-4418405618385481220?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/4418405618385481220/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=4418405618385481220' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4418405618385481220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/4418405618385481220'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/entre-el-cielo-y-el-infierno.html' title='Entre el cielo y el infierno'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7258168133363380369.post-1550802854960123144</id><published>2007-06-24T02:11:00.000-05:00</published><updated>2007-06-24T02:16:33.909-05:00</updated><title type='text'>Saludos a todos</title><content type='html'>Hola a todos, esta es mi primer entrada en el mundo de los blogs, aunque sin duda llevo años escribiendo en listas de discusión sobre linux y bases de datos, pues ahora me doy cuenta que es muy importante el publicar mucha información que tengo guardada aqui y por alla y que sin duda a mas de alguno le servira.&lt;br /&gt;&lt;br /&gt;Todos sus comentarios y aportes a esta pagina son bien recibidos y nos vemos pronto por aqui.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7258168133363380369-1550802854960123144?l=darkavngr.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkavngr.blogspot.com/feeds/1550802854960123144/comments/default' title='Comentarios de la entrada'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7258168133363380369&amp;postID=1550802854960123144' title='0 Comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1550802854960123144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7258168133363380369/posts/default/1550802854960123144'/><link rel='alternate' type='text/html' href='http://darkavngr.blogspot.com/2007/06/saludos-todos.html' title='Saludos a todos'/><author><name>Julio Cesar Sánchez González</name><uri>http://www.blogger.com/profile/03848153104088604222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
