<?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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Grimpi IT Blog</title>
	<atom:link href="http://grimpidev.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://grimpidev.wordpress.com</link>
	<description>Un blog de Informatica, SQL y Programacion en general</description>
	<lastBuildDate>Wed, 18 Jan 2012 16:21:04 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='grimpidev.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Grimpi IT Blog</title>
		<link>http://grimpidev.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://grimpidev.wordpress.com/osd.xml" title="Grimpi IT Blog" />
	<atom:link rel='hub' href='http://grimpidev.wordpress.com/?pushpress=hub'/>
		<item>
		<title>La subjetividad en el desarrollo del software</title>
		<link>http://grimpidev.wordpress.com/2011/06/11/la-subjetividad-en-el-desarrollo-del-software/</link>
		<comments>http://grimpidev.wordpress.com/2011/06/11/la-subjetividad-en-el-desarrollo-del-software/#comments</comments>
		<pubDate>Sat, 11 Jun 2011 23:08:27 +0000</pubDate>
		<dc:creator>grimpi</dc:creator>
				<category><![CDATA[Arquitectura]]></category>
		<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://grimpidev.wordpress.com/?p=615</guid>
		<description><![CDATA[Muchas veces tenemos que decidir a la hora de desarrollar la arquitectura de una aplicación, que tecnología, que frameworks, que patrones vamos a utilizar. Muchas veces se generan discusiones en el grupo, porque uno quiere usar algún ORM y otro prefiere ADO.NET directo, o se generan peleas por si usar mocking o no, por alguna [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=615&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Muchas veces tenemos que decidir a la hora de desarrollar la arquitectura de una aplicación, que tecnología, que frameworks, que patrones vamos a utilizar. Muchas veces se generan discusiones en el grupo, porque uno quiere usar algún ORM y otro prefiere ADO.NET directo, o se generan peleas por si usar mocking o no, por alguna metodología sobre otra metodología, etc.<br />
Todas estas discusiones se argumentan del lado técnico y racional. Uno intenta demostrar que el uso de un ORM es mejor por tal y tal motivo. Que este framework es más productivo que tal otro. Que este patrón es más prolijo o no y un largo etcétera.<br />
Y es verdad que muchas veces, no cabe dudas, para escenarios específicos, una tecnología es mejor que la otra. Sin embargo, hay muchas situaciones, donde la elección de una determina forma de hacer software no se debe a un análisis racional de las opciones existentes, sino simplemente a un gusto. Gusto que se debe porque uno tiene más experiencia en esa tecnología, o todo lo contrario, porque no la conoce y le gusta jugar con cosas nuevas, o simplemente gusto porque sí.<br />
Y ahí es donde voy. El elegir una arquitectura de desarrollo porque sí. Jamás, never de los never, un arquitecto, un programador, un líder técnico puede argumentar que es preferible usar una tecnología sobre porque simplemente le gusta más. La subjetividad en el mundo de desarrollo está terminantemente prohibida. Se supone que es una ciencia exacta y que por tal motivo, no podemos dar lugar a la irracionalidad. El sentido común epistemológico de un programador en general es bastante ingenuo en ese aspecto. Sin embargo, la subjetividad está presente en las ciencias exactas. Fue <strong>Thomas Kuhn</strong> en su tesis sobre los paradigmas y las revoluciones científicas, el primero en sostener que los elementos subjetivos tienen un papel fundamental en la elección entre teorías científicas rivales.<br />
Muchas teorías científicas se imponen simplemente por consenso entre un panel de científicos influenciado por el contexto político e ideológico del momento.<br />
Ejemplo: El feto es un ser humano? Y la realidad es que un científico ateo va a dar una respuesta y un científico católico, va a dar otra respuesta completamente distinta. Ambos argumentaran desde lo racional y técnico. Pero en el fondo, esto no es más que una manera de &#8220;racionalizar&#8221; una posición política.<br />
Un intento de objetivar la subjetividad.</p>
<p>Y en el mundo de software pasa lo mismo. Acaso un &#8220;militante&#8221; del software libre diría que tecnológicamente, .NET es superior a Java? Muy difícil.<br />
Muchos podrán sincerar su pensamiento político y decir que prefieren Java porque es open source y punto. Pero otros se enroscaran en una larga<br />
&#8220;flame war&#8221; para demostrar que tienen razón.<br />
Ahora que pasa cuando la elección de una tecnología ni siquiera obedece a una posición política visible? A nadie se le ocurriría decir que el uso store procedures sobre queries representa una postura ideológica&#8230; Y la realidad es que así como muchos prefieren a las rubias sobre las morochas o viceversa, muchos prefieren store procedures sobre querys.<br />
Por supuesto como dije antes, para una determinada especificación funcional o restricción tecnológica, puede haber una clara y objetiva racionalidad en elegir un producto sobre el otro. Sin embargo, hay un universo de situaciones, donde la ventaja de la elección de una tecnología sobre otra es más difusa y ahí entra el conflicto. Ahí es donde se abre una ventana para la del tabú del programador inteligente, para lo que dificilmente pueda reconocer, para la subjetividad mas irracional posible: “el porque si”.</p>
<p>Y como se soluciona esto?<br />
Mal que le pese a un peronista, la mejor opción para estos casos es el diálogo y consenso.</p>
<br />Filed under: <a href='http://grimpidev.wordpress.com/category/arquitectura/'>Arquitectura</a>, <a href='http://grimpidev.wordpress.com/category/opinion/'>Opinion</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grimpidev.wordpress.com/615/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grimpidev.wordpress.com/615/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grimpidev.wordpress.com/615/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grimpidev.wordpress.com/615/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grimpidev.wordpress.com/615/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grimpidev.wordpress.com/615/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grimpidev.wordpress.com/615/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grimpidev.wordpress.com/615/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grimpidev.wordpress.com/615/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grimpidev.wordpress.com/615/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grimpidev.wordpress.com/615/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grimpidev.wordpress.com/615/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grimpidev.wordpress.com/615/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grimpidev.wordpress.com/615/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=615&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grimpidev.wordpress.com/2011/06/11/la-subjetividad-en-el-desarrollo-del-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">grimpi</media:title>
		</media:content>
	</item>
		<item>
		<title>Como obtener un listado de todos los packages de SSIS deployados dentro de la base msdb</title>
		<link>http://grimpidev.wordpress.com/2011/06/10/como-obtener-un-listado-de-todos-los-packages-de-ssis-deployados-dentro-de-la-base-msdb/</link>
		<comments>http://grimpidev.wordpress.com/2011/06/10/como-obtener-un-listado-de-todos-los-packages-de-ssis-deployados-dentro-de-la-base-msdb/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 14:16:43 +0000</pubDate>
		<dc:creator>grimpi</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SSIS]]></category>

		<guid isPermaLink="false">http://grimpidev.wordpress.com/?p=605</guid>
		<description><![CDATA[SELECT sl.name As Owner, ISNULL(spf2.foldername,&#8221;) + &#8216;/&#8217; + spf.foldername as SSIS_Folder, sp.Name AS SSIS_Name, Description as SSIS_Description, verbuild, packagetype FROM msdb.dbo.sysssispackages sp inner join msdb.dbo.sysssispackagefolders spf on spf.folderid = sp.folderid inner join msdb.sys.syslogins sl on sl.sid = sp.ownersid left join msdb.dbo.sysssispackagefolders spf2 on spf2.folderid = spf.parentfolderid ORDER BY sp.name Importante: Esta consulta funciona para todos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=605&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="color:#0000ff;">SELECT </span>sl.name <span style="color:#0000ff;">As</span> Owner, <span style="color:#ff00ff;">ISNULL</span>(spf2.foldername,<span style="color:#ff0000;">&#8221;</span>) + <span style="color:#ff0000;">&#8216;/&#8217;</span> + spf.foldername <span style="color:#0000ff;">as</span> SSIS_Folder, sp.Name <span style="color:#0000ff;">AS</span> SSIS_Name, Description <span style="color:#0000ff;">as</span> SSIS_Description, verbuild, packagetype<br />
<span style="color:#0000ff;">FROM</span> msdb.dbo.sysssispackages sp<br />
<span style="color:#808080;">inner join</span> msdb.dbo.sysssispackagefolders spf <span style="color:#0000ff;">on</span> spf.folderid = sp.folderid<br />
<span style="color:#808080;">inner join</span> <span style="color:#008000;">msdb.sys.syslogins</span> sl <span style="color:#0000ff;">on</span> sl.sid = sp.ownersid<br />
<span style="color:#808080;">left join</span> msdb.dbo.sysssispackagefolders spf2 <span style="color:#0000ff;">on</span> spf2.folderid = spf.parentfolderid<br />
<span style="color:#0000ff;">ORDER BY</span> sp.name</p>
<p><strong>Importante:</strong> Esta consulta funciona para todos los packages instalados dentro de la base msdb, pero no para los que fueron deployados como archivos!</br><br />
<strong>Importante 2:</strong> Esta consulta solo funciona en SQL Server 2008 en adelante. La vista msdb.dbo.sysssispackages no existe en SQL Server 2005.</p>
<br />Filed under: <a href='http://grimpidev.wordpress.com/category/sql-server/'>SQL Server</a>, <a href='http://grimpidev.wordpress.com/category/ssis/'>SSIS</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grimpidev.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grimpidev.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grimpidev.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grimpidev.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grimpidev.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grimpidev.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grimpidev.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grimpidev.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grimpidev.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grimpidev.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grimpidev.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grimpidev.wordpress.com/605/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grimpidev.wordpress.com/605/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grimpidev.wordpress.com/605/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=605&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grimpidev.wordpress.com/2011/06/10/como-obtener-un-listado-de-todos-los-packages-de-ssis-deployados-dentro-de-la-base-msdb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">grimpi</media:title>
		</media:content>
	</item>
		<item>
		<title>VAN de Pex, Moles &amp; Code Contracts</title>
		<link>http://grimpidev.wordpress.com/2011/05/28/van-de-pex-moles-code-contracts/</link>
		<comments>http://grimpidev.wordpress.com/2011/05/28/van-de-pex-moles-code-contracts/#comments</comments>
		<pubDate>Sat, 28 May 2011 16:26:29 +0000</pubDate>
		<dc:creator>grimpi</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Pex]]></category>
		<category><![CDATA[Test Driven Development]]></category>

		<guid isPermaLink="false">http://grimpidev.wordpress.com/?p=599</guid>
		<description><![CDATA[Hoy a las 18 GMT, voy a presentar en ALT.NET Hispano una VAN de Unit Testing con Pex, Moles y Code Contracts. Para acceder, pueden hacerlo por live meeting mediante alguno de los siguientes enlaces: http://snipr.com/virtualaltnet https://www323.livemeeting.com/cc/usergroups/join?id=van&#38;role=attend Para el que nunca escuchó hablar de estas tecnologías, esta es la web oficial de Pex. Desde este link [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=599&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hoy a las 18 GMT, voy a presentar en ALT.NET Hispano una VAN de <strong>Unit Testing con Pex, Moles y Code Contracts</strong>.</p>
<p>Para acceder, pueden hacerlo por live meeting mediante alguno de los siguientes enlaces:</p>
<p><a href="http://snipr.com/virtualaltnet">http://snipr.com/virtualaltnet</a></p>
<p><a href="https://www323.livemeeting.com/cc/usergroups/join?id=van&amp;role=attend">https://www323.livemeeting.com/cc/usergroups/join?id=van&amp;role=attend</a></p>
<p>Para el que nunca escuchó hablar de estas tecnologías, esta es la <a href="http://research.microsoft.com/en-us/projects/pex/">web oficial de Pex</a>.</p>
<p>Desde <a href="http://www.mediafire.com/?3t1a0xh4sse0q1w">este link</a> se pueden bajar el PPT de la Presentación que voy a hacer.</p>
<br />Filed under: <a href='http://grimpidev.wordpress.com/category/net/'>.NET</a>, <a href='http://grimpidev.wordpress.com/category/pex/'>Pex</a>, <a href='http://grimpidev.wordpress.com/category/test-driven-development/'>Test Driven Development</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grimpidev.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grimpidev.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grimpidev.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grimpidev.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grimpidev.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grimpidev.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grimpidev.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grimpidev.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grimpidev.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grimpidev.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grimpidev.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grimpidev.wordpress.com/599/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grimpidev.wordpress.com/599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grimpidev.wordpress.com/599/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=599&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grimpidev.wordpress.com/2011/05/28/van-de-pex-moles-code-contracts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">grimpi</media:title>
		</media:content>
	</item>
		<item>
		<title>Salarios de IT en Argentina y España</title>
		<link>http://grimpidev.wordpress.com/2011/05/20/salarios-de-it-en-argentina-y-espana/</link>
		<comments>http://grimpidev.wordpress.com/2011/05/20/salarios-de-it-en-argentina-y-espana/#comments</comments>
		<pubDate>Fri, 20 May 2011 14:24:21 +0000</pubDate>
		<dc:creator>grimpi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://grimpidev.wordpress.com/?p=596</guid>
		<description><![CDATA[Para tener de referencia. Excelente sitio. http://www.encuestasit.com/Estadisticas.aspx Filed under: Uncategorized<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=596&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Para tener de referencia. Excelente sitio.</p>
<p><a href="http://www.encuestasit.com/Estadisticas.aspx">http://www.encuestasit.com/Estadisticas.aspx</a></p>
<br />Filed under: <a href='http://grimpidev.wordpress.com/category/uncategorized/'>Uncategorized</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grimpidev.wordpress.com/596/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grimpidev.wordpress.com/596/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grimpidev.wordpress.com/596/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grimpidev.wordpress.com/596/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grimpidev.wordpress.com/596/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grimpidev.wordpress.com/596/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grimpidev.wordpress.com/596/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grimpidev.wordpress.com/596/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grimpidev.wordpress.com/596/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grimpidev.wordpress.com/596/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grimpidev.wordpress.com/596/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grimpidev.wordpress.com/596/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grimpidev.wordpress.com/596/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grimpidev.wordpress.com/596/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=596&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grimpidev.wordpress.com/2011/05/20/salarios-de-it-en-argentina-y-espana/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">grimpi</media:title>
		</media:content>
	</item>
		<item>
		<title>Como liberar memoria de SQL Server sin reiniciar el servicio?</title>
		<link>http://grimpidev.wordpress.com/2011/05/06/como-liberar-memoria-de-sql-server-sin-reiniciar-el-servicio/</link>
		<comments>http://grimpidev.wordpress.com/2011/05/06/como-liberar-memoria-de-sql-server-sin-reiniciar-el-servicio/#comments</comments>
		<pubDate>Fri, 06 May 2011 19:14:47 +0000</pubDate>
		<dc:creator>grimpi</dc:creator>
				<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://grimpidev.wordpress.com/?p=592</guid>
		<description><![CDATA[/*Seteamos el uso maximo de SQL Server a un valor bajo (en este ejemplo, 100MB)*/ EXEC sys.sp_configure N&#8217;max server memory (MB)&#8217;, N&#8217;100&#8242; GO RECONFIGURE WITH OVERRIDE GO CHECKPOINT GO /*Seteamos el uso maximo de SQL Server al valor que deseamos, (en este ejemplo, 1024MB). Como la liberacion de memoria, el SQL Server no la hace [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=592&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="color:#008000;">/*Seteamos el uso maximo de SQL Server a un valor bajo (en este ejemplo, 100MB)*/</span><br />
<span style="color:#0000ff;">EXEC</span> <span style="color:#008000;">sys</span>.<span style="color:#800000;">sp_configure</span> <span style="color:#ff0000;">N&#8217;max server memory (MB)&#8217;</span>, <span style="color:#ff0000;">N&#8217;100&#8242;</span><br />
<span style="color:#0000ff;">GO</span><br />
<span style="color:#0000ff;">RECONFIGURE WITH OVERRIDE</span><br />
<span style="color:#0000ff;">GO</span><br />
<span style="color:#0000ff;">CHECKPOINT</span><br />
<span style="color:#0000ff;">GO</span></p>
<p><span style="color:#008000;">/*Seteamos el uso maximo de SQL Server al valor que deseamos, (en este ejemplo, 1024MB). Como la liberacion de memoria, el SQL Server no la hace inmediatamente, hacemos un delay de 1 minuto.*/</span><br />
<span style="color:#0000ff;">WAITFOR DELAY</span> <span style="color:#ff0000;">&#8217;00:01:00&#8242;</span><br />
<span style="color:#0000ff;">GO</span><br />
<span style="color:#0000ff;">EXEC</span> <span style="color:#008000;">sys</span>.<span style="color:#800000;">sp_configure</span> <span style="color:#ff0000;">N&#8217;max server memory (MB)&#8217;</span>, <span style="color:#ff0000;">N&#8217;1024&#8242;</span><br />
<span style="color:#0000ff;">GO</span><br />
<span style="color:#0000ff;">RECONFIGURE WITH OVERRIDE</span><br />
<span style="color:#0000ff;">GO</span></p>
<br />Filed under: <a href='http://grimpidev.wordpress.com/category/sql-server/'>SQL Server</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grimpidev.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grimpidev.wordpress.com/592/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grimpidev.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grimpidev.wordpress.com/592/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grimpidev.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grimpidev.wordpress.com/592/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grimpidev.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grimpidev.wordpress.com/592/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grimpidev.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grimpidev.wordpress.com/592/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grimpidev.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grimpidev.wordpress.com/592/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grimpidev.wordpress.com/592/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grimpidev.wordpress.com/592/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=592&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grimpidev.wordpress.com/2011/05/06/como-liberar-memoria-de-sql-server-sin-reiniciar-el-servicio/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">grimpi</media:title>
		</media:content>
	</item>
		<item>
		<title>Como migrar una base de datos de SQL Server a PostgreSQL</title>
		<link>http://grimpidev.wordpress.com/2011/04/22/como-migrar-una-base-de-datos-de-sql-server-a-postgresql/</link>
		<comments>http://grimpidev.wordpress.com/2011/04/22/como-migrar-una-base-de-datos-de-sql-server-a-postgresql/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 23:20:17 +0000</pubDate>
		<dc:creator>grimpi</dc:creator>
				<category><![CDATA[Migrador]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://grimpidev.wordpress.com/?p=581</guid>
		<description><![CDATA[Hace poco tuve que migrar varias bases de datos de SQL Server a PostgreSQL 8.4. Si bien existen varias maneras de hacer esto, no encontré ninguna herramienta fiable y gratis que me permita realizar esta operación. Por supuesto que si estamos dispuestos a pagar, existen utilidades de conversión de bases de datos y algunas muy [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=581&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hace poco tuve que migrar varias bases de datos de SQL Server a PostgreSQL 8.4. Si bien existen varias maneras de hacer esto, no encontré ninguna herramienta fiable y gratis que me permita realizar esta operación. Por supuesto que si estamos dispuestos a pagar, existen utilidades de conversión de bases de datos y algunas muy buenas. Pero gratis, nada que funcione decentemente. Por lo tanto, aprovechando bastante código que ya tenía escrito para otra cosa, decidí hacer mi <a href="http://www.mediafire.com/?18dxef7t4vicc4a">propio conversor</a> de bases de datos de SQL Server 2005/2008 a PostgreSQL 8.4, que subo para que cualquiera la pueda probar y ahorrarse tiempo y dinero. La aplicación es muy sencilla: ingresamos el connection string de la base de datos de SQL Server y presionamos el botón “Generar Script”. Esto va a generar un codigo SQL en la caja de texto de la aplicación que deberemos copiar y ejecutarlo en algún lugar. </p>
<p><a href="http://grimpidev.files.wordpress.com/2011/04/dibujo1.jpg"><img src="http://grimpidev.files.wordpress.com/2011/04/dibujo1.jpg?w=604" alt="" title="Dibujo"   class="aligncenter size-full wp-image-584" /></a></p>
<p><strong>Qué cosas migra este utilitario? </strong><br />
• Schemas<br />
• Tablas<br />
• Constraints (Primary Keys, Unique Keys, Foreign Keys)<br />
• Indices<br />
• Tipos de datos (Domains en PostgreSQL)<br />
• Vistas (Si el código SQL utilizado es compatible con PostgreSQL, no vamos a tener problemas, de lo contrario, tendremos que modificarlo manualmente para hacerlo compatible).<br />
• Comentarios (Extended Properties en SQL Server)</p>
<p><strong>Qué cosas no migra? </strong><br />
• Datos (para eso podemos utilizar algún ETL o SSIS)<br />
• Store procedures/funciones/triggers (La aplicación sin embargo, nos permite generar el script de estos objetos, para que luego los modifiquemos manualmente). </p>
<p>Adicionalmente, este utilitario agrega un par de funciones que existen en SQL Server y no en PostgreSQL como por ejemplo “newid()”, cuando usamos columnas tipo ROWGUID en SQL Server.<br />
También se genera un trigger automáticamente, cuando existe una columna Computed, ya que esta feature no existe en PostgreSQL. Tiene una mínima inteligencia en algunos aspectos, que nos pueden ahorrar mas tiempo todavía. Por ejemplo, cuando encuentra que se llama a la función GetDate(), se reemplaza por su homologa en PostgreSQL que es now(). Lo mismo hago para DatePart y un par de funciones mas.</p>
<p>Esta aplicación es muy básica, pero potente. No garantizo que funcione en todos los escenarios ni que sea infalible. Pero me ha servido para convertir bases de datos muy complejas de manera muy rapida y creo que puede servir a muchos.</p>
<p>La aplicación se puede bajar de <a href="http://www.mediafire.com/?18dxef7t4vicc4a">esta URL</a>.</p>
<p>Toda sugerencia, queja, critica sera bievenida.</p>
<br />Filed under: <a href='http://grimpidev.wordpress.com/category/migrador/'>Migrador</a>, <a href='http://grimpidev.wordpress.com/category/postgresql/'>PostgreSQL</a>, <a href='http://grimpidev.wordpress.com/category/sql-server/'>SQL Server</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grimpidev.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grimpidev.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grimpidev.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grimpidev.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grimpidev.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grimpidev.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grimpidev.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grimpidev.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grimpidev.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grimpidev.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grimpidev.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grimpidev.wordpress.com/581/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grimpidev.wordpress.com/581/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grimpidev.wordpress.com/581/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=581&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grimpidev.wordpress.com/2011/04/22/como-migrar-una-base-de-datos-de-sql-server-a-postgresql/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">grimpi</media:title>
		</media:content>

		<media:content url="http://grimpidev.files.wordpress.com/2011/04/dibujo1.jpg" medium="image">
			<media:title type="html">Dibujo</media:title>
		</media:content>
	</item>
		<item>
		<title>¿El desarrollo de software hoy en día es más productivo que hace 10 años atrás?</title>
		<link>http://grimpidev.wordpress.com/2011/04/05/%c2%bfel-desarrollo-de-software-hoy-en-dia-es-mas-productivo-que-hace-10-anos-atras/</link>
		<comments>http://grimpidev.wordpress.com/2011/04/05/%c2%bfel-desarrollo-de-software-hoy-en-dia-es-mas-productivo-que-hace-10-anos-atras/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 15:20:24 +0000</pubDate>
		<dc:creator>grimpi</dc:creator>
				<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://grimpidev.wordpress.com/?p=575</guid>
		<description><![CDATA[La primera aplicación que hice en mi vida profesional, fue una típica intranet para una empresa. Todo el código y acceso a la base de datos, se ejecutaba en archivos ASP. Luego me dijeron que está mal acceder directamente a las tablas de la base de datos desde el código, por lo tanto implemente store [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=575&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>La primera aplicación que hice en mi vida profesional, fue una típica intranet para una empresa. Todo el código y acceso a la base de datos, se ejecutaba en archivos ASP.<br />
Luego me dijeron que está mal acceder directamente a las tablas de la base de datos desde el código, por lo tanto implemente store procedures para cada uno de los accesos a la base.<br />
Luego me dijeron que está mal mezclar lógica de negocio y de presentación en el mismo archivo, por lo que implemente la lógica de la aplicación en un componente que era llamado por el ASP.<br />
Luego me dijeron que con eso no alcanza, que hay que dividir la lógica de la aplicación en acceso a los datos y en reglas de negocio, por lo que tuve que crear 2 clases para trabajar con una entidad. Una que acceda a los datos y otra que tenga las reglas de negocio.<br />
Luego me dijeron que había que implementar mecanismos de logueo de excepciones, por si ocurre algún error inesperado. Por lo tanto debíamos utilizar algún framework de logging (porque grabar texto en un archivo x DIA, es algo que requiere un framework).<br />
Luego me dijeron que está mal instanciar directamente el framework de logging desde los componentes, que debíamos abstraerlo a una interfaz, por si el DIA de mañana cambiamos de framework.<br />
Luego me dijeron que está mal tener toda la capa de presentación en solo archivo. Hay que usar el patrón MVC y tener un archivo de vista con el código HTML, una clase controller que maneje el flujo y comportamiento y otra clase modelo. Para eso, debería usar algún framework MVC.<br />
Luego me dijeron que los store procedure son obsoletos, que esta mal poner lógica de negocio en la base de datos y que si el DIA de mañana migramos de base de datos vamos a tener problemas, por lo tanto, debería usar algún framework ORM y crear un archivo XML por entidad que mapee las clases con los datos.<br />
Luego me dijeron que está mal subir todo esto directo manualmente a producción, por lo tanto, deberíamos configurar algún mecanismo de integración continua que baje los archivos del repositorio de fuentes, los compile, ejecute los test de integración y los suba a un FTP o los copie a un directorio. Para esto debíamos crear un archivo de compilando en NANT o MSBUILD o similar.<br />
Luego me dijeron que por cada método que tenemos, hay que hacer test unitarios para verificar que algún nuevo cambio, no rompa el código, por lo tanto, hay que crear una nueva clase de testing por cada clase de negocio, usando algún framework de test unitario.<br />
Luego me dijeron que ejecutar pruebas unitarias que accedan a la base de datos esta mal y es muy lento, por lo cual deberíamos utilizar algún framework de mocking que &#8220;simule&#8221; este comportamiento, por lo tanto, debíamos modificar los constructores de nuestras clases para que acepten inyección de dependencias y debíamos crear una interfaz por cada clase &#8220;mockeable&#8221;. Sin embargo, debíamos mantener nuestros antiguos test unitarios que accedían a la base que ahora pasan a llamar test de integración, porque necesitamos una prueba integrada con el resto de los componentes del sistema. Entonces por cada método, ahora debemos crear 2 tipos de test, el unitario y el de integración.<br />
Luego me dijeron que no había razón alguna para utilizar &#8220;manualmente&#8221; inyección de dependencias existiendo frameworks que hagan esta tarea tan difícil y complicada (sic).<br />
Luego me dijeron que autenticar nuestro usuario directamente contra la base de datos o un servidor Active Directory/LDAP es antiguo e inseguro. Ahora hay que utilizar algún mecanismo de autenticación por claims moderno, seguro y ágil. Por lo tanto, debíamos utilizar algún framework de autenticación como WIF.</p>
<p>Para crear un ABM de clientes, pasé de tener un simple archivo ASP (o ASPX, o JSP) a tener que crear un archivo HTML, una clase model, una clase controller, una clase repository de acceso a datos con su respectiva interface, una clase service que maneje la lógica de negocio con su respectiva interface, una clase para test unitarios, otra clase para test de integración, aprender a utilizar (como mínimo y básico) un framework MVC, ORM, de Unit Testing, Mocking, de inyección de Dependencias y de autenticación. También debemos crear varios archivos XML de configuración para los distintos frameworks. Por supuesto no hay que olvidarse que debemos también crear clases e interfaces adicionales para los distintos patrones de diseño existentes que hacen nuestro código más elegante, óptimo, lindo, portable, legible, etc. O sea, más PRO.<br />
Todo para mejorar la productividad y velocidad en el desarrollo de aplicaciones. Todo para que el &#8220;desarrollador no pierda tiempo en programar aspectos secundarios de la aplicación y se concentre en lo mas importante, que es la lógica de negocio.&#8221;.</p>
<p>No se ustedes, pero a mi este ciclo de evolución del desarrollo de software me parece que esta muy alejado de la palabra &#8220;productividad&#8221;.</p>
<div id="_mcePaste" class="mcePaste" style="position:absolute;width:1px;height:1px;overflow:hidden;top:0;left:-10000px;">﻿</div>
<br />Filed under: <a href='http://grimpidev.wordpress.com/category/opinion/'>Opinion</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grimpidev.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grimpidev.wordpress.com/575/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grimpidev.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grimpidev.wordpress.com/575/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grimpidev.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grimpidev.wordpress.com/575/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grimpidev.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grimpidev.wordpress.com/575/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grimpidev.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grimpidev.wordpress.com/575/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grimpidev.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grimpidev.wordpress.com/575/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grimpidev.wordpress.com/575/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grimpidev.wordpress.com/575/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=575&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grimpidev.wordpress.com/2011/04/05/%c2%bfel-desarrollo-de-software-hoy-en-dia-es-mas-productivo-que-hace-10-anos-atras/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">grimpi</media:title>
		</media:content>
	</item>
		<item>
		<title>Habilitar/Deshabilitar una columna Identity de manera optima</title>
		<link>http://grimpidev.wordpress.com/2011/04/01/habilitardeshabilitar-una-columna-identity-sin-reconstruir-la-tabla/</link>
		<comments>http://grimpidev.wordpress.com/2011/04/01/habilitardeshabilitar-una-columna-identity-sin-reconstruir-la-tabla/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 20:45:27 +0000</pubDate>
		<dc:creator>grimpi</dc:creator>
				<category><![CDATA[Identitys]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://grimpidev.wordpress.com/?p=567</guid>
		<description><![CDATA[En este post habíamos explicado como habilitar/deshabilitar la propiedad identity de una tabla en SQL Server. Habíamos visto que no existe un comando natural que haga esta tarea (algo así como un ALTER TABLE Cliente ALTER COLUMN ClienteId SET IDENTITY ON/OFF) y por lo tanto, no quedaba otra opción que reconstruir manualmente la tabla entera copiando los datos, con el enorme costo que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=567&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>En <a href="http://grimpidev.wordpress.com/2011/01/14/identity-en-sql-server-parte-2/">este post</a> habíamos explicado como habilitar/deshabilitar la propiedad identity de una tabla en SQL Server. Habíamos visto que no existe un comando natural que haga esta tarea (algo así como un <span style="color:#0000ff;">ALTER TABLE </span>Cliente <span style="color:#0000ff;">ALTER COLUMN</span> ClienteId <span style="color:#0000ff;">SET IDENTITY ON/OFF</span>) y por lo tanto, no quedaba otra opción que reconstruir manualmente la tabla entera copiando los datos, con el enorme costo que esto representa.<br />
Sin embargo, existe una forma alternativa, que si tenemos SQL Server 2005/2008 (solo en la edición Developer y Enterprise), podríamos utilizar. Esta solución en consiste en utilizar las opciones de particionamiento que se incorporaron en SQL Server 2005 para mover datos , en vez de utilizar el metodo clasico de reconstrucción de la tabla.<br />
Veamos un ejemplo:</p>
<p><span style="color:#008000;">/*Creamos una tabla Paises de ejemplo con el campo row_id con la propiedad IDENTITY habilitada*/</span><br />
<span style="color:#0000ff;">CREATE TABLE</span> dbo.Paises (row_id <span style="color:#0000ff;">INTEGER IDENTITY PRIMARY KEY</span> <span style="color:#999999;">NOT NULL</span>, data SQL_VARIANT <span style="color:#999999;">NULL</span>);<br />
<span style="color:#0000ff;">GO</span></p>
<p><span style="color:#008000;">/*Insertamos información de ejemplo*/</span><br />
<span style="color:#0000ff;">INSERT </span>dbo.Paises (data)<br />
<span style="color:#0000ff;">VALUES </span>(<span style="color:#ff0000;">&#8216;Argentina&#8217;</span>), (<span style="color:#ff0000;">&#8216;Brasil&#8217;</span>), (<span style="color:#ff0000;">&#8216;Chile&#8217;</span>), (<span style="color:#ff0000;">&#8216;Uruguay&#8217;</span>)<br />
<span style="color:#0000ff;">GO</span></p>
<p><span style="color:#008000;">/*Paso 1: Borro todos los objetos dependedientes de la tabla a modificar*/</span><br />
<span style="color:#0000ff;">ALTER TABLE</span> ClienteAsociadoAPais <span style="color:#0000ff;">DROP CONSTRAINT </span>Paises_Original_FK</p>
<p><span style="color:#008000;">/*Paso 2: Creamos una tabla idéntica a la tabla Paises, pero sin la propiedad identity sobre la columna row_id.*/</span><br />
<span style="color:#0000ff;">CREATE TABLE</span> dbo.Destination (row_id <span style="color:#0000ff;">INTEGER PRIMARY KEY </span><span style="color:#999999;">NOT NULL</span>, data SQL_VARIANT <span style="color:#999999;">NULL</span>);</p>
<p><span style="color:#008000;">/*Paso 3: Movemos el contenido de una tabla a otra.*/</span><br />
<span style="color:#0000ff;">ALTER TABLE</span> dbo.Paises <span style="color:#0000ff;">SWITCH TO</span> dbo.Destination;</p>
<p><span style="color:#008000;">/*Paso 4: Eliminamos la tabla original (que ahora no tiene datos).*/</span><br />
<span style="color:#0000ff;">DROP TABLE</span> dbo.Paises;</p>
<p><span style="color:#008000;">/*Paso 5: Renombramos la tabla para que tenga el nombre original*/</span><br />
<span style="color:#0000ff;">EXECUTE </span><span style="color:#800000;">sp_rename</span> N&#8217;dbo.Destination&#8217;, <span style="color:#ff0000;">N&#8217;Paises&#8217;</span>, <span style="color:#ff0000;">&#8216;OBJECT&#8217;</span>;</p>
<p><span style="color:#008000;">/*Paso 6: Creo todos los objetos dependedientes de la tabla a modificada que habia borrado en el paso 1*/</span><br />
<span style="color:#0000ff;">ALTER TABLE</span> ClienteAsociadoAPais <span style="color:#0000ff;">ADD CONSTRAINT </span>Paises_Original_FK</p>
<p>La clave de esto esta en la sentencia <strong><span style="color:#0000ff;">SWITCH</span></strong>, que en realidad no mueve datos, sino que simplemente cambia el puntero de datos de un lugar a otro, con lo cual nos ahorramos un montón de problemas relacionados con lockeos. Este método tiene enorme ventajas por el método que anteriormente habíamos visto en el post anterior. En tabla muy grandes, la diferencia de performance es enorme.<br />
Veamos los siguientes números capturados del profiler, para la tabla ejemplo con varios millones de registros:</p>
<p><strong>Metodo clasico de reconstruccion de tabla:</strong></p>
<table>
<tbody>
<tr>
<td>Duracion</td>
<td>CPU</td>
<td>Reads</td>
<td>Writes</td>
</tr>
<tr>
<td>3,856,785</td>
<td>719</td>
<td>115,957</td>
<td>396</td>
</tr>
</tbody>
</table>
<p><strong>Metodo alternativo usando SWITCH:</strong></p>
<table>
<tbody>
<tr>
<td>Duracion</td>
<td>CPU</td>
<td>Reads</td>
<td>Writes</td>
</tr>
<tr>
<td>259</td>
<td>140</td>
<td>519</td>
<td>2</td>
</tr>
</tbody>
</table>
<p>Como se puede ver, no hay comparacion posible entre ambos metodos, en tablas de mucho volumen.</p>
<p>Sin embargo, hay un par limitaciones:</p>
<ul>
<li>Esto solo funciona en las versiones Developer y Enterprise de SQL Server, ya que son las únicas que permiten manejo de particiones de tablas.</li>
<li>La tabla Destino debe tener exactamente la misma estructura que la tabla origen (con excepción obviamente de la propiedad identity sobre la columna).</li>
</ul>
<p>Algo que hay que tener en cuenta, es que al igual que el método de reconstrucción de tabla, hay que borrar y crear nuevamente todas las foreign key asociadas a la tabla.</p>
<p><strong>Links relacionados:</strong><br />
<a href="http://www.sqlskills.com/resources/whitepapers/partitioning%20in%20sql%20server%202005%20beta%20ii.htm">Partitioned Tables and Indexes</a></p>
<br />Filed under: <a href='http://grimpidev.wordpress.com/category/identitys/'>Identitys</a>, <a href='http://grimpidev.wordpress.com/category/sql-server/'>SQL Server</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grimpidev.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grimpidev.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grimpidev.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grimpidev.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grimpidev.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grimpidev.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grimpidev.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grimpidev.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grimpidev.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grimpidev.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grimpidev.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grimpidev.wordpress.com/567/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grimpidev.wordpress.com/567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grimpidev.wordpress.com/567/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=567&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grimpidev.wordpress.com/2011/04/01/habilitardeshabilitar-una-columna-identity-sin-reconstruir-la-tabla/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">grimpi</media:title>
		</media:content>
	</item>
		<item>
		<title>Monitorear el progreso de una operación masiva de INSERT/DELETE sobre una tabla</title>
		<link>http://grimpidev.wordpress.com/2011/03/19/monitorear-el-progreso-de-una-operacion-masiva-de-insertdelete-sobre-una-tabla/</link>
		<comments>http://grimpidev.wordpress.com/2011/03/19/monitorear-el-progreso-de-una-operacion-masiva-de-insertdelete-sobre-una-tabla/#comments</comments>
		<pubDate>Sat, 19 Mar 2011 23:47:38 +0000</pubDate>
		<dc:creator>grimpi</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>

		<guid isPermaLink="false">http://grimpidev.wordpress.com/?p=542</guid>
		<description><![CDATA[Supongamos que queremos monitorear el progreso de una operación intensiva de insert/delete sobre una tabla dentro de una transacción. La primera opción que uno piensa es hacer un SELECT COUNT(*) FROM Tabla a medida que se ejecuta la operación de insertado o borrado de datos. Lamentablemente salvo que tengamos un isolation level muy bajo, esta [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=542&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Supongamos que queremos monitorear el progreso de una operación intensiva de insert/delete sobre una tabla dentro de una transacción.<br />
La primera opción que uno piensa es hacer un <span style="color:#0000ff;">SELECT</span> <span style="color:#ff00ff;">COUNT</span>(*) <span style="color:#0000ff;">FROM </span>Tabla a medida que se ejecuta la operación de insertado<br />
o borrado de datos. Lamentablemente salvo que tengamos un <a href="http://grimpidev.wordpress.com/2011/02/24/readuncommittedsnapshotisolation/">isolation level</a> muy bajo, esta consulta va a quedar bloqueada<br />
hasta que se termine la ejecución de la otra transacción, por lo tanto, no vamos a poder monitorear el progreso de la misma.</p>
<p>Veamos este ejemplo:</p>
<p><span style="color:#0000ff;">INSERT INTO</span> TablaCliente (ID, Nombre, Apellido)<br />
<span style="color:#0000ff;">SELECT</span> ID, Nombre, Apellido <span style="color:#0000ff;">FROM</span> ServidorLinkeado.dbo.MaestroClientes</p>
<p>Yo quiero copiar el contenido de la tabla MaestroClientes de un servidor externo a mi base de datos. Supongamos que la tabla MaestroClientes contiene 20 millones de registros, lo que significa que aun en optimas condiciones, el proceso seguramente duraría al menos un par de minutos.<br />
Ahora mientras se ejecuta el <span style="color:#0000ff;">INSERT </span>de mas arriba, hagamos un  <span style="color:#0000ff;">SELECT</span> <span style="color:#ff00ff;">COUNT</span>(*)  <span style="color:#0000ff;">FROM</span> TablaCliente en otra sesión. Como verán, la consulta queda en espera, hasta que se termine la transacción que realiza el insertado de datos.<br />
Sin embargo, si consultamos la vista de sistema sys.partitions, vamos a encontrar información muy interesante, especialmente en el campo Rows. Consultando esta vista para la tabla que deseamos monitorear a medida que se ejecuta la transacción, vamos a ver que el campo rows de esa vista varia.</p>
<p>Ejemplo:</p>
<p><span style="color:#0000ff;">SELECT</span> object_id, rows  <span style="color:#0000ff;">FROM</span> <span style="color:#008000;">sys.partitions</span> <span style="color:#0000ff;">WHERE </span>object_id = <span style="color:#ff00ff;">OBJECT_NAME</span>(<span style="color:#ff0000;">&#8216;TablaCliente&#8217;</span>)</p>
<p><a href="http://grimpidev.files.wordpress.com/2011/03/campo1.png"><img class="size-full wp-image-553 aligncenter" title="campo1" src="http://grimpidev.files.wordpress.com/2011/03/campo1.png?w=604" alt=""   /></a></p>
<p>A diferencia del <span style="color:#0000ff;">SELECT </span><span style="color:#ff00ff;">COUNT</span>(*) que hacíamos antes, esta consulta no queda bloqueada, pudiendo ser ejecutada varias veces mientras se realiza la transacción de insertado.<br />
Entonces, como hacemos para ver el porcentaje de progreso?</p>
<p>1) Capturamos el total de registros que vamos a insertar:<br />
<span style="color:#0000ff;">SELECT </span><span style="color:#ff00ff;">COUNT</span>(*) <span style="color:#0000ff;">FROM </span>ServidorLinkeado.dbo.MaestroClientes.</p>
<p>2) Capturamos el total de registros que ya existe en la tabla de destino:<br />
<span style="color:#0000ff;">SELECT</span> rows <span style="color:#0000ff;">FROM</span> <span style="color:#008000;">sys.partitions</span> <span style="color:#0000ff;">WHERE </span>object_id = <span style="color:#ff00ff;">OBJECT_NAME</span>(<span style="color:#ff0000;">&#8216;TablaCliente&#8217;</span>)</p>
<p>3) Ejecutamos la transacción que realiza el insertado masivo de datos:<br />
<span style="color:#0000ff;">INSERT INTO</span> TablaCliente (ID, Nombre, Apellido)<br />
<span style="color:#0000ff;">SELECT </span>ID, Nombre, Apellido <span style="color:#0000ff;">FROM </span>ServidorLinkeado.dbo.MaestroClientes</p>
<p>4) Mientras se ejecuta la transacción, abrimos una nueva conexión y ejecutamos reiteradamente esta consulta:<br />
<span style="color:#0000ff;">SELECT </span>rows <span style="color:#0000ff;">FROM </span><span style="color:#008000;">sys.partitions</span> <span style="color:#0000ff;">WHERE </span>object_id = <span style="color:#ff00ff;">OBJECT_NAME</span>(<span style="color:#ff0000;">&#8216;TablaCliente&#8217;</span>)</p>
<p><a href="http://grimpidev.files.wordpress.com/2011/03/campo2.png"><img class="size-full wp-image-556 alignleft" title="campo2" src="http://grimpidev.files.wordpress.com/2011/03/campo2.png?w=604" alt=""   /></a></p>
<p><a href="http://grimpidev.files.wordpress.com/2011/03/untitled.png"><img class="aligncenter size-full wp-image-561" title="Untitled" src="http://grimpidev.files.wordpress.com/2011/03/untitled.png?w=604" alt=""   /></a></p>
<p style="text-align:left;">&nbsp;</p>
<p style="text-align:left;">&nbsp;</p>
<p style="text-align:left;"><a href="http://grimpidev.files.wordpress.com/2011/03/untitled1.png"><img class="aligncenter size-full wp-image-562" title="Untitled" src="http://grimpidev.files.wordpress.com/2011/03/untitled1.png?w=604" alt=""   /></a></p>
<p style="text-align:left;"><a href="http://grimpidev.files.wordpress.com/2011/03/campo3.png"><img class="size-full wp-image-557" title="Campo3" src="http://grimpidev.files.wordpress.com/2011/03/campo3.png?w=604" alt=""   /></a></p>
<p style="text-align:left;"><a href="http://grimpidev.files.wordpress.com/2011/03/untitled1.png"><img class="aligncenter size-full wp-image-562" title="Untitled" src="http://grimpidev.files.wordpress.com/2011/03/untitled1.png?w=604" alt=""   /></a></p>
<p>Exactamente aplica la misma lógica, en el caso de que nos interese monitorear una operación de <span style="color:#0000ff;">DELETE</span>. La única diferencia es que en la columna rows de la tabla <span style="color:#008000;">sys.partitions</span>, veremos que su número desciende sucesivamente.</p>
<br />Filed under: <a href='http://grimpidev.wordpress.com/category/sql-server/'>SQL Server</a>, <a href='http://grimpidev.wordpress.com/category/t-sql/'>T-SQL</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grimpidev.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grimpidev.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grimpidev.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grimpidev.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grimpidev.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grimpidev.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grimpidev.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grimpidev.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grimpidev.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grimpidev.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grimpidev.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grimpidev.wordpress.com/542/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grimpidev.wordpress.com/542/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grimpidev.wordpress.com/542/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=542&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grimpidev.wordpress.com/2011/03/19/monitorear-el-progreso-de-una-operacion-masiva-de-insertdelete-sobre-una-tabla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">grimpi</media:title>
		</media:content>

		<media:content url="http://grimpidev.files.wordpress.com/2011/03/campo1.png" medium="image">
			<media:title type="html">campo1</media:title>
		</media:content>

		<media:content url="http://grimpidev.files.wordpress.com/2011/03/campo2.png" medium="image">
			<media:title type="html">campo2</media:title>
		</media:content>

		<media:content url="http://grimpidev.files.wordpress.com/2011/03/untitled.png" medium="image">
			<media:title type="html">Untitled</media:title>
		</media:content>

		<media:content url="http://grimpidev.files.wordpress.com/2011/03/untitled1.png" medium="image">
			<media:title type="html">Untitled</media:title>
		</media:content>

		<media:content url="http://grimpidev.files.wordpress.com/2011/03/campo3.png" medium="image">
			<media:title type="html">Campo3</media:title>
		</media:content>

		<media:content url="http://grimpidev.files.wordpress.com/2011/03/untitled1.png" medium="image">
			<media:title type="html">Untitled</media:title>
		</media:content>
	</item>
		<item>
		<title>Cosas piolas que debería traer la nueva versión de SQL Server:</title>
		<link>http://grimpidev.wordpress.com/2011/03/11/cosas-piolas-que-deberia-traer-la-nueva-version-de-sql-server/</link>
		<comments>http://grimpidev.wordpress.com/2011/03/11/cosas-piolas-que-deberia-traer-la-nueva-version-de-sql-server/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 14:13:59 +0000</pubDate>
		<dc:creator>grimpi</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[T-SQL]]></category>

		<guid isPermaLink="false">http://grimpidev.wordpress.com/?p=531</guid>
		<description><![CDATA[1) Encriptación irreversible por columna (similar al COLUMN ENCRYPT de Oracle). Ideal para almacenar passwords. 2) Agregar la sentencia CREATE OR REPLACE PROCEDURE/VIEW/FUNCTION como ya tienen Oracle o PostgreSQL. De esta manera, con una sola sentencia, nos evitamos verificar si existe o no una vista, store procedure o una función cuando deployamos. 3) CREATE TABLE NuevaTablaCliente AS TableClienteExistente. La posibilidad de crear una nueva tabla [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=531&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>1) Encriptación irreversible por columna (similar al <a href="http://download.oracle.com/docs/cd/B28359_01/network.111/b28530/asotrans.htm#BABGGGJA"><span style="color:#0000ff;">COLUMN ENCRYPT </span>de Oracle</a>). Ideal para almacenar passwords.</p>
<p>2) Agregar la sentencia <span style="color:#0000ff;">CREATE OR REPLACE PROCEDURE</span>/<span style="color:#0000ff;">VIEW</span>/<span style="color:#0000ff;">FUNCTION </span>como ya tienen Oracle o PostgreSQL. De esta manera, con una sola sentencia, nos evitamos verificar si existe o no una vista, store procedure o una función cuando deployamos.</p>
<p>3) <span style="color:#0000ff;">CREATE TABLE </span>NuevaTablaCliente <span style="color:#0000ff;">AS </span>TableClienteExistente. La posibilidad de crear una nueva tabla copiando la estructura de otra tabla ya existente es una feature muy piola de PostgreSQL.</p>
<p>4) <span style="color:#0000ff;">ALTER COLUMN</span> NombreColumn <span style="color:#0000ff;">SET IDENTITY ON</span>/<span style="color:#0000ff;">OFF</span>. Habilitar/deshabilitar un campo identity sin necesidad de reconstruir toda la tabla.</p>
<p>5) @NuevoParametro TablaCliente.ClienteId%TYPE. Poder declarar un parametro o variable como tipo de dato de una columna, en vez de declarar explicitamente el tipo de dato como hacemos actualmente.</p>
<p>6) <a href="http://en.wikipedia.org/wiki/Bitmap_index">Indíces Bitmap</a> como los de Oracle.</p>
<p>7) Una funcion <span style="color:#ff00ff;">DECODE </span>similar a la de Oracle (para el que no la conoce, es una especie de <span style="color:#0000ff;">CASE&#8230;WHEN </span>en una funcion).</p>
<p>8) Que no haya que configurar 50 parametros de Windows y DTC para poder correr una transacción distribuida correctamente.</p>
<p>9) Tener una función de conversión y formateo de datos potente, amigable y facil de usar, y no ese engendro de <span style="color:#ff00ff;">CONVERT</span>.</p>
<p>10) Una función de <span style="color:#ff00ff;">SPLIT </span>de string nativa para T-SQL que devuelva una variable de tabla.</p>
<p>11) <span style="color:#0000ff;">ALTER TABLE</span> para cambiar el orden de una columna en una tabla. Si bien es un poco &#8220;polémica&#8221; esta feature (se supone que el orden de las columnas no debería importarnos), la realidad es que a veces termina siendo útil. MySql tiene esta posibilidad.</p>
<p>12) Mejorar el error <span style="color:#ff0000;">&#8220;String or binary data would be truncated.&#8221;</span> cuando insertamos o modificamos datos. En que columna? Que valor fue el que tiro error? Si lo sabes, porque SQL Server no me lo queres decir?</p>
<p>13) Que soporte este tipo de sentencias: <span style="color:#0000ff;">SELECT </span>* <span style="color:#0000ff;">FROM </span>Clientes <span style="color:#0000ff;">WHERE </span>(col1, col2) <span style="color:#808080;">NOT IN </span>(<span style="color:#0000ff;">SELECT </span>col1, col2 <span style="color:#0000ff;">FROM </span>OtrosClientes). Actualmente el IN o NOT IN solo lo podemos hacer con una sola columna.</p>
<p>Alguna otra sugerencia?</p>
<br />Filed under: <a href='http://grimpidev.wordpress.com/category/opinion/'>Opinion</a>, <a href='http://grimpidev.wordpress.com/category/sql-server/'>SQL Server</a>, <a href='http://grimpidev.wordpress.com/category/t-sql/'>T-SQL</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grimpidev.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grimpidev.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grimpidev.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grimpidev.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grimpidev.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grimpidev.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grimpidev.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grimpidev.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grimpidev.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grimpidev.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grimpidev.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grimpidev.wordpress.com/531/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grimpidev.wordpress.com/531/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grimpidev.wordpress.com/531/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grimpidev.wordpress.com&amp;blog=2970022&amp;post=531&amp;subd=grimpidev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grimpidev.wordpress.com/2011/03/11/cosas-piolas-que-deberia-traer-la-nueva-version-de-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">grimpi</media:title>
		</media:content>
	</item>
	</channel>
</rss>
