<?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>dev .NET en español (neat!)</title>
	<atom:link href="http://dotneat.iloire.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://dotneat.iloire.com</link>
	<description>Productividad y eficiencia desarrollando en .NET</description>
	<lastBuildDate>Tue, 30 Mar 2010 11:50:29 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='dotneat.iloire.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/a84d21b47c635934c75f040a653b16af?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>dev .NET en español (neat!)</title>
		<link>http://dotneat.iloire.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://dotneat.iloire.com/osd.xml" title="dev .NET en español (neat!)" />
	<atom:link rel='hub' href='http://dotneat.iloire.com/?pushpress=hub'/>
		<item>
		<title>Almacenamiento de contraseñas seguro, sincronizado y multiplataforma</title>
		<link>http://dotneat.iloire.com/2010/03/30/almacenamiento-de-contrasenas-seguro-sincronizado-y-multiplataforma/</link>
		<comments>http://dotneat.iloire.com/2010/03/30/almacenamiento-de-contrasenas-seguro-sincronizado-y-multiplataforma/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 11:50:29 +0000</pubDate>
		<dc:creator>iloire</dc:creator>
				<category><![CDATA[Productividad]]></category>
		<category><![CDATA[cifrado]]></category>
		<category><![CDATA[DropBox]]></category>
		<category><![CDATA[FreePass]]></category>

		<guid isPermaLink="false">http://dotneat.iloire.com/?p=70</guid>
		<description><![CDATA[Si utilizas varios equipos (quizá diferentes SO) y utilizas diversas y complejas contraseñas (recomendado), tendrás la necesidad de: Almacenar tus contraseñas de manera segura. Poder acceder a ellas desde cualquier equipo (multiplataforma) y mantenerlas sincronizadas. Idealmente, poder usar una contraseña sin tener que visualizarla (ver vídeo más adelante) &#8211; función auto-type Poder definir fechas de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dotneat.iloire.com&blog=12358795&post=70&subd=dotneat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Si utilizas varios equipos (quizá diferentes SO) y utilizas diversas y complejas contraseñas (recomendado), tendrás la necesidad de:</p>
<ul>
<li><strong>Almacenar </strong>tus contraseñas de manera <strong>segura</strong>.</li>
<li>Poder acceder a ellas <strong>desde cualquier equipo (multiplataforma) y mantenerlas</strong> <strong>sincronizadas</strong>.</li>
<li>Idealmente, poder usar una contraseña sin tener que visualizarla (ver vídeo más adelante) &#8211; <strong>función auto-type</strong></li>
<li>Poder definir <strong>fechas de caducidad</strong> para <strong>renovar</strong> las contraseñas (y que tu gestor de contraseñas te las recuerde)</li>
</ul>
<p>Después de mucho buscar he encontrado la solución usando estas dos herramientas: <a href="http://keepass.info/" target="_blank">KeePass </a>+ <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox</a></p>
<p><strong>Visión general</strong></p>
<p><img class="aligncenter size-full wp-image-78" style="float:left;margin-right:30px;" title="DropBox and KeePass" src="http://dotneat.files.wordpress.com/2010/03/dropboxkeepass2.png?w=397&#038;h=567" alt="DropBox and KeePass" width="397" height="567" /></p>
<ol>
<li>Se instala <a href="http://keepass.info/" target="_blank">KeePass </a>o KeePassX en cada máquina. Disponible para <strong>multiplataforma.</strong></li>
<li>Se instala <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox </a>en cada máquina. También disponible para <strong>varias plataformas.</strong></li>
<li>El archivo de contraseñas permanece <strong>siempre cifrado y sincronizado</strong> a través de <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox</a></li>
<li>El archivo permanece <strong>doblemente protegido</strong>: por un lado el cifrado seguro de <a href="http://keepass.info/" target="_blank">KeePass</a>. Por otro, la capa de con la que <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox </a>almacena sus datos.</li>
<li>En caso de que al archivo de contraseñas pudiera quedar defectuoso, <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox </a>te permite ir a la versión anterior (mantiene un histórico de versiones)</li>
</ol>
<p><br style="clear:both;" /></p>
<p><strong>Instalación</strong></p>
<p>Puedes descargar KeePass <a href="http://keepass.info/index.html" target="_self">aquí</a> (para Windows) o también usar el gestor de paquetes o <em>dpkg</em> para Linux para obtener <a href="http://www.keepassx.org/" target="_blank">KeePassX</a>, o descargarlo desde:  <a href="http://www.keepassx.org/" target="_blank">http://www.keepassx.org/</a></p>
<p><em>Del sitio web de KeePassX: </em></p>
<blockquote><p><em>&#8220;Originally KeePassX was called KeePass/L for Linux since it was a port of Windows password manager </em><a rel="external" href="http://keepass.sourceforge.net/" target="_blank"><em>Keepass Password Safe</em></a><em>. After KeePass/L became a cross platform application the name was not appropriate anymore and therefore, on 22 March 2006 it has been changed.&#8221;</em></p></blockquote>
<p>La idea consiste en tener instalado KeePass y mantener el archivo KDB de contraseñas en tu <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox</a>. El <strong>archivo de contraseñas será sincronizado entre todos los equipos que tengas</strong>, y puede ser abierto por KeePass en Windows, o KeePassX en Linux o MacOs.</p>
<p><em>Nota: screenshots obtenidos de las páginas de KeePass y KeePassX</em></p>
<p><strong>Seguridad</strong></p>
<p>El archivo de contraseñas se protege mediante un cifrado considerado seguro (ver <a href="http://keepass.info/help/base/security.html" target="_blank">http://keepass.info/help/base/security.html</a>). Incluso en memoria, los datos sensibles se mantienen cifrados mientras el gestor de contraseña los utiliza.</p>
<blockquote><p><em>&#8220;In order to generate the 256-bit key for the block ciphers, the Secure Hash Algorithm SHA-256 is used. This algorithm compresses the user key provided by the user (consisting of password and/or key file) to a fixed-size key of 256 bits. This transformation is one-way, i.e. it is computationally infeasible to invert the hash function or find a second message that compresses to the same hash.</em></p>
<p><em>The recently discovered attack against SHA-1 </em><a href="http://keepass.info/help/base/security.html#secref"><em>[2]</em></a><em> doesn&#8217;t affect the security of SHA-256. SHA-256 is still considered as being very secure </em><a href="http://keepass.info/help/base/security.html#secref"><em>[3]</em></a><em>.&#8221;</em></p></blockquote>
<p><strong>Función auto-type</strong></p>
<p>Usando la función auto-type puedes <strong>introducir las credenciales sin tener que visualizar la contraseña</strong>. Siempre, los datos sensibles permanecen cifrados en memoria. Vídeo corto demostrativo:</p>
<p><span style="text-align:center; display: block;"><a href="http://dotneat.iloire.com/2010/03/30/almacenamiento-de-contrasenas-seguro-sincronizado-y-multiplataforma/"><img src="http://img.youtube.com/vi/HusumYCDzVU/2.jpg" alt="" /></a></span></p>
<p>¿Alguna sugerencia o comentario? ¿Como lo hacéis vosotros?</p>
<br /> Tagged: <a href='http://dotneat.iloire.com/tag/cifrado/'>cifrado</a>, <a href='http://dotneat.iloire.com/tag/dropbox/'>DropBox</a>, <a href='http://dotneat.iloire.com/tag/freepass/'>FreePass</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dotneat.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dotneat.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dotneat.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dotneat.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dotneat.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dotneat.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dotneat.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dotneat.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dotneat.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dotneat.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dotneat.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dotneat.wordpress.com/70/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dotneat.wordpress.com/70/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dotneat.wordpress.com/70/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dotneat.iloire.com&blog=12358795&post=70&subd=dotneat&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dotneat.iloire.com/2010/03/30/almacenamiento-de-contrasenas-seguro-sincronizado-y-multiplataforma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3bccd4382cf066eaa1717b142db9bb67?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">iloire</media:title>
		</media:content>

		<media:content url="http://dotneat.files.wordpress.com/2010/03/dropboxkeepass2.png" medium="image">
			<media:title type="html">DropBox and KeePass</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/HusumYCDzVU/2.jpg" medium="image" />
	</item>
		<item>
		<title>Ejemplo Backgroundworker en C#</title>
		<link>http://dotneat.iloire.com/2010/03/06/ejemplo-backgroundworker-en-csharp/</link>
		<comments>http://dotneat.iloire.com/2010/03/06/ejemplo-backgroundworker-en-csharp/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 18:07:22 +0000</pubDate>
		<dc:creator>iloire</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[BackgroundWorker]]></category>
		<category><![CDATA[hilos]]></category>

		<guid isPermaLink="false">http://dotneat.iloire.com/?p=47</guid>
		<description><![CDATA[Nota: Ejemplo completo de uso del control BackgroundWorker. El artículo inicial se creó en inglés y fue publicado aquí. En vista del éxito que ha tenido lo traduzco al castellano y lo republico también en este apartado. Introducción El control BackgroundWorker fue introducido en el .NET Framework 2.0 y permite realizar operaciones costosas o duraderas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dotneat.iloire.com&blog=12358795&post=47&subd=dotneat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><em>Nota: Ejemplo completo de uso del control </em><strong><em>BackgroundWorker</em></strong><em>. El artículo inicial se creó en inglés y fue publicado </em><a href="http://www.dotneat.net/2009/02/10/BackgroundworkerExample.aspx" target="_blank"><em>aquí</em></a><em>. En vista del éxito que ha tenido lo traduzco al castellano y lo republico también en este apartado.</em></p>
<h2>Introducción</h2>
<p>El control <strong><em>BackgroundWorker </em></strong>fue introducido en el .NET Framework 2.0 y permite realizar operaciones costosas o duraderas en <strong>un hilo diferente al del interfaz</strong>, de manera que la aplicación sigue respondiendo al usuario mientras este trabajo se procesa en <strong>segundo plano</strong>.</p>
<p>Usando este control, la <strong>gestión de hilos está encapsulada en el control</strong> de manera que el programador no tiene que lidiar con hilos (<em>threads</em>), <em>invokes </em>o delegados (<em>delegates</em>).</p>
<h2>Ejemplo</h2>
<p>Este sencillo ejemplo cubre prácticamente todas las posibilidades de este componente: <strong>soporte de cancelación</strong>, <strong>gestión de errores</strong> , <strong>información de progreso</strong> (y ejemplo de como pasar información en cada notificación de progreso)</p>
<p><a href="http://dotneat.files.wordpress.com/2010/03/backgroundworker.png"><img class="aligncenter size-full wp-image-53" title="Ejemplo Background Worker" src="http://dotneat.files.wordpress.com/2010/03/backgroundworker.png?w=332&#038;h=323" alt="Ejemplo Background Worker" width="332" height="323" /></a></p>
<h3>Evento backgroundWorker1_DoWork</h3>
<p>El evento <em>backgroundWorker1_DoWork</em> es desencadenado por el control cuando el método <em>RunWorkerAsync()</em> es invocado. Este método se <strong>ejecuta en un segundo hilo</strong> que crea el control <strong>BackgroundWorker</strong>. Al no ser el hilo principal del interfaz, <strong><span style="text-decoration:underline;">no intentes acceder a ningún control aquí</span></strong>, o si lo haces utiliza para ello un <strong>delegado</strong>.</p>
<pre class="brush: csharp;">
        //[System.Diagnostics.DebuggerNonUserCodeAttribute()]  (*)
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            //no usaremos código try/catch aquí, a no ser que después hagamos un throw de la excepción capturada.
            //es necesario dejar que el backgroundworker sea quien capture cualquier excepción producida.
            //si se produce una excepción, el control la disponibilizará una vez haya finalizado su ejecución,
            //y disparado el evento &quot;backgroundWorker1_RunWorkerCompleted&quot;
            //the RunWorkerCompletedEventArgs object, method backgroundWorker1_RunWorkerCompleted
            //try
            //{
                DateTime start = DateTime.Now;
                e.Result = &quot;&quot;;
                for (int i = 0; i &lt; 100; i++)
                {
                    System.Threading.Thread.Sleep(50); //simulamos trabajo

                   //hemos completado un porcentaje del trabajo previsto, luego notificamos de ello.
                    backgroundWorker1.ReportProgress(i, DateTime.Now);

                    //descomenta este código para ver como esta excepción es gestionada por el
                    //control backgroundworker
                    //descomenta también el atributo indicado arriba para evitar que el depurador
                    //pare en la excepción, ya que queremos simular
                    //el comportamiento del control en tiempo de ejecución.
                    //if (i == 34)
                    //    throw new Exception(&quot;something wrong here!!&quot;);

                    //en caso de que soporte cancelación y el control haya recibido la petición de cancelación,
                    //cancelamos el trabajo. Es la manera en la que realizamos una salida &quot;limpia&quot;.
                    if (backgroundWorker1.CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }
                }

                TimeSpan duration = DateTime.Now - start;

                //aquí podríamos devolver información de utilidad, como el resultado de un cálculo,
                //número de elementos afectados, etc.. de manera sencilla y segura
                //al hilo principal
                e.Result = &quot;Duration: &quot; + duration.TotalMilliseconds.ToString() + &quot; ms.&quot;;
            //}
            //catch(Exception ex){
            //    MessageBox.Show(&quot;Don't use try catch here!&quot;);
            //}
        }
</pre>
<p><em>(*) Nota: El atributo [System.Diagnostics.DebuggerNonUserCodeAttribute()] es necesario para evitar que el depurador interrumpa el flujo de la ejecución en caso de que una excepción se produzca. De esta manera podemos trabajar en modo depuración con el mismo comportamiento que el control tendría en modo ejecución. Este comportamiento consistiría en capturar internamente la excepción (por eso no usaremos try/catch en el método) y devolvernos la misma junto con el resultado, en el método backgroundWorker1_RunWorkerCompleted</em></p>
<h3>Evento backgroundWorker1_ProgressChanged</h3>
<p>Este evento es lanzado en el <strong>hilo principal</strong>, por lo que aquí <strong>SI</strong> podemos acceder a controles del formulario de manera segura.</p>
<pre class="brush: csharp;">
 private void backgroundWorker1_ProgressChanged(object sender,
 ProgressChangedEventArgs e)
 {
    progressBar1.Value = e.ProgressPercentage; //actualizamos la barra de progreso
    DateTime time = Convert.ToDateTime(e.UserState); //obtenemos información adicional si procede

    //en este ejemplo, logamos a un textbox
    txtOutput.AppendText(time.ToLongTimeString());
    txtOutput.AppendText(Environment.NewLine);
 }
</pre>
<h3>Evento backgroundWorker1_RunWorkerCompleted</h3>
<p>Este método se ejecuta cuando la tarea ha sido finalizada. Una tarea se finaliza cuando:</p>
<ul>
<li>a) termina de manera normal</li>
<li>b) termina con error</li>
<li>c) es cancelada.</li>
</ul>
<p>En el objeto de tipo <em>RunWorkerCompletedEventArgs </em>encontraremos información detallada del tipo de finalización, así como los datos que hemos podido pasar en la propiedad <em>Result</em>.</p>
<pre class="brush: csharp;">
 private void backgroundWorker1_RunWorkerCompleted(object sender,
 RunWorkerCompletedEventArgs e)
 {
    if (e.Cancelled) {
      MessageBox.Show(&quot;The task has been cancelled&quot;);
    }
    else if (e.Error != null)
    {
      MessageBox.Show(&quot;Error. Details: &quot; + (e.Error as Exception).ToString());
    }
    else {
      MessageBox.Show(&quot;The task has been completed. Results: &quot; + e.Result.ToString());
    }
 }
</pre>
<h3>Enviado las órdenes de inicio y cancelación al control</h3>
<p>Notificamos al control backgroundworker de que cancele el proceso.</p>
<pre class="brush: csharp;">
 private void btoCancel_Click(object sender, EventArgs e)
 {
    //este código no mata ni afecta al hilo en el que se está ejecutando el procesamiento.
    //Sirve a efectos de notificación, que debe de ser
    //gestionada de la manera que se indica arriba en el ejemplo
    backgroundWorker1.CancelAsync();
 }
</pre>
<p>Lanzamos el trabajo. En este momento, el control backgroundworker lanza un hilo en el que ejecuta la tarea asignada, a través del método <em>backgroundWorker1_DoWork</em> visto anteriormente.</p>
<pre class="brush: csharp;">
 private void btoStart_Click(object sender, EventArgs e)
 {
 backgroundWorker1.RunWorkerAsync();
 }
</pre>
<br /> Tagged: <a href='http://dotneat.iloire.com/tag/backgroundworker/'>BackgroundWorker</a>, <a href='http://dotneat.iloire.com/tag/c/'>C#</a>, <a href='http://dotneat.iloire.com/tag/hilos/'>hilos</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dotneat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dotneat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dotneat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dotneat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dotneat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dotneat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dotneat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dotneat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dotneat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dotneat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dotneat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dotneat.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dotneat.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dotneat.wordpress.com/47/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dotneat.iloire.com&blog=12358795&post=47&subd=dotneat&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dotneat.iloire.com/2010/03/06/ejemplo-backgroundworker-en-csharp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3bccd4382cf066eaa1717b142db9bb67?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">iloire</media:title>
		</media:content>

		<media:content url="http://dotneat.files.wordpress.com/2010/03/backgroundworker.png" medium="image">
			<media:title type="html">Ejemplo Background Worker</media:title>
		</media:content>
	</item>
		<item>
		<title>Trabajar con repositorio SVN sin servidor dedicado (usando DropBox)</title>
		<link>http://dotneat.iloire.com/2010/03/03/trabajar-con-repositorio-svn-sin-servidor-dedicado-usando-dropbox/</link>
		<comments>http://dotneat.iloire.com/2010/03/03/trabajar-con-repositorio-svn-sin-servidor-dedicado-usando-dropbox/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 18:49:24 +0000</pubDate>
		<dc:creator>iloire</dc:creator>
				<category><![CDATA[Productividad]]></category>
		<category><![CDATA[DropBox]]></category>
		<category><![CDATA[freelance]]></category>
		<category><![CDATA[HOSTS]]></category>
		<category><![CDATA[repositorio]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://dotneat.wordpress.com/?p=3</guid>
		<description><![CDATA[Note: english version available here: Working with SVN and DropBox without a dedicated SVN server En algunos foros se plantea el uso del servicio DropBox como sustituto del repositorio de código fuente &#8211; SVN en nuestro caso &#8211; (ventajas de DropBox: archivos sincronizados en múltiples equipos, múltiples colaboradores trabajando simultáneamente, DropBox te mantiene versiones de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dotneat.iloire.com&blog=12358795&post=3&subd=dotneat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><em>Note: english version available here: </em><a rel="bookmark" href="http://www.dotneat.net/2010/03/24/WorkingWithSVNAndDropBoxWithoutADedicatedSVNServer.aspx" target="_blank"><em>Working with SVN and DropBox without a dedicated SVN server</em></a></p>
<p>En algunos foros se plantea el uso del servicio <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox</a> como <strong>sustituto</strong> del repositorio de código fuente &#8211; SVN en nuestro caso &#8211; (ventajas de DropBox: archivos sincronizados en múltiples equipos, múltiples colaboradores trabajando simultáneamente, <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox</a> te mantiene versiones de los archivos una vez modificados, etc&#8230;)</p>
<p style="text-align:center;"><a href="http://dotneat.files.wordpress.com/2010/03/dropboxversiones.png" target="_blank"><img class="aligncenter size-medium wp-image-24" style="border:1px solid black;" title="Control de versiones en DropBox" src="http://dotneat.files.wordpress.com/2010/03/dropboxversiones.png?w=300&#038;h=170" alt="Control de versiones en DropBox" width="300" height="170" /></a><br />
<a href="http://dotneat.files.wordpress.com/2010/03/repositoriosvnendropbox.png" target="_blank"><img class="size-medium wp-image-8   aligncenter" title="Carpeta de repositorio SVN ubicado en DropBox" src="http://dotneat.files.wordpress.com/2010/03/repositoriosvnendropbox.png?w=300&#038;h=252" alt="Carpeta de repositorio SVN ubicado en DropBox" width="300" height="252" /></a></p>
<p>Si trabajas como <a title="programador freelance ASP.NET" href="http://www.iloire.com/" target="_blank">freelance </a>o en equipos muy pequeños, te propongo que mantengas el uso del <strong>repositorio SVN</strong> (con su capacidad de fusión, sincronización, comparación, histórico, etc), pero aprovechando la potencia de <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox</a>, para que <strong>no necesites tener un servidor SVN conectado las 24 horas por día.</strong></p>
<p><strong> </strong> Tu tienes un <strong>servidor SVN en cada equipo</strong> y <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox </a>los <strong>sincroniza</strong> como si fueran uno solo servidor <strong>permanentemente conectado. </strong></p>
<p>Además, mantienes todo el <strong>histórico de cambios</strong> en el código fuente <strong>dependiendo de SVN</strong> (código fuente disponible, licencia abierta) y no de <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox </a>(no disponible, propietario, no dispones de los archivos versionados en si), y también tienes la opción de cuando quieras <strong>migrar a un servidor de SVN dedicado.</strong></p>
<h2>Procedimiento</h2>
<p>El procedimiento es sencillo:</p>
<ol>
<li>Creas una cuenta de <a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox </a>si no la tienes ya e instalas el software (si usas este <a title="Drop Box" href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">enlace</a> nos dan 250Mb extras a cada uno &#8211; nada más <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )</li>
<li>Al no tener un <strong>único</strong> repositorio, necesitarás instalar el <strong>servidor SVN</strong> <strong>en cada equipo</strong> (tu portátil, el de escritorio, el Mac, el de Linux, en casa, en la oficina, etc).En todos ellos ubicas el repositorio dentro de la <strong>carpeta sincronizada que crea DropBox. </strong>En los pantallazos uso VisualSVN Server para Windows pero este tutorial es <strong>multiplataforma </strong>(tanto SVN como DropBox lo son)
<p style="text-align:center;">
<p style="text-align:center;"><a href="http://dotneat.files.wordpress.com/2010/03/repositoriosvnendropbox.png" target="_blank"><img class="size-medium wp-image-8 aligncenter" title="Carpeta de repositorio SVN ubicado en DropBox" src="http://dotneat.files.wordpress.com/2010/03/repositoriosvnendropbox.png?w=300&#038;h=252" alt="Carpeta de repositorio SVN ubicado en DropBox" width="300" height="252" /></a></p>
<p><a href="http://dotneat.files.wordpress.com/2010/03/visualsvnserver.png" target="_blank"><img class="size-medium wp-image-7 aligncenter" title="Visual SVN Server" src="http://dotneat.files.wordpress.com/2010/03/visualsvnserver.png?w=300&#038;h=222" alt="Pantallazo de Visual SVN Server" width="300" height="222" /></a></li>
<li>Importante, para unificar la ruta, vamos a crear una entrada en el archivo hosts<strong> de cada máquina que utilices para desarrollar</strong>, que apunte al propio equipo (es decir a 127.0.0.1) : ej:<br />
<em><span style="color:#999999;"><br />
127.0.0.1   svn.midominio.com  #el nombre es lo de menos, invéntatelo.<br />
</span></em><br />
De esta manera hacemos que el ROOT o <strong>raíz del repositorio </strong>se mantenga<strong> constante</strong> entre todas las máquinas.</p>
<p style="text-align:center;"><a href="http://dotneat.files.wordpress.com/2010/03/archivohosts.png" target="_blank"><img class="size-medium wp-image-9 aligncenter" title="Archivo Hosts" src="http://dotneat.files.wordpress.com/2010/03/archivohosts.png?w=300&#038;h=178" alt="Modificación del archivo HOSTS" width="300" height="178" /></a></p>
</li>
</ol>
<p>Ya está, ahora ya puedes trabajar en cualquiera de tus equipos, realizar cambios, y subir los mismos al repositorio SVN <strong>local </strong>(a través del mapeo que has hecho en el archivo HOSTS).</p>
<p style="text-align:center;"><a href="http://dotneat.files.wordpress.com/2010/03/svncheckout.png" target="_blank"><img class="aligncenter size-medium wp-image-11" title="SVN Checkout" src="http://dotneat.files.wordpress.com/2010/03/svncheckout.png?w=300&#038;h=231" alt="SVN Checkout" width="300" height="231" /></a></p>
<p><a href="https://www.dropbox.com/referrals/NTQ4MzU1NDY5" target="_blank">DropBox </a>se encargará de <strong>replicar el repositorio</strong> al resto de tus equipos de trabajo por lo que cuando entres en otro equipo y realices un update del SVN (local a ese equipo) estarás obteniendo las últimas modificaciones.</p>
<p><strong>Virtualmente trabajarás como si tu repositorio SVN estuviese en un servidor de Internet!</strong></p>
<h2><strong>Anexo</strong></h2>
<p><strong>Servidor SVN para Windows:</strong></p>
<ul>
<li><a href="http://www.visualsvn.com/server/download/">http://www.visualsvn.com/server/download/</a></li>
</ul>
<p><strong>Cliente SVN para Windows:</strong></p>
<ul>
<li><a href="http://tortoisesvn.tigris.org/">http://tortoisesvn.tigris.org/</a></li>
</ul>
<p><strong>Sobre el fichero HOSTS:</strong></p>
<ul>
<li><a href="http://es.wikipedia.org/wiki/Archivo_hosts">http://es.wikipedia.org/wiki/Archivo_hosts</a></li>
<li><strong>Notas:</strong> Recuerda abrirlo como administrador en Vista (notepad -&gt; botón derecho -&gt; abrir como administrador)</li>
</ul>
<br /> Tagged: <a href='http://dotneat.iloire.com/tag/dropbox/'>DropBox</a>, <a href='http://dotneat.iloire.com/tag/freelance/'>freelance</a>, <a href='http://dotneat.iloire.com/tag/hosts/'>HOSTS</a>, <a href='http://dotneat.iloire.com/tag/productividad/'>Productividad</a>, <a href='http://dotneat.iloire.com/tag/repositorio/'>repositorio</a>, <a href='http://dotneat.iloire.com/tag/svn/'>svn</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dotneat.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dotneat.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dotneat.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dotneat.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/dotneat.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/dotneat.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/dotneat.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/dotneat.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dotneat.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dotneat.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dotneat.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dotneat.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dotneat.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dotneat.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dotneat.iloire.com&blog=12358795&post=3&subd=dotneat&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://dotneat.iloire.com/2010/03/03/trabajar-con-repositorio-svn-sin-servidor-dedicado-usando-dropbox/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3bccd4382cf066eaa1717b142db9bb67?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">iloire</media:title>
		</media:content>

		<media:content url="http://dotneat.files.wordpress.com/2010/03/dropboxversiones.png?w=300" medium="image">
			<media:title type="html">Control de versiones en DropBox</media:title>
		</media:content>

		<media:content url="http://dotneat.files.wordpress.com/2010/03/repositoriosvnendropbox.png?w=300" medium="image">
			<media:title type="html">Carpeta de repositorio SVN ubicado en DropBox</media:title>
		</media:content>

		<media:content url="http://dotneat.files.wordpress.com/2010/03/repositoriosvnendropbox.png?w=300" medium="image">
			<media:title type="html">Carpeta de repositorio SVN ubicado en DropBox</media:title>
		</media:content>

		<media:content url="http://dotneat.files.wordpress.com/2010/03/visualsvnserver.png?w=300" medium="image">
			<media:title type="html">Visual SVN Server</media:title>
		</media:content>

		<media:content url="http://dotneat.files.wordpress.com/2010/03/archivohosts.png?w=300" medium="image">
			<media:title type="html">Archivo Hosts</media:title>
		</media:content>

		<media:content url="http://dotneat.files.wordpress.com/2010/03/svncheckout.png?w=300" medium="image">
			<media:title type="html">SVN Checkout</media:title>
		</media:content>
	</item>
	</channel>
</rss>