<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>EL blog de Pelin</title>
	<atom:link href="http://blogs.hydras.com.ar/srodriguez/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blogs.hydras.com.ar/srodriguez</link>
	<description>Otro blog más de WordPress</description>
	<pubDate>Tue, 15 Sep 2009 03:16:33 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Software Freedom Day Resistencia 2009</title>
		<link>http://blogs.hydras.com.ar/srodriguez/?p=57</link>
		<comments>http://blogs.hydras.com.ar/srodriguez/?p=57#comments</comments>
		<pubDate>Tue, 15 Sep 2009 03:16:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://blogs.hydras.com.ar/srodriguez/?p=57</guid>
		<description><![CDATA[Los invitamos al &#8220;Software Freedom Day Resistencia 2009&#8243; que se realizara el 26 de Setiembre del corriente año en el Aula Magna de la UTN Regional Resistencia sito en French 414, Resistencia Chaco.
El Día de la Libertad de Software (Software Freedom Day en inglés) es una celebración anual a nivel mundial del software libre. Es [...]]]></description>
			<content:encoded><![CDATA[<p>Los invitamos al &#8220;Software Freedom Day Resistencia 2009&#8243; que se realizara el 26 de Setiembre del corriente año en el Aula Magna de la UTN Regional Resistencia sito en French 414, Resistencia Chaco.</p>
<p>El Día de la Libertad de Software (Software Freedom Day en inglés) es una celebración anual a nivel mundial del software libre. Es un evento de educación pública, no solo para celebrar las virtudes de este tipo de software, sino para promover su uso para el beneficio del público.</p>
<p>Este evento fue establecido en 2004 y fue celebrado por primera vez el 28 de agosto de 2004, cuando alrededor de 70 equipos participaron. Desde esto ha ido creciendo en popularidad y más de 300 equipos de cerca de 60 países celebraron el segundo Día de la Libertad de Software, llevado a cabo el 10 de setiembre de 2005. En 2008, más de 500 equipos en 90 países alrededor del mundo celebraron DLS.</p>
<p>La edicion del año 2008 realizada en la UTN FRRe convoco a 8 ponentes y mas de 300 personas asistieron en toda la jornada.</p>
<p>Este evento cuenta con el apoyo invaluable de la empresa Ecom Chaco SA,R&#038;R Chaco y la UTN FRRe quien nos cedio amablemente sus instalaciones.</p>
<p>Cronograma del evento:</p>
<p>* 09:15 Apertura del evento a cargo de los organizadores<br />
* 09:30 Introducción Software Libre y Open Source<br />
o Casiva Agustin - Ecom Chaco S.A.<br />
* 10:30 Migracion de Windows a Linux<br />
o Javier Utges - Ecom Chaco S.A.<br />
* 11:30 El aporte de Sun al Software Libre<br />
o Miguel Vargas - UTN FRRe Osum Leader<br />
* 12:30- 14:00 Break para almorzar<br />
* 14:00 Selección de hardware de infraestructura y armado de presupuestos para licitaciones<br />
o Dardo Valdez - Poder Judicial Provincia de Corrientes.<br />
* 15:00 Desarrollo Open Source.<br />
o Dario Quintana - Desarrollador de NHibernate.<br />
* 16:00 Gobierno Electronico con SL.<br />
o Jorge O. Julián (Coordinador General S.I.U.P.) - J. Mateo Cassiet (Coordinador de Plataformas de Publicación en Internet del Gobierno del Pueblo de la Provincia del Chaco -S.I.U.P.-).<br />
* 17:00 Panel de debate con gente del medio que se encuentra trabajando con tecnologias Open Source y Software Libre.<br />
* Cierre del evento, sorteos y premios.</p>
<p>Contando desde ya con su presencia y aporte, los esperamos.</p>
<p>Registrate en</p>
<p>http://eventioz.com/events/software-freedom-day-2009-resistencia-chaco-argentina</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.hydras.com.ar/srodriguez/?feed=rss2&amp;p=57</wfw:commentRss>
		</item>
		<item>
		<title>Cambiar el timezone en Solaris</title>
		<link>http://blogs.hydras.com.ar/srodriguez/?p=53</link>
		<comments>http://blogs.hydras.com.ar/srodriguez/?p=53#comments</comments>
		<pubDate>Wed, 19 Aug 2009 17:07:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[opensolaris]]></category>

		<category><![CDATA[solaris]]></category>

		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://blogs.hydras.com.ar/srodriguez/?p=53</guid>
		<description><![CDATA[Como cambiar el timezone en un servidor Solaris]]></description>
			<content:encoded><![CDATA[<p>1) Se debe editar el archivo etc/TIMEZONE.</p>
<p>En mi caso estaba de solo lectura asi que primero se debe ejecutar:</p>
<p><em>root@sunray1 # chmod +w /etc/TIMEZONE</em></p>
<p>y cambiar el valor a la timezone deseada:</p>
<p>TZ=America/Buenos_Aires</p>
<p>en mi caso</p>
<p>2) ejecutar:</p>
<p><em>root@sunray1 # rtc -z America/Buenos_Aires<br />
root@sunray1 # rtc -c</em></p>
<p>3) Reiniciar el equipo para que los cambios surtan efecto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.hydras.com.ar/srodriguez/?feed=rss2&amp;p=53</wfw:commentRss>
		</item>
		<item>
		<title>Migrando datos con Kettle Parte 1</title>
		<link>http://blogs.hydras.com.ar/srodriguez/?p=18</link>
		<comments>http://blogs.hydras.com.ar/srodriguez/?p=18#comments</comments>
		<pubDate>Wed, 15 Jul 2009 18:12:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[DBA]]></category>

		<category><![CDATA[ETL]]></category>

		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://blogs.hydras.com.ar/srodriguez/?p=18</guid>
		<description><![CDATA[Les voy a mostrar una excelente herramienta de ETL (Extract, Transform &#38; Load) que es el Kettle.
El ETL, como lo dice su nombre es el proceso de extraer archivos desde una determinada fuente, transformarlos y cargarlos en el destino.
Me toco lidiar con unos archivos que no se bien como se llaman, creo que son serializados. [...]]]></description>
			<content:encoded><![CDATA[<p>Les voy a mostrar una excelente herramienta de <a href="http://es.wikipedia.org/wiki/ETL">ETL</a> (Extract, Transform &amp; Load) que es el <a href="http://kettle.pentaho.org/">Kettle</a>.<br />
El ETL, como lo dice su nombre es el proceso de extraer archivos desde una determinada fuente, transformarlos y cargarlos en el destino.<br />
Me toco lidiar con unos archivos que no se bien como se llaman, creo que son serializados. Consisten en que los datos de una fila estan almacenados unos a continuacion de otros, cuando los vi por primera vez me dije WTF!!!! pero un par de programadores de antaño (25 años de programacion) me dijeron que era muy comun en su epoca&#8230;..pero ahora un CSV no es ciencia, ademas que hay que andar con un archivo extra con la definicion de los datos..pero bueh.</p>
<p>Particularmente lo utilice para mover datos entre distintas bases de datos, levantar archivos csv,xls o los anteriormente serializados.<br />
Kettle soporta una multitud de combinaciones pero voy a mostrar las mas sencillas.</p>
<p><strong>Escenario:</strong></p>
<p>Nos envian un archivo de texto plano (.txt), serializado y lo vamos a levantar a una tabla en una base de datos PostgreSQL.</p>
<p>Si alguien necesita el archivo no tiene mas que pedirlo <img src='http://blogs.hydras.com.ar/srodriguez/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Preparamos el escenario</p>
<ul>
<li>Creamos una carpeta en la cual descargamos el archivo, para eso se crea una carpeta llamada &#8220;entrada&#8221;.</li>
</ul>
<ul>
<li>Creamos una carpeta en la cual guardaremos los archivos convertidos.</li>
</ul>
<p>Se crea una carpeta llamada &#8220;salida&#8221;</p>
<p><strong>1) Obtener el kettle desde el sitio oficial:</strong><br />
<a href="http://downloads.sourceforge.net/pentaho/Kettle-3.0.0.GA.zip">http://downloads.sourceforge.net/pentaho/Kettle-3.0.0.GA.zip</a><br />
<strong>2) Se lo descomprime en la carpeta que uno desee.</strong><br />
<code><br />
pelin@pasargada:~/Documentos$ ls *.zip<br />
Kettle-3.0.3.GA-0569.zip<br />
pelin@pasargada:~/Documentos$ unzip Kettle-3.0.3.GA-0569.zip<br />
Archive:  Kettle-3.0.3.GA-0569.zip                                                                                        creating:<br />
inflating: META-INF/MANIFEST.MF<br />
...........<br />
...........<br />
inflating: ui/laf.properties<br />
inflating: ui/menubar.properties<br />
inflating: ui/menubar.xul<br />
inflating: ui/menus.xul<br />
pelin@pasargada:~/Documentos$<br />
</code><br />
<strong>3) Hacemos  ejecutable al script</strong><br />
<code><br />
pelin@pasargada:~/Documentos/kettle$ chmod +x spoon.sh<br />
pelin@pasargada:~/Documentos/kettle$ ls -l spoon.*<br />
-rw-r--r-- 1 pelin pelin 4286 2008-04-25 12:30 spoon.ico<br />
-rw-r--r-- 1 pelin pelin 2661 2008-04-25 12:30 spoon.png<br />
-rwxr-xr-x 1 pelin pelin 3428 2008-04-25 12:30 spoon.sh<br />
</code><br />
y lo lanzamos ejecutando<br />
<code><br />
pelin@pasargada:~/Documentos/kettle$ sh spoon.sh &amp;<br />
[1] 14591<br />
pelin@pasargada:~/Documentos/kettle$<br />
</code></p>
<p><strong>4) Se abre la pantalla de inicio</strong></p>
<p><a href="http://1.bp.blogspot.com/_SHBFPhYeDdw/SYDJ_RDdQRI/AAAAAAAACjs/mDDsC56CxGY/s1600-h/ketle1.jpeg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img id="BLOGGER_PHOTO_ID_5296455250534547730" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 105px;" src="http://1.bp.blogspot.com/_SHBFPhYeDdw/SYDJ_RDdQRI/AAAAAAAACjs/mDDsC56CxGY/s200/ketle1.jpeg" border="0" alt="" /></a><br />
Se tienen dos opciones:<br />
a) Crear un repositorio asi todas las tareas se almancenan en un base de datos<br />
b) Sin repositorio, donde cada tarea o trabajo se guardan como archivos.</p>
<p>Ahora vamos a utilizarlo sin catalogo.</p>
<p>Seleccionar &#8220;Sin Catalogo&#8221;</p>
<p><strong>5) Pantalla principal</strong></p>
<p><a href="http://3.bp.blogspot.com/_SHBFPhYeDdw/SYDP7YDb9ZI/AAAAAAAACj0/cgk42lvRTYU/s1600-h/ketle2.jpeg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img id="BLOGGER_PHOTO_ID_5296461780763800978" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 142px;" src="http://3.bp.blogspot.com/_SHBFPhYeDdw/SYDP7YDb9ZI/AAAAAAAACj0/cgk42lvRTYU/s200/ketle2.jpeg" border="0" alt="" /></a></p>
<p><strong>6) Tenemos dos opciones de tareas a realizar:</strong><br />
a) Transformacion: Es una operacion unitaria.<br />
b) Trabajo: Es una transformacion o serie de transformaciones que se realizan en secuencia.</p>
<p><strong>7) Se hace click en Nuevo -&gt; Transformacion</strong></p>
<p>Bajo</p>
<p>Objetos Principales -&gt; Entrada se encuentran las opciones disponibles para transformaciones.</p>
<p><a href="http://2.bp.blogspot.com/_SHBFPhYeDdw/SYDjOwP0VEI/AAAAAAAACj8/DHwdWTr9_s8/s1600-h/ketle3.jpeg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"></a></p>
<p><div id="attachment_21" class="wp-caption aligncenter" style="width: 336px"><a><img class="size-full wp-image-21" title="spoon1" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon1.png" alt="imagen1" width="326" height="644" /></a><p class="wp-caption-text">imagen1</p></div></p>
<p><strong>8 ) Entrada</strong></p>
<p>&#8220;Entrada &gt; Entrada Fichero de Texto&#8221; y se lo arrastra al area de trabajo.</p>
<p>Doble click sobre el icono en el area de trabajo o boton derecho y click en &#8220;Editar Paso&#8221;</p>
<p>a) Verifico que los archivos de entrada se encuentren en la carpeta correspondiente:</p>
<p>pelin@pleyade:/opt/migracion$ ls entrada/<br />
drogas.txt  formas.txt</p>
<p>b) Solapa Fichero:</p>
<p>Puedo cambiar el nombre de Paso, debo seleccionar el archivo a levantar</p>
<p><img class="aligncenter size-medium wp-image-26" title="spoon21" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon21-300x216.png" alt="spoon21" width="300" height="216" /></p>
<p>c) Solapa Contenido</p>
<p>Tipo de Fichero: Fixed</p>
<p>Separador de campos: dejar en blanco</p>
<p>Separador de texto: dejar en blanco</p>
<p>Codificacion: ISO-8859-1 (permite ver acentos y demas caracteres)</p>
<p>d) Solapa Campos</p>
<p>Click en &#8220;Traer Campos&#8221;</p>
<p>Como los campos son de longitud fija, selecciono con un click hasta donde llega el primer campo. En caso que tuviera mas campos repito el proceso marcando cada uno de los campos.</p>
<p><img class="aligncenter size-medium wp-image-28" title="spoon3" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon3-300x283.png" alt="spoon3" width="300" height="283" /></p>
<p>e) Click en Next y se despliega la siguiente pantalla que permite ingresar los nombres de los campos</p>
<p><img class="aligncenter size-medium wp-image-29" title="spoon4" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon4-300x283.png" alt="spoon4" width="300" height="283" /></p>
<p>f) Click en Finish</p>
<p>y en previsualizar para ver los datos</p>
<p><img class="aligncenter size-medium wp-image-30" title="spoon5" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon5-300x216.png" alt="spoon5" width="300" height="216" /></p>
<p>g) Click en Ok para terminar con la entrada</p>
<p><strong>9) Salida</strong></p>
<p>Seleccionamos</p>
<p>Objetos principales &gt; Salida &gt; Salida Tabla</p>
<p>la cual arrastramos al area de trabajo.</p>
<p>Doble click o boton derecho Editar Paso nos permite la configuracion adecuada para la conexion a la base de datos:</p>
<p>a) en Conexion click en Nuevo y seleccionar la base de datos, en este caso es una DB PostgreSQL</p>
<p><img class="aligncenter size-medium wp-image-31" title="spoon6" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon6-300x216.png" alt="spoon6" width="300" height="216" /></p>
<p>b) Una vez probada la conexion, y que esta sea exitosa; hacemos click en OK.</p>
<p>nos tiene que quedar como la imagen siguiente</p>
<p><img class="aligncenter size-medium wp-image-32" title="spoon7" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon7-300x197.png" alt="spoon7" width="300" height="197" /></p>
<p>c)  Click en SQL y nos despliega la consulta que se va a realizar</p>
<p><img class="aligncenter size-medium wp-image-33" title="spoon8" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon8-300x197.png" alt="spoon8" width="300" height="197" /></p>
<p>Haciendo click en Ejecutar nos creara las tablas  en la Base de datos seleccionada.</p>
<p>d) Una vez creadas las tablas modificamos la salida para que quede de la siguiente manera</p>
<p><img class="aligncenter size-medium wp-image-37" title="spoon11" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon11-300x197.png" alt="spoon11" width="300" height="197" /></p>
<p>e) Terminamos con la salida</p>
<p><strong>10) Seleccionar Transformaciones &gt; Saltos para indicar el sentido de la transformacion</strong></p>
<p><img class="aligncenter size-medium wp-image-35" title="spoon9" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon9-300x216.png" alt="spoon9" width="300" height="216" /></p>
<p><strong>11) Estado Final antes de la trasnformacion</strong></p>
<p><img class="aligncenter size-medium wp-image-36" title="spoon10" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon10-300x216.png" alt="spoon10" width="300" height="216" /></p>
<p><strong>12) Para terminar ejecutamos la transformacion</strong></p>
<p>click en Ejecutar &gt; Ejecucion Local &gt; Ejecutar</p>
<p><img class="aligncenter size-medium wp-image-38" title="spoon12" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon12-300x216.png" alt="spoon12" width="300" height="216" /></p>
<p><strong>13) Para verificar hacemos una consulta desde un cliente de PostgreSQL</strong></p>
<p><img class="aligncenter size-medium wp-image-39" title="spoon13" src="http://blogs.hydras.com.ar/srodriguez/wp-content/uploads/2009/07/spoon13-186x300.png" alt="spoon13" width="186" height="300" /><strong><br />
</strong></p>
<p><strong>14) Guardado</strong></p>
<p>Posteriormente podemos guardarla transformacion para poder utilizarla mas adelante, aunque recomiendo que guarden en forma periodica mientras esten configurando la transforacion ya que suele tener fallos inexplicables debido a java.</p>
<p><strong>15) En un post siguiente voy a mostrar la realizacion de un trabajo.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.hydras.com.ar/srodriguez/?feed=rss2&amp;p=18</wfw:commentRss>
		</item>
		<item>
		<title>Ni ellos se quieren!</title>
		<link>http://blogs.hydras.com.ar/srodriguez/?p=20</link>
		<comments>http://blogs.hydras.com.ar/srodriguez/?p=20#comments</comments>
		<pubDate>Mon, 02 Mar 2009 23:31:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blogs.hydras.com.ar/srodriguez/?p=20</guid>
		<description><![CDATA[Esto es algo extraño que vi en mi cuenta de correo de hotmail (la vieja cuenta de msn  ).
Ellos mismos bloquean los mails provenientes de Microsoft jajajajaja.son geniales!
]]></description>
			<content:encoded><![CDATA[<p>Esto es algo extraño que vi en mi cuenta de correo de hotmail (la vieja cuenta de msn <img src='http://blogs.hydras.com.ar/srodriguez/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_SHBFPhYeDdw/Saxsilj1nMI/AAAAAAAAC5M/Qq3xNfoJlxQ/s1600-h/spam_MS.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_SHBFPhYeDdw/Saxsilj1nMI/AAAAAAAAC5M/Qq3xNfoJlxQ/s400/spam_MS.JPG" alt="" id="BLOGGER_PHOTO_ID_5308737402216750274" border="0" /></a></p>
<p>Ellos mismos bloquean los mails provenientes de Microsoft jajajajaja.<br />son geniales!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.hydras.com.ar/srodriguez/?feed=rss2&amp;p=20</wfw:commentRss>
		</item>
		<item>
		<title>Usando Trpr (TRace Plot Real-time)</title>
		<link>http://blogs.hydras.com.ar/srodriguez/?p=17</link>
		<comments>http://blogs.hydras.com.ar/srodriguez/?p=17#comments</comments>
		<pubDate>Tue, 25 Nov 2008 12:43:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<category><![CDATA[netadmin]]></category>

		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://blogs.hydras.com.ar/srodriguez/?p=17</guid>
		<description><![CDATA[
Dias pasados me encontre con la necesidad de hacer un analisis del trafico de la red en mi trabajo. Navegando por google me encontre con una herramienta que es realmente excelente. 
La misma es Trpr (TRace Plot Real-time) que es un programa que analiza la salida de el tcpdump y crea una salida que puede [...]]]></description>
			<content:encoded><![CDATA[<p><span class="Apple-style-span" style="font-style: italic;font-family:'Times New Roman';" ><span class="Apple-style-span" style="font-style: normal;"><i>
<div><span class="Apple-style-span" style="font-style: normal;">Dias pasados me encontre con la necesidad de hacer un analisis del trafico de la red en mi trabajo. Navegando por google me encontre con una herramienta que es realmente excelente. </span></div>
<div><span class="Apple-style-span" style="font-style: normal;">La misma es <i><a href="http://pf.itd.nrl.navy.mil/protools/trpr.html">Trpr</a></i> (TRace Plot Real-time) que es un programa que analiza la salida de el tcpdump y crea una salida que puede ser graficada utilizando gnuplot. Tiene  varias funcionalidades, una de las cuales le permite generar graficos en tiempo real, tomando la salida del tcpdump.</span></div>
<div><span class="Apple-style-span" style="font-style: normal;">el proceso es bastante sencillo:</span></div>
<div><span class="Apple-style-span" style="font-style: normal;"><br /></span></div>
<div><span class="Apple-style-span" style="font-style: normal;">1) Descargar trpr: se lo puede descargar desde <a href="http://downloads.pf.itd.nrl.navy.mil/proteantools/src-trpr-2.0b2.tgz">src-trpr-2.0b2.tgz</a> . A continuacion procedemos a descomprimirlo y compilarlo:  </span></div>
<div><span class="Apple-style-span" style="font-style: normal;"><br /></span></div>
<div><span class="Apple-style-span" style="font-style: normal;">
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">sysadmin@sysadmin-desktop:~$ gunzip src-trpr-2.0b2.tgz.gz</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">sysadmin@sysadmin-desktop:~$ ls *.tgz</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">src-trpr-2.0b2.tgz</span></span></div>
<div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">sysadmin@sysadmin-desktop:~$ file src-trpr-2.0b2.tgz</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">src-trpr-2.0b2.tgz: POSIX tar archive (GNU)</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">sysadmin@sysadmin-desktop:~$ tar -xvf src-trpr-2.0b2.tgz</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">TRPR/</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">TRPR/Hcat.dsp</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">TRPR/README.TXT</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">TRPR/Trpr.dsp</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">TRPR/Trpr.dsw</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">TRPR/Trpr.opt</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">TRPR/hcat.cpp</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">TRPR/trpr.cpp</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">TRPR/trpr.html</span></span></div>
<div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">sysadmin@sysadmin-desktop:~$ cd TRPR/</span></span></div>
<div><span class="Apple-style-span" style="font-style: italic;font-size:13;" ><br /></span></div>
<div><span class="Apple-style-span"  style="font-size:medium;">Como nota antes del proceso de compilacion se puede modificar una opcion para que se puedan levantar capturas grandes del tcpdump ( yo lo hice con archivos de > 100 mb)</span></div>
<div></div>
<div><span class="Apple-style-span" style="border-collapse: collapse;font-family:arial;" ><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">const int MAX_LINE = 256</span></span><span class="Apple-style-span"  style="font-size:small;"> <span class="Apple-style-span"  style="font-size:medium;">a</span> </span><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">const int MAX_LINE = 2048</span></span><span class="Apple-style-span"  style="font-size:small;"> <span class="Apple-style-span"  style="font-size:medium;">del archivo </span></span><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:medium;">trpr.cpp</span></span></span><span class="Apple-style-span"  style="font-size:small;"><br /></span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; font-style: italic;font-family:arial;" ><br /></span></div>
<div>(Esta opcion fue resultado de la colaboracion de mi amigo Alexis)</div>
<div></div>
<div>y se continua con el proceso normal</div>
<div></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">sysadmin@sysadmin-desktop:~/TRPR$ g++ -o trpr trpr.cpp -lm</span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">sysadmin@sysadmin-desktop:~/TRPR$ chmod +x trpr<br /></span></span></div>
<div><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">sysadmin@sysadmin-desktop:~/TRPR$ sudo cp trpr /usr/bin/</span></span></div>
<div></div>
<div>2) Iniciamos la captura con el tcpdump</div>
<div></div>
<div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">sysadmin@sysadmin-desktop:~$ sudo tcpdump -x  -vvv -i eth0 > salida.txt</span></span></div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes</span></span></div>
<div></div>
<div>en cuanto a los parametros del tcpdump uno le puede agregar lo que considere necesario; un tema a tener en cuenta es el archivo de salida generado. En este caso he utilizado la redireccion, no es la mejor opcion ya que utilizando -w archivo-salida se obtiene un archivo mas portable pero hay veces que el trpr no los puede levantar. Aun no encontre el motivo del fallo.</div>
</div>
<div></div>
<div>3) Le pasamos el trpr para generar la salida que utilizara el gnuplot como entrada. Dependiendo del tamaño del archivo de captura tomara mas o menos tiempo este paso</div>
<div>
<div></div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">sysadmin@sysadmin-desktop:~$ trpr input salida.txt  auto X output Grafico_analisis</span></span></div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">TRPR Version 2.0b2</span></span></div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">trpr: Adding autoMatcher: *,*/*->*/*</span></span></div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">trpr: At time 0.000000 - Adding flow: tcp,10.10.8.101/22->10.10.8.81/1574~3085455732</span></span></div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.</span></span></div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br /></span></span></div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.<br /></span></span></div>
<div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">trpr: At time 2676.028576 - Adding flow: 0,22:156a:ffe6:a0a:865:1e:bb2:d82d/0->a0a:851:35:0:0:0:0:128/0~3085848948</span></span></div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">trpr: Done.</span></span></div>
<div></div>
<div>Termino correctamente y pasamos al siguiente punto</div>
</div>
</div>
<div></div>
<div>Hay una serie de opciones que se pueden utilizar en el trpr, como filtrar por protocolos por ejemplo; se pueden generar graficos png pero requiere modificar el archivo generado, en este caso <span class="Apple-style-span" style="font-style: italic;">Grafico_analisis.</span></div>
<div></div>
<div>para que se genere un archivo png se le pasan los siguentes parametros:</div>
<div><span class="Apple-style-span" style="font-style: italic;">sysadmin@sysadmin-desktop:~$ trpr input salida.txt  png salida.png auto X output Grafico_analisis</span></div>
<div><span class="Apple-style-span" style="font-style: italic;"><br /></span></div>
<div>
<div>Una vez generado el archivo se lo debe editar; en el encabezado tiene la siguiente linea</div>
<div><span class="Apple-style-span" style="font-style: italic;">set term png color</span></div>
<div><span class="Apple-style-span" style="font-style: italic;">set output &#8217;salida.png&#8217;</span></div>
<div></div>
<div>se la debe cambiar por </div>
<div><span class="Apple-style-span" style="font-style: italic;"> set terminal png small size 1024,768</span></div>
<div><span class="Apple-style-span" style="font-style: italic;"> set output &#8217;salida.png&#8217;</span></div>
<div></div>
<div>Donde:</div>
<div> small: es el tamaño de la fuente</div>
<div> size: es el tamaño que queremos que tenga la imagen</div>
<div> en set output se puede cambiar el nombre del archivo si se desea.</div>
</div>
<div>4) Generamos el grafico<span class="Apple-style-span" style=";font-family:-webkit-monospace;font-size:48;"  ></span></div>
<div><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">sysadmin@sysadmin-desktop:~$ gnuplot -persist Grafico_analisis</span></span></div>
<div></div>
<div>y obtengo el siguiente grafico</div>
<div></div>
<div></div>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SHBFPhYeDdw/SSwIZcrnAuI/AAAAAAAACe8/vILPak9j4tY/s1600-h/captura1.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_SHBFPhYeDdw/SSwIZcrnAuI/AAAAAAAACe8/vILPak9j4tY/s200/captura1.JPG" alt="" id="BLOGGER_PHOTO_ID_5272598497032864482" border="0" /></a>
<div></div>
<div>como veran es una herramienta muy util, sencilla y potente. Recomiendo probarla e investigarla.</div>
<div></div>
</div>
</div>
<p></span></div>
<p></i></span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.hydras.com.ar/srodriguez/?feed=rss2&amp;p=17</wfw:commentRss>
		</item>
		<item>
		<title>Acelerando el Booteo</title>
		<link>http://blogs.hydras.com.ar/srodriguez/?p=16</link>
		<comments>http://blogs.hydras.com.ar/srodriguez/?p=16#comments</comments>
		<pubDate>Tue, 11 Nov 2008 21:04:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://blogs.hydras.com.ar/srodriguez/?p=16</guid>
		<description><![CDATA[Leyendo el blog de mi amigo Agustin  encontre una herramienta excelente como para depurar el proceso de arranque. Decidi probar cuanto podia mejorar el arranque de mi laptop (Acer Aspire 3003 LCi), aunque nunca lo habia cronometrado.La herramienta en cuestion es bootchartEl proceso de instalacion en ubuntu no fue mas que:pelin@valkyria:~$ sudo apt-get install [...]]]></description>
			<content:encoded><![CDATA[<p>Leyendo el blog de mi amigo <a href="http://www.casivaagustin.com.ar/">Agustin</a>  encontre una herramienta excelente como para depurar el proceso de arranque. Decidi probar cuanto podia mejorar el arranque de mi laptop (Acer Aspire 3003 LCi), aunque nunca lo habia cronometrado.<br />La herramienta en cuestion es <a href="http://www.bootchart.org/">bootchart</a><br />El proceso de instalacion en ubuntu no fue mas que:<br /><span style="font-size:85%;"><span style="font-style: italic;"><br />pelin@valkyria:~$ sudo apt-get install bootchart</span></span></p>
<p>Una vez instalado reinicio la pc. Genera los graficos y los guarda en /var/log/bootchart con la fecha y hora.
<div>Yo obtuve:</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_SHBFPhYeDdw/SRn1QE-6UrI/AAAAAAAACdk/jitQVMoD6mU/s1600-h/hardy-20081111-1.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 117px; height: 200px;" src="http://2.bp.blogspot.com/_SHBFPhYeDdw/SRn1QE-6UrI/AAAAAAAACdk/jitQVMoD6mU/s200/hardy-20081111-1.png" alt="" id="BLOGGER_PHOTO_ID_5267510895750828722" border="0" /></a></p>
<p>En el siguiente intento, depues de dar de baja algunas cosas que no utilizaba mejoro un poco y obtuve el grafico siguiente:</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_SHBFPhYeDdw/SRn1-IYpxHI/AAAAAAAACds/e9ip4HFhcMI/s1600-h/hardy-20081111-2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 114px; height: 200px;" src="http://1.bp.blogspot.com/_SHBFPhYeDdw/SRn1-IYpxHI/AAAAAAAACds/e9ip4HFhcMI/s200/hardy-20081111-2.png" alt="" id="BLOGGER_PHOTO_ID_5267511686938084466" border="0" /></a></p>
<p>Mejora sustancial, decido una vez bajar algunas otras cosas y obtengo:</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SHBFPhYeDdw/SRn3M3rcliI/AAAAAAAACd0/I-fi36c-a00/s1600-h/hardy-20081111-3.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 118px; height: 200px;" src="http://3.bp.blogspot.com/_SHBFPhYeDdw/SRn3M3rcliI/AAAAAAAACd0/I-fi36c-a00/s200/hardy-20081111-3.png" alt="" id="BLOGGER_PHOTO_ID_5267513039663175202" border="0" /></a><br />Listado de servicios que di de baja:
<ul>
<li>apache2 (cuando necesite el web server lo levanto)</li>
<li>nvidia-kernel (no se que hace instalado si no tengo esa placa de video&#8230;pero es parte del kernel <img src='http://blogs.hydras.com.ar/srodriguez/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> )</li>
<li>vboxdrv (virtualbox)</li>
<li>apparmor</li>
<li>cupsys (cuando quiera imprimir lo arranco y listo)</li>
<li>avahi-daemon (solo tengo dos pc&#8217;s en mi casa, no lo necesito)</li>
<li>clamav-freshclam (actualizacion de la base de datos de clamav)</li>
<li>vmware (cuando necesite levantar las maquinas virtuales lo arranco)</li>
<li>motion</li>
<li>winbind</li>
<li>y le saque la opcion <span style="font-style: italic;">splash</span> del grub</li>
</ul>
<p>Aca estaba bastante conforme con la mejora, pero la codicia pudo mas y busque alguna manera de bajar algunos segundos mas y encontre las siguientes <a href="http://blog.kutakutik.or.id/linux/tune-the-speed-and-performance-of-kubuntuubuntu/">tips</a>, en particular copio los que utilice:</p>
<p><span style="font-size:85%;"><span style="font-style: italic;"></span></span><span style="font-style: italic;font-size:78%;"><span class="Apple-style-span"   style="border-collapse: separate; color: rgb(34, 34, 34); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;font-family:Verdana;font-size:13;"><strong>2. Run boot processes in parallel</strong><br />This will make upstart to run the boot processes in parallel and speed up the boot process.<br /><em>sudo kate /etc/init.d/rc</em><br />Find and change the line:<br /><em>CONCURRENCY=none</em><br />to:<br /><em>CONCURRENCY=shell</em></span></span><span style="display: block;" id="formatbar_Buttons"><br /></span><span style="font-size:78%;"><span class="Apple-style-span"   style="border-collapse: separate; color: rgb(34, 34, 34); font-style: italic; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;font-family:Verdana;font-size:13;">
<p style="margin-bottom: 0.5cm;"><span style="font-weight: bold;">6. Swappiness</span><br />The default value for vm.swappiness is 60 in Ubuntu Feisty whic is a good default value but if you want to tweak the performance a little bit more you can change this value to a lower value to reduce the load of the swap. If you run the follwing command:<br />sysctl -q vm.swappiness<br />You will se that the value is set to 60. And by running:<br />sudo sysctl vm.swappiness=10<br />You will change the value from 60 to 10 which will make your system write to swap a lot less and I would recommend this to everyone that has 512 mb of memory or more. If you find that you have very little use of swap set the value to 0. This will not disable the swap but it will make your system write to the swap as little as possible and keep as much as possible in memory. This makes a huge improvment when switching between applications since they are now likley to be in physical ram instead of on the swap partition.</p>
<p style="margin-bottom: 0.5cm;"><span style="font-style: normal;"></span><span>To set your value permanent you need to change the sysctl.conf file:<br /></span>sudo kate /etc/sysctl.conf<br />Add the line<br />vm.swappiness=10<br />To the end of the file. This way it will be set upon boot.</p>
<p style="margin-bottom: 0.5cm;"><span style="font-style: normal;"></span><span>I’ve found that the value of 5 works very good for my use and I have 1 GB of memory.</span></p>
<p></span></span>En mi caso esa entrada no existia, asi que la agregue y setee el valor a 5.</p>
<p><span style="display: block;" id="formatbar_Buttons">Por ahi encontre que la herramienta sysv-rc-conf ayudaria, pero solo es una interfaz ncurses para dar de baja demonios que arrancan con el sistema.</p>
<p>Para probarlo basta con</p>
<p><span style="font-size:85%;"><span style="font-style: italic;">sudo apt-get install sysv-rc-conf</span><br /><span style="font-style: italic;">sudo sysv-rc-conf</span><br /></span><br /></span><span class="Apple-style-span"   style="border-collapse: separate; color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;font-family:Verdana;font-size:12;"></span><span style="display: block;" id="formatbar_Buttons">Reinicio la pc y obtuve una leve mejora con la cual me quedo tranquilo.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SHBFPhYeDdw/SRn3r34YEtI/AAAAAAAACd8/z9peucJ59VM/s1600-h/hardy-20081111-4.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 98px; height: 200px;" src="http://3.bp.blogspot.com/_SHBFPhYeDdw/SRn3r34YEtI/AAAAAAAACd8/z9peucJ59VM/s200/hardy-20081111-4.png" alt="" id="BLOGGER_PHOTO_ID_5267513572293350098" border="0" /></a><br /></span><span style="display: block;" id="formatbar_Buttons">Pero ojo!, hasta que obtengo mi escritorio totalmente cargado pasan casi 85 segundos.</span><span style="display: block;" id="formatbar_Buttons"><br /></span><span style="display: block;" id="formatbar_Buttons">Cuando ya se ha encontrado la configuracion optima se puede deshabilitar el bootchart con el comando:</span><span style="display: block;" id="formatbar_Buttons"><br /></span><span style="display: block;" id="formatbar_Buttons"><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">sudo update-rc -f  stop-bootchart remove</span></span></span><span style="display: block;" id="formatbar_Buttons"><br /></span></div>
]]></content:encoded>
			<wfw:commentRss>http://blogs.hydras.com.ar/srodriguez/?feed=rss2&amp;p=16</wfw:commentRss>
		</item>
		<item>
		<title>Auditoria en PostgreSQL</title>
		<link>http://blogs.hydras.com.ar/srodriguez/?p=15</link>
		<comments>http://blogs.hydras.com.ar/srodriguez/?p=15#comments</comments>
		<pubDate>Mon, 10 Nov 2008 11:16:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://blogs.hydras.com.ar/srodriguez/?p=15</guid>
		<description><![CDATA[Cuando uno tiene que auditar las transacciones realizadas en la base de datos tiene varias aproximaciones a tomar, buscando en internet encontre muchas opciones y la mas adecuada estaba en la documentacion de postgresql.Estrictamente hablando son una serie de triggers, que al ejecutarse un cambio sobre un registro almacena el valor anterior del registro, el [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando uno tiene que auditar las transacciones realizadas en la base de datos tiene varias aproximaciones a tomar, buscando en internet encontre muchas opciones y la mas adecuada estaba en la documentacion de postgresql.<br />Estrictamente hablando son una serie de triggers, que al ejecutarse un cambio sobre un registro almacena el valor anterior del registro, el nuevo valor, la hora a la que se realizo el cambio y el usuario de la base de datos. en mi caso tenemos un sistema web y la captura del usuario de la aplicacion es bastante engorroso.<br />La solucion encontrada fue generar una tabla de transacciones en la cual se almacena un numero de transaccion, el nombre de usuario y la tabla sobre la cual se realizo la transaccion. En cada tabla a ser auditada se la agrega un campo al final llamado nro_transaccion. Cuando se va a realizar un cambio en algun registro primero se escribe en la tabla transaccion, luego en la tabla propiamente dicha y finalmente el trigger escribe en la tabla de auditoria.<br />Los siguentes scripts son una mezcla partiendo del script que figura en la documentacion de PostgreSQL, agregados mios y finalmente mi amigo Luis Escobar creo las funciones para automatizar el proceso de agregar tablas a auditar.</p>
<p>1) Crear la base de datos de prueba:</p>
<p><span style="font-size:85%;"><span style="font-style: italic;"><span style="font-weight: bold;">postgres=# CREATE DATABASE &#8220;pruebaAudit&#8221;</span> <span style="font-weight: bold;">postgres-#   WITH ENCODING=&#8217;SQL_ASCII&#8217;;</span></span></span><span style="font-size:85%;"><span style="font-style: italic;"> <span style="font-weight: bold;">CREATE DATABASE</span> <span style="font-weight: bold;">postgres=# COMMENT ON DATABASE &#8220;pruebaAudit&#8221; IS &#8216;Base de datos de prueba para auditoria&#8217;;</span> <span style="font-weight: bold;">COMMENT</span><br /></span></span><br />2) Crear el esquema:</p>
<p><span style="font-style: italic; font-weight: bold;font-size:85%;" >postgres=# \c  pruebaAudit<br />You are now connected to database &#8220;pruebaAudit&#8221;.<br />pruebaAudit=# create schema auditoria;<br />CREATE SCHEMA<br /></span></p>
<p>3) Crear las tablas</p>
<p>Tabla personal:</p>
<p><span style="font-weight: bold; font-style: italic;font-size:85%;" >pruebaAudit=# CREATE TABLE personal<br />pruebaAudit-# (<br />pruebaAudit(#   idper bigserial NOT NULL,<br />pruebaAudit(#   perdom character varying(100) NOT NULL,<br />pruebaAudit(#   percuil character varying(11) NOT NULL,<br />pruebaAudit(#   persex character varying(1) NOT NULL,<br />perdocnro character varying(10) NOT NULL,</span><br /><span style="font-weight: bold; font-style: italic;font-size:85%;" >  pertelcel character varying(50) NOT NULL,</span><br /><span style="font-weight: bold; font-style: italic;font-size:85%;" >pruebaAudit(#   perfchnac date,<br />pruebaAudit(#   perdoctip character varying(4) NOT NULL,<br />pruebaAudit(#   perdocnro character varying(10) NOT NULL,<br />pruebaAudit(#   pertelcel character varying(50) NOT NULL,<br />pruebaAudit(#   peremail character varying(50) NOT NULL,<br />pruebaAudit(#   perape character varying(40) NOT NULL,<br />pruebaAudit(#   pernom character varying(40) NOT NULL,</span><br /><span style="font-weight: bold; font-style: italic;font-size:85%;" >pruebaAudit(#   eliminado smallint,</span><br /><span style="font-weight: bold; font-style: italic;font-size:85%;" >pruebaAudit(#   CONSTRAINT personal_pkey PRIMARY KEY (idper)<br />pruebaAudit(# )<br />pruebaAudit-# WITH (OIDS=FALSE);<br />NOTICE:  CREATE TABLE creará una secuencia implícita «personal_idper_seq» para la columna serial «personal.idper»<br />NOTICE:  CREATE TABLE / PRIMARY KEY creará el índice implícito «personal_pkey» para la tabla «personal»<br />CREATE TABLE<br /></span><br />Tabla usuario</p>
<p><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit=# CREATE TABLE usuario</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit-# (<br />pruebaAudit(#   idusu smallint NOT NULL,<br />pruebaAudit(#   nomusu character varying(20) NOT NULL,<br />pruebaAudit(#   passusu character varying(50) NOT NULL,</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit(#   idper bigint NOT NULL,<br />pruebaAudit(#   eliminado smallint,<br />pruebaAudit(#   codusu character varying(20) NOT NULL,<br />pruebaAudit(#   CONSTRAINT codusu_pkey PRIMARY KEY (codusu),<br />pruebaAudit(#   CONSTRAINT usuario_idper_fkey FOREIGN KEY (idper)</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit(#       REFERENCES personal (idper) MATCH SIMPLE<br />pruebaAudit(#       ON UPDATE NO ACTION ON DELETE NO ACTION</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit(# )<br />pruebaAudit-# WITH (OIDS=FALSE);<br />NOTICE:  CREATE TABLE / PRIMARY KEY creará el índice implícito «codusu_pkey» para la tabla «usuario»</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">CREATE TABLE<br /></span></span></p>
<p>4) Creacion de las tablas necesarias para la auditoria</p>
<p><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit=# CREATE TABLE &#8220;auditoria&#8221;.infseg (</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit(#   nombtabla        varchar(150) NOT NULL,<br />pruebaAudit(#   esquema          varchar(60) NOT NULL,</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit(#   activar          boolean DEFAULT false,<br />pruebaAudit(#   version          smallint DEFAULT 1,<br />pruebaAudit(#   fechageneracion  timestamp WITHOUT TIME ZONE DEFAULT now(),<br />pruebaAudit(#   fechaactivacion  timestamp WITHOUT TIME ZONE,<br />pruebaAudit(#   hastrigg         boolean,<br />pruebaAudit(#   /* Keys */<br />pruebaAudit(# &#8212;  CONSTRAINT infseg_pkey</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit(#     PRIMARY KEY (nombtabla)</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit(# ) WITH (<br />pruebaAudit(#     OIDS = FALSE<br />pruebaAudit(#   );<br />NOTICE:  CREATE TABLE / PRIMARY KEY creará el índice implícito «infseg</span></span><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">_pkey» para la tabla «infseg»<br />CREATE TABLE<br /></span></span><br />Insertamos datos:<br />busca las tablas que estan en el esquema public y las inserta en la tabla <span style="font-style: italic;">infoseg</span>.</p>
<p><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit=# INSERT INTO &#8220;auditoria&#8221;.infseg</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit-#            (nombtabla<br />pruebaAudit(#            , esquema<br />pruebaAudit(#            , version<br />pruebaAudit(#            , hastrigg)<br />pruebaAudit-# select     pgtb.tablename</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit-#            , pgtb.schemaname<br />pruebaAudit-#            , 1<br />pruebaAudit-#            ,  pgtb.hastriggers<br />pruebaAudit-# from  pg_tables pgtb<br />pruebaAudit-# where pgtb.schemaname like &#8216;public&#8217;<br />pruebaAudit-# ;<br />INSERT 0 2<br /></span></span></p>
<p>5) Crear las funciones:<br />esta funcion la creo desde la herramienta de SQL del PgAdmin</p>
<p><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">CREATE OR REPLACE FUNCTION public.CrearTrigger<br />(<br />nombretabla  text,<br />esquema      text,<br />db           text</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">)<br />RETURNS text AS<br />$$<br />DECLARE    QQ text;<br />BEGIN<br />QQ := &#8216;CREATE OR REPLACE FUNCTION &#8216; || nombretabla || &#8216;_trigAUTO()</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">       RETURNS trigger AS<br />$BODY$<br />DECLARE rows_affected INTEGER;<br />BEGIN IF TG_OP =&#8221;INSERT&#8221; THEN<br />INSERT INTO  &#8220;auditoria&#8221;.&#8217; || nombretabla || &#8216; (accion, newmovimiento,consulta)</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">          SELECT     TG_OP , NEW , current_query<br />FROM pg_stat_activity<br />WHERE datname=&#8221;&#8217; || db ||&#8221;&#8217; AND current_query <> &#8221;<idle>&#8221;;<br />ELSIF TG_OP =&#8221;UPDATE&#8221; THEN<br /> INSERT INTO  &#8220;auditoria&#8221;.&#8217; || nombretabla || &#8216; (accion, oldmovimiento, </idle></span></span><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;"><idle>newmovimiento,consulta)<br /> SELECT     TG_OP ,OLD ,NEW , current_query<br /> FROM pg_stat_activity<br /> WHERE datname=&#8221;&#8217;|| db ||&#8221;&#8217; AND current_query <> &#8221;<idle>&#8221;;<br /> ELSIF TG_OP =&#8221;DELETE&#8221; THEN<br />     INSERT INTO  &#8220;auditoria&#8221;.&#8217; || nombretabla || &#8216; (accion,oldmovimiento ,consulta)<br />     SELECT     TG_OP ,OLD , current_query<br />     FROM pg_stat_activity<br />     WHERE datname=&#8221;&#8217; || db ||&#8221;&#8217; AND current_query <> &#8221;<idle>&#8221;;</idle></idle></idle></span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;"><idle><idle><idle>                  ELSE<br />         RAISE EXCEPTION &#8221;TG_OP % es uno de INSERT, UPDATE or DELETE.&#8221;, TG_OP;</idle></idle></idle></span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;"><idle><idle><idle>        END IF;<br />GET DIAGNOSTICS rows_affected = ROW_COUNT;<br />IF rows_affected = 1 THEN<br />IF TG_OP IN (&#8221;INSERT&#8221;,&#8221;UPDATE&#8221;) THEN<br />RETURN NEW;<br />ELSE<br /> RETURN OLD;<br />END IF;<br />ELSE RAISE EXCEPTION &#8221;Fallo el insert en auditoria.|| nombretabla ||&#8221;;</idle></idle></idle></span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;"><idle><idle><idle>      END IF;<br />END;<br />$BODY$<br />LANGUAGE &#8221;plpgsql&#8221; VOLATILE STRICT;</idle></idle></idle></span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;"><idle><idle><idle><br />CREATE TRIGGER tg_&#8217; || esquema || &#8216;_&#8217; || nombretabla || &#8216;<br />AFTER INSERT OR UPDATE OR DELETE ON &#8216;|| nombretabla || &#8216;<br />FOR EACH ROW EXECUTE PROCEDURE public.&#8217; || nombretabla || &#8216;_trigauto();&#8217;<br />;<br />RETURN QQ;</idle></idle></idle></span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;"><idle><idle><idle>End;<br />$$<br />LANGUAGE &#8216;plpgsql&#8217;<br />VOLATILE<br />RETURNS NULL ON NULL INPUT</idle></idle></idle></span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;"><idle><idle><idle>;</idle></idle></idle></span></span></p>
<p><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">CREATE OR REPLACE FUNCTION createTablesSeguimiento<br />( nombtabla text,<br />esquema   text,<br />db        text<br />)<br />RETURNS VOID AS</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">$body$<br />DECLARE QQ text;</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">BEGIN<br />QQ:= &#8216;DROP TABLE IF EXISTS  &#8220;auditoria&#8221;. &#8216; || nombtabla || &#8216;;<br />CREATE TABLE &#8220;auditoria&#8221;.&#8217; || nombtabla || &#8216; (<br />idmovimiento     serial NOT NULL,<br />usuariodb        text NOT NULL DEFAULT &#8220;current_user&#8221;(),<br />accion           text NOT NULL,<br />acciontimestamp  timestamp WITH TIME ZONE NOT NULL DEFAULT now(),<br />oldmovimiento    &#8216; || esquema ||&#8217;.&#8217; || nombtabla || &#8216;,<br />newmovimiento    &#8216; || esquema ||&#8217;.&#8217; || nombtabla || &#8216;,<br />consulta         varchar<br />/* Keys */</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">          CONSTRAINT &#8216; || nombtabla || &#8216;_pkey<br />PRIMARY KEY (idmovimiento),<br />/* Checks */<br />CONSTRAINT &#8216; || nombtabla || &#8216;_check  CHECK (accion = ANY (ARRAY[''INSERT''::text, ''UPDATE''::text, ''DELETE''::text]))<br />) ;<br />ALTER TABLE &#8220;auditoria&#8221;.&#8217; || nombtabla || &#8216;<br />OWNER TO postgres;&#8217;;<br />EXECUTE QQ;<br />execute public.CrearTrigger(nombtabla,esquema,db);</span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">END;<br />$body$<br />LANGUAGE &#8216;plpgsql&#8217;<br />VOLATILE<br />;</span></span></p>
<p>6) Ahora vemos como quedo todo:<br />                 <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_SHBFPhYeDdw/SRgwAASnC4I/AAAAAAAACc0/H3I9AnxP-3o/s1600-h/sql2.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_SHBFPhYeDdw/SRgwAASnC4I/AAAAAAAACc0/H3I9AnxP-3o/s200/sql2.JPG" alt="" id="BLOGGER_PHOTO_ID_5267012540845984642" border="0" /></a></p>
<p>Esto funciona de la siguiente manera:<br />a) Desde el PgAdmin se hace click con el boton derecho sobre la tabla <span style="font-style: italic;">infoseg</span> -> <span style="font-style: italic;">Ver datos -> Ver todas las filas</span> lo cual me muestra todas las tablas del esquema <span style="font-style: italic;">public</span>.<br />b) El campo Activar esta seteado a FALSE, se hace doble click sobre el de manera que se abre un checkbox; se lo tilda de manera que quede en TRUE y se guardan los cambios.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_SHBFPhYeDdw/SRhVcj84ZHI/AAAAAAAACc8/yUXjRcQfzHk/s1600-h/sql4.JPG"><img style="cursor: pointer; width: 200px; height: 76px;" src="http://1.bp.blogspot.com/_SHBFPhYeDdw/SRhVcj84ZHI/AAAAAAAACc8/yUXjRcQfzHk/s200/sql4.JPG" alt="" id="BLOGGER_PHOTO_ID_5267053713385088114" border="0" /></a></p>
<p>c) Posteriomente se ejecuta el siguiente script<br /><span style="font-style: italic; font-weight: bold;font-size:85%;" >SELECT sinf.nombtabla ,sinf.esquema         ,createTablesSeguimiento(sinf.nombtabla,sinf.esquema,&#8217;pruebaAudit&#8217;)<br />FROM &#8220;auditoria&#8221;.infseg sinf WHERE sinf.activar</span></p>
<p>El mismo crea las tablas en el esquema <span style="font-style: italic;">auditoria</span> y los triggers en el esquema <span style="font-style: italic;">public</span>.</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SHBFPhYeDdw/SRhWcgD6DsI/AAAAAAAACdE/dnRMDOvIeoA/s1600-h/sql5.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 112px;" src="http://3.bp.blogspot.com/_SHBFPhYeDdw/SRhWcgD6DsI/AAAAAAAACdE/dnRMDOvIeoA/s200/sql5.JPG" alt="" id="BLOGGER_PHOTO_ID_5267054811852443330" border="0" /></a><br />            Vemos como ha quedado:<br />                     <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SHBFPhYeDdw/SRhXGD1UkhI/AAAAAAAACdM/p5REQtJQCkM/s1600-h/sql6.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_SHBFPhYeDdw/SRhXGD1UkhI/AAAAAAAACdM/p5REQtJQCkM/s200/sql6.JPG" alt="" id="BLOGGER_PHOTO_ID_5267055525829579282" border="0" /></a><br />Ahora solo quedan insertar algunos valores en las tablas usuario y personal y ver como se almacenan en las tablas correspondientes en el esquema auditoria.</p>
<p>Bueno, a cargar datos!<br />Cargo dos registros en la tabla <span style="font-style: italic;">personal</span></p>
<p><span style="font-weight: bold;font-size:85%;" ><span style="font-style: italic;">pruebaAudit=# INSERT INTO personal (idper, perdom, percuil, persex, perfchnac, perdoctip, perdocnro, pertelcel, peremail, perape, pernom, eliminado) VALUES (18, &#8216;mi panza&#8217;, &#8216;5634&#8242;, &#8216;M&#8217;, &#8216;1976-07-20&#8242;, &#8216;DNI&#8217;, &#8216;34563&#8242;, &#8216;453&#8242;, &#8217;sdfgq@adfv.vom&#8217;, &#8216;Espinosa                     &#8216;, &#8216;Agustin&#8217;, 0);</span> <span style="font-style: italic;">INSERT 0 1</span></span></p>
<p><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit=# INSERT INTO personal (idper, perdom, percuil, persex, perfchnac, perdoctip, perdocnro, pertelcel, peremail, perape, pernom, eliminado) VALUES (31, &#8216;adgasdgf&#8217;, &#8216;252525253&#8242;, &#8216;M&#8217;, &#8216;1972-02-07&#8242;, &#8216;DNI&#8217;, &#8216;1315351321&#8242;, &#8216;3456456&#8242;, &#8216;3456356356@cksdf.com&#8217;, &#8216;yo      &#8216;, &#8216;dfgsdgf&#8217;, 0);<br />INSERT 0 1<br /></span></span><br /><span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;">pruebaAudit=# select * from personal;                                                                          idper |  perdom  |  percuil  | persex | perfchnac  | perdoctip | perdocnro  | pertelcel |       peremail       |            perape             | pernom  | eliminado<br />&#8212;&#8212;-+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8211;<br />18 | mi panza | 5634      | M      | 20/07/1976 | DNI       | 34563      | 453       | sdfgq@adfv.vom       | Espinosa                      | Agustin |         0<br />31 | adgasdgf | 252525253 | M      | 07/02/1972 | DNI       | 1315351321 | 3456456   | 3456356356@cksdf.com | yo                            | dfgsdgf |         0<br />(2 rows)<br /></span></span><br />Ahora verifico en la tabla <span style="font-style: italic;">personal </span>del esquema <span style="font-style: italic;">auditoria.</p>
<p><span style="font-size:85%;"><span style="font-weight: bold;">pruebaAudit=# select * from auditoria.personal;</span></span></span><span style="font-size:85%;"> <span style="font-style: italic; font-weight: bold;"> idmovimiento | usuariodb | accion |       acciontimestamp       | oldmovimiento |                                              newmovimiento                                               |                                                                                                                                      consulta                                                                                                             </span> <span style="font-style: italic; font-weight: bold;">&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</span> <span style="font-style: italic; font-weight: bold;">            1 | postgres  | INSERT | 10/11/2008 17:09:47 GMT     |               | (18,&#8221;mi panza&#8221;,5634,M,20/07/1976,DNI,34563,453,sdfgq@adfv.vom,&#8221;Espinosa                     &#8220;,Agustin,0) | INSERT INTO personal (idper, perdom, percuil, persex, perfchnac, perdoctip, perdocnro, pertelcel, peremail, perape, pernom, eliminado) VALUES (18, &#8216;mi panza&#8217;, &#8216;5634&#8242;, &#8216;M&#8217;, &#8216;1976-07-20&#8242;, &#8216;DNI&#8217;, &#8216;34563&#8242;, &#8216;453&#8242;, &#8217;sdfgq@adfv.vom&#8217;, &#8216;Espinosa                     &#8216;, &#8216;Agustin&#8217;, 0);</span> <span style="font-style: italic; font-weight: bold;">            2 | postgres  | INSERT | 10/11/2008 17:10:38.171 GMT |               | (31,adgasdgf,252525253,M,07/02/1972,DNI,1315351321,3456456,3456356356@cksdf.com,&#8221;yo      &#8220;,dfgsdgf,0)    | INSERT INTO personal (idper, perdom, percuil, persex, perfchnac, perdoctip, perdocnro, pertelcel, peremail, perape, pernom, eliminado) VALUES (31, &#8216;adgasdgf&#8217;, &#8216;252525253&#8242;, &#8216;M&#8217;, &#8216;1972-02-07&#8242;, &#8216;DNI&#8217;, &#8216;1315351321&#8242;, &#8216;3456456&#8242;, &#8216;3456356356@cksdf.com&#8217;, &#8216;yo      &#8216;, &#8216;dfgsdgf&#8217;, 0);</span> </span><span style="font-style: italic;"><span style="font-size:85%;"><span style="font-weight: bold;">(2 rows)</span></span></p>
<p></span>o mejor visto desde el PgAdmin:</p>
<p><span style="font-style: italic;"></span><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_SHBFPhYeDdw/SRhesQ1m2BI/AAAAAAAACdU/hehCqNO4eoQ/s1600-h/sql7.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 17px;" src="http://2.bp.blogspot.com/_SHBFPhYeDdw/SRhesQ1m2BI/AAAAAAAACdU/hehCqNO4eoQ/s200/sql7.JPG" alt="" id="BLOGGER_PHOTO_ID_5267063878736861202" border="0" /></a><br />con esto esta demostrado que funciona.</p>
<p><span style="font-weight: bold;">Esto tiene algunos inconvenientes&#8230;nada es perfecto!!:</span></p>
<p>1) Si se quieren agregar mas tablas a auditar se debe ejecutar por cada tabla:</p>
<p>               <span style="font-size:85%;"><span style="font-style: italic; font-weight: bold;"> select createtablesseguimiento(&#8217;nombre-tabla&#8217;,'public&#8217;,'pruebaAudit&#8217;);</span></span></p>
<p>2) Si no se controlan bien las tablas a auditar se agrega mucha carga al servidor</p>
<p>3) Para poder sacar informacion util se debe trabajar con expresiones regulares y demas cosas bellas <img src='http://blogs.hydras.com.ar/srodriguez/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.hydras.com.ar/srodriguez/?feed=rss2&amp;p=15</wfw:commentRss>
		</item>
		<item>
		<title>Stallman en Asuncion 08</title>
		<link>http://blogs.hydras.com.ar/srodriguez/?p=14</link>
		<comments>http://blogs.hydras.com.ar/srodriguez/?p=14#comments</comments>
		<pubDate>Sun, 02 Nov 2008 13:10:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[asuncion]]></category>

		<category><![CDATA[viajes]]></category>

		<guid isPermaLink="false">http://blogs.hydras.com.ar/srodriguez/?p=14</guid>
		<description><![CDATA[El jueves 30/10 viajamos con los chicos a la ciudad de Asuncion Del Paraguay ya que el Sr Richard Stallman daria una conferencia en el Salon de Conferencias del Banco del Paraguay. fuimos: marcos, agustin, pedro, guillermo, pablo, juan manuel, javier, &#8220;el enano&#8221; y yo :).Ellos fueron a un hotel mientras yo me quede en [...]]]></description>
			<content:encoded><![CDATA[<p>El jueves 30/10 viajamos con los chicos a la ciudad de Asuncion Del Paraguay ya que el Sr Richard Stallman daria una conferencia en el Salon de Conferencias del Banco del Paraguay. fuimos: marcos, agustin, pedro, guillermo, pablo, juan manuel, javier, &#8220;el enano&#8221; y yo :).<br />Ellos fueron a un hotel mientras yo me quede en la Embajada Argentina, donde tenia alojamiento..pero al final dormi en el hotel :p. En la Embajada Argentina me encontre con Matias y el jueves llego Josi.<br />La conferencia se llevo a cabo en el Salon de Conferencias del Banco del Paraguay en un auditorio enorme, aun asi se ocuparon todos los asientos, los pasillos y habilitaron un salon adjunto en el que instalaron pantallas gigantes para seguir la conferencia&#8230;.pero la verdad no se si alguien haya ido alli ya que no tiene gracia ir a &#8220;verlo&#8221; a Stallaman a traves de una pantalla, cuando podes escucharlo a el a 15 metros.<br />Como dije hubo muchisima gente, muchos de los cuales solo fueron porque les habran pedido&#8230;pero bueno.<br />Me sorprendio que varias personas tenian en su poder OLPC&#8217;s, cuando les pregunte me dijeron que eran del Ministerio de Educacion, que se estaban capacitando en su uso para poder capacitar despues a los docentes&#8230;buenisimo!.<br />Al terminar su conferencia se dio la posibilidad al publico que le haga preguntas; las primeras fueron or escrito, algunas habladas pero de esas muchas le dieron problemas a Stallman ya que se debe hablarle fuerte y claro, pero los hermanos paraguayos no pronuncian muy claramente las palabras al hablar. Alla nos encontramos con mi amigo Topo que fue con Lucho Beltran, el cual le hizo saber a Stallaman de la exitosa implementacion de SL en el Poder Judicial de Formosa.<br />Juanma, guillermo y agustin pudieron hacerle preguntas.<br />Despues del evento, fuimos a cenar en un bar que esta frente al Panteon de los Heroes. El viernes paseamos un rato por el centro de la ciudad y nos volvimos para Resistencia.<br />Aca esta en enlace con algunas fotos<br /><a href="http://picasaweb.google.com/pelin.01/RMSAsuncion08#">http://picasaweb.google.com/pelin.01/RMSAsuncion08#</a></p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_SHBFPhYeDdw/SQ29XW5YOBI/AAAAAAAACa0/fkc-BSm-cow/s1600-h/moto_0237.jpg"><img style="cursor: pointer; width: 150px; height: 200px;" src="http://1.bp.blogspot.com/_SHBFPhYeDdw/SQ29XW5YOBI/AAAAAAAACa0/fkc-BSm-cow/s200/moto_0237.jpg" alt="" id="BLOGGER_PHOTO_ID_5264071748446861330" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.hydras.com.ar/srodriguez/?feed=rss2&amp;p=14</wfw:commentRss>
		</item>
		<item>
		<title>Esto es Musica!</title>
		<link>http://blogs.hydras.com.ar/srodriguez/?p=13</link>
		<comments>http://blogs.hydras.com.ar/srodriguez/?p=13#comments</comments>
		<pubDate>Sat, 18 Oct 2008 01:23:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[musica]]></category>

		<guid isPermaLink="false">http://blogs.hydras.com.ar/srodriguez/?p=13</guid>
		<description><![CDATA[Ademas de mi fanatismo por la tecnologia, FLOSS y sistemas operativos Unix-like tengo cierta inclinacion por la opera y la musica clasica.A continuacion voy a dejar algunos enlaces con videos de youtube que son realemente espectaculares:
Este es agnus dei que es parte de Coronation Mass de Mozart, el cual a su vez es parte de [...]]]></description>
			<content:encoded><![CDATA[<p>Ademas de mi fanatismo por la tecnologia, FLOSS y sistemas operativos Unix-like tengo cierta inclinacion por la opera y la musica clasica.<br />A continuacion voy a dejar algunos enlaces con videos de youtube que son realemente espectaculares:</p>
<p>Este es agnus dei que es parte de Coronation Mass de Mozart, el cual a su vez es parte de un rito de coronacion.<br />Consta de las siguientes partes:<br />1. Kyrie<br />           2. Gloria<br />           3. Credo<br />           4. Sanctus<br />           5. Benedictus<br />           6. Agnus Dei</p>
<p>No soy un entendido en esas artes como para explicar que es cada una de las partes y lo que representa el todo..pero les puedo decir que escuchar a Kathleen Battle te pone la piel de gallina!</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/5OAtyQIeVic&amp;hl=en&amp;fs=1"><param name="allowFullScreen" value="true"><embed src="http://www.youtube.com/v/5OAtyQIeVic&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>En el mismo site estan las restantes partes para el que las quiera escuchar.</p>
<p>Otra obra que es realmente espectacular es Overtura 1812 de <span class="hLink">Tchaikovsky</span> la cual generalmente (como estamos invadidos por la television norteamericana) la relacionamos con la independencia de EEUU o con la guerra que tuvieron con Inglaterra, pero es la celebracion de la &#8220;victoria&#8221; Rusa sobre el ejercito de Napoleon en la Batalla de Borodino; batalla caracterizada por la gran cantidad de proyectiles de cañon lanzados. Estos se encuentran representados por por sonidos de cañon, como en este video, o por tambores en la mayoria de las representaciones; en algun momento tambien se escuchan sonidos como de campanas, estos son para representar el ruido de los cascos de los caballos y el ensordecedor sonido de la batalla. Tiene diversas etapas,en algun momento hay fragmentos de la Marsellesa ademas.<br />En este video hay dos obras, la Overtura comienza en el minuto 5. Lo que es gracioso es que al final de la representacion tiran fuegos artificiales que la verdad no tienen nada que hacer despues de escuchar como 20 descargas de los cañones de 105 mm pero bueh! .</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/ZzGsMtx_5fc&amp;hl=en&amp;fs=1"><param name="allowFullScreen" value="true"><embed src="http://www.youtube.com/v/ZzGsMtx_5fc&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Espero que los disfruten tanto como yo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.hydras.com.ar/srodriguez/?feed=rss2&amp;p=13</wfw:commentRss>
		</item>
		<item>
		<title>SSL en Apache</title>
		<link>http://blogs.hydras.com.ar/srodriguez/?p=11</link>
		<comments>http://blogs.hydras.com.ar/srodriguez/?p=11#comments</comments>
		<pubDate>Wed, 08 Oct 2008 16:40:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<category><![CDATA[sysadmin]]></category>

		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://blogs.hydras.com.ar/srodriguez/?p=11</guid>
		<description><![CDATA[Configuracion de SSL en Apache, tanto en Windows como en Linux y OpenSolarisWindows:1) Instalar el apache.Se deben descargar los binarios desde http://apache.adcserver.com.ar/httpd/binaries/win32/ e instalarlos, apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msi  . Es importante que se descargue el openssl2) Instalar el OpenSSL.Se deben descargar los binarios de http://www.slproweb.com/products/Win32OpenSSL.html ,el paquete tiene como requisito los Visual C++ 2008 Redistributable que se [...]]]></description>
			<content:encoded><![CDATA[<p>Configuracion de SSL en Apache, tanto en Windows como en Linux y OpenSolaris<br /><span style="font-weight: bold;">Windows:</span><br />1) Instalar el apache.<br />Se deben descargar los binarios desde <a href="http://apache.adcserver.com.ar/httpd/binaries/win32/"><span style="text-decoration: underline;">http://apache.adcserver.com.ar/httpd/binaries/win32/</span></a><a href="http://www.slproweb.com/products/Win32OpenSSL.html"></a> e instalarlos, apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msi  . Es importante que se descargue el openssl<br />2) Instalar el OpenSSL.<br />Se deben descargar los binarios de <a href="http://www.slproweb.com/products/Win32OpenSSL.html">http://www.slproweb.com/products/Win32OpenSSL.html</a> ,el paquete tiene como requisito los Visual C++ 2008 Redistributable que se descargan desde el mismo sitio.<br />3) Crear los certificados:<br /><code><b>openssl req -new -out <i>NOM_HOST</i>.csr -keyout </b></code><code><b><i>NOM_HOST</i></b></code><code><b>.pem</b></code></p>
<p>Como nota,  en la serie de preguntas que realiza, cuando solicita ingresar el Common Name se debe ingresar un valor igual al de  <span style="font-style: italic;">NOM_HOST</span></p>
<p><code><b>  openssl rsa -in </b></code><code><b><i>NOM_HOST</i></b></code><code><b>.pem -out </b></code><code></code><code><b><i>NOM_HOST</i></b></code><code><b>.key</b></code><br /><code><b>  openssl x509 -in </b></code><code><b><i>NOM_HOST</i></b></code><code><b>.csr -out </b></code><code><b><i>NOM_HOST</i></b></code><code><b>.cert -req -signkey <span class="Apple-style-span" style="font-style: italic;">NOM_HOST</span>.key -days 365</b></code></p>
<p>Donde <span style="font-style: italic;">NOM_HOST</span> es el nombre del host</p>
<p>4) Habilitar el modulo SSL en el apache.<br />Se debe descomentar la siguiente linea en el archivo <span style="font-style: italic;">httpd.conf</span><br />                  <span style="font-style: italic;font-size:85%;" >LoadModule ssl_module modules/mod_ssl.so</span></p>
<p>y agregar</p>
<p><span style="font-style: italic;font-size:85%;" >listen 443</span><span style="font-size:85%;"></p>
<p></span><span style="font-style: italic;font-size:85%;" ><virtualhost></virtualhost></span><span style="font-size:85%;"><br /></span><span style="font-style: italic;font-size:85%;" >ServerName </span><span style="font-style: italic;font-size:85%;" >NOM_HOST</span><span style="font-size:85%;"><br /></span><span style="font-style: italic;font-size:85%;" >SSLEngine on</span><span style="font-size:85%;"><br /></span><span style="font-style: italic;font-size:85%;" >SSLCertificateFile C:\certificados\</span><span style="font-style: italic;font-size:85%;" >NOM_HOST</span><span style="font-style: italic;font-size:85%;" >.cert</span><span style="font-size:85%;"><br /></span><span style="font-style: italic;font-size:85%;" >SSLCertificateKeyFile C:\certificados\</span><span style="font-style: italic;font-size:85%;" >NOM_HOST</span><span style="font-style: italic;font-size:85%;" >.key</span><br /><span style="font-style: italic;"></span><span style="font-style: italic;"></span></p>
<p>Se reinicia el servidor web, en el browser se apunta a https://localhost, pide que se acepte el certificado y ya esta funcionando con SSL.<br />He intentado configurar el SSL en el apache-nossl que esta en el site, agregarle el modulo y demas yerbas pero no me funciono.</p>
<p><span style="font-weight: bold;">Linux:</span><br />La creacion del certificado y su firma es la misma que en el caso de Windows en el item 3.
<div>4) Configuracion del apache.</div>
<div>en mi caso estoy utilizando apache2 asi que cambia un poco el modo de hacerlo con respecto al apache 1.3.</div>
<div>     4.1) Habilitar SSL<br /><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-family:arial;"><span class="Apple-style-span"  style="font-size:13;">          <span style=";font-family:arial;font-size:85%;"  >deki:/etc/apache2/sites-available#</span></span></span></span><span class="Apple-style-span" style="white-space: pre;font-family:arial;font-size:85%;"  ><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"><span class="Apple-style-span">a2enmod ssl</span></span></span></span><span style=";font-family:arial;font-size:85%;"  ><br /></span></div>
<pre  style="font-family:arial;"><span class="Apple-style-span" style="font-style: italic;font-size:85%;" ><span class="Apple-style-span"><span class="Apple-style-span">        Module ssl installed; run /etc/init.d/apache2 force-reload to enable.</span></span></span><span style="font-size:85%;"> </span></pre>
<pre><span class="Apple-style-span" style=";font-family:georgia;font-size:16;"  > <span style="font-size:100%;">4.2) Modificar el archivo </span><span class="Apple-style-span" style="white-space: normal;font-family:Georgia;font-size:100%;"  ><tt><span class="Apple-style-span" style="font-style: italic;">/etc/apache2/ports.conf </span><span class="Apple-style-span" style="white-space: pre;font-family:georgia;" >agregando la linea</span></tt></span></span></pre>
<pre><span class="Apple-style-span"  style="font-family:georgia;"><span class="Apple-style-span"  style="font-size:small;">              </span></span><span class="Apple-style-span" style=";font-family:arial;font-size:85%;"  ><span class="Apple-style-span">Listen 443</span></span></pre>
<pre><span class="Apple-style-span"  style="font-family:arial;">   4.3) <span style="font-size:100%;">Configurar el host para usar SSL</span></span></pre>
<pre><span class="Apple-style-span"  style="font-family:arial;"><span style="font-size:100%;"><span style="font-family:georgia;">            Ya tenia en uso un vhost, asi que lo copie con otro nombre (lo llame </span></span><span class="Apple-style-span" style="font-style: italic;font-family:georgia;font-size:100%;"  >dekiseguro</span><span style="font-size:100%;"><span style="font-family:georgia;">) y las modificaciones que le hice fueron las siguientes:</span></span><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">     <virtualhost></virtualhost></span></span></span></pre>
<pre><span class="Apple-style-span"  style="font-family:arial;"><span class="Apple-style-span"  style="font-size:small;"><span class="Apple-style-span" style="font-style: italic;">            SSLEngine on      SSLcertificateFile /opt/certs/nom_host.cert       SSLCertificateKeyFile /opt/certs/nom_host.key</span></span></span><span class="Apple-style-span"  style="font-family:arial;">

<span style="font-size:100%;"><span style="font-family:georgia;">Posteriormente se debe habilitar el vhost</span></span></span></pre>
<pre><span class="Apple-style-span"  style="font-family:arial;"><span class="Apple-style-span" style="font-style: italic;"><span class="Apple-style-span"  style="font-size:small;">deki:/etc/apache2/sites-available# a2ensiteWhich site would you like to enable?Your choices are: default  deki dekiseguro Site name? dekiseguroSite dekiseguro installed; run /etc/init.d/apache2 reload to enable.</span></span></span><span class="Apple-style-span" style=";font-family:arial;font-size:16;"  ></span><span class="Apple-style-span" style="white-space: pre;font-family:arial;" ><span style="font-size:100%;"><span style="font-family:georgia;">Una vez reiniciado o recargado el apache ya esta; y como solucion medio truchaal vhost que apuntaba al puerto 80 le agregue las ultimas 3 lineas.</span></span></span></pre>
<div><span class="Apple-style-span" style="white-space: pre;font-family:arial;" >Que consegui con eso?</span></div>
<div><span class="Apple-style-span" style="white-space: pre;font-family:arial;" >poniendo en la barra de direcciones: <span class="Apple-style-span" style=";font-family:'Lucida Grande';font-size:12;"  ><span style="font-size:100%;">http://10.10.8.27/</span> </span><span class="Apple-style-span"  style="font-family:'Lucida Grande';"><span class="Apple-style-span"  style="font-size:medium;">me responde:</span></span></span></div>
<div><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;font-family:'Times New Roman';font-size:16;"  ><br />
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />Reason: You&#8217;re speaking plain HTTP to an SSL-enabled server port.<br />Instead use the HTTPS scheme to access this URL, please.</p>
<blockquote><p>Hint:<span class="Apple-converted-space"> </span><a href="https://dekiwiki/"><b>https://deki/</b></a></p></blockquote>
<p></span><br /><span class="Apple-style-span" style="white-space: pre;font-family:arial;" ><br /></span></div>
<div>Siiii, ya esta con SSL.</div>
<div></div>
]]></content:encoded>
			<wfw:commentRss>http://blogs.hydras.com.ar/srodriguez/?feed=rss2&amp;p=11</wfw:commentRss>
		</item>
	</channel>
</rss>
