<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9045697035100432150</id><updated>2024-08-29T21:00:40.928-07:00</updated><title type='text'>Sistemas distribuidos y paralelos</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-4890231587148993297</id><published>2012-05-23T22:03:00.000-07:00</published><updated>2012-05-23T22:03:44.362-07:00</updated><title type='text'>Instalación de MongoDB</title><content type='html'>A continuación veremos como instalar MongoDB en Mac OS X y en Ubuntu.Primero comenzaremos con&amp;nbsp; Mac OS X.Desde nuestra terminal hacemos lo siguiente, tomando en cuenta que tenemos nuestro gestor de paquetes de Homebrew:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:js, jscript, javascript&quot;&gt;$ brew update
$ brew install mongodb
&lt;/pre&gt;
&lt;br /&gt;
Desde Ubuntu:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:js, jscript, javascript&quot;&gt;$ sudo apt-get install mongodb
&lt;/pre&gt;
&lt;br /&gt;
Ahora crearemos una carpeta, debido a que algunos usuarios con Lion tienen muchos problemas con los permisos, así que les recomiendo que creen la siguiente carpeta de esta manera:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:js, jscript, javascript&quot;&gt;$ brew update
$ sudo mkdir -p /data/db
$ sudo chown `id -u` /data/db
&lt;/pre&gt;
&lt;br /&gt;
Para comenzar el servidor tecleamos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:js, jscript, javascript&quot;&gt;$ brew update
$ mongod
MongoDB starting : pid=4932 port=27017 dbpath=/data/db/ 64-bit
...
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Para entrar a la consola de MongoDB hacemos lo siguiente:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:js, jscript, javascript&quot;&gt;$ brew update
$ mongo
MongoDB shell version: 1.8.3
&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Sitios de referencia:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.blogger.com/goog_1626701955&quot;&gt;http://www.hacksparrow.com/how-to-install-mongodb-on-mac-os-x.html
&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.hacksparrow.com/install-mongodb-on-ubuntu.html&quot;&gt;http://www.hacksparrow.com/install-mongodb-on-ubuntu.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/4890231587148993297/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/05/instalacion-de-mongodb.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/4890231587148993297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/4890231587148993297'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/05/instalacion-de-mongodb.html' title='Instalación de MongoDB'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-2672716952209223590</id><published>2012-05-23T21:46:00.000-07:00</published><updated>2012-05-23T21:46:11.443-07:00</updated><title type='text'>Reporte #16</title><content type='html'>Ahora hablaremos de MongoDB, para complementarlo con la entrada anterior en la que hablabamos sobre cuales son las ventajas de usarlo. Para ello dejaré la liga a esa entrada sobre MongoDB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Entenderemos que es un shard, un shard es uno o mas servidores en un cluster que son responsables para almacenar subconjunto de datos. Cuando hay más de un server en un shard, cada servidor tiene una copia identica de cada subconjunto de datos como en el ejemplo que verán debajo.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy9OJxhrhHJgPzgWkPnj1Cw1V7F3hMiJnZh8Sxr0TuAIcvnQjFrfvBSgbmiF6yWnpZqcZ1IGN9Tn1gNwAVVz2w-xvaJr4-PdZfOIYCFdcpPykhViHRp63m2p5ZwLN-rGSHUJsECljnbGKh/s1600/Captura+de+pantalla+2012-05-23+a+la%28s%29+20.01.20.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy9OJxhrhHJgPzgWkPnj1Cw1V7F3hMiJnZh8Sxr0TuAIcvnQjFrfvBSgbmiF6yWnpZqcZ1IGN9Tn1gNwAVVz2w-xvaJr4-PdZfOIYCFdcpPykhViHRp63m2p5ZwLN-rGSHUJsECljnbGKh/s1600/Captura+de+pantalla+2012-05-23+a+la%28s%29+20.01.20.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Los datos estan eventualmente distribuidos por shards y MongoDB mueve un subconjunto de datos desde shard a otro.Imagina que nosotros usamos una colección de datos y tomamos como base el campo de nombre.MongoDB divide los datos en pequeñas partes dandoles un rango por ejemplo.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;i&gt;&amp;nbsp;[&quot;a&quot;, &quot;g&quot;]&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para dividir en ciertas partes MongoDB hace cosas como lo siguiente:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
(a, b), donde &lt;b&gt;x&lt;/b&gt;&amp;nbsp; es mayor que &lt;b&gt;a&lt;/b&gt; y menor que &lt;b&gt;b&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
(a, b], donde &lt;b&gt;x&lt;/b&gt; es mayor que &lt;b&gt;a&lt;/b&gt; y menor igual a &lt;b&gt;b&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
[a, b), donde &lt;b&gt;x&lt;/b&gt; es mayor igual que &lt;b&gt;a&lt;/b&gt; y menor que &lt;b&gt;b&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
[a, b], donde &lt;b&gt;x&lt;/b&gt; es mayor igual que &lt;b&gt;a&lt;/b&gt; y menor igual que &lt;b&gt;b&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Ahora digamos que tenemos un rango de [a, h). Entonces decimos que &quot;Carlos&quot;, &quot;Hilario&quot; y &quot;Alejandro&quot; pueden estar dentro del rango por que si comparamos sus iniciales donde a &lt;u&gt;&amp;lt;&lt;/u&gt; a &amp;lt; &quot;Alejandro&quot; &amp;lt; &quot;Carlos&quot; &amp;lt; &quot; Hilario&quot; &amp;lt; h.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
La manera en la que MongoDB distribuye los datos a traves de cada shard para que estos sean responsables de cada rango de datos, por ejemplo si nosotros tenemos 4 shards, asumiendo el ejemplo anterior esto podría distribuirse de la siguiente manera.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAhhyphenhyphen_OQoSpyUxjuDKG2uIGCCQsGzYMTjAsdUQCxUnPHSL6Pn12EZrjlKX2AWzsvppVBRf4IYBYOorIlY1i4QxSyb7P1-OJn6icYsqnowCDujLNzFMaRNV7fxJg97L25tICRNNRYUUrGhk/s1600/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.06.57.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;96&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAhhyphenhyphen_OQoSpyUxjuDKG2uIGCCQsGzYMTjAsdUQCxUnPHSL6Pn12EZrjlKX2AWzsvppVBRf4IYBYOorIlY1i4QxSyb7P1-OJn6icYsqnowCDujLNzFMaRNV7fxJg97L25tICRNNRYUUrGhk/s400/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.06.57.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Supongamos que muchos nombres se registraron entre [a, f), lo cual hizo más el shard 1 por lo tanto tomamos parte del shard 1 al shard 2. Con solamente ajustar los rangos digamos que shard 1 [a ,c) y shard 2 [c, n).&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4H-WPwDTlc7ShXBtNd45KALsknvmRex9rez6l3i9isXaCAm2L40ItaH0S8oT688eIiAhqOWdUV58M00pQcEAOG5dZwgTRuMYrqOu4ZypgC-3IueP_-Ty7fHbpqzUTB6yZpDBEcjcQap6S/s1600/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.13.54.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;206&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4H-WPwDTlc7ShXBtNd45KALsknvmRex9rez6l3i9isXaCAm2L40ItaH0S8oT688eIiAhqOWdUV58M00pQcEAOG5dZwgTRuMYrqOu4ZypgC-3IueP_-Ty7fHbpqzUTB6yZpDBEcjcQap6S/s400/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.13.54.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Supongamos que shard 1 y 2 tienen 500GB de datos, mientras que el 3 y 4 solamente tienen 300GB cada uno de ellos.Suponiendo que hacemos copias en cascada donde movemos 100GB de shard 1 a shard 2, de shard 2 pasamos 200GB a shard 3 y de shard 3 pasamos a shard 4 100GB; en total nosotros movimos 400GB.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6taoWSKV2pbCbVIkEL3jFlIZpujFzeiasI0PIWq4naBvjkKFMqjheZ7fFmvf6YEI5v69Rox9hfSU7EXg0Cd7femAR3pW7frHGvq76G9KOcFs6Lq5kMzu2y7EKygM1w0wBiQ_VJd6Ep14S/s1600/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.22.13.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6taoWSKV2pbCbVIkEL3jFlIZpujFzeiasI0PIWq4naBvjkKFMqjheZ7fFmvf6YEI5v69Rox9hfSU7EXg0Cd7femAR3pW7frHGvq76G9KOcFs6Lq5kMzu2y7EKygM1w0wBiQ_VJd6Ep14S/s320/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.22.13.png&quot; width=&quot;302&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&amp;nbsp; &lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Ahora si agregamos un nuevo shard y 500 GB, entonces tendremos que mover 400GB desde nuestro shard 4 a shard 5, 300GB desde nuestro shard 3 a el shard 4, 200GB desde nuestro shard 2 a shard 3 y 100GB desde nuestro shard 1 al 2. En conclusión nosotros movimos 1TB lo cual no es muy eficiente.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZLSLWRv_BcPJOJnpO9eKIOpqqcr6avnHezL2TTcFxBLn1hL1Ct8iVuKDwWbbEohnmspbAuxl8T11Lpm_OvOg120sLZ9hYJauVJt5f6z8NaGrPr77_0PhFgepkJPRRUFMs20_ZIxVeJ7t-/s1600/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.22.23.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;131&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZLSLWRv_BcPJOJnpO9eKIOpqqcr6avnHezL2TTcFxBLn1hL1Ct8iVuKDwWbbEohnmspbAuxl8T11Lpm_OvOg120sLZ9hYJauVJt5f6z8NaGrPr77_0PhFgepkJPRRUFMs20_ZIxVeJ7t-/s320/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.22.23.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
MongoDB no hace esto, en lugar de ello en cada shard contiene multiples rangos. Ahora consideremos que tenemos el mismo ejemplo que fue utilizado en el primero en donde shard 1 y 2 tiene 500GB, shard 3 y 4 tiene 300GB. Recordando que MongoDB hace que se divida en multiples rangos explicaremos lo siguiente, shard 1 hacemos que cambie a dos rangos donde uno es 400GB donde digamos que [a, d) y 1 de 100GB [d, f). Ahora diremos que hacemos lo mismo con shard 2 donde [f, j) y [j, n). Luego migramos&amp;nbsp; 100GB [d, f) de shard 1 a shard 3 y del shard 2 [j, n) al shard 4. A cada rango de dato le llamamos chunk.Como observarán solamente movimos 200GB.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOlT2r6aXcipEEt5bGPOM-bBrv3cJhVwZtGAWW9T_zL6RQefzZowR68xP6mk9SRMlXZjhwu2G0oUnzvohmVx4ffu_TRqs8LidjbsUbln-aEz7wpDNHq0qYnnMwLHx8fUa6WBBBd36SK6pB/s1600/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.35.23.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;156&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOlT2r6aXcipEEt5bGPOM-bBrv3cJhVwZtGAWW9T_zL6RQefzZowR68xP6mk9SRMlXZjhwu2G0oUnzvohmVx4ffu_TRqs8LidjbsUbln-aEz7wpDNHq0qYnnMwLHx8fUa6WBBBd36SK6pB/s320/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.35.23.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Ahora imaginemos que agregamos otro shard lo único que haremos es partir cada chunk y le daremos partes de ello para que sea de forma distribuida este partirá de cada shard 100GB para que sea un total de movimiento de 400GB.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizkXRfyZVGiVK9jYEPzzpQqhcv2HrYSbSrhQWMx-TtDDr6jozBPRxFgaUpyugJSHdBqR3fO68PQwsBFrvwBjQPELnpQ5Z-2rT4byDdEvApDqJAD4aDb9Uqwi_VPWz7bXvMutQqWtBZI4f-/s1600/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.42.39.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;158&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizkXRfyZVGiVK9jYEPzzpQqhcv2HrYSbSrhQWMx-TtDDr6jozBPRxFgaUpyugJSHdBqR3fO68PQwsBFrvwBjQPELnpQ5Z-2rT4byDdEvApDqJAD4aDb9Uqwi_VPWz7bXvMutQqWtBZI4f-/s320/Captura+de+pantalla+2012-05-23+a+la%28s%29+23.42.39.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Esta es la manera en la que se comporta un shard en MongoDB.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/2672716952209223590/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/05/reporte-16.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/2672716952209223590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/2672716952209223590'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/05/reporte-16.html' title='Reporte #16'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy9OJxhrhHJgPzgWkPnj1Cw1V7F3hMiJnZh8Sxr0TuAIcvnQjFrfvBSgbmiF6yWnpZqcZ1IGN9Tn1gNwAVVz2w-xvaJr4-PdZfOIYCFdcpPykhViHRp63m2p5ZwLN-rGSHUJsECljnbGKh/s72-c/Captura+de+pantalla+2012-05-23+a+la%28s%29+20.01.20.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-7572980682813399731</id><published>2012-05-17T09:48:00.000-07:00</published><updated>2012-05-17T09:49:47.101-07:00</updated><title type='text'>Basic Concepts</title><content type='html'>&lt;div style=&quot;color: blue; text-align: center;&quot;&gt;
&lt;b&gt;Gateway&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
A gateway is a link between two computer programs or systems such as Internet Forums. A gateway acts as a portal between two programs allowing them to share information by communicating between protocols on a computer or between dissimilar computers.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: blue; text-align: center;&quot;&gt;
&lt;b&gt;Reply&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
A reply is respond by some action, performance in computing terms.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: blue; text-align: center;&quot;&gt;
&lt;b&gt;Gossip&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
A gossip protocol is a style of computer-to-computer communication protocol inspired by the form of gossip seen in social networks. Modern distributed systems often use gossip protocols to solve problems that might be difficult to solve in other ways, either because the underlying network has an inconvenient structure, is extremely large, or because gossip solutions are the most efficient ones available.&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Stress&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
Refers to tests that determine the robustness of software by testing beyond the limits of normal operation, commonly put a greater emphasis on robustness, availability, and error handling under a heavy load, than on what would be considered correct behavior under normal circumstances.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sources:&lt;br /&gt;
&lt;br /&gt;
Gateway&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Gateway_%28computer_program%29&quot;&gt;http://en.wikipedia.org/wiki/Gateway_%28computer_program%29&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
Reply&lt;br /&gt;
&lt;a href=&quot;http://dictionary.reference.com/browse/reply&quot;&gt;http://dictionary.reference.com/browse/reply &lt;/a&gt;&lt;br /&gt;
Gossip&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Gossip_protocol&quot;&gt;http://en.wikipedia.org/wiki/Gossip_protocol&lt;/a&gt;&lt;br /&gt;
Stress&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Stress_testing_%28software%29&quot;&gt;http://en.wikipedia.org/wiki/Stress_testing_%28software%29&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/7572980682813399731/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/05/basic-concepts.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/7572980682813399731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/7572980682813399731'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/05/basic-concepts.html' title='Basic Concepts'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-3872123505127397731</id><published>2012-05-17T07:36:00.000-07:00</published><updated>2012-05-17T09:25:22.406-07:00</updated><title type='text'>Tutorial del uso de Subversion parte 2</title><content type='html'>Continuaremos con el tema de Subversion, antes de comenzar dejaré un link del tutorial de la parte 1:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://distparale.blogspot.mx/2012/05/tutorial-del-uso-de-subversion.html&quot;&gt;http://distparale.blogspot.mx/2012/05/tutorial-del-uso-de-subversion.html&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para comenzar hablaremos de &lt;b&gt;revert&lt;/b&gt;, esto nos sirve para recuperar los archivos una versión anterior a la actual de igual manera nos sirve con las carpetas y copias de trabajo.La manera de usarlo es la siguiente:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn revert&lt;/b&gt; &lt;i&gt;Nombre del archivo&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br/&gt;
&lt;b&gt;svn revert -R &lt;/b&gt;&lt;i&gt;Carpeta&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para recuperar carpeta de trabajo, tenemos que estar dentro de ella y hacer lo siguiente:&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;
&lt;b&gt;svn revert -R&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
A veces es necesario ignorar algunas carpetas y archivos sobretodo para los que están encargados se cierto componente del proyecto en el que no están trabajando, para ignorar archivos y carpetas lo que debemos hacer es lo siguiente:&lt;b&gt; &lt;/b&gt;&lt;/div&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn propset svn:ignore&amp;nbsp; &lt;/b&gt;&lt;i&gt;Nombre del archivo&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;svn propset svn:ignore &lt;/b&gt;&lt;i&gt;Nombre de la carpeta&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para guardar los nombres de los archivos y carpetas en un .txt hacemos esto:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br/&gt;
&lt;i&gt; &lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn propset svn:ignore -F &lt;/b&gt;&lt;i&gt;svnignorado.txt&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para ignorar toda la carpeta:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn propedit svn:ignore .&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Siempre necesitamos estar actualizandonos de las modificaciones que se hay hecho en tiempo real, asi que para eso hacemos un &lt;b&gt;update&lt;/b&gt;, la manera de utilizarlo es estando en nuestra carpeta de trabajo necesitamos hacer lo siguiente en la línea de comandos:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn update&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Ahora hablaremos como manejar conflictos, con esto queremos decir que svn entra en conflicto cuando dos usuarios hacen un cambio de algún archivo en la misma parte y en el mismo archivo.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Svn nos provee de varias opciones para resolver este tipo de conflictos y para cada conflicto nos da a escoger las siguientes opciones:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;p&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pospone el arreglado del conflicto, y guarda el archivo con la marca de conflicto.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;df&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Nos muestra el orden en el han sido hechas las modificaciones de los archivos.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;e&amp;nbsp;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Edita el archivo usando tu editor predeterminado.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;r&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hace una marca al conflicto como resuelto, aceptando cualquier edición hecha.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;mf&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ignora todo cambio de la carpeta de trabajo y usa la version del archivo actual que tienes.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;tf&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ignora todos tus cambios y usa la version del archivo actual del que edito el otro usuario.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;l&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Usa una herramienta externa de ordenamiento para ordenar los cambios.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Esto nos puede aparecer cuando hay un conflicto, después de haber hecho un &lt;b&gt;update&lt;/b&gt;: &lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2IuLXbmfAa34xXlbk8Lie6TyKG6tvnnrv_NYzKkkp2D1q0okUJqfm-fLLrdSO6Pr6ABlhxhndHClrnwBczxKIgfefSW6HzzhhWWXKHVZ29QTykhI2GAlsBnOZxyPCRVURx-vG-7G09_hR/s1600/Captura+de+pantalla+2012-05-17+a+la%28s%29+11.00.12.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;186&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2IuLXbmfAa34xXlbk8Lie6TyKG6tvnnrv_NYzKkkp2D1q0okUJqfm-fLLrdSO6Pr6ABlhxhndHClrnwBczxKIgfefSW6HzzhhWWXKHVZ29QTykhI2GAlsBnOZxyPCRVURx-vG-7G09_hR/s640/Captura+de+pantalla+2012-05-17+a+la%28s%29+11.00.12.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&amp;nbsp;Para marcar como conflicto resuelto lo que debemos hacer es lo siguiente:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn resolved &lt;/b&gt;&lt;i&gt;Nombre del archivo&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Nosotros nos gusta tener un control de quienes entran a nuestro proyecto osea quienes hacen &lt;b&gt;commits&lt;/b&gt;.Para ello svn maneja el siguiente comando:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn log&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Y veremos una lista de toda la actividad :&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqaYjm_b8S-uSpqHjsbKoJyZBSxyp8mKHdZGqOCTJ4DSNJ9mr1AWpb1bqevio5f9gfps2TtDPvGUk4LFIsXSztvvYmBcbUBS67hxbmS0C4BEswzYBBQHapf0qJzkjI8jXwsWri9uspDGXg/s1600/Captura+de+pantalla+2012-05-17+a+la%28s%29+11.09.37.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;242&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqaYjm_b8S-uSpqHjsbKoJyZBSxyp8mKHdZGqOCTJ4DSNJ9mr1AWpb1bqevio5f9gfps2TtDPvGUk4LFIsXSztvvYmBcbUBS67hxbmS0C4BEswzYBBQHapf0qJzkjI8jXwsWri9uspDGXg/s640/Captura+de+pantalla+2012-05-17+a+la%28s%29+11.09.37.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Svn maneja un comando llamado blame para saber que personas han modificado cada línea de código de algún cierto archivo y con ello sabemos quién hizo dicho error en el código y llegar a algún acuerdo con el usuario que lo hizo.Para usarlo debemos hacer lo siguiente:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn blame&lt;/b&gt; &lt;i&gt;Nombre del archivo&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Y podríamos ver algo como esto:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji6iDO8kFfhumpioZIL_vVfYusoH20GE778ex8ta4DgUp0qV0tbWR96HObfIYOEOEIpkxZu5Cny4OY0f6XE5A5ymHOYB2bPG2tcOtqi2R4D6SITUyF5umgO5CkcXytUGumYtGF-PqqqYLT/s1600/Captura+de+pantalla+2012-05-17+a+la%28s%29+11.13.34.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji6iDO8kFfhumpioZIL_vVfYusoH20GE778ex8ta4DgUp0qV0tbWR96HObfIYOEOEIpkxZu5Cny4OY0f6XE5A5ymHOYB2bPG2tcOtqi2R4D6SITUyF5umgO5CkcXytUGumYtGF-PqqqYLT/s1600/Captura+de+pantalla+2012-05-17+a+la%28s%29+11.13.34.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
Nominaciones de la Semana:&lt;br /&gt;
&lt;br /&gt;
Gaby por su traducción de algunas entradas&lt;br /&gt;
Emmanuel por su entrada de Benchmark&lt;br /&gt;
Juan Carlos y Rafael por su aportación en el monitoreo del cluster&lt;br /&gt;
Abraham sobre su explicación de el cluster en la medicina&lt;br /&gt;
Victor y Pedro por la explicación de&amp;nbsp; la red.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/3872123505127397731/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/05/tutorial-del-uso-de-subversion-parte-2.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/3872123505127397731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/3872123505127397731'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/05/tutorial-del-uso-de-subversion-parte-2.html' title='Tutorial del uso de Subversion parte 2'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2IuLXbmfAa34xXlbk8Lie6TyKG6tvnnrv_NYzKkkp2D1q0okUJqfm-fLLrdSO6Pr6ABlhxhndHClrnwBczxKIgfefSW6HzzhhWWXKHVZ29QTykhI2GAlsBnOZxyPCRVURx-vG-7G09_hR/s72-c/Captura+de+pantalla+2012-05-17+a+la%28s%29+11.00.12.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-7913724639992194451</id><published>2012-05-09T16:37:00.000-07:00</published><updated>2012-05-17T07:35:22.821-07:00</updated><title type='text'>Tutorial del uso de Subversion parte 1</title><content type='html'>En este tutorial haremos una explicación sobre Subversion en sí este te permite administrar proyectos complejos desde una sola persona a muchas personas, ahora según wikipedia:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #666666;&quot;&gt;
&lt;i&gt;&quot;Subversion es un &lt;a href=&quot;http://es.wikipedia.org/wiki/Revision_Control_System&quot;&gt;sistema de control de versiones&lt;/a&gt;, software libre bajo una licencia de tipo Apache/BSD y se le conoce también como svn por ser el nombre de la herramienta utilizada en la línea de comando.&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;color: #666666;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;color: #666666;&quot;&gt;
&lt;i&gt;Una característica de Subversion es que todo el repositorio tiene un único número de versión que identifica un estado común de todos los archivos del repositorio en un instante determinado del repositoro que se esta trabajando. Se puede acceder al repositorio a través de redes, lo que le permite ser usado por personas que se encuentran en distintas computadoras y con la posibilidad de que varias personas puedan modificar y administrar el mismo conjunto de datos desde sus respectivas ubicaciones fomenta la colaboración.&quot;&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora que hemos entendido que es un Subversion nos iremos a nuestra terminal y teclearemos:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn --version&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt; &lt;/div&gt;
Esto nos sirve para saber si tenemos instalado el Subversion y sí es así, que version tenemos.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW27EEeF49wMjzPmDugP_oI8Rd7iBe44szDuTwOKBQesjd76Vb3ZKO6hV5UYjEWW13_NVaD7qD9-X8Z3TlYHXvMkabNP6x4cXE0DKLtT0LPrgV8Ju7Pdfa60_YWFodJPe_NNf4bIYrfDVk/s1600/Captura+de+pantalla+2012-05-09+a+la%28s%29+17.25.58.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW27EEeF49wMjzPmDugP_oI8Rd7iBe44szDuTwOKBQesjd76Vb3ZKO6hV5UYjEWW13_NVaD7qD9-X8Z3TlYHXvMkabNP6x4cXE0DKLtT0LPrgV8Ju7Pdfa60_YWFodJPe_NNf4bIYrfDVk/s1600/Captura+de+pantalla+2012-05-09+a+la%28s%29+17.25.58.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
En caso de no tenerlo instalado debemos de teclear los siguiente.&lt;br /&gt;
Para Mac OS X:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Con MacPorts &lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;sudo port install subversion&lt;/b&gt;&lt;/div&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Con Fink&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sudo fink install svn-client&lt;/b&gt;&lt;/div&gt;
Para Ubuntu:&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; sudo apt-get install subversion&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Para comenzar a crear un repositorio e inicializarlo necesitamos hacer lo siguiente.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;mkdir /var/share/svn/Repositorio&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svnadmin create /var/share/svn/Repositorio&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
En la cual creamos una carpeta llamada Repositorio, para después crear con los comandos de Subversion un nuevo repositorio para nuestro sistema de control de versiones.Tiene que estar dentro de &lt;b&gt;/var/share/~&lt;/b&gt; para que este pueda ser compartido con los usuarios.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Una vez hecho lo anterior pasaremos a modificar dentro de la carpeta creada encontraremos otra carpeta llamada &lt;b&gt;conf&lt;/b&gt;, donde encontraremos a &lt;b&gt;svnserve.conf &lt;/b&gt;el cual descomentaremos lo siguiente.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;anon-access=read&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Acceso anónimo con permiso a lectura&lt;br /&gt;auth-access=write&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Acceso de autentificación con permiso a escritura&lt;br /&gt;realm= My First Repository&amp;nbsp; //Nombre del repositorio&lt;br /&gt;password-db=passwd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Toma password de default&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5vCbEYycqq6lzJAV8c6J3PYArHv8ZMTqockbPTqsSypxzA2jfaDgXuvcUAu_D98ivE7CpvFS59RhLhFc5kuVcXqBQNpW9UVlQKG3aGRcWw23jVZWIUP2XjWuyd7Eqa-3CEeoaeCL5Kh6b/s1600/Captura+de+pantalla+2012-05-09+a+la%28s%29+18.09.07.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5vCbEYycqq6lzJAV8c6J3PYArHv8ZMTqockbPTqsSypxzA2jfaDgXuvcUAu_D98ivE7CpvFS59RhLhFc5kuVcXqBQNpW9UVlQKG3aGRcWw23jVZWIUP2XjWuyd7Eqa-3CEeoaeCL5Kh6b/s1600/Captura+de+pantalla+2012-05-09+a+la%28s%29+18.09.07.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
Con lo visto, tenemos que resaltar que ya no es necesario entrar a esta carpeta, ya que existe un comando llamado &lt;b&gt;svn checkout&lt;/b&gt; que nos importa en una carpeta que hayamos creado un proyecto, esto lo veremos mas adelante.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Subversion usa los directorios como unidad básica de organización, el cual divide el repositorio en diferentes proyectos.Por conveniencia todas las subversiones de los proyectos deben de tener directorios llamados &lt;b&gt;trunk&lt;/b&gt;(tronco),&lt;b&gt; tags&lt;/b&gt;(etiquetas) y&lt;b&gt; branches&lt;/b&gt;(ramas).Como por ejemplo:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;/Proyecto1/trunk&lt;/li&gt;
&lt;li&gt;/Proyecto1/tags&lt;/li&gt;
&lt;li&gt;/Proyecto1/branches&lt;/li&gt;
&lt;li&gt;/Proyecto2/trunk&lt;/li&gt;
&lt;li&gt;/Proyecto2/tags&lt;/li&gt;
&lt;li&gt;/Proyecto2/branches &lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Donde &lt;b&gt;trunk&lt;/b&gt; es un directorio donde se hacen todas las acciones principales del desarrollo y es el directorio que vas a verificar si tu quieres trabajar en el proyecto.&lt;br /&gt;
&lt;br /&gt;
El directorio &lt;b&gt;tags&lt;/b&gt; es usado para capturar pequeñas capturas del proyecto, por ejemplo cuando liberan una nueva producción de algún tipo de componente, el equipo etiquetará el código que será liberado.Esto ayuda al equipo&amp;nbsp; cuando encuentra un error en el código y encontrar la posible solución a ello.&lt;br /&gt;
&lt;br /&gt;
El directorio &lt;b&gt;branches &lt;/b&gt;es usado cuando quieres seguir diferentes líneas de desarrollo, el desarrollo en esta carpeta se centra en el desarrollo estable mientras que en la carpeta de &lt;b&gt;trunk &lt;/b&gt;se utiliza para desarrollo de nuevas funciones.&lt;br /&gt;
&lt;br /&gt;
Para crear un directorio base para nuestro proyecto hacemos lo siguiente.&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn mkdir /usr/share/svn/proyecto&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para crear las carpetas &lt;b&gt;trunk&lt;/b&gt;, &lt;b&gt;tags&lt;/b&gt; y &lt;b&gt;branches&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&amp;nbsp; svn mkdir /usr/share/svn/proyecto/trunk&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn mkdir /usr/share/svn/proyecto/tags&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; svn mkdir /usr/share/svn/proyecto/branches&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para importar algún directorio de un proyecto ya existente hacemos esto.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn import URL o Ruta&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
Para empezar con una copia de un proyecto hacemos.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn checkout URL o Ruta&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
Para ver el estado de cada archivo necesitamos saber que es cada letra de indicación, entre las que tiene Subversion son las siguientes:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;A&lt;/b&gt;&amp;nbsp; Se agregó en tu copia de trabajo.&lt;br /&gt;
&lt;b&gt;C&lt;/b&gt;&amp;nbsp; Existe un conflicto por un update o una combinación.&lt;br /&gt;
&lt;b&gt;D&amp;nbsp;&lt;/b&gt; Eliminado en tu copia de trabajo.&lt;br /&gt;
&lt;b&gt;G&amp;nbsp;&lt;/b&gt; Combino cambios desde un repositorio&lt;br /&gt;
&lt;b&gt;I&amp;nbsp;&lt;/b&gt;&amp;nbsp;&amp;nbsp; Ignorado desde tu copia de trabajo.&lt;br /&gt;
&lt;b&gt;M&lt;/b&gt;&amp;nbsp; Modificado en tu copia de trabajo.&lt;br /&gt;
&lt;b&gt;R&lt;/b&gt;&amp;nbsp;&amp;nbsp; Reemplazado en tu copia de trabajo.&lt;br /&gt;
&lt;b&gt;?&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; No está bajo en control de versiones.&lt;br /&gt;
&lt;b&gt;!&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Se olvido algo desde tu copia de trabajo o esta incompleto&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
Para ver que archivos fueron cambiados en tu copia de trabajo.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn status&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;u&gt;*Tienes que estar dentro de la carpeta donde tienes la carpeta de trabajo.&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Y veremos algo como esto.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtkMqQzEscvtZ16_YaaO29_4WPBxq7jRiDbm2gsckQOyUuYcn52fE9xaNozsCnCZ7jISXA64vg4USvvYF4l-d0PZbtV5MgO3leXhWXAA4BF8F-DtNNwemE7bNQNw-EWxXISf9YqZfCslam/s1600/Captura+de+pantalla+2012-05-10+a+la%28s%29+09.44.41.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtkMqQzEscvtZ16_YaaO29_4WPBxq7jRiDbm2gsckQOyUuYcn52fE9xaNozsCnCZ7jISXA64vg4USvvYF4l-d0PZbtV5MgO3leXhWXAA4BF8F-DtNNwemE7bNQNw-EWxXISf9YqZfCslam/s1600/Captura+de+pantalla+2012-05-10+a+la%28s%29+09.44.41.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Donde se dice que se agregó &lt;b&gt;hola.py&lt;/b&gt; y &lt;b&gt;prueba&lt;/b&gt; en la copia de trabajo.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
Para ver como nuestros archivos han cambiado.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn diff&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;u&gt;*De igual manera tienes que estar dentro de la carpeta de trabajo.&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Y veremos algo como esto.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG49iuLHPT35FVNt6kJ7vSm2xqupwxpgNUQT-xE0WNAitRHQUBRm1CMMtp0ny9Szu_lnB1ZxWB37x3W-rqwzFdOX7oCpE21wKUtXKnUwl3Bm4qMypYwoPQ_UUByWD4O85CbL_1zMfQRZK9/s1600/Captura+de+pantalla+2012-05-10+a+la%28s%29+10.06.04.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgG49iuLHPT35FVNt6kJ7vSm2xqupwxpgNUQT-xE0WNAitRHQUBRm1CMMtp0ny9Szu_lnB1ZxWB37x3W-rqwzFdOX7oCpE21wKUtXKnUwl3Bm4qMypYwoPQ_UUByWD4O85CbL_1zMfQRZK9/s1600/Captura+de+pantalla+2012-05-10+a+la%28s%29+10.06.04.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Donde los &quot;+&quot; indican que se han agregado algunas líneas nuevas al archivo, el &quot;-&quot; indica que han sido removido esas líneas.Sí huvieron cambios severos veremos una gran cantidad de mas y menos.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Ahora para enviar un archivo modificado hacemos lo siguiente.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn add archivo&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;u&gt;&lt;b&gt;*Tenemos que estar en la carpeta de trabajo.&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para hacer un update de las modificaciones hechas hacemos lo siguiente.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn commit archivo&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Y veremos algo como esto.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipvAD1hCQ-hxJpmMiG7W3hL25kgkMKDRROcJEVmrvt7taF950p4AvYvm6ySqPpH4h5q_EeCtZoQZUir7Udm1qGP9VqWLInVfiEeenXNbVd4XLeGdXZNnEUbMhyphenhyphenvuELw5PSpE0TZhD_H28S/s1600/Captura+de+pantalla+2012-05-10+a+la%28s%29+10.19.24.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipvAD1hCQ-hxJpmMiG7W3hL25kgkMKDRROcJEVmrvt7taF950p4AvYvm6ySqPpH4h5q_EeCtZoQZUir7Udm1qGP9VqWLInVfiEeenXNbVd4XLeGdXZNnEUbMhyphenhyphenvuELw5PSpE0TZhD_H28S/s1600/Captura+de+pantalla+2012-05-10+a+la%28s%29+10.19.24.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para eliminar algún archivo.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn delete archivo&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Y después hacemos un &quot;&lt;b&gt;svn commit archivo&lt;/b&gt;&quot; como en lo anterior.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivAkZcJbfkb1b4nho71qWzJoek40aCTQh0mhax06tERGkWJjION-AwckUQX1FOPDqvXN7pNzeNm1N-3HViK5q9FM53H7sRBCpsvg5UFdL4V4NkLNRMzObCO2t3zfQBNgqc6DD_QDCmeNmt/s1600/Captura+de+pantalla+2012-05-10+a+la%28s%29+10.21.35.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivAkZcJbfkb1b4nho71qWzJoek40aCTQh0mhax06tERGkWJjION-AwckUQX1FOPDqvXN7pNzeNm1N-3HViK5q9FM53H7sRBCpsvg5UFdL4V4NkLNRMzObCO2t3zfQBNgqc6DD_QDCmeNmt/s1600/Captura+de+pantalla+2012-05-10+a+la%28s%29+10.21.35.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para renombrar un archivo.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn mv archivo archivomodificado &lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Luego de eso hacemos un &quot;&lt;b&gt;svn commit archivo&lt;/b&gt;&quot;.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOpkZvSZydKDmtBmal99wwCgXhiYAY5OzPQzt24DVqJbfjORbUi-z9whbu5oQ94rLn2CHG1C-kfVFmSXK7qdeoN_f77OWZkeWbKqmOPGpE5F1f2RQI2-WJcyRQSt0FTAT3gXpOnfe2m5SA/s1600/Captura+de+pantalla+2012-05-10+a+la%28s%29+10.28.06.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOpkZvSZydKDmtBmal99wwCgXhiYAY5OzPQzt24DVqJbfjORbUi-z9whbu5oQ94rLn2CHG1C-kfVFmSXK7qdeoN_f77OWZkeWbKqmOPGpE5F1f2RQI2-WJcyRQSt0FTAT3gXpOnfe2m5SA/s1600/Captura+de+pantalla+2012-05-10+a+la%28s%29+10.28.06.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para modificar un archivo.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;svn mv ruta/proyecto/algo.py src/app/proyecto/ &lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Y después hacemos un &lt;b&gt;commit&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Para la siguiente semana hablaremos sobre el uso de Rever, Blame, Manejar conflictos y hacer update.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Nominación de la semana:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
-Sergio Hernández apoyo moral&lt;br /&gt;
-Pedro por su entrada sobre Brenchmarks&lt;br /&gt;
-Victor por su intento de Geekbench&lt;br /&gt;
-Alex por su explicación de Malla&lt;br /&gt;
-Avendaño por su explicación Malla &lt;br /&gt;
-Obed por su expliación de PVM&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/7913724639992194451/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/05/tutorial-del-uso-de-subversion.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/7913724639992194451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/7913724639992194451'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/05/tutorial-del-uso-de-subversion.html' title='Tutorial del uso de Subversion parte 1'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW27EEeF49wMjzPmDugP_oI8Rd7iBe44szDuTwOKBQesjd76Vb3ZKO6hV5UYjEWW13_NVaD7qD9-X8Z3TlYHXvMkabNP6x4cXE0DKLtT0LPrgV8Ju7Pdfa60_YWFodJPe_NNf4bIYrfDVk/s72-c/Captura+de+pantalla+2012-05-09+a+la%28s%29+17.25.58.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-8062737458051997239</id><published>2012-05-03T08:01:00.000-07:00</published><updated>2012-05-03T08:18:59.263-07:00</updated><title type='text'>Reporte #13</title><content type='html'>&lt;div style=&quot;text-align: left;&quot;&gt;
Se vió sobre MongoDB que es un sistema de base de datos multiplataforma orientado a documentos, de esquema libre, con esto nos referimos a que puede tener un esquema de datos diferente, con atributos o columnas que no tienen por que repetirse de un registro a otro.Una de las principales características que más destaca de MongoDB son su velocidad y su sencillo sistema de consulta.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
MongoDB tiene un método llamado Sharding que es usado para una gran colección de datos en varios servidores, que comúnmente lo llamamos clúster.Ahora la gran diferencia entre los demás tipos de esquemas que se usan comúnmente es que en MongoDB hace casi todo de forma automática, una vez que le dices a MongoDB que distribuya datos, el mismo se ocupará de mantener un cierto equilibrio entre los datos de los servidores.Una vez que agregas un nuevo servidor al clúster, MongoDB se encargará de que reciba la misma cantidad de datos.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
Sharding fue diseñado para cumplir con tres objetivos:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Hacer el clúster &quot;invisible&quot;&lt;/b&gt;.Con esto queremos decir sí hacemos un programa, que no nos interesa que este tenga idea con quien se comunica solamente queremos darle la información de la consulta.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
MongoDB viene con un proceso de enrutamiento especial llamado mongos, este reenvía las solicitudes al servidor correcto o los servidores del clúster, para luego reunir sus respuestas y enviarlas de vuelta al cliente.De esta manera se cumple ese objetivo, el cliente no tiene que saber que se está hablando hacía un clúster o un solo servidor.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Hacer el clúster siempre disponible para lectura y modificaciones.&lt;/b&gt;Habrá veces en el que un clúster no te podrá garantizar que siempre va estar disponible, sin embargo nunca debería de haber un momento en que los usuarios no pueden leer o escribir datos.El clúster deberá permitir a tantos nodos como sea posible para fallar antes de que su funcionalidad notablemente degrade.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
MongoDB nos asegura el máximo tiempo en un par de maneras diferentes, cada parte de un clúster puede y debe tener por lo menos algunos procesos redundantes que se ejecunten en otros equipos de manera que si un proceso, máquina ó centro de datos se cae los otros inmediatamente responden y se mantienen adelante.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Permitir al clúster crecer fácilmente&lt;/b&gt;.Con esto nos referimos a que el clúster necesitará más espacio o recursos y nosotros deberíamos ser capaz de agregarla.MondoDB nos permite aumentar la capacidad de todo lo que se necesita, e incluso eliminar.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Vistos los anteriores objetivos nos daremos cuenta que un clúster debe ser fácil de usar y administrar.MongoDB nos permite hacer que nuestras aplicaciones crezcan de forma robusta y sencilla.&lt;/div&gt;
&lt;br /&gt;
Nominación:&lt;br /&gt;
Alex V. por su explicación de algunos puntos a tomar al momento de programar en Cuda&lt;br /&gt;
Victor por su explicación de procesadores vectoriales&lt;br /&gt;
Raúl por su explicación a fondo de supercomputadoras&lt;br /&gt;
Pepe Gzz. por su explicación de OpenPBS &lt;br /&gt;
&lt;br /&gt;
Fuente:&lt;br /&gt;
&lt;br /&gt;
¿Qué es MongoDB?&lt;br /&gt;
http://www.genbetadev.com/bases-de-datos/una-introduccion-a-mongodb&lt;br /&gt;
&lt;br /&gt;
Libro Scaling MondoDB O&#39;Reilly por Kristina Chodorow</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/8062737458051997239/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/05/reporte-13.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/8062737458051997239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/8062737458051997239'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/05/reporte-13.html' title='Reporte #13'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-7701442080882009541</id><published>2012-04-30T10:23:00.003-07:00</published><updated>2012-04-30T10:23:46.198-07:00</updated><title type='text'>Reporte #12</title><content type='html'>Esta semana investigué sobre dRuby que es un sistema de objetos distribuidos, en el cual es mas preciso para la llamada remota de metodos(RMI).Tambien te permite facilmente llamar objetos en otros procesos.&lt;br /&gt;
&lt;br /&gt;
La gran diferencia que existe entre dRuby y Ruby es en que es relativamente muy facil usar un sistema de objetos distribuido en dRuby.Por ejemplo en Ruby tu puedes usar un método con una secuencia mientras que en dRuby puedes elegir de manera dinamica como enviar un objeto de manera remota, y con esto tu no tienes que describir una interfaz o un método de transportación.&lt;br /&gt;
&lt;br /&gt;
dRuby puede cambiar la manera de desarrollar nuestras apps ya que toma importancia de la capa compleja de comunicacion entre procesos, y una manera fácil de comenzar a escribir.&lt;br /&gt;
&lt;br /&gt;
Aquí un código ejemplo&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cliente.rb&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-8ypYG_vqrntSx-YtIN9xOZc4-UCfddLClMK6fUQwHR0MN4xsHx4XQW0B4wa2L6ksoxzU8S1U5RDvV5wxGGoPFbtRXj7S1mGTjihBTRsmv0VA30a4wY8D09hBUJSpuc71cysXGMik_zVH/s1600/Screen+shot+2012-04-30+at+12.16.49+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-8ypYG_vqrntSx-YtIN9xOZc4-UCfddLClMK6fUQwHR0MN4xsHx4XQW0B4wa2L6ksoxzU8S1U5RDvV5wxGGoPFbtRXj7S1mGTjihBTRsmv0VA30a4wY8D09hBUJSpuc71cysXGMik_zVH/s1600/Screen+shot+2012-04-30+at+12.16.49+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;Server.rb&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOv3_SulpJyIXuGUPtZl5NVb4UiYh4UpW_ZUxosQhoe6dNtXNX8eitXM7ySSXcJG8Gws0TGsx8KrXzwU-_ap6Pdv45UxWu-3cUMXwVEzDOfaMmu7gGax5gUtyOT8L7_AgFqNQxs73ol8tu/s1600/Screen+shot+2012-04-30+at+12.16.40+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOv3_SulpJyIXuGUPtZl5NVb4UiYh4UpW_ZUxosQhoe6dNtXNX8eitXM7ySSXcJG8Gws0TGsx8KrXzwU-_ap6Pdv45UxWu-3cUMXwVEzDOfaMmu7gGax5gUtyOT8L7_AgFqNQxs73ol8tu/s1600/Screen+shot+2012-04-30+at+12.16.40+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
Lo que hace el cliente es llamar al método get_current_time del servidor y con ello obtiene el tiempo actual como resultado de ello.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghzB2LlrSghwK6MF2-W5RHAjV_XjpFlU1YxdwruIXRMmle3Lj2Jo1FTQveXTDPuaXLzyZMQ8YFzxd44OrGT8LIOuB92svsTZo8bg3yQ5HTEnAPt488NinWA_-lMRi9WQ99agsBpqeJdajE/s1600/Screen+shot+2012-04-30+at+12.20.58+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghzB2LlrSghwK6MF2-W5RHAjV_XjpFlU1YxdwruIXRMmle3Lj2Jo1FTQveXTDPuaXLzyZMQ8YFzxd44OrGT8LIOuB92svsTZo8bg3yQ5HTEnAPt488NinWA_-lMRi9WQ99agsBpqeJdajE/s1600/Screen+shot+2012-04-30+at+12.20.58+PM.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Está semana nomino a Juan Carlos por escribir los scripts que están siendo de gran ayuda.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Fuentes:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Información&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://pragprog.com/book/sidruby/the-druby-book&quot;&gt;http://pragprog.com/book/sidruby/the-druby-book&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Código ejemplo&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.java-samples.com/showtutorial.php?tutorialid=1112&quot;&gt;http://www.java-samples.com/showtutorial.php?tutorialid=1112&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/7701442080882009541/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/04/reporte-12.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/7701442080882009541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/7701442080882009541'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/04/reporte-12.html' title='Reporte #12'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-8ypYG_vqrntSx-YtIN9xOZc4-UCfddLClMK6fUQwHR0MN4xsHx4XQW0B4wa2L6ksoxzU8S1U5RDvV5wxGGoPFbtRXj7S1mGTjihBTRsmv0VA30a4wY8D09hBUJSpuc71cysXGMik_zVH/s72-c/Screen+shot+2012-04-30+at+12.16.49+PM.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-6074956468257741946</id><published>2012-04-19T10:55:00.004-07:00</published><updated>2012-04-19T10:55:50.383-07:00</updated><title type='text'>Reporte</title><content type='html'>En está semana se investigó sobre MapReduce que este es un framework 
introducido por Google para dar soporte a la computación paralela sobre 
grandes colecciones de datos en un gran número de computadoras.El nombre
 del framework está inspirado en los nombres de dos importantes métodos,
 macros o funciones en programación funcional:&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Map y Reduce&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Las
 funciones Map y Reduce están definidas ambas con respecto a datos 
estructurados en pares (clave, valor). Map toma uno de estos pares de 
datos con un tipo en un dominio de datos, y devuelve una lista de pares 
en un dominio diferente:&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Map(k1,v1) -&amp;gt; list(k2,v2)&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
La función de mapeo es aplicada en paralelo para cada ítem en la entrada de datos.&lt;br /&gt;
&lt;br /&gt;
Esto
 produce una lista de pares (k2,v2) por cada llamada. Después de eso, el
 framework de MapReduce junta todos los pares con la misma clave de 
todas las listas y los agrupa, creando un grupo por cada una de las 
diferentes claves generadas.&lt;br /&gt;
&lt;br /&gt;
La función reduce es aplicada en paralelo para cada grupo, produciendo una colección de valores para cada dominio:&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Reduce(k2, list (v2)) -&amp;gt; list(v2)&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;
Cada llamada a Reduce típicamente produce un valor v2 o una llamada vacía, aunque una llamada puede retornar más de un valor.&lt;br /&gt;
&lt;br /&gt;
El
 retorno de todas esas llamadas se recoge como la lista de resultado 
deseado.&amp;nbsp; Por lo tanto, el framework MapReduce transforma una lista de 
pares (clave, valor) en una lista de valores. Este comportamiento es 
diferente de la combinación &quot;map and reduce&quot; de programación funcional, 
que acepta una lista arbitraria de valores y devuelve un valor único que
 combina todos los valores devueltos por mapa.&lt;br /&gt;
&lt;br /&gt;
Busqué algún libro que me pueda ayudar a entender estos conceptos y lo más factible que encontré fue este:&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&amp;nbsp;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span id=&quot;btAsinTitle&quot;&gt;Writing and Querying MapReduce Views in CouchDB&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
http://www.amazon.com/exec/obidos/tg/detail/-/1449303129 &lt;/div&gt;
&lt;br /&gt;
Mi nominación de la semana es Abraham, ya que habló sobre Web Crawler y algunos conceptos no los sabía.&lt;br /&gt;
&lt;br /&gt;
Fuente:&lt;br /&gt;
&amp;nbsp;&lt;a href=&quot;http://es.wikipedia.org/wiki/MapReduce&quot;&gt;MapReduce&lt;/a&gt; : Wikipedia</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/6074956468257741946/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/04/reporte.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/6074956468257741946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/6074956468257741946'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/04/reporte.html' title='Reporte'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-3553452599570431381</id><published>2012-04-19T10:23:00.001-07:00</published><updated>2012-04-19T10:23:17.128-07:00</updated><title type='text'>Conceptos Básicos</title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Unidad&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Denominación que reciben los disco duros, las disqueteras, los lectores 
de cd-rom y DVD, y en general, todos los puntos de almacenamiento de 
datos. La posibilidad de incorporar varios discos duros en un mismo 
ordenador ocasiona que los programas, al instalarlos, ofrezcan la opción
 de elegir la unidad de disco.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Priority&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
La prioridad es un dato definido por el usuario que determina la 
importancia de cada recurso que un usuario está usando para 
acceder al servidor.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Access&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Es el resultado positivo de una autentificación, para que el acceso dure
 un tiempo predeterminado, el servidor guarda en el cliente una cookie, 
esta permitirá que el usuario pueda entrar a su cuenta en el servidor 
hasta que esta caduque.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Stream&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Es la distribución de multimedia a través de una red de computadoras de manera que el usuario consume el producto al mismo tiempo que se descarga. La palabra se refiere a que se trata de una corriente continua (sin interrupción).&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Virtual&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Es un sistema tecnológico, basado en el empleo de ordenadores y otros dispositivos, cuyo fin es producir una apariencia de realidad que permita al usuario tener la sensación de estar presente en ella.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Display&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Dispositivo de ciertos aparatos electrónicos que permite mostrar 
información al usuario, creado a partir de la aparición de calculadoras,
 cajas registradoras e instrumentos de medida electrónicos en los que 
era necesario hacerlo.&lt;br /&gt;
&lt;br /&gt;
Fuente:&lt;br /&gt;
&lt;a href=&quot;http://www.ondata.es/recuperar/glosario.htm&quot;&gt;http://www.ondata.es/recuperar/glosario.htm&lt;/a&gt;&lt;br /&gt;
Wikipedia</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/3553452599570431381/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/04/conceptos-basicos.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/3553452599570431381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/3553452599570431381'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/04/conceptos-basicos.html' title='Conceptos Básicos'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-4258333926258248905</id><published>2012-03-29T10:13:00.000-07:00</published><updated>2012-03-29T10:13:55.845-07:00</updated><title type='text'>Report  #8</title><content type='html'>I make a research about How to replicate data from a server to another server, and I found some things interesting like Couchdb.&lt;br /&gt;
&lt;br /&gt;
Couchdb is plugged into the web, all you could use HTTP for 
creating and making queries (GET/PUT/POST/DELETE...), and it&#39;s RESTful, 
plus the fact that it&#39;s portable and great for peer to peer sharing and provides a different model for data storage than a traditional 
relational database in that it does not represent data as rows within 
tables, instead it stores data as &quot;documents&quot; in JSON format. &lt;br /&gt;
&lt;br /&gt;
We can handling using python like in this tutorial that explain How to make a replication I found here:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.bytexbyte.com/simple-couchdb-replication-in-python&quot;&gt;http://www.bytexbyte.com/simple-couchdb-replication-in-python&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
The objective that I have to this week and the next is try to make a Demo or something.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
To start I&#39;ll type in the wiki how to install the enviroment.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
My nomination for this week is:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&amp;nbsp; Mr. X&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/4258333926258248905/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/03/report-8.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/4258333926258248905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/4258333926258248905'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/03/report-8.html' title='Report  #8'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-8130419142434567277</id><published>2012-03-01T09:18:00.001-08:00</published><updated>2012-03-01T09:27:16.393-08:00</updated><title type='text'>Basic Concepts</title><content type='html'>&lt;b&gt;Signal&lt;/b&gt;&lt;br /&gt;
Signal or Signals are an operating system feature that provide a means of notifying your program of an event, and having it handled asynchronously.

&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Wait&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;Just wait for synchronization operation something like lock acquisition to complete a task.

&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Address&lt;/b&gt;&lt;br /&gt;
It&#39;s the direction where a file or something is allocated.

&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Processor&lt;/b&gt;&lt;br /&gt;
A processor is the logic circuitry that responds to and processes the basic instructions that drive a computer.

&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Thread&lt;/b&gt;&lt;br /&gt;
A Thread is a concurrent unit of execution. It has its own call stack for methods being invoked, their arguments and local variables.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Distributed&lt;/b&gt;&lt;br /&gt;
Distributed computing is a field of computer science that studies distributed systems.A distributed system consists of multiple autonomous computers that communicate through a computer network. The computers interact with each other in order to achieve a common goal. A computer program that runs in a distributed system is called a distributed program, and distributed programming is the process of writing such programs.

&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Quality&lt;/b&gt;&lt;br /&gt;
Quality software is reasonably bug-free, delivered on time and within budget, meets requirements and/or expectations, and is maintainable.&lt;br /&gt;
&amp;nbsp;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Synchronization&lt;/b&gt;&lt;br /&gt;
Synchronization refers to one of two distinct but related concepts: synchronization of processes, and synchronization of data. Process synchronization refers to the idea that multiple processes are to join up or handshake at a certain point, so as to reach an agreement or commit to a certain sequence of action. Data synchronization refers to the idea of keeping multiple copies of a dataset in coherence with one another, or to maintain data integrity.

&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Port&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;A port is an application-specific or process-specific software construct serving as a communications endpoint in a computer&#39;s host operating system.It&#39;s associated with an IP address of the host, as well as the type of protocol used for communication.

&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;User&lt;/b&gt;&lt;br /&gt;
A user is an agent, either a human agent (end-user) or software agent, who uses a computer or network service.

&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Event&lt;/b&gt;&lt;br /&gt;
A software message indicating that something has happened, such as a keystroke or mouse click.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Transfer&lt;/b&gt;&lt;br /&gt;
Transfers per second and its more common derivatives gigatransfers per second (abbreviated GT/s) and megatransfers per second (MT/s) are informal language that refer to the number of operations transferring data that occur in each second in some given data-transfer channel.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Source:&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;http://www.doughellmann.com/PyMOTW/signal/&quot;&gt;www.doughellmann.com/PyMOTW/signal/&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;http://people.csail.mit.edu/rinard/osnotes/h6.html&quot;&gt;people.csail.mit.edu/rinard/osnotes/h6.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://searchcio-midmarket.techtarget.com/.../processor%20&quot;&gt;searchcio-midmarket.techtarget.com/.../processor&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://developer.android.com/reference/.../Thread.html%20&quot;&gt;developer.android.com/reference/.../Thread.html &lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Distributed_computing&quot;&gt;http://en.wikipedia.org/wiki/Distributed_computing&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://bazman.tripod.com/what_testing.html#what_quality&quot;&gt;http://bazman.tripod.com/what_testing.html#what_quality&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Synchronization_%28computer_science%29&quot;&gt;http://en.wikipedia.org/wiki/Synchronization_%28computer_science%29&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Port_%28computer_networking%29&quot;&gt;http://en.wikipedia.org/wiki/Port_%28computer_networking%29&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/User_%28computing%29&quot;&gt;en.wikipedia.org/wiki/User_(computing)&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Transfer_%28computing%29&quot;&gt;http://en.wikipedia.org/wiki/Transfer_%28computing%29&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/8130419142434567277/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/03/basic-concepts.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/8130419142434567277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/8130419142434567277'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/03/basic-concepts.html' title='Basic Concepts'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-1205130263231143128</id><published>2012-03-01T08:14:00.000-08:00</published><updated>2012-03-01T08:14:33.064-08:00</updated><title type='text'>My report #5</title><content type='html'>I explained what was happening in the code that was made in C, using the library MPI.Because we just had the code and nobody knew what was happening.&lt;br /&gt;
&lt;br /&gt;
This is the link:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://elisa.dyndns-web.com/progra/MPI&quot;&gt;http://elisa.dyndns-web.com/progra/MPI&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Now I don&#39;t have a clear idea what to do next week, any suggestions will be welcome.</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/1205130263231143128/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/03/my-report-5.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/1205130263231143128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/1205130263231143128'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/03/my-report-5.html' title='My report #5'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-9007811387824878281</id><published>2012-02-23T09:29:00.001-08:00</published><updated>2012-02-23T09:42:32.434-08:00</updated><title type='text'>Examples with CUDA</title><content type='html'>The first example that we will see is a vectors sum using CUDA, where we have two lists of numbers where we sum the elements from each list and store the result in a third list.&lt;br /&gt;
&lt;br /&gt;
&lt;span id=&quot;goog_404219749&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_404219750&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-K0QUicwhBxSPgo8N_FXKt75Ha3k0rqpOS2sRk1J2xZhBew1AoobaS2v984mpZ0hC4PmdYoX2SW2yNqULOKM9R-OKHWeoosfCSnqyKfKKUa4wXedayYXonl1xQpIAP2lOQNryTd22oZnq/s1600/Captura+de+pantalla+2012-02-23+a+la%28s%29+10.29.14.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-K0QUicwhBxSPgo8N_FXKt75Ha3k0rqpOS2sRk1J2xZhBew1AoobaS2v984mpZ0hC4PmdYoX2SW2yNqULOKM9R-OKHWeoosfCSnqyKfKKUa4wXedayYXonl1xQpIAP2lOQNryTd22oZnq/s320/Captura+de+pantalla+2012-02-23+a+la%28s%29+10.29.14.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Now we have the source code where we are using CPU.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnt3FkZYMiLeT0ZEGmVQ95vFLDYtjRlFlqs0gyxZewLP0TrRR_U6D0MBUQCkSXwXcqrN6f_WRLhyphenhyphenwJqILNX4tF0FNhPpvAx3rt0GZq_QLpw-tFNgtF37a5GyMhEkzfDzkD14vvgWnlEvgC/s1600/Captura+de+pantalla+2012-02-23+a+la%28s%29+10.26.24.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnt3FkZYMiLeT0ZEGmVQ95vFLDYtjRlFlqs0gyxZewLP0TrRR_U6D0MBUQCkSXwXcqrN6f_WRLhyphenhyphenwJqILNX4tF0FNhPpvAx3rt0GZq_QLpw-tFNgtF37a5GyMhEkzfDzkD14vvgWnlEvgC/s1600/Captura+de+pantalla+2012-02-23+a+la%28s%29+10.26.24.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
As you saw in the comments that program is just simple we add always the library &quot;book.h&quot; which we need to use all the features of CUDA, and I took a screenshot of the results.&lt;br /&gt;
&lt;br /&gt;
[Image of results]&lt;br /&gt;
&lt;br /&gt;
Now we have the source code where we are using GPU.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC1C8Yd_7Ra5cTHQ4YwXthcKzsVS8aTPtu9d5xCsCGFm2XD6uFaMHeldxg5g2snhw69eAi3dzzLUALiU1maeOM5NkhZlO0ap878UL0E9SW_JiViZ_f9lq6pn-NB9C7ph6bUv924ajBEoVz/s1600/Captura+de+pantalla+2012-02-23+a+la%28s%29+11.41.28.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC1C8Yd_7Ra5cTHQ4YwXthcKzsVS8aTPtu9d5xCsCGFm2XD6uFaMHeldxg5g2snhw69eAi3dzzLUALiU1maeOM5NkhZlO0ap878UL0E9SW_JiViZ_f9lq6pn-NB9C7ph6bUv924ajBEoVz/s1600/Captura+de+pantalla+2012-02-23+a+la%28s%29+11.41.28.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Editing...&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/9007811387824878281/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/02/examples-with-cuda.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/9007811387824878281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/9007811387824878281'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/02/examples-with-cuda.html' title='Examples with CUDA'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-K0QUicwhBxSPgo8N_FXKt75Ha3k0rqpOS2sRk1J2xZhBew1AoobaS2v984mpZ0hC4PmdYoX2SW2yNqULOKM9R-OKHWeoosfCSnqyKfKKUa4wXedayYXonl1xQpIAP2lOQNryTd22oZnq/s72-c/Captura+de+pantalla+2012-02-23+a+la%28s%29+10.29.14.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-5603006129764243409</id><published>2012-02-22T22:20:00.000-08:00</published><updated>2012-02-22T22:25:17.834-08:00</updated><title type='text'>Running programs in parallel using Parallel Python</title><content type='html'>&lt;b&gt;Parallel Python&lt;/b&gt; is a python module which provides mechanism for parallel execution of python code on &lt;b&gt;SMP&lt;/b&gt;(systems with multiple processors or cores) and &lt;b&gt;clusters&lt;/b&gt;(computers connected via network).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Parallel Python&lt;/b&gt; has good features as you can see below:&lt;br /&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Parallel execution of python code on SMP and clusters.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Easy to understand and implement job-based parallelization technique (easy to convert serial application in parallel).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Automatic detection of the optimal configuration (by default the number of worker processes is set to the number of effective processors).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Dynamic processors allocation (number of worker processes can be changed at runtime).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Low overhead for subsequent jobs with the same function (transparent caching is implemented to decrease the overhead).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Dynamic load balancing (jobs are distributed between processors at runtime).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Fault-tolerance (if one of the nodes fails tasks are rescheduled on others).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Auto-discovery of computational resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Dynamic allocation of computational resources (consequence of auto-discovery and fault-tolerance).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;SHA based authentication for network connections.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Cross-platform portability and interoperability (Windows, Linux, Unix, Mac OS X).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Cross-architecture portability and interoperability (x86, x86-64, etc.).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white;&quot;&gt;
&lt;li&gt;Open source.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
The first thing what we need to do is just download a module of &lt;b&gt;Parallel Python&lt;/b&gt;, as you see below I leave one link where you can find it, download whichever you want.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.parallelpython.com/content/view/18/32/&quot;&gt;http://www.parallelpython.com/content/view/18/32/&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Decompress it, and open the directory created, then type the following:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;i&gt;&lt;b&gt;sudo setup.py install&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
We tested an example called &lt;b style=&quot;font-style: italic;&quot;&gt;sum_primes.py &lt;/b&gt;using two netbooks with Atom processor and a MacBookPro with i5 processor, before to see results I take some screenshots using just the MacBookPro.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzPrwng8NkgVCcZlsyDr6YVYvIqpnMqpneCOrKFMdOHIo51MFn8ke-wEJuOFb0RN8sfsUFur4E25L5S2o1T1HyYVbSLU8BYcWVCpQ10ffuKEx5CYcKLg7qwlhmx0S3u3HKrEhLhyphenhyphen6X0-jT/s1600/Captura+de+pantalla+2012-02-21+a+la%2528s%2529+16.42.19.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;62&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzPrwng8NkgVCcZlsyDr6YVYvIqpnMqpneCOrKFMdOHIo51MFn8ke-wEJuOFb0RN8sfsUFur4E25L5S2o1T1HyYVbSLU8BYcWVCpQ10ffuKEx5CYcKLg7qwlhmx0S3u3HKrEhLhyphenhyphen6X0-jT/s400/Captura+de+pantalla+2012-02-21+a+la%2528s%2529+16.42.19.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&amp;nbsp;And now the results adding the two netbooks.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3z3M7-EMw5B1bD_lHfSEn8LFjSxgC1Q-ez5hftETtJfWZ9VhToN3ZbGNyaYGYWc7Sv4OraDCYV2QpnaCXkiWvFx5MIOMOiW_ViZb48HwckmLFErWqkD6pmwEcami5xYPjThJydXD2fvyP/s1600/Captura+de+pantalla+2012-02-21+a+la%28s%29+16.41.57.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;95&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3z3M7-EMw5B1bD_lHfSEn8LFjSxgC1Q-ez5hftETtJfWZ9VhToN3ZbGNyaYGYWc7Sv4OraDCYV2QpnaCXkiWvFx5MIOMOiW_ViZb48HwckmLFErWqkD6pmwEcami5xYPjThJydXD2fvyP/s400/Captura+de+pantalla+2012-02-21+a+la%28s%29+16.41.57.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
As you saw in the second one we have less time considerable than the first one, another thing that we saw is the warning that said statistics provided adove is not accuarte due to job rescheduling, it may occurs because they work with a little porcentage of time.&lt;br /&gt;
&lt;br /&gt;
I took screenshots from my activity monitor to prove that the processor is using the top.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjASkCFi9e8NgVfq_GSgCh-HYysOw4yTffuh9rn3yB7sjjR_j7BB-E1QB7cgwzbypr4MHX5ahPrPQmF4eRocXHu_qZO63sJVlRHvFfxe6Fb8vMQRmkZrTWZ-FEzR-zxDDHECUqsigqwvYKG/s1600/Captura+de+pantalla+2012-02-23+a+la%2528s%2529+00.17.01.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;298&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjASkCFi9e8NgVfq_GSgCh-HYysOw4yTffuh9rn3yB7sjjR_j7BB-E1QB7cgwzbypr4MHX5ahPrPQmF4eRocXHu_qZO63sJVlRHvFfxe6Fb8vMQRmkZrTWZ-FEzR-zxDDHECUqsigqwvYKG/s400/Captura+de+pantalla+2012-02-23+a+la%2528s%2529+00.17.01.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Source:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.parallelpython.com/&quot;&gt;http://www.parallelpython.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span id=&quot;goog_803706187&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_803706188&quot;&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/5603006129764243409/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/02/running-programs-in-parallel-using.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/5603006129764243409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/5603006129764243409'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/02/running-programs-in-parallel-using.html' title='Running programs in parallel using Parallel Python'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzPrwng8NkgVCcZlsyDr6YVYvIqpnMqpneCOrKFMdOHIo51MFn8ke-wEJuOFb0RN8sfsUFur4E25L5S2o1T1HyYVbSLU8BYcWVCpQ10ffuKEx5CYcKLg7qwlhmx0S3u3HKrEhLhyphenhyphen6X0-jT/s72-c/Captura+de+pantalla+2012-02-21+a+la%2528s%2529+16.42.19.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-8138856765992007875</id><published>2012-02-16T07:09:00.000-08:00</published><updated>2012-02-16T07:09:45.776-08:00</updated><title type='text'>My report #3</title><content type='html'>I can&#39;t install CUDA in my Ubuntu and I crashed it, now I can&#39;t start with de GUI and I couldn&#39;t try those things that I learned.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;What I think to do?&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
The first thing that I need to do is fix my Ubuntu, then install CUDA again, and after all try for some examples those I was following in a good book about CUDA programming step by step.Then I&#39;ll find some examples in POSIX.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;Who is the highest contributor in this week?&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Well, I think that is Cecilia Urbina, because She did a good job in some programs those I saw, and I understand some things where I had issues.&lt;/b&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/8138856765992007875/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/02/my-report-3.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/8138856765992007875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/8138856765992007875'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/02/my-report-3.html' title='My report #3'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-1704819631318221860</id><published>2012-02-09T07:38:00.000-08:00</published><updated>2012-02-09T07:50:54.782-08:00</updated><title type='text'>My second contribution</title><content type='html'>To my second contribution I read a book called &lt;i&gt;CUDA by Example: An Introduction to General-Purpose GPU Programming&lt;/i&gt; you can find it in amazon as you can see bellow I leave the link to check out that book.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.amazon.com/gp/product/0131387685/&quot;&gt;http://www.amazon.com/gp/product/0131387685/&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
I&#39;ll do some examples about CUDA programming because we need an introduction to this kind of programming environment.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/1704819631318221860/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/02/my-second-apportation.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/1704819631318221860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/1704819631318221860'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/02/my-second-apportation.html' title='My second contribution'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-695618202775297169</id><published>2012-02-06T22:45:00.000-08:00</published><updated>2012-02-06T23:16:01.314-08:00</updated><title type='text'>Example Producer-Consumer with Python</title><content type='html'>Well let&#39;s start with this simple example about the Producer-Consumer problem as you may saw it in the last semester, if you didn&#39;t, don&#39;t worry about it I&#39;m gonna explain it.&lt;br /&gt;
&lt;br /&gt;
The producer-consumer problem illustrates the need for synchronization in systems where many processes share a resource, in this problem, two processes share a fixed-size buffer.One process produces information and puts it in the buffer, while the other process consumes information from the buffer.These processes do not take turns accessing the buffer, they both work concurrently.Instead processes, we&#39;re gonna use threads to solve that problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that we have defined the problem, we&#39;re gonna program using threads and a module called Condition, with Condition we can handle the behavoir from each thread, we need to handle one thread called Producer and another called Consumer without any kind of conflict.

&lt;pre class=&quot;brush: py, python&quot;&gt;from threading import Thread, Condition
import time, random

class Productor(Thread):
    def __init__(self, lista, condicion):
        Thread.__init__(self)
        self.lista = lista
        self.condicion = condicion
    
    def run(self):
        while True:
            lista = random.randint(0,10)
            self.condicion.acquire()
            print &#39;Condicion adquirida por %s&#39; % self.name
            self.lista.append(lista)
            print &#39;%d agregado a la lista por %s&#39; %(lista, self.name)
            print &#39;Condicion notificada por %s&#39;%self.name
            self.condicion.notify()
            print &#39;Condicion liberada por %s&#39;% self.name
            self.condicion.release()
            time.sleep(1)

class Consumidor(Thread):
    def __init__(self,lista,condicion):
        Thread.__init__(self)
        self.lista=lista
        self.condicion = condicion
    
    def run(self):
        while True:
            self.condicion.acquire()
            print&#39;condicion adquirida por %s&#39;%self.name
            while True:
                if self.lista:
                    lista = self.lista.pop()
                    print &#39;%d removido de la lista por %s&#39; % (lista, self.name)
                    break
                print&#39;Condicion espera por %s&#39; % self.name
                self.condicion.wait()
            print&#39;condicion liberada por %s&#39; % self.name
            self.condicion.release()

def main():
    lista = []
    condicion = Condition()
    hilo1 = Productor(lista, condicion)
    hilo2 = Consumidor(lista, condicion)
    hilo1.start()
    hilo2.start()
    hilo1.join()
    hilo2.join()

main()


&lt;/pre&gt;

&lt;br/&gt;
You&#39;ll see something like the picture below.
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBmga2BY68G72ejmFjWutHhfXWSUBeGry2zGjiLug-_uVpU38e0NT3lRg0_iLG5OuK11Sm0OCRM9GNbQp0H6oyPhTXqo-DWTcPfJlWaxGGxnrbK8tMZL_q1WtcIhlmB7OImRCdnX_-4a-c/s1600/Captura+de+pantalla+2012-02-07+a+la%2528s%2529+01.12.06.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;327&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBmga2BY68G72ejmFjWutHhfXWSUBeGry2zGjiLug-_uVpU38e0NT3lRg0_iLG5OuK11Sm0OCRM9GNbQp0H6oyPhTXqo-DWTcPfJlWaxGGxnrbK8tMZL_q1WtcIhlmB7OImRCdnX_-4a-c/s400/Captura+de+pantalla+2012-02-07+a+la%2528s%2529+01.12.06.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;



Sources:
&lt;br/&gt;
http://chuwiki.chuidiang.org/index.php?title=Hilos_en_python#Condition
http://code.google.com/p/chuidiang-ejemplos/source/browse/trunk/python-hilos/src/threading_hilo_condition.py</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/695618202775297169/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/02/example-producer-consumer-with-python.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/695618202775297169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/695618202775297169'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/02/example-producer-consumer-with-python.html' title='Example Producer-Consumer with Python'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBmga2BY68G72ejmFjWutHhfXWSUBeGry2zGjiLug-_uVpU38e0NT3lRg0_iLG5OuK11Sm0OCRM9GNbQp0H6oyPhTXqo-DWTcPfJlWaxGGxnrbK8tMZL_q1WtcIhlmB7OImRCdnX_-4a-c/s72-c/Captura+de+pantalla+2012-02-07+a+la%2528s%2529+01.12.06.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9045697035100432150.post-7981883224838800335</id><published>2012-02-02T08:52:00.000-08:00</published><updated>2012-02-02T08:53:40.857-08:00</updated><title type='text'>My first aportation</title><content type='html'>I was researching about how to use threads on Python, that&#39;s not difficult but I&#39;m in it right now. For now I&#39;m gonna leave below the sources those I used to understand threading on Python.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://chuwiki.chuidiang.org/index.php?title=Hilos_en_python#Condition&quot;&gt;http://chuwiki.chuidiang.org/index.php?title=Hilos_en_python#Condition&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.laurentluce.com/posts/python-threads-synchronization-locks-rlocks-semaphores-conditions-events-and-queues/&quot;&gt;http://www.laurentluce.com/posts/python-threads-synchronization-locks-rlocks-semaphores-conditions-events-and-queues/&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://distparale.blogspot.com/feeds/7981883224838800335/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://distparale.blogspot.com/2012/02/my-first-aportation.html#comment-form' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/7981883224838800335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9045697035100432150/posts/default/7981883224838800335'/><link rel='alternate' type='text/html' href='http://distparale.blogspot.com/2012/02/my-first-aportation.html' title='My first aportation'/><author><name>Saúl Gausin</name><uri>http://www.blogger.com/profile/00364409686961382810</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>