<?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/"
	>

<channel>
	<title>THE .NET WAY</title>
	<atom:link href="http://www.thedotnetway.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thedotnetway.net</link>
	<description></description>
	<lastBuildDate>Fri, 18 May 2012 14:23:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MapReduce con MongoDB</title>
		<link>http://www.thedotnetway.net/2012/05/18/mapreduce-con-mongodb/</link>
		<comments>http://www.thedotnetway.net/2012/05/18/mapreduce-con-mongodb/#comments</comments>
		<pubDate>Fri, 18 May 2012 14:23:41 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MapReduce]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[NOSQL]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Trucos]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/?p=768</guid>
		<description><![CDATA[MapReduce es la manera que tenemos en MongoDB de “ejecutar código en el lado del servidor”, podriamos compararlo con los GROUP BY de las Bases de Datos Relacionales. Nos sirve para hacer operaciones de agregación sin necesidad de bajarnos todos los datos al cliente. Lo que hacemos es definir funciones en JavaScript, una en la<a class="rmore" href="http://www.thedotnetway.net/2012/05/18/mapreduce-con-mongodb/">&#160;&#160; Read More ...</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://es.wikipedia.org/wiki/MapReduce">MapReduce</a> es la manera que tenemos en <a href="http://www.mongodb.org/">MongoDB</a> de <em>“ejecutar código en el lado del servidor”, </em>podriamos compararlo con los GROUP BY de las Bases de Datos Relacionales.</p>
<p>Nos sirve para hacer operaciones de agregación sin necesidad de bajarnos todos los datos al cliente.</p>
<p>Lo que hacemos es definir funciones en JavaScript, una en la que definiremos los datos que queremos usar (map) y otra como queremos tratarlos (reduce), y le mandamos esas dos funciones al servidor definiéndole el flitro de datos y donde queremos que nos deje el resultado.</p>
<p>Lo mejor es verlo con un ejemplo, en este caso lo pondré en <a href="http://es.wikipedia.org/wiki/Ruby">Ruby</a> que es en lo que tenemos hecho nuestra aplicación de logs.</p>
<p>Nosotros estamos guardando en una colección de MongoDB datos desde el log de nuestro servidores web guardando servidor, fecha y hora de cuando recibimos la petición, el tiempo que ha tardado, etc. quitando los datos que no interesan al ejemplo, el documento es algo así:</p>

<div class="wp_syntax"><div class="code"><pre class="javascrip" style="font-family:monospace;">&nbsp;
{
  &quot;_id&quot; : ObjectId(&quot;4fa101ee78754332a4004cc6&quot;),
  &quot;datetime&quot; : new Date(&quot;Wed, 02 May 2012 09:43:15 GMT +02:00&quot;),
  &quot;servername&quot; : &quot;SERVICESTMP2&quot;,
  &quot;timetaken&quot; : &quot;436&quot;,
  &quot;uri&quot; : &quot;/dingus/tazzy/hotelservice.asmx&quot;,
  &quot;useragent&quot; : &quot;Mozilla/4.0+(compatible;+MSIE+6.0;+MS+Web+Services+Client+Protocol+2.0.50727.5448)&quot;,
  &quot;status&quot; : &quot;200&quot;
}</pre></div></div>

<p>En nuestro caso esta colección se incrementa en varios millones de registros cada dia, así que sacar informes bajando todos los datos al cliente es una locura, aquí es donde es imprescindible el uso del MapReduce.</p>
<p>Por ejemplo, queremos saber cuantas peticiones estamos devolviendo cada hora por rango de tiempo en la respuesta.</p>
<p>Lo primero, definir la función map, en la que hacemos lo siguiente:</p>
<ul>
<li>Descomponemos la fecha para quitar los minutos y segundos para tener el Año Mes Dia Hora como unidad de agregación </li>
<li>Definimos que valores serán clave en la agregación, en este caso el Año Mes Dia Hora y el nombre del servidor </li>
<li>Definimos que valores serán los agregados, count, fijo a 1 para contar registros, y timetaken para agregar por rango de tiempo de respuesta: </li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">map = <span style="color:#996600;">&quot;function Map() { 
	var day = new Date(this.datetime.getFullYear(), 
		this.datetime.getMonth(), 
		this.datetime.getDate(), 
		this.datetime.getHours()); 
	emit({day : day, servername: this.servername}, {count: 1, timetaken: this.timetaken}); 
		}&quot;</span></pre></div></div>

<p>Después definimos la función reduce, en la que hacemos lo siguiente:</p>
<ul>
<li>Definimos la estructura del resultado en result, el contador y las peticiones que tardan mas de 2, 5, 10 y 20 segundos </li>
<li>Nos recorremos los registros y vamos asignado el resultado a result, incrementando el count e incrementado los countmore según el timetaken </li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">reduce = <span style="color:#996600;">&quot;function Reduce(key, arr_values) { 
            var result = {count: 0, countmore2: 0, countmore5: 0, countmore10: 0, countmore20: 0};
&nbsp;
            for(var i in arr_values) { 
            	result.count += arr_values[i].count;
&nbsp;
	    	if(arr_values[i].timetaken &gt; 20000) 
			result.countmore20 += arr_values[i].count; 
		else if(arr_values[i].timetaken &gt; 10000) 
                        result.countmore10 += arr_values[i].count; 
                else if(arr_values[i].timetaken &gt; 5000) 
                        result.countmore5 += arr_values[i].count; 
                else if(arr_values[i].timetaken &gt; 2000) 
                        result.countmore2 += arr_values[i].count; 
            }
            return result; 
            }&quot;</span></pre></div></div>

<p>Con las dos funciones listas solo hay que mandárselas al servidores con el filtro de datos que nos interese y decirle donde queremos los resultados.</p>
<p>Puedes pedir los resultados en línea o que te los deje en una colección.</p>
<p>Las ventaja de tener los datos en una colección es que puedes hacer agregación sobre esa colección, ósea procesar este MapReduce cada hora y hacer reduce sobre los datos existentes en la colección, tambien puedes hacer un replace, un merge &#8230;</p>
<p>Con <a href="http://mongoid.org/">mongoid</a> y haciendo reduce para agregar datos a la colección seria algo así:</p>
<ul>
<li>Hacemos el MapReduce y agregamos los resultados a la colección “requestbyday”</li>
<li>Pedimos los datos de la colección.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">WebLog.<span style="color:#9900CC;">collection</span>.<span style="color:#9900CC;">map_reduce</span><span style="color:#006600; font-weight:bold;">&#40;</span>map, reduce,
	<span style="color:#006600; font-weight:bold;">&#123;</span>
        	<span style="color:#ff3333; font-weight:bold;">:query</span> <span style="color:#006600; font-weight:bold;">=&gt;</span>  <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:datetime</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'$gte'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> datefilterfrom<span style="color:#006600; font-weight:bold;">&#125;</span>,
			     <span style="color:#ff3333; font-weight:bold;">:datetime</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'$lte'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> datefilterto<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#125;</span> ,
                <span style="color:#ff3333; font-weight:bold;">:out</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> reduce: <span style="color:#996600;">&quot;requestbyday&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span>
        <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#0066ff; font-weight:bold;">@weblogs</span> = WebLog.<span style="color:#9900CC;">db</span>.<span style="color:#9900CC;">collection</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;requestbyday&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">find</span></pre></div></div>

<p>las otras opciones de salida serian:</p>
<ul>
<li>replace: Si no exista la colección la crea y si existe elimina todos los datos y mete los nuevos</li>
<li>merge: Si la key no existe la inserta, si existe la reemplaza por la nueva</li>
<li>reduce: Lo que he explicado antes.</li>
<li>inline: Devuelve los datos directamente, sin guardarlos en una colección.</li>
</ul>
<p>Espero que sea de ayuda, cualquier comentario es bienvenido.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2012/05/18/mapreduce-con-mongodb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WaitHandle.WaitAny, timeout y threads Foreground</title>
		<link>http://www.thedotnetway.net/2012/05/04/waithandle-waitany-timeout-y-threads-foreground/</link>
		<comments>http://www.thedotnetway.net/2012/05/04/waithandle-waitany-timeout-y-threads-foreground/#comments</comments>
		<pubDate>Fri, 04 May 2012 10:19:07 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Trucos]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/?p=766</guid>
		<description><![CDATA[&#160; Si estas usando threads foregorund y tienes un WaitAny con timeout, quizás tu aplicación no se comporte como esperas … El otro día estábamos trabajando sobre un servicio web de hub que recoge peticiones de un cliente crea varios mensajes para diferentes proveedores, se las envía junta las respuestas y se las devuelve al<a class="rmore" href="http://www.thedotnetway.net/2012/05/04/waithandle-waitany-timeout-y-threads-foreground/">&#160;&#160; Read More ...</a>]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>Si estas usando threads foregorund y tienes un WaitAny con timeout, quizás tu aplicación no se comporte como esperas …</p>
<p>El otro día estábamos trabajando sobre un servicio web de hub que recoge peticiones de un cliente crea varios mensajes para diferentes proveedores, se las envía junta las respuestas y se las devuelve al Cliente como una.</p>
<p>Teníamos el problema de que si algún proveedor estaba lento, que siempre hay alguno, ralentizaba todo el proceso, así que le pusimos un timeot al WaitAny para que, pasados un tiempo, dejara de esperar respuestas y continuara con el proceso, algo así:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> Services<span style="color: #008000;">.</span><span style="color: #0000FF;">Count</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>                
	XmlDocument DocOut <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> XmlDocument<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	DocOut<span style="color: #008000;">.</span><span style="color: #0000FF;">LoadXml</span><span style="color: #008000;">&#40;</span>rq<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	Services<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">myMethodAsync</span><span style="color: #008000;">&#40;</span>DocOut<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
WaitHandle<span style="color: #008000;">.</span><span style="color: #0000FF;">WaitAny</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">new</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#123;</span> ev <span style="color: #008000;">&#125;</span>, timeout<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>Aunque el timeout estaba funcionando, ya que el servicio no incluía en la respuesta los que habían tardado mas que el timeout, el servicio no devolvía respuesta hasta que todos los servicios habían contestado … </p>
<p>Eso es debido a que los threads eran del tipo foreground y no dará por terminado el proceso hasta que todos terminen …</p>
<p>La solución, abortar los threads a mano después del timeout:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> Services<span style="color: #008000;">.</span><span style="color: #0000FF;">Count</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>                
	XmlDocument DocOut <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> XmlDocument<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	DocOut<span style="color: #008000;">.</span><span style="color: #0000FF;">LoadXml</span><span style="color: #008000;">&#40;</span>rq<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	Services<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">myMethodAsync</span><span style="color: #008000;">&#40;</span>DocOut<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
WaitHandle<span style="color: #008000;">.</span><span style="color: #0000FF;">WaitAny</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">new</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#123;</span> ev <span style="color: #008000;">&#125;</span>, timeout<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
&nbsp;
<span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span>var service <span style="color: #0600FF; font-weight: bold;">in</span> Services<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	service<span style="color: #008000;">.</span><span style="color: #0000FF;">Abort</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>De esta manera el proceso termina cuando tu quieres.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2012/05/04/waithandle-waitany-timeout-y-threads-foreground/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Habilitar la compresi&#243;n de datos en las peticiones Http</title>
		<link>http://www.thedotnetway.net/2012/04/25/habilitar-la-compresin-de-los-datos-de-respuesta-en-tus-peticiones-http/</link>
		<comments>http://www.thedotnetway.net/2012/04/25/habilitar-la-compresin-de-los-datos-de-respuesta-en-tus-peticiones-http/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 09:19:45 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Trucos]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/?p=764</guid>
		<description><![CDATA[&#160; Es una buena practica, casi debería ser obligatorio, habilitar la compresión de las respuestas cuando haces peticiones a servicios web, el tiempo de uso de procesador es casi imperceptible y ganas mucho en tiempo de transmisión del mensaje, nosotros estamos pensando en lanzar una excepción cuando no nos lo pidan, mucha gente hace eso<a class="rmore" href="http://www.thedotnetway.net/2012/04/25/habilitar-la-compresin-de-los-datos-de-respuesta-en-tus-peticiones-http/">&#160;&#160; Read More ...</a>]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>Es una buena practica, casi debería ser obligatorio, habilitar la compresión de las respuestas cuando haces peticiones a servicios web, el tiempo de uso de procesador es casi imperceptible y ganas mucho en tiempo de transmisión del mensaje, nosotros estamos pensando en lanzar una excepción cuando no nos lo pidan, mucha gente hace eso ya.</p>
<p>Para habilitar la compresión simplemente hay que mandar una cabecera http con Accept-Encoding: gzip.</p>
<p>Aquí dejo unos ejemplo de como habilitar la compresión.</p>
<p>En <strong>PHP</strong> con nusoap no tienes que preocuparte de nada, simplemente diciéndoselo al cliente el se encarga de mandar la cabecera y de descomprimir la respuesta:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$soapClient</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> nusoap_client<span style="color: #009900;">&#40;</span><span style="color: #000088;">$wsdl</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$soapClient</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">http_encoding</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'gzip'</span><span style="color: #339933;">;</span> 
<span style="color: #000088;">$respuesta</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$soapClient</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">call</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$metodo</span><span style="color: #339933;">,</span> <span style="color: #000088;">$params</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>En <strong>.NET,</strong> con proxys generados desde WSDL, lo mismo, simplemente hemos de activarlo en la propiedad EnableDecompresion:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">Service service <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Service<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> 
service<span style="color: #008000;">.</span><span style="color: #0000FF;">Url</span> <span style="color: #008000;">=</span> url<span style="color: #008000;">;</span> 
service<span style="color: #008000;">.</span><span style="color: #0000FF;">EnableDecompression</span> <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span></pre></div></div>

<p>Si en <strong>.NET</strong> la petición la hacemos ‘a mano’ tenemos que encargarnos de meter la cabecera y descomprimir la respuesta, algo así:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">HttpWebRequest request <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>HttpWebRequest<span style="color: #008000;">&#41;</span>WebRequest<span style="color: #008000;">.</span><span style="color: #0000FF;">Create</span><span style="color: #008000;">&#40;</span>url<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
request<span style="color: #008000;">.</span><span style="color: #0000FF;">Headers</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Accept-Encoding&quot;</span>, <span style="color: #666666;">&quot;gzip&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
WebResponse resp <span style="color: #008000;">=</span> reques<span style="color: #008000;">.</span><span style="color: #0000FF;">GetResponse</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
Stream respStram <span style="color: #008000;">=</span> resp<span style="color: #008000;">.</span><span style="color: #0000FF;">GetResponseStream</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008000;">&#40;</span>Stream streamGZip <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> GZipStream<span style="color: #008000;">&#40;</span>respStram, CompressionMode<span style="color: #008000;">.</span><span style="color: #0000FF;">Decompress</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    StreamReader reader <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StreamReader<span style="color: #008000;">&#40;</span>streamGZip<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    <span style="color: #6666cc; font-weight: bold;">string</span> result <span style="color: #008000;">=</span> reader<span style="color: #008000;">.</span><span style="color: #0000FF;">ReadToEnd</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>                    
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>En <strong>Ruby</strong> quizás sea algo mas complicado ya que tienes que encargarte tu de descomprimir la respuesta, pero es sencillo, algo así:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">req = <span style="color:#6666ff; font-weight:bold;">Net::HTTP::Post</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>post_ws, initheader = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'Content-Type'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#996600;">'application/json'</span>, <span style="color:#996600;">'Action'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> action, <span style="color:#996600;">'Format'</span><span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'json'</span>,<span style="color:#996600;">'Accept-Encoding'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'gzip'</span> <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
req.<span style="color:#9900CC;">body</span> = rqjson
&nbsp;
resp = <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>host<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">start</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>http<span style="color:#006600; font-weight:bold;">|</span> http.<span style="color:#9900CC;">request</span><span style="color:#006600; font-weight:bold;">&#40;</span>req<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">case</span> resp
    <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#6666ff; font-weight:bold;">Net::HTTPSuccess</span> <span style="color:#9966CC; font-weight:bold;">then</span>
      <span style="color:#9966CC; font-weight:bold;">begin</span>
       <span style="color:#9966CC; font-weight:bold;">if</span> resp.<span style="color:#9900CC;">header</span><span style="color:#006600; font-weight:bold;">&#91;</span> <span style="color:#996600;">'Content-Encoding'</span> <span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">eql</span>?<span style="color:#006600; font-weight:bold;">&#40;</span> <span style="color:#996600;">'gzip'</span> <span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">then</span>
        <span style="color:#008000; font-style:italic;">#debug.call( &quot;Performing gzip decompression for response body&quot; )</span>
        sio = <span style="color:#CC00FF; font-weight:bold;">StringIO</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span> resp.<span style="color:#9900CC;">body</span> <span style="color:#006600; font-weight:bold;">&#41;</span>
        gz = <span style="color:#CC00FF; font-weight:bold;"><span style="color:#6666ff; font-weight:bold;">Zlib::GzipReader</span></span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span> sio <span style="color:#006600; font-weight:bold;">&#41;</span>
        page = gz.<span style="color:#9900CC;">read</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        <span style="color:#008000; font-style:italic;">#debug.call( &quot;Finished decompressing gzipped response body&quot; )</span>
       <span style="color:#9966CC; font-weight:bold;">else</span>
          <span style="color:#008000; font-style:italic;">#debug.call( &quot;Page is not compressed. Using text response body&quot; )</span>
          page = resp.<span style="color:#9900CC;">body</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
       <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#CC00FF; font-weight:bold;">Exception</span>
        <span style="color:#008000; font-style:italic;">#debug.call( &quot;Error occurred (#{$!.message})&quot; )</span>
        <span style="color:#008000; font-style:italic;"># handle errors</span>
        <span style="color:#CC0066; font-weight:bold;">raise</span> $!.<span style="color:#9900CC;">message</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2012/04/25/habilitar-la-compresin-de-los-datos-de-respuesta-en-tus-peticiones-http/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bamboo, MSBuild y referencias en una Unidad de Red</title>
		<link>http://www.thedotnetway.net/2012/04/17/bamboo-msbuild-y-referencias-en-una-unidad-de-red/</link>
		<comments>http://www.thedotnetway.net/2012/04/17/bamboo-msbuild-y-referencias-en-una-unidad-de-red/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 16:39:53 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Atlassian]]></category>
		<category><![CDATA[Bamboo]]></category>
		<category><![CDATA[Integracion Continua]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/?p=762</guid>
		<description><![CDATA[&#160; Hace unas semanas empezamos a probar Bamboo como herramienta de integración continua para nuestros proyectos, queríamos probar el “On Demand” pero no tenia integración con git, así que lo tenemos instalado en un Windows 2008 R2. Primero probamos con un proyecto sencillo, alojado en github sin dependencias y todo fue perfecto, se baja el<a class="rmore" href="http://www.thedotnetway.net/2012/04/17/bamboo-msbuild-y-referencias-en-una-unidad-de-red/">&#160;&#160; Read More ...</a>]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p><img style="margin: 0px 10px 0px 0px; display: inline; float: left" alt="Bamboo Logo" align="left" src="http://www.atlassian.com/en/wac/software/bamboo/overview/productLogo/imageBinary/bamboo_logo_landing.png" />Hace unas semanas empezamos a probar <a href="http://www.atlassian.com/software/bamboo/overview">Bamboo</a> como herramienta de <a href="http://es.wikipedia.org/wiki/Integraci%C3%B3n_continua">integración continua</a> para nuestros proyectos, queríamos probar el “On Demand” pero no tenia integración con git, así que lo tenemos instalado en un Windows 2008 R2. </p>
<p>Primero probamos con un proyecto sencillo, alojado en github sin dependencias y todo fue perfecto, se baja el código de Git, lo compila con MSBuild, pasa los test con NUnit y te envía un report, una maravilla …</p>
<p>Siguiente paso, subir uno de los proyectos de la empresa, algo mas complejo, con muchas referencias&#160; (las referencias las tenemos en red y cada PC tiene una unidad mapeada a esa carpeta compartida, lo típico), pues no había manera de que Bamboo encontrara las referencias al compilar con MSBuild, lo raro era que, compilando con MSBuild en la línea de comandos del servidor, compilaba sin problemas …</p>
<p>El problema, el proceso que ejecuta el MSBuild no tiene esa unidad de red mapeada porque no ha iniciado sesión, la solución, añadir una tarea tipo Script antes de la tarea de compilación que nos monte la unidad de red.</p>
<p>En nuestro caso:</p>
<p><font color="#008040">if not exist R:\nul NET USE R: \\127.0.0.1\References /USER:BUILDSERVER\user password /PERSISTENT:YES</font></p>
<p>Con esto el MSBuild siempre se encuentra la unidad mapeada y encuentra las referencias sin problemas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2012/04/17/bamboo-msbuild-y-referencias-en-una-unidad-de-red/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MMS, un servicio gratuito de monitorizaci&#243;n para MongoDB</title>
		<link>http://www.thedotnetway.net/2012/04/10/mms-un-servicio-gratuito-de-monitorizacin-para-mongodb/</link>
		<comments>http://www.thedotnetway.net/2012/04/10/mms-un-servicio-gratuito-de-monitorizacin-para-mongodb/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 12:14:26 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[NOSQL]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/?p=759</guid>
		<description><![CDATA[&#160; MMS es un servicio gratuito que ofrece 10gen para monitorizar tus servidores de MongoDB. Instalarlo es tan fácil como darte de alta en mms.10gen.com y bajarte e instalar en tu clúster el Agente MMS. Una vez instalado empezaras a recibir todos los datos relevantes desde tu clúster, información de operaciones (escritura, lectura), uso de<a class="rmore" href="http://www.thedotnetway.net/2012/04/10/mms-un-servicio-gratuito-de-monitorizacin-para-mongodb/">&#160;&#160; Read More ...</a>]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p><a href="http://www.10gen.com/mongodb-monitoring-service">MMS</a> es un servicio gratuito que ofrece <a href="http://www.10gen.com/">10gen</a> para monitorizar tus servidores de MongoDB.</p>
<p><a href="http://www.thedotnetway.net/wp-content/uploads/2012/04/image.png"><img style="background-image: none; border-right-width: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="http://www.thedotnetway.net/wp-content/uploads/2012/04/image_thumb.png" width="166" height="81" /></a></p>
<p>Instalarlo es tan fácil como darte de alta en <a href="https://mms.10gen.com/user/register?c=MMS10GEN">mms.10gen.com</a> y bajarte e instalar en tu clúster el Agente MMS.</p>
<p>Una vez instalado empezaras a recibir todos los datos relevantes desde tu clúster, información de operaciones (escritura, lectura), uso de la memoria, del CPU, conexiones, uso de la red etc. ..</p>
<p>Además puedes configurar alertas por mail de caída de nodo, caída del Agente y que te avise si tu versión de MongoDB no esta actualizada.</p>
<p>Imprescindible si estas trabajando con MongoDB.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2012/04/10/mms-un-servicio-gratuito-de-monitorizacin-para-mongodb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MongoDB como repositorio key=&gt;value para objetos .NET</title>
		<link>http://www.thedotnetway.net/2012/03/22/mongodb-como-repositorio-keyvalue-para-objetos-net/</link>
		<comments>http://www.thedotnetway.net/2012/03/22/mongodb-como-repositorio-keyvalue-para-objetos-net/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 13:18:36 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MemCached]]></category>
		<category><![CDATA[Microsoft.NET]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[NOSQL]]></category>
		<category><![CDATA[SharedCache]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/?p=754</guid>
		<description><![CDATA[&#160; Hace un tiempo que venimos haciendo pruebas con esto a fin de eliminar SharedCache y MemCached y aprovechar la estructura de servidores de MongoDB en Replica Set que tenemos montada para almacenar los objetos. Para almacenar los objetos en MongoDB hemos creado una librería, con los mismos métodos de que los clientes de Cache,<a class="rmore" href="http://www.thedotnetway.net/2012/03/22/mongodb-como-repositorio-keyvalue-para-objetos-net/">&#160;&#160; Read More ...</a>]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p><a href="http://www.thedotnetway.net/wp-content/uploads/2012/03/Slide-Gallery-MongoDB.jpg"><img style="background-image: none; border-right-width: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Slide-Gallery-MongoDB" border="0" alt="Slide-Gallery-MongoDB" align="left" src="http://www.thedotnetway.net/wp-content/uploads/2012/03/Slide-Gallery-MongoDB_thumb.jpg" width="164" height="123" /></a>Hace un tiempo que venimos haciendo pruebas con esto a fin de eliminar SharedCache y MemCached y aprovechar la estructura de servidores de MongoDB en Replica Set que tenemos montada para almacenar los objetos.</p>
<p>Para almacenar los objetos en MongoDB hemos creado una librería, con los mismos métodos de que los clientes de Cache, que almacena los objetos en una colección con la key como _id y los datos en byte[] con la posibilidad de almacenarlos comprimidos. </p>
<p>Además hemos creado un visor de objetos en Windows Forms, los dos proyectos son Open Source y están en github.</p>
<p><a href="https://github.com/emiliotorrens/MongoKeyValueClient.NET"><font size="3">https://github.com/emiliotorrens/MongoKeyValueClient.NET</font></a></p>
<p>Este es el resultado de unas pruebas en las que se hacen varios cálculos vía Servicio Web en dos instalaciones una tirando los objetos desde el servidor de Cache y otra tirando los objetos desde el Replica Set de MongoDB:</p>
<p><font color="#000000">MongoDB, 10 Threads 120 segundos, 1 Servidor      <br />Test Results:       <br />Test Passed!       <br />973 call(s) passed, out of 973       <br />Average response time: 1.094 seconds</font></p>
<p><font color="#000000">Cache, 10 Threads 120 segundos, 1 Servidor      <br />Test Results:       <br />Test Passed!       <br />752 call(s) passed, out of 752       <br />Average response time: 1.498 seconds</font></p>
<p>Las ventanas, para mi:</p>
<ul>
<li>Aprovechas tu estructura de MongoDB, si la tienes. </li>
<li>Es fácilmente escalable, escalamos poniendo mas servidores en el Replica Set. </li>
<li>Es fácilmente extensible, extendemos poniendo mas campos en la colección y añadiendo funcionalidad al cliente, tageando keys, relacionándolas etc. </li>
<li>Es persistente. </li>
</ul>
<p>Nosotros lo empezamos a poner en producción la semana que viene.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2012/03/22/mongodb-como-repositorio-keyvalue-para-objetos-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autogenerando el Schema con MongoMapper.NET</title>
		<link>http://www.thedotnetway.net/2012/03/20/autogenerando-el-schema-con-mongomapper-net/</link>
		<comments>http://www.thedotnetway.net/2012/03/20/autogenerando-el-schema-con-mongomapper-net/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 10:19:44 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Microsoft.NET]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[MongoMapper]]></category>
		<category><![CDATA[NOSQL]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/?p=749</guid>
		<description><![CDATA[&#160; Acabo de subir una nueva versión de MongoMapper.NET a master que incluye una opción para generar el esquema desde al Assembly. El método esta en ReflectionUtility y pasándole el Assembly donde tenemos definidas las clases que heredan de MongoMapper generara la colección y los índices que hayas definido con MongoKey y MongoIndex. Es tan<a class="rmore" href="http://www.thedotnetway.net/2012/03/20/autogenerando-el-schema-con-mongomapper-net/">&#160;&#160; Read More ...</a>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><a href="http://www.thedotnetway.net/wp-content/uploads/2012/03/tumblr_lv53dffG8U1qzyevi.jpg"><img style="background-image: none; border-right-width: 0px; margin: 0px 10px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="tumblr_lv53dffG8U1qzyevi" border="0" alt="tumblr_lv53dffG8U1qzyevi" align="left" src="http://www.thedotnetway.net/wp-content/uploads/2012/03/tumblr_lv53dffG8U1qzyevi_thumb.jpg" width="115" height="65"></a>Acabo de subir una nueva versión de MongoMapper.NET a master que incluye una opción para generar el esquema desde al Assembly.</p>
<p>El método esta en <a href="https://github.com/emiliotorrens/MongoMapper.NET/blob/master/EtoolTech.MongoDB.Mapper/Core/ReflectionUtility.cs">ReflectionUtility</a> y pasándole el Assembly donde tenemos definidas las clases que heredan de MongoMapper generara la colección y los índices que hayas definido con MongoKey y MongoIndex.</p>
<p>Es tan fácil como esto:</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">ReflectionUtility<span style="color: #008000;">.</span><span style="color: #0000FF;">BuildSchema</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">typeof</span><span style="color: #008000;">&#40;</span>MyClase<span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Assembly</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008000;">&amp;</span>nbsp<span style="color: #008000;">;</span></pre></div></div>

<p>Se puede usar con bases de datos ya creadas y colecciones con documentos ya que no borra nada solo añade, si has quitado un MongoIndex no lo&nbsp; borrara, tendrás que ir y quitarlo a mano.</p>
<p align="center"><a href="https://github.com/emiliotorrens/MongoMapper.NET"><font size="4">https://github.com/emiliotorrens/MongoMapper.NET</font></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2012/03/20/autogenerando-el-schema-con-mongomapper-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Leer archivo de configuracion YAML en Rails</title>
		<link>http://www.thedotnetway.net/2012/03/13/leer-archivo-de-configuracion-yaml-en-rails/</link>
		<comments>http://www.thedotnetway.net/2012/03/13/leer-archivo-de-configuracion-yaml-en-rails/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 12:52:48 +0000</pubDate>
		<dc:creator>Mario Andujar</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Configuracion]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[YAML]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/?p=741</guid>
		<description><![CDATA[En este post intentaré explicar como leer un archivo de configuración YAML en nuestra aplicación de Rails. Para ello, utilizaré un ejemplo en el que dependiento del escenario será necesario o no realizar la autentificación. Primero vamos al ejemplo del archivo YAML config/config.yml development: perform_authentication: false &#160; test: perform_authentication: false &#160; production: perform_authentication: true username:<a class="rmore" href="http://www.thedotnetway.net/2012/03/13/leer-archivo-de-configuracion-yaml-en-rails/">&#160;&#160; Read More ...</a>]]></description>
			<content:encoded><![CDATA[<p>En este post intentaré explicar como leer un archivo de configuración YAML en nuestra aplicación de Rails. Para ello, utilizaré un ejemplo en el que dependiento del escenario será necesario o no realizar la autentificación.</p>
<p>Primero vamos al ejemplo del archivo YAML</p>
<p><strong>config/config.yml</strong></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">development:
  perform_authentication: <span style="color:#0000FF; font-weight:bold;">false</span>
&nbsp;
test:
  perform_authentication: <span style="color:#0000FF; font-weight:bold;">false</span>
&nbsp;
production:
  perform_authentication: <span style="color:#0000FF; font-weight:bold;">true</span>
  username: admin
  password: secret</pre></div></div>

<p>Ahora deberemos crear un inicializador para cuando arranque nuestra aplicación cargue la configuración donde APP_CONFIG es una variable a la que podremos acceder en rails</p>
<p><strong>config/initializers/load_config.rb</strong></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">APP_CONFIG = <span style="color:#CC00FF; font-weight:bold;">YAML</span>::load_file<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;#{Rails.root}/config/config.yml&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Y por ultimo, el método donde accederemos al APP_CONFIG</p>
<p><strong>application.rb</strong></p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> authenticate
  <span style="color:#9966CC; font-weight:bold;">if</span> APP_CONFIG<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'perform_authentication'</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    authenticate_or_request_with_http_basic <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>username, password<span style="color:#006600; font-weight:bold;">|</span>
      username == APP_CONFIG<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'username'</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&amp;&amp;</span> password == APP_CONFIG<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'password'</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2012/03/13/leer-archivo-de-configuracion-yaml-en-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Replica Set en MongoMapper.NET</title>
		<link>http://www.thedotnetway.net/2012/03/07/replica-set-en-mongomapper-net/</link>
		<comments>http://www.thedotnetway.net/2012/03/07/replica-set-en-mongomapper-net/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 10:50:02 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Microsoft.NET]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[MongoMapper]]></category>
		<category><![CDATA[NOSQL]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/?p=739</guid>
		<description><![CDATA[Acabo de subir una nueva versión a master con algunos cambios para que soporte Replica Set. Una configuración de Replica Set quedaría de la siguiente manera: &#60;Server Host=&#34;192.168.1.214:27017,192.168.1.216:27017,192.168.1.14:27017&#34; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ReplicaSetName=&#34;devSet&#34; MinReplicaServersToWrite=&#34;1&#34; BalancedReading=&#34;true&#34; PoolSize=&#34;50&#34; WaitQueueTimeout=&#34;1&#34;/&#62; host, definimos los servers de la replica set con su puerto separado por comas. port, ha desaparecido se define en host.<a class="rmore" href="http://www.thedotnetway.net/2012/03/07/replica-set-en-mongomapper-net/">&#160;&#160; Read More ...</a>]]></description>
			<content:encoded><![CDATA[<p>Acabo de subir una nueva versión a <a href="https://github.com/emiliotorrens/MongoMapper.NET">master</a> con algunos cambios para que soporte <a href="http://www.mongodb.org/display/DOCS/Replica+Sets">Replica Set</a>.</p>
<p>Una configuración de Replica Set quedaría de la siguiente manera:</p>
<p><em><font color="#0000ff">&lt;Server Host=&quot;192.168.1.214:27017,192.168.1.216:27017,192.168.1.14:27017&quot;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ReplicaSetName=&quot;devSet&quot; MinReplicaServersToWrite=&quot;1&quot; BalancedReading=&quot;true&quot; PoolSize=&quot;50&quot; WaitQueueTimeout=&quot;1&quot;/&gt;</font></em></p>
<p align="left"><em><strong>host</strong></em>, definimos los servers de la replica set con su puerto separado por comas. </p>
<p align="left"><em><strong>port</strong></em>, ha desaparecido se define en host. </p>
<p align="left"><em><strong>ReplicaSetName</strong></em>, el nombre del replica set. </p>
<p align="left"><em><strong>MinReplicaServersToWrite</strong></em>, a cuantos servidores de la replica hay que escribir como mínimo para devolver ok. </p>
<p align="left"><strong><em>BalancedReading</em></strong>, si quieres leer de los secundarios. </p>
<p>Mail me si encontráis cualquier bug o pensáis en alguna mejora.</p>
<p align="center"><a href="https://github.com/emiliotorrens/MongoMapper.NET"><font size="3">https://github.com/emiliotorrens/MongoMapper.NET</font></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2012/03/07/replica-set-en-mongomapper-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalando rvm y Passenger en Ubuntu</title>
		<link>http://www.thedotnetway.net/2012/03/06/instalando-rvm-y-passenger-en-ubuntu/</link>
		<comments>http://www.thedotnetway.net/2012/03/06/instalando-rvm-y-passenger-en-ubuntu/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 12:36:30 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Passenger]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rvm]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/?p=737</guid>
		<description><![CDATA[rvm nos servirá para tener varias versiones de Ruby corriendo en el mismo servidor decidiendo con que versión corre cada aplicación. Passenger nos permite correr aplicaciones Ruby on Rails en nuestro servidor web Apache (o nginx). Partimos en una maquina Ubuntu con Apache y curl instalado, lo primero es instalar el rvm y para eso<a class="rmore" href="http://www.thedotnetway.net/2012/03/06/instalando-rvm-y-passenger-en-ubuntu/">&#160;&#160; Read More ...</a>]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0px 10px 0px 0px; display: inline; float: left" align="left" src="http://community.buglabs.net/photos/0000/0025/rails_box.png?1225903842" width="80" height="100" /><strong>rvm</strong> nos servirá para tener varias versiones de Ruby corriendo en el mismo servidor decidiendo con que versión corre cada aplicación.</p>
<p><strong>Passenger</strong> nos permite correr aplicaciones <em><a href="http://es.wikipedia.org/wiki/Ruby_on_Rails">Ruby on Rails</a></em> en nuestro servidor web <a href="http://es.wikipedia.org/wiki/Servidor_HTTP_Apache">Apache</a> (o <a href="http://es.wikipedia.org/wiki/Nginx">nginx</a>).</p>
<p>Partimos en una maquina Ubuntu con Apache y curl instalado, lo primero es instalar el rvm y para eso ejecutamos el siguiente comando en nuestra consola:</p>
<p><em><font color="#000000">bash -s stable &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)</font></em></p>
<p>Una vez instalado, tenemos que recargar en entorno, podemos cerrar sesión y conectarnos de nuevo, o ejecutar:</p>
<p><em><font color="#000000">source ~/.bash_profile</font></em></p>
<p>Después tenemos que instalar el soporte SSL, eso es importante para instalar luego en passenger, si no tendremos que reinstalar todo otra vez, lo instalamos con este comando</p>
<p><em><font color="#000000">rvm pkg install openssl</font></em></p>
<p>Ya tenemos el rvm instalado, ahora tenemos que instalar las versiones de Ruby que nos interesen, en este caso instalamos la 1.9.3, con soporte ssl, con este comando:</p>
<p><em><font color="#000000">rvm install 1.9.3 &#8211;with-openssl-dir=$HOME/.rvm/usr</font></em></p>
<p>Así instalamos todas las versiones que queramos.</p>
<p>Para ver la lista de versiones instaladas</p>
<p><em><font color="#000000">rvm list</font></em></p>
<p>Para ver cual estamos usando</p>
<p><font color="#000000">rvm use</font></p>
<p>Para usar una</p>
<p><font color="#000000">rvm use 1.9.3</font></p>
<p>Seleccionamos la versión que queramos usar e instalamos en passenger con este comando</p>
<p><em><font color="#000000">gem install passenger</font></em></p>
<p>Cuando termine que instalarse hay que instalar el modulo de Apache, este modulo tiene unas dependencias, así que aquí dejo un comando para asegurar que tienes todas las dependencias:</p>
<p><em><font color="#000000">sudo apt-get install libcurl4-openssl-dev; sudo apt-get install libssl-dev ; sudo apt-get install libopenssl-ruby ; sudo apt-get install apache2-prefork-dev ; sudo apt-get install libapr1-dev ; sudo apt-get install libaprutil1-dev ; sudo&#160; apt-get install libopenssl-ruby</font></em></p>
<p>Con el passenger instalado y las dependencias solo nos queda instalar el modulo de Apache con</p>
<p><em><font color="#000000">rvmsudo passenger-install-apache2-modulenan</font></em></p>
<p>Ojo aquí, cuando el modulo termine de instalarse te pondrá en pantalla 3 líneas que hay que añadir a la configuración del apache, será algo así:</p>
<p><em><font color="#000000">Please edit your Apache configuration file, and add these lines:</font></em></p>
<p><em><font color="#000000">&#160;&#160; LoadModule passenger_module /home/administrador/.rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.11/ext/apache2/mod_passenger.so        <br />&#160;&#160; PassengerRoot /home/administrador/.rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.11         <br />&#160;&#160; PassengerRuby /home/administrador/.rvm/wrappers/ruby-1.9.3-p125/ruby</font></em></p>
<p><font color="#000000">Tienes que modificar el apache2.conf y añadir esas 3 líneas al final del archivo, reinicias el</font> Apache </p>
<p><em><font color="#000000">sudo /etc/init.d/apache2 restart</font></em></p>
<p>Y listo, ya tienes el rvm y el passenger instalado, ya puedes poner tus aplicaciones ROR en el Apache</p>
<p>Nota, para instalar gems y esas cosas no hay que usar sudo hay que usar rvmsudo, de esta manera las gems se instalan en cada versión de Ruby, para ir cambiando de versión de Ruby ya lo hemos visto antes, rvm use la versión.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2012/03/06/instalando-rvm-y-passenger-en-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

