<?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: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-27541911</id><updated>2012-01-24T20:57:20.317+01:00</updated><category term='.net'/><category term='scrum'/><category term='internals'/><category term='git'/><category term='software'/><category term='noticias'/><category term='merge'/><title type='text'>Códice Software ES</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default?start-index=101&amp;max-results=100'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>122</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-27541911.post-741532613784440464</id><published>2011-09-21T01:38:00.000+02:00</published><updated>2011-09-21T01:38:39.017+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internals'/><title type='text'>Plastic internals: de 3.0 a 4.0</title><content type='html'>Hoy va a ir de programación y estructuras de datos :). Voy a explicar en qué consiste el cambio fundamental en el que hemos estado trabajando en Plastic 4.0. Un cambio “core” de verdad que tiene mucho impacto y que creo que es muy interesante. Afecta al rendimiento, al sistema de réplica (lo que nos hace un DVCS), al mantenimiento del código, a la usabilidad…&lt;p&gt;Os habéis fijado en el nuevo Branch Explorer de 4.0? Dibujo una comparativa debajo:&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-PUPi7E9pnGM/TnkhUlQ8-MI/AAAAAAAABKk/KvULfRn2n7w/s1600/tresvscuatro.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="93" width="400" src="http://2.bp.blogspot.com/-PUPi7E9pnGM/TnkhUlQ8-MI/AAAAAAAABKk/KvULfRn2n7w/s400/tresvscuatro.png" /&gt;&lt;/a&gt;&lt;/div&gt;Además de que los gráficos son mejores, ¿qué más veis? Los cuadrados de 3.0 son changesets y se han convertido en óvalos en 4.0, más grandes, porque ahora son más importantes. Pero hay otro tema: hay unas flechas entre los changesets que antes no existían. Esas flechas indican “parentesco”.&lt;p&gt;Es decir, ahora Plastic “sabe” que un changeset es padre de otro, mientras que antes no se guardaba esa relación.&lt;p&gt;Pero voy a bajar más, a las profundidades del sistema.&lt;h2&gt;Almacenamiento de versiones&lt;/h2&gt;Un control de versiones guarda los cambios que haces en un árbol de código. Es decir, tú tienes un proyecto con ficheros y directorios, y por cada cambio se van guardando “revisiones” (que tienen muchas utilidades, desde volver atrás, revisar, etc, etc, pero no es el tema ahora).&lt;p&gt;Un ejemplo como el siguiente:&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FCZHwnRG7H0/TnkhkRJONAI/AAAAAAAABKs/OzoBXFE3rBk/s1600/evolucionchangesets.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="117" width="391" src="http://3.bp.blogspot.com/-FCZHwnRG7H0/TnkhkRJONAI/AAAAAAAABKs/OzoBXFE3rBk/s400/evolucionchangesets.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Primero tenemos un repositorio vacío.&lt;li&gt;Luego añadimos /src y /src/foo.c&lt;li&gt;Luego se modifica foo.c&lt;p&gt;¿Cómo se guarda eso en Plastic?&lt;h2&gt;¿Qué hay en la base de datos de Plastic?&lt;/h2&gt;Instalad 3.0, con el backend de base de datos que más os guste (ya sabéis, Firebird, SQLite, MySQL, SQLServer… hay unos cuantos) y ejecutad las siguientes queries:&lt;p&gt;“select * from revision”&lt;p&gt;“select * from item”&lt;p&gt;“select * from childrenitem”&lt;p&gt;En lugar de conectaros al backend, es posible ejecutar las consultas con el comando “cm query” o “cm q” (hay que tener el permiso “advanced query” para poder hacerlo, cuestiones de seguridad).&lt;p&gt;Si veis las tablas que usa plastic veréis que son muy pocas. Ahora me centro sólo en tres que se pueden definir con el siguiente diagrama entidad-relación (no muy ortodoxo).&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-oo0LM2gwd-s/Tnkh50h6hbI/AAAAAAAABK0/JQFnEYhEMfc/s1600/diagramaentidadrelacion.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="330" width="400" src="http://1.bp.blogspot.com/-oo0LM2gwd-s/Tnkh50h6hbI/AAAAAAAABK0/JQFnEYhEMfc/s400/diagramaentidadrelacion.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Cada elemento en el sistema es un ítem. Es decir, el directorio raíz (/) del ejemplo anterior es un ítem, “src” es un ítem y “foo.c” es un ítem. Pero un ítem es una “entrada abstracta”, es “que existes” pero no tienes ni un nombre asociado. (Ahora os he perdido, pero para dejarlo sencillo, un ítem es “la clase” y una revisión es “el objeto”).&lt;li&gt;Un ítem puede tener una o varias revisiones. Es decir, de “foo.c” podemos tener miles de revisiones (por eso sacar la historia en plastic es muy sencillo: “select * from revision where fiditem=xxx”).&lt;li&gt;Un ítem puede representar a un fichero o a un directorio.&lt;li&gt;Una revisión, si es fichero, puede ser texto o binario, si es directorio sólo directorio (es un poco más complejo porque también soportamos links y cosas así, pero de momento sirve).&lt;li&gt;Si la revisión es un fichero, tendrá un dato asociado (tabla revisiondata, los datos divididos en blobs de máximo 4Mb).&lt;li&gt;Si la revisión es un directorio entonces empieza lo bueno: puede tener una o más entradas “childrenitem”.&lt;p&gt;Al principio dije que “el ítem es abstracto” porque no tiene ni nombre ni datos. La revisión tampoco conoce su nombre, el nombre, en realidad, se guarda en el childrenitem.&lt;p&gt;Me explico: un fichero “foo.c” puede llamarse más adelante “bar.c” pero sigue siendo el mismo ítem, es más, ni siquiera se crea una revisión nueva del fichero al hacer un renombrado, sino una nueva versión del directorio que lo contiene y que le da nombre.&lt;p&gt;¿Ahora se entiende mejor?&lt;p&gt;Volviendo al ejemplo original:&lt;li&gt;Al principio sólo tenemos un ítem (el “famoso” ítem raíz) y una revisión (revisión cero) de ese ítem raíz en el changeset 0.&lt;li&gt;Entonces añadimos src y src/foo.c. ¿Qué quiere decir? Que se añaden dos ítems nuevos y dos revisiones nuevas.&lt;p&gt;¿Qué ocurre con los “children ítems”? Aquí viene lo interesante.&lt;p&gt;En el changeset 0 la tabla childrenitem está vacía.&lt;p&gt;En el changeset 1 la tabla childrenitem tiene el siguiente aspecto (recordad, acabamos de añadir /src y /src.foo.c al sistema):&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9QHuEIWlJEQ/TnkiVtif2mI/AAAAAAAABK8/qA-EiOleMxs/s1600/chidrenitemcset1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="113" width="400" src="http://1.bp.blogspot.com/-9QHuEIWlJEQ/TnkiVtif2mI/AAAAAAAABK8/qA-EiOleMxs/s400/chidrenitemcset1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;¿Qué quiere decir?&lt;li&gt;Hemos creado la “revisión 1” del directorio raíz (antes era la revisión 0, se crea una nueva al añadir “src”).&lt;li&gt;Esa revisión 1 (DirRevId) tiene como dato una entrada llamada “src”, que es el itemId 10.&lt;li&gt;A su vez el directorio “src” tiene una primera revisión (revisión DirRevId = 2 en este caso (estoy usando un nº global para referirme a las revisiones, que es lo que usa plastic internamente)) que tiene como dato una entrada llamada “foo.c” del itemId 11.&lt;p&gt;Es decir, el directorio raíz es el ítem 0. “src” es el ítem 10. “foo.c” es el ítem 11. Sabemos que hemos creado una nueva revisión de “/” (raíz) que es la “1”. Y una revisión de “src” que es la “2” (no incluyo la revisión creada con los datos de foo.c porque no tiene que ver con “childrenitem”).&lt;p&gt;De este modo es como Plastic asocia los nombres de elementos (ítems) a entradas de directorio concretas.&lt;h2&gt;Un segundo checkin&lt;/h2&gt;En el changeset 2 lo que ocurre es que se crea una nueva revisión del fichero src/foo.c.&lt;p&gt;¿Cómo se altera la tabla “revision”? Simple: se crea una nueva entrada para almacenar el nuevo cambio de foo.c&lt;p&gt;¿Cómo se altera la tabla “childrenitem”? No se modifica. No hay cambio en la estructura, luego no se modifica.&lt;h2&gt;El selector entra en escena&lt;/h2&gt;Si habéis usado Plastic habréis visto alguna vez que cada workspace tiene asociado un “selector”. Ese selector es un texto que le indica al sistema “qué debe cargar” en el workspace. Es algo como:&lt;pre&gt;&lt;br /&gt;repository "doc@diana.codicefactory.com:9092"&lt;br /&gt;  path "/"&lt;br /&gt;    branch "/main"&lt;br /&gt;    checkout "/main"&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Para muchos esto lo que hace es que le dice a Plastic que debe trabajar en la rama “main” y listo.&lt;p&gt;Pero en realidad no es tan simple.&lt;p&gt;Al estudiar “childrenitem” habréis visto que hay una relación entre el directorio y los ítems que debe cargar pero… ¿cómo sabemos qué revisión de un ítem determinado se debe cargar?&lt;p&gt;Es decir, si yo cargo la revisión 1 del root ítem, sé que debo cargar una entrada del ítem “src” (ítem 10). Esa información me la da la primera línea de “childrenitem”. Pero, ¿qué revisión de “src” debo cargar?&lt;p&gt;Es más, si nuestro repositorio ahora mismo (changeset 2) es algo como (en plan diagrama de objetos):&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-uGFZIGmh9HU/Tnki40WipCI/AAAAAAAABLE/Znmk2Ac2Sk8/s1600/objectdiagramchangeset2.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="243" width="400" src="http://1.bp.blogspot.com/-uGFZIGmh9HU/Tnki40WipCI/AAAAAAAABLE/Znmk2Ac2Sk8/s400/objectdiagramchangeset2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;¿Cómo sabemos qué se debe “montar” como árbol de ficheros en un momento dado?&lt;p&gt;Es ahí donde entra en acción el selector. Las siguientes reglas:&lt;pre&gt;&lt;br /&gt;repository "doc@diana.codicefactory.com:9092"&lt;br /&gt;  path "/"&lt;br /&gt;    branch "/main"&lt;br /&gt;    checkout "/main"&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;En realidad quieren decir: “carga lo último de la rama “main” para todo lo que esté bajo el path “/” “.&lt;p&gt;Al resolver un selector Plastic lo primero que hace es buscar el “root ítem”:&lt;li&gt;¿Está el root ítem? Sí, es el ítem 0. (En caso contrario se daría un error fatal)&lt;li&gt;Cuál es la última revisión del root ítem? En nuestro caso la revisión 1.&lt;li&gt;Ok, coger la revisión 1.&lt;li&gt;¿Tiene datos? – Sí, es un directorio y como “dato” tiene la entrada de children ítem “src”.&lt;li&gt;¿Qué ítem es src? – Es el ítem 10.&lt;li&gt;Ahora el proceso se repite recursivamente para cada directorio: ¿cuál es la última revisión de “src”? Es la revisión 2.&lt;li&gt;¿Tiene datos la revisión 2? Sí, tiene una entrada “foo.c –item 11”.&lt;li&gt;¿Cuál es la última revisión de foo.c? Es la revisión 4, la que hemos creado en el changeset 2.&lt;p&gt;Por tanto, el selector anterior cargaría el siguiente árbol:&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-4ybOvSxFxXo/TnkjLzeClNI/AAAAAAAABLM/iZxaNYRdZd8/s1600/treeoncset2.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="111" width="357" src="http://1.bp.blogspot.com/-4ybOvSxFxXo/TnkjLzeClNI/AAAAAAAABLM/iZxaNYRdZd8/s400/treeoncset2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Que es el árbol que se resuelve en el changeset último en este momento o changeset 2.&lt;p&gt;(No he incluido el manejo de ramas en todo el ejemplo, pero sería lo mismo, realmente el selector no dice “cuál es la última revisión del ítem 10” sino “cuál es la última revisión del ítem 10 en la rama main”)&lt;p&gt;Qué pasaría si ahora modificásemos el selector de la siguiente forma:&lt;pre&gt;&lt;br /&gt;repository "doc@diana.codicefactory.com:9092"&lt;br /&gt;  path "/"&lt;br /&gt;    branch "/main" changeset “1”&lt;br /&gt;    checkout "/main"&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Ocurriría que la respuesta a las preguntas anteriores nos daría el siguiente árbol:&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-F3DOmE48YjI/TnkjViSKFpI/AAAAAAAABLU/VpfV540KS-8/s1600/treeoncset1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="111" width="357" src="http://4.bp.blogspot.com/-F3DOmE48YjI/TnkjViSKFpI/AAAAAAAABLU/VpfV540KS-8/s400/treeoncset1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Destacando lo que ha cambiado respecto al selector anterior.&lt;h2&gt;Un grafo dinámico&lt;/h2&gt;Es decir, Plastic NO puede resolver un árbol de directorios si no se le indica un “selector” que le ayude a “seleccionar” la revisión adecuada al ir cargando cada nivel de directorios.&lt;p&gt;La carga de árboles (resolución de selector o “solvepath” como le llamamos en el equipo) no funciona exactamente como la he descrito. Es decir, sí que funciona así a nivel lógico pero está optimizada para minimizar las consultas a la base de datos, utiliza cachés intermedias, etc, etc (ha sido uno de los campos de optimización desde los primeros pasos del proyecto).&lt;p&gt;Este grafo dinámico da una enorme flexibilidad: un movido, un renombrado, se trazan a nivel de directorio, pero no se tiene que crear una nueva revisión de los ficheros implicados (o directorios).&lt;p&gt;Mediante esta estructura (y un uso adecuado de selectores) es como se implementa el sistema de “herencia de ramas”:&lt;li&gt;Al cargar la “última revisión de /main/tarea001” de foo.c lo que se hace es: ¿hay una revisión en la rama “tarea001”? Sí, cogerla.&lt;li&gt;No? Entonces coger la última (o la correspondiente según la estructura de la “smartbranch” task001) de la rama “padre” /main.&lt;p&gt;Y así es como funciona la herencia de ramas…&lt;p&gt;Los selectores y la estructura de gráfico dinámico dan una gran flexibilidad: es posible tener estructuras diferentes del árbol montando “diferentes reglas”: podrías coger un directorio de una rama, que cargue el contenido de los ficheros de otra, montando una estructura totalmente dinámica.&lt;p&gt;En realidad una cosa es lo que “existe” en el repositorio y otra lo que el usuario “ve” en el workspace, muy al estilo de las “vistas” del viejo ClearCase.&lt;p&gt;Como veis, el sistema hasta 3.0 tenía una enorme flexibilidad.&lt;h2&gt;Cambios en 4.0&lt;/h2&gt;Pero a cambio de esa “flexibilidad” también había una gran “complejidad”. Por un lado se necesita un tiempo para acostumbrarse al mecanismo “grafo dinámico” aunque mediante nuestras herramientas intentamos hacerlo lo más transparente posible.&lt;p&gt;Por otro, impone ciertas complicaciones a la hora de trabajar en modo distribuido (DVCS), como por ejemplo garantizar que un changeset en un repositorio es exactamente igual al replicarlo a otro, porque dependerá de las revisiones que existan en el destino y de cómo se carguen. Un pequeño lío.&lt;p&gt;Además la carga, aunque optimizada, era pesada…&lt;p&gt;¿¿Qué hemos cambiado en 4.0??&lt;p&gt;Pues en realidad usamos la misma base de datos!!!&lt;p&gt;En serio, la misma estructura, pero con un pequeño “hack” en cuanto al significado.&lt;p&gt;¿Recordáis la tabla childrenitem?&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-IKE5ck04XdU/TnkjsMsxuQI/AAAAAAAABLc/uhyyiFI7dZo/s1600/three-childrenitemtable.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="115" width="153" src="http://1.bp.blogspot.com/-IKE5ck04XdU/TnkjsMsxuQI/AAAAAAAABLc/uhyyiFI7dZo/s400/three-childrenitemtable.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Pues hay un pequeño cambio en 4.0: en lugar de que cada entrada apunte a un itemid, apunta a un revid… (¡!!!!)&lt;p&gt;¿Qué significa esto?&lt;p&gt;Significa que nos ahorramos la fase de resolución porque ahora cada árbol es “hardcoded” una vez que se hace checkin. Un changeset tiene una estructura fija, más sencilla de entender, más rápida y eficaz, mucho mejor en la réplica. No hay que interpretar una serie de reglas para resolver un árbol.&lt;p&gt;Perdemos algo de flexibilidad, es cierto, no se pueden hacer maravillas como modificar un directorio en una rama, cambiando el nombre a un fichero y nada más, y poder montar un selector complejo que altere el nombre de un ítem concreto sólo en nuestra vista jugando con esas ramas. No puede hacerse y me dolió mucho quitarlo pero… era una flexibilidad con un gran poder y… muy poca responsabilidad ;)&lt;p&gt;4.0 es más “DAG” (algún Git fan por aquí?), más rápido, más simple, y este pequeño cambio (un solo significado dentro de una tabla) define un nuevo mecanismo de merge, de réplica, de checkin, de diferencias… de sincronización con otros SCMs… de todo!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-741532613784440464?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/741532613784440464/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=741532613784440464' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/741532613784440464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/741532613784440464'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2011/09/plastic-internals-de-30-40.html' title='Plastic internals: de 3.0 a 4.0'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-PUPi7E9pnGM/TnkhUlQ8-MI/AAAAAAAABKk/KvULfRn2n7w/s72-c/tresvscuatro.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-8010595408391672678</id><published>2011-09-12T01:11:00.000+02:00</published><updated>2011-09-12T20:08:39.325+02:00</updated><title type='text'>Merges parciales?</title><content type='html'>El tema, al primer vistazo, puede sonar un poco rebuscado, así que voy a intentar simplificarlo al máximo.&lt;h2&gt;¿Qué es un merge parcial?&lt;/h2&gt;Hacer un “merge parcial” consiste en, dada una rama o un changeset (commit, en términos Hg/Git) que se denominará “origen del merge” (src), hacer “merge” (o integrar) en una rama destino sólo parte de los elementos modificados en el origen del merge.Con una imagen seguro que se entiende mejor:	&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-XdfvPINV3yU/Tm0_WejfBbI/AAAAAAAABJE/3OiOVtqQNMA/s1600/ninjacoderinitial.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="218" width="400" src="http://4.bp.blogspot.com/-XdfvPINV3yU/Tm0_WejfBbI/AAAAAAAABJE/3OiOVtqQNMA/s400/ninjacoderinitial.png" /&gt;&lt;/a&gt;&lt;/div&gt;El “ninja coder” ha modificado unos cuantos ficheros en una rama, ¿qué pasaría si sólo quiere integrar render.c y readme.txt pero ser capaz de integrar el resto más tarde?&lt;p&gt;&lt;b&gt;Nota:&lt;/b&gt;&lt;i&gt; Las "flechas" entre changeset y changeset indican "parentesco". Es decir, el cset 0 es padre del cset 1. Las flechas indican parentesco y no secuencia, al estilo de lo que &lt;a href="http://www.slideshare.net/chacon/getting-git"&gt;Scott Chacon dibuja en Getting Git&lt;/a&gt; (slide 165). Por cierto, es también como nuestro branch explorer de 4.0 dibuja las cosas.&lt;/i&gt;&lt;h2&gt;Objetivo&lt;/h2&gt;Mi objetivo con este post es: que me enviéis vuestra opinión sobre la importancia, o no, de los "merges parciales" en vuestro equipo. Podéis dejar comentarios en este post o bien contribuir a este thread de stackoverflow: &lt;a href="http://stackoverflow.com/questions/7323662/dvcs-partial-merge-git-hg-merge-tracking"&gt;http://stackoverflow.com/questions/7323662/dvcs-partial-merge-git-hg-merge-tracking&lt;/a&gt;&lt;h2&gt;¿Por qué esto es importante?&lt;/h2&gt;Para algunos de vosotros quizá la explicación de arriba os suena ya a hablar de un caso rebuscado. ¡No sabéis cuánto me alegro! Me alegro porque quiere decir que no necesitáis merges parciales, lo que me simplifica mucho la vida.Los merges parciales son importantes porque todos los DVCS (Distributed Version Control System) como Git o Mercurial (Hg) carecen de merge parcial. ¿Es esa una enorme carencia? Es lo que me gustaría que me contaseis.&lt;h2&gt;Para los usuarios de Subversion que se están riendo…&lt;/h2&gt;… con una risa contagiosa y malvada diciendo “ya os lo decía yo, los DVCS esos son una patata, mejor quedarse con el viejo SVN!!”.Vale, ¡estáis listos! Esto de los merges parciales afecta a sistemas como Git o Hg (que no lo tienen) frente a sistemas como Clearcase o nuestro Plastic &lt;=3… vosotros, queridos usuarios de SVN, no tenéis este problema… ¡¡estáis todavía peor!!&lt;h2&gt;En detalle&lt;/h2&gt;Vamos a ver qué significa eso de los merges parciales, con imágenes:&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kSnCZChKmYM/Tm0_q3FnFsI/AAAAAAAABJM/idPgxjVbicM/s1600/ninjacoderinitial-partial.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="149" width="400" src="http://2.bp.blogspot.com/-kSnCZChKmYM/Tm0_q3FnFsI/AAAAAAAABJM/idPgxjVbicM/s400/ninjacoderinitial-partial.png" /&gt;&lt;/a&gt;&lt;/div&gt;Primero el “ninja coder” hace un merge de dos de los cuatro ficheros que modificó. Luego:&lt;li&gt;Un sistema sin “merge parcial” con trazabilidad a nivel de changeset, crea un “merge link” entre changesets que se han mezclado, pero no tiene modo de saber si todo el contenido (todos los ficheros) fue mezclado o no. Asume siempre que el contenido completo fue mezclado.&lt;li&gt;Un sistema con “merge parcial” (como lo era Plastic SCM hasta 4.0) identifica la historia de merge ítem por ítem mientras que en los DVCS modernos la “trazabilidad de merge” va a nivel de changeset. Implica que hay muchos cálculos (uno por fichero) en lugar de uno sólo para todos.&lt;h2&gt;¿Cómo es de importante?&lt;/h2&gt;¿Integras primero partes de una rama y luego el resto? Si es así, o cambias de método de trabajo o el sistema de merge “parcial” no servirá demasiado.&lt;h2&gt;Ventajas y desventajas&lt;/h2&gt;No soportar “merges parciales” hace que el mecanismo de merge de ramas sea mucho más rápido. La desventaja es que no es sencillo (se puede hacer dividiendo changesets) mezclar sólo parte de una rama.&lt;h2&gt;Opiniones&lt;/h2&gt;En la beta de 4.0 (igual que en todos los DVCS incluyendo Git y Hg) el merge tracking es a nivel de cset, lo que implica que no hay soporte para merges parciales. &lt;p&gt;Enviadnos opiniones para saber cómo de importante es soportar merge parcial y actuar en consecuencia!&lt;p&gt;Como decía:  podéis dejar comentarios en este post o bien contribuir a este thread de stackoverflow:&lt;a href="http://stackoverflow.com/questions/7323662/dvcs-partial-merge-git-hg-merge-tracking"&gt; http://stackoverflow.com/questions/7323662/dvcs-partial-merge-git-hg-merge-tracking&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-8010595408391672678?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/8010595408391672678/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=8010595408391672678' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8010595408391672678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8010595408391672678'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2011/09/merges-parciales.html' title='Merges parciales?'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-XdfvPINV3yU/Tm0_WejfBbI/AAAAAAAABJE/3OiOVtqQNMA/s72-c/ninjacoderinitial.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-1375492439326911485</id><published>2011-09-09T12:17:00.000+02:00</published><updated>2011-09-09T12:19:15.617+02:00</updated><title type='text'>Test hacker – Plastic SCM</title><content type='html'>Estamos buscando a un auténtico "test hacker" que nos ayude a mover Plastic SCM al siguiente nivel.&lt;h2&gt;¿Qué buscamos?&lt;/h2&gt;Ingenieros con muchos conocimientos de programación y capaces de:&lt;li&gt;Verificar cada una de las nuevas características y bugfixes de Plastic: exploratory testing y definición de nuevos juegos automáticos de tests (e incluso colaborar con el resto del equipo en su implementación), detección de problemas de usabilidad, reducción de regresiones.&lt;li&gt;Continuar desarrollando el entorno de testing automático: ejecución más rápida de los juegos de pruebas automáticas, paralelización, desarrollo de tests de carga en cluster, migración a Amazon EC2… y todo lo que nos puedas aportar y que estamos deseosos de aprender!&lt;li&gt;No buscamos: experiencia en “ejecutar guiones de tests” sin conocimientos actualizados de programación. No pasamos “guiones de tests a mano”, eso lo tenemos automatizado, necesitamos complementar los tests automáticos y continuar mejorándolos, aumentándolos y haciendo más rápida su ejecución.&lt;h2&gt;¿Qué te ofrecemos?&lt;/h2&gt;&lt;li&gt;Competir contra software de nivel mundial como Perforce, Git, Mercurial, Subversion, ClearCase, Team Foundation Server, AccuRev… Trabajar en control de versiones es pasar a primer nivel, luchar contra los mejores del mundo en el sector, cada día.&lt;li&gt;Problemas de software complicados, muy complicados.&lt;li&gt;Desarrollar en áreas muy diferentes: desde server a cliente GUI, web a capa de red, base de datos a gráficos 3D. Lo de “hacer siempre lo mismo” simplemente no ocurre.&lt;li&gt;Flexibilidad y libertad: controlar, de verdad, cómo y cuándo trabajas.&lt;li&gt;Incorporarte en un gran momento cuando todavía se puede ser parte del núcleo.&lt;li&gt;Remuneración económica muy competitiva.&lt;h2&gt;¿Te interesa?&lt;/h2&gt;Si te interesa envíanos tu currículum a: cv@codicesoftware.com y cuéntanos por qué eres el profesional que nos hace falta.&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-8krJEBFicow/TmnnUJ-RJCI/AAAAAAAABHs/I58CnPP-9bs/s1600/euoffice.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="107" width="400" src="http://1.bp.blogspot.com/-8krJEBFicow/TmnnUJ-RJCI/AAAAAAAABHs/I58CnPP-9bs/s400/euoffice.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2&gt;Mucha más información…&lt;/h2&gt;… por si tienes ganas de conocer más.En cada proyecto competimos con productos como Perforce (el sistema de control de versiones que usa Google... sí, no usa Git, ni SVN!!, y por cientos de miles de desarrolladores de videojuegos), ClearCase (de IBM), AccuRev, Git (el sistema DVCS iniciado por Linus Torvalds), Subversion (SVN)... La mayoría de nuestros clientes y de las descargas de nuestro software son de Estados Unidos, Inglaterra, Australia, Alemania...Códice arrancó en 2005 y está formada por jóvenes ingenieros (cada vez menos jóvenes ;) que creemos firmemente en crear software que compita a nivel mundial. Y no sólo lo creemos, lo logramos día a día.Algunos datos que te pueden interesar:&lt;li&gt;Fuimos la primera pyme en lograr CMMi 2&lt;li&gt;Estamos iniciando nuestro Sprint 113 de Scrum&lt;li&gt;Automatizamos las pruebas de software con tests unitarios, de smoke (línea de comandos automatizada, somos los creadores de PNUnit, la extensión de NUnit para tests paralelos que puedes encontrar en NUnit 2.5) y Gui (TestComplete), que en total suman más de 30 horas de ejecución, que paralelizamos con VMWare y logramos dejar en "sólo" 4-5 horas. El siguiente paso, y ahí podrías colaborar, es usar EC2 de Amazon.&lt;li&gt;Desarrollamos el único DVCS comercial que existe (y tenemos que darnos prisa porque la competencia se mueve)&lt;li&gt;Nos encargamos de la release en Solaris del proyecto Mono, y hemos hecho muchas contribuciones (colaboramos en el desarrollo del nuevo Garbage Collector que se probó mediante tests de carga de nuestro servidor “plasticd”, plastic daemon)&lt;li&gt;Usamos Java, C y mucho, mucho C#, de hecho, no encontrarás otra empresa que use C# en Windows, Linux, MacOS X, Solaris, FreeBSD... (y OpenBSD pero de forma no oficial ;) )&lt;li&gt;Códice está respaldada financieramente por un fondo de capital riesgo. En medio de una de las mayores crisis económicas de los últimos tiempos nuestra tecnología convenció a un fondo tecnológico puntero, algo que creemos que da confianza.&lt;li&gt;Ofrecemos una remuneración muy competitiva, casi seguro que superior a la mayoría de ofertas que hayas visto.&lt;li&gt;Podrás mejorar tu inglés a diario (de hecho, cuanto más nivel tengas, mejor)&lt;li&gt;Participarás en el diseño de software para desarrolladores, para gente como tú, lo que supone uno de los retos más apasionantes para un ingeniero ya que conocerás a fondo el entorno y podrás aportar soluciones (somos usuarios de nuestro propio software!)&lt;li&gt;Plastic lo usan empresas como HP, VVisions (te suena el "Guitar Hero"?), DHL... y también pequeños equipos de desarrollo en todo el mundo. Uno de nuestros primeros clientes fuera de España fue una unidad del ejército de Estados Unidos, a finales de 2007.&lt;li&gt;Hemos participado en eventos como SDWest y Game Developer's Conference (San Francisco), posteamos y escribimos en sitios como DrDobbs (DDJ), fuimos finalistas de los Jolt Awards hace un par de años...¿Qué nos gusta ver en las entrevistas?&lt;li&gt;Que dominas los temas de los que hablas: si hablas de Java o .NET… ¿nos podrías explicar lo qué es el Garbage Collector? No es tan difícil…&lt;li&gt;Que leas libros de software.¿Te suena el Code Complete?, Implementation Patterns, Clean Code…&lt;li&gt;Que controles lo que has aprendido: ¿semáforos?, ¿threads?&lt;li&gt;Que te encante desarrollar softwareSi estás interesado escríbenos a cv@codicesoftware.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-1375492439326911485?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/1375492439326911485/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=1375492439326911485' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/1375492439326911485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/1375492439326911485'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2011/09/test-hacker-plastic-scm.html' title='Test hacker – Plastic SCM'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-8krJEBFicow/TmnnUJ-RJCI/AAAAAAAABHs/I58CnPP-9bs/s72-c/euoffice.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-1661697073254505169</id><published>2010-12-13T09:47:00.002+01:00</published><updated>2010-12-13T10:39:57.227+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>Bienvenido a la Jungla!!</title><content type='html'>Nota: creo que es recomendable &lt;a href="http://www.youtube.com/watch?v=4ioIylqRPXU"&gt;escuchar esta música&lt;/a&gt; mientras leéis el post.&lt;br /&gt;&lt;br /&gt;Y ahora... Welcome to the GitJungle!!&lt;br /&gt;&lt;br /&gt;Acabamos de lanzar &lt;a href="http://www.plasticscm.com/labs/gitjungle.aspx"&gt;GitJungle&lt;/a&gt;, un pequeño explorador de repositorios de Git que utiliza nuestra tecnología &lt;a href="http://www.plasticscm.com/features/visualization.aspx"&gt;de visualización de ramas de Plastic SCM&lt;/a&gt; (BranchExplorer, BrEx) y básicamente permite ver los repositorios de Git desde un ángulo diferente... :P&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Cómo descargarlo&lt;/h2&gt;&lt;br /&gt;Muy fácil, hay que ir a nuestra nueva página de &lt;a href="http://www.plasticscm.com/labs/gitjungle.aspx"&gt;labs&lt;/a&gt;, leer un poco más sobre GitJungle y después descargar los binarios (recordad que para Mac y Linux necesitaréis tener Mono instalado).&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Cómo usarlo&lt;/h2&gt;&lt;br /&gt;Bueno, supongo que no tengo que explicarle a nadie interesado en GitJungle cómo clonar un repositorio de Git pero para que la entrada quede lo más completa posible:&lt;br /&gt;&lt;br /&gt;$ git clone https://github.com/jquery/jquery.git&lt;br /&gt;$ cd jquery.git&lt;br /&gt;$ gitjungle .&lt;br /&gt;&lt;br /&gt;Y entonces tendremos los siguientes gráficos!!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_z6qpykplUvI/TQIoDGw6XNI/AAAAAAAABAs/qy8T2uAybro/s1600/junglelinux.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 322px;" src="http://3.bp.blogspot.com/_z6qpykplUvI/TQIoDGw6XNI/AAAAAAAABAs/qy8T2uAybro/s400/junglelinux.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5549041724694355154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Action not words!&lt;/h2&gt;&lt;br /&gt;Un vídeo de GitJungle en acción aquí:&lt;br /&gt;&lt;br /&gt;&lt;object width="470" height="364"&gt;&lt;param name="movie" value="http://www.youtube.com/v/bMuMipNM_mY?fs=1&amp;amp;hl=en_US&amp;amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/bMuMipNM_mY?fs=1&amp;amp;hl=en_US&amp;amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="470" height="364"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Peligro - zona de experimentos!&lt;/h2&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Acabamos de lanzar la beta de GitJungle!&lt;/span&gt;. Es un experimento, creemos que tiene muy buena pinta y todo eso, pero no deja de ser una beta, así que no está libre de posibles problemas. Si encuentras alguno, ya sabes, ¡dínoslo!&lt;br /&gt;&lt;br /&gt;Lo bueno es que hemos usado el mismo núcleo de código del Branch Explorer de Plastic, lo que nos permite mostrar la historia de forma horizontal en lugar de vertical como hacen GitK y otras herramientas de Git. Así que bienvenidas sean las sugerencias, los aplausos o las críticas más mordaces!&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;¿Por qué nos ha dado por sacar una herramienta para Git?&lt;/h2&gt;&lt;br /&gt;Como todos sabéis lo que hacemos es desarrollar y vender &lt;a href="http://www.plasticscm.com"&gt;Plastic SCM&lt;/a&gt;, el DVCS comercial más potente jamás creado, el que tiene mejores visualizaciones, soporta diferentes "backends" de base de datos, seguridad integrada con soporte de ACLs, el mejor sistema de branching y merging.... vale, vale, paro ya con el rollo de marketing! ;)&lt;br /&gt;&lt;br /&gt;Bueno, al tema, que sí, que nos centramos en Plastic, sin embargo desarrollar GitJungle nos ha llevado muy poco tiempo así que... ¿por qué no compartirlo?&lt;br /&gt;&lt;br /&gt;Pero, respondiendo a la pregunta: estamos trabajando a tope en la próxima versión de Plastic SCM y nuestro objetivo es que sea más interoperable que nunca y que tenga sincronización bidireccional con Git!&lt;br /&gt;&lt;br /&gt;También, Plastic SCM es un DVCS para empresas mientras que Git (aunque puede usarse en empresas) está muy enfocado a proyectos Open Source así que, ¿por qué no colaborar? La verdad es que Git está enseñando los conceptos de branching y merging a todo el mundo y educando a los desarrolladores en "desarrollo distribuido". Todo eso es muy bueno para Plastic porque así los usuarios aprecian mucho mejor qué es lo que ofrecemos. (Nota: NO, Plastic NO está basado en Git, hemos tenido que trabajar duro para desarrollar nuestro propio sistema, capa de base de datos, algoritmos de merge, seguridad y... bueno, y todas las cosas divertidas!! :P)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_z6qpykplUvI/TQIor-OFMWI/AAAAAAAABA0/YBdWV8ZPBuU/s1600/junglelinux2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 322px;" src="http://1.bp.blogspot.com/_z6qpykplUvI/TQIor-OFMWI/AAAAAAAABA0/YBdWV8ZPBuU/s400/junglelinux2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5549042426775417186" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-1661697073254505169?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/1661697073254505169/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=1661697073254505169' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/1661697073254505169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/1661697073254505169'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/12/bienvenido-la-jungla.html' title='Bienvenido a la Jungla!!'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_z6qpykplUvI/TQIoDGw6XNI/AAAAAAAABAs/qy8T2uAybro/s72-c/junglelinux.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-4295159407032639352</id><published>2010-11-29T22:21:00.003+01:00</published><updated>2010-11-29T22:26:20.425+01:00</updated><title type='text'>Linus habla sobre ramas...</title><content type='html'>Hace unos meses Linus Torvalds escribía sobre algunos problemas que tenían en el desarrollo del Kernel con Git debido al uso de ciertos patrones de merge.&lt;br /&gt;&lt;br /&gt;Como aprender de Linus es siempre interesante :P me gustaría entrar en detalle en los puntos que menciona y ver cómo aplicarlo para mejorar en desarrollos del día a día (no hace falta ser un kernel-hacker para sacar partido de esas técnicas). De hecho encaja con el patrón que nosotros recomendamos con Plastic aunque lógicamente él lo aplica a Git y sería también válido con cualquier otro SCM con buen soporte de ramas.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Las palabras de Linus&lt;/h2&gt;&lt;br /&gt;Esto es lo que escribió Linus, sólo he sacado un fragmento así que para tener la visión completa lo mejor es leer el &lt;a href="http://lkml.org/lkml/2010/9/28/362)."&gt;link original&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The real problem is that maintainers often pick random - and not at all stable - points for their development to begin with. They just pick some random "this is where Linus -git tree is today", and do their development on top of that. THAT is the problem - they are unaware that there's some nasty bug in that version.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Y ahora intentaré traducir lo mejor posible:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;El verdadero problema es que los “maintainers” a menudo cogen puntos aleatorios – y para nada estables – como partida de sus desarrollos. Simplemente cogen un “aquí es donde está el árbol de Git de Linus hoy” y hacen sus cambios sobre eso. Y ESE es el problema – no son conscientes de que hay un fallo muy feo en esa versión.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Disparando a un objetivo móvil&lt;/h2&gt;&lt;br /&gt;¿De qué está hablando Torvalds? Realmente de un problema muy bien conocido cuando se trabaja en “trunk o mainline” (vamos, sin ramas) como describía &lt;a href="http://www.plasticscm.com/infocenter/quick-start/intro-task-driven-development.aspx"&gt;aquí hace ya algún tiempo&lt;/a&gt; en la sección titulada “don’t shoot  a moving target!” (no dispares a un objetivo móvil).&lt;br /&gt;&lt;br /&gt;El problema afecta duramente a todos los seguidores de la doctrina “mainline/trunk” (ya sabéis, SVN, CVS, VSS…) ya que se están actualizando constantemente a “lo más nuevo” quizá &lt;a href="http://codicesoftware.blogspot.com/2010/11/live-to-merge-merge-to-live.html"&gt;por miedo a hacer merges&lt;/a&gt;. Algunos intentarán solucionarlo con integración continua (CI) pero simplemente retrasarán el problema. Lo “malo” es que también afectará a quienes usen “ramas de característica” (feature branches) a menos que sigan todas las reglas (lo que nosotros solemos definir en el patrón de “rama por tarea”).&lt;br /&gt;&lt;br /&gt;El problema con el que se encuentran en el desarrollo del kernel se ve en esta imagen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_z6qpykplUvI/TPQaDU9seEI/AAAAAAAAA-c/sL8X8UvExdE/s1600/youbranchhere-ES.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 130px;" src="http://4.bp.blogspot.com/_z6qpykplUvI/TPQaDU9seEI/AAAAAAAAA-c/sL8X8UvExdE/s400/youbranchhere-ES.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5545085685669328962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;El equipo del kernel usa ramas y todo pero ¿qué pasa si usan “master” como rama de integración (muy común, y correcto) y crean ramas desde “commits” que no están etiquetados (tagged)? (Como muestra el dibujo).&lt;br /&gt;&lt;br /&gt;El problema es que al usarse la rama principal como punto de integración habrá “commits” intermedios (changesets) que no serán estables (especialmente si se usan los “fast-forward” merges de Git, que no me gustan un pelo, pero que supongo que no serán el problema de Torvalds ya que seguro que sabe usar Git muy bien, ¿no???). Entonces los programadores empiezan desde un punto inestable y… comienza la fiesta.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;La clave son las líneas base&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Nosotros hemos tenido exactamente el mismo problema con equipos usando Plastic pero que no entendieron bien al principio la importancia de tener líneas base (baselines, releases estables o como queráis llamarlas). Una vez que el código es estable: ¡etiquetadlo! Y cread las ramas de tarea SÓLO desde puntos estables!&lt;br /&gt;&lt;br /&gt;Esa es la regla básica: cread líneas base con frecuencia (mínimo una a la semana en equipos de menos de 10 personas y más si el equipo crece) que por supuesto deben estar totalmente probadas (juego de test automático y cualquier tipo de prueba accesoria o manual que hagáis, de hecho esta es la parte larga de hacer integraciones, los merges, hoy por hoy, tienen que ser muy rápidos) y CREAD LAS RAMAS SÓLO DESDE BASELINES ESTABLES como muestra la siguiente figura:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_z6qpykplUvI/TPQaP8_djrI/AAAAAAAAA-k/HTsvF3qHEoo/s1600/onlystablepoints-ES.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 329px;" src="http://3.bp.blogspot.com/_z6qpykplUvI/TPQaP8_djrI/AAAAAAAAA-k/HTsvF3qHEoo/s400/onlystablepoints-ES.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5545085902572588722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;De esta forma si algo falla en tu rama de tarea (o feature branch) sabes que… ¡es por tu culpa!, porque todos los tests estaban bien en la línea base (no sólo el juego rápido que puedes pasar en CI, también los que tardan horas).&lt;br /&gt;&lt;br /&gt;Una regla muy, muy sencilla y con enorme ahorro en tiempo y dolores de cabeza!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-4295159407032639352?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/4295159407032639352/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=4295159407032639352' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/4295159407032639352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/4295159407032639352'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/11/linus-habla-sobre-ramas.html' title='Linus habla sobre ramas...'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_z6qpykplUvI/TPQaDU9seEI/AAAAAAAAA-c/sL8X8UvExdE/s72-c/youbranchhere-ES.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-1601718246153183151</id><published>2010-11-28T22:51:00.003+01:00</published><updated>2010-11-28T23:05:05.906+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><title type='text'>Anunciando Plastic SCM Community Edition</title><content type='html'>Ha pasado casi 1 mes desde que hicimos el anuncio oficial de Plastic SCM Community Edition &lt;a href="http://codicesoftware.blogspot.com/2010/11/building-plastic-scms-community-with.html"&gt;en nuestro blog en inglés&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Aunque somos una empresa española nuestra audiencia y nuestros usuarios son la mayoría de fuera y de ahí que siempre publiquemos primero en inglés.&lt;br /&gt;&lt;br /&gt;Pero me parece que no viene mal incluir, aunque sea con un poco de retraso, la noticia del lanzamiento aquí.&lt;br /&gt;&lt;br /&gt;El objetivo de Plastic SCM Community Edition es llegar a un número elevado de equipos de desarrollo pequeños y medianos (de ahí lo de hasta 15 usuarios de la licencia gratuita). Plastic es un sistema SCM de última generación (distribuido, con muy buen soporte de ramas, etc, etc) y nuestro objetivo con esta iniciativa es llegar a muchos equipos pequeños (que son mayoría en todo el mundo) dentro de empresas. ¿Por qué esto de "dentro de empresas"? Pues porque para proyectos open source, a pesar de que Plastic es ilimitado y gratis para ellos, ya hay alternativas excelentes como Git y Mercurial que han nacido en el entorno OSS y que están pensados para ese tipo de proyectos. Sin embargo Plastic ha sido diseñado y desarrollado para empresas. ¿Cuál es la diferencia? Pues (generalizando) que características como la seguridad basada en ACLs, integraciones nativas con los IDEs, almacenar los datos en bases de datos relacionales estándar (a elegir: Firebird, MySQL, SQL Server, Oracle e incluso SQLite) y por supuesto nuestra cuidada interfaz gráfica han sido una prioridad para nosotros y algo que sabemos que los desarrolladores valoran cuando buscan un sistema para su trabajo. La propia gestión de ramas (inmutables y persistentes en Plastic contra mutables y un potencialmente volátiles en Git, por ejemplo) está más orientada al uso en empresas.&lt;br /&gt;&lt;br /&gt;Normalmente las empresas buscan herramientas que sean fáciles de poner en marcha, que tengan soporte comercial de primer nivel, que no les den muchos quebraderos de cabeza... y eso es lo que ofrecemos con Plastic para todo tipo de empresas y con CE para las más pequeñas.&lt;br /&gt;&lt;br /&gt;Además consideramos que la situación económica actual fuerza a muchos equipos a no gastar dinero en software, de ahí también la iniciativa: facilitar y universalizar las mejores prácticas de SCM.&lt;br /&gt;&lt;br /&gt;Plastic evoluciona muy rápido y podéis estar al día de todo lo que hacemos a través de twitter (@plasticscm).&lt;br /&gt;&lt;br /&gt;Espero que nos ayudéis a extender el mensaje!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-1601718246153183151?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/1601718246153183151/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=1601718246153183151' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/1601718246153183151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/1601718246153183151'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/11/anunciando-plastic-scm-community.html' title='Anunciando Plastic SCM Community Edition'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-230056643391925965</id><published>2010-11-26T12:01:00.003+01:00</published><updated>2010-11-28T23:25:33.595+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><title type='text'>La historia del control de versiones</title><content type='html'>La Gestión de Configuración de Software (Software Configuration Management, SCM, o Source Code Management para los hackers de verdad) existe ya desde hace una buena temporada y ha ido evolucionando lentamente desde los lejanos días casi prehistóricos en los que era casi una labor manual hasta la brillante actualidad de los sistemas DVCS (Distributed Version Control System).&lt;br /&gt;&lt;br /&gt;Todos habéis usado al menos uno de los SCMs de la lista siguiente pero, ¿eres consciente de lo viejo que es el sistema que usas? ¿Conoces los grandes nombres? Vale, pues voy a intentar hacer una breve recopilación.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;A grandes rasgos…&lt;/h2&gt;&lt;br /&gt;En el diagrama he colocado la mayoría de los principales nombres de la historia de los SCM. Sí, sí, ya sé que falta StarTeam, falta el nuevo sistema de IBM, ¿cómo se llama? RTC? Pero es que no me caben todos así que he dejado a los más feos fuera de la foto :P. En cualquier caso, escribe un comentario para hablar de tu sistema favorito (o el que más odias, o el que más has sufrido) tanto si me lo he dejado como si me he acordado de él...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_z6qpykplUvI/TO-T1e_vRgI/AAAAAAAAA-M/N0az2DmCtAo/s1600/scmhistory-es.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 256px;" src="http://2.bp.blogspot.com/_z6qpykplUvI/TO-T1e_vRgI/AAAAAAAAA-M/N0az2DmCtAo/s400/scmhistory-es.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5543812213379122690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Por si todavía te sientes bien usando uno de los “old irons” (hierracos :P), he añadido unas fotos debajo de cómo eran los teléfonos móviles de la época… para que no te quede más remedio que sentirte viejo y totalmente desactualizado :P.&lt;br /&gt;&lt;br /&gt;Vamos, que si todavía estás usando CVS y piensas que “vale, está bien”, echa un vistazo justo debajo de “CVS” en el gráfico … ¿No te sientes como el protagonista de Wall Street, el dinero nunca duerme (Gordon Gecko/Michael Douglas) cogiendo el teléfono-ladrillo antes de salir de la cárcel? Pues eso. ;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Nota:&lt;/span&gt; en los comentarios de mi post original en inglés algunos empezaron a protestar diciendo “eh, qué pasa, que porque un software haya empezado hace 20 años quiere decir que ya no sirve?”. Evidentemente no me refiero a eso. (Hay un comentario muy gracioso de un tío que usa el “grep” y protesta amargamente… para troncharse). El tema es que cuando el sistema evoluciona, pues no hay problema, pero hay sistemas en este dibujo de arriba que llevan muertos, sin evolución, con diseños anticuados, desde hace muchísimos años, y deformando la forma en la que los desarrolladores ven lo que es un control de versiones… A eso me refiero…&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;La prehistoria&lt;/h2&gt;&lt;br /&gt;Hubo un tiempo en el que las versiones se guardaban a mano. Vale, para muchos de vosotros ese tiempo no eran los 80 sino hace mucho menos, cuando en la universidad guardabais las prácticas con nombres como practica.zip, practica-version2.zip, practica-buena.zip, practica-buena-de-verdad.zip… Bueno, pues lo creáis o no, había un tiempo en el que la gente trabajaba sin SCM… era un tiempo sombrío y los programadores vivían en cuevas…&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;SCCS&lt;/h3&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Nota:&lt;/span&gt;&lt;a href="http://barrapunto.com/comments.pl?sid=85767&amp;cid=1252944"&gt; añadido por petición de los lectores más nostálgicos&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;En 1972 cuatro de los mejores hombres del ejército de los Estados Unidos que formaban un comando.... Espera! Para! Que me he equivocado de película...&lt;br /&gt;&lt;br /&gt;En 1972 apareció SCCS y se quedó con el mejor nombre "Source Code Control System" así que a partir de ahí los demás han tenido que inventarse otros nombres porque ese ya estaba cogido... ;) Lo más interesante, además de ser uno de los primeros de verdad, es que su formato interno &lt;a href="http://en.wikipedia.org/wiki/Source_Code_Control_System"&gt;sigue usándose por TeamWare y BitKeeper&lt;/a&gt;. Más allá de eso... SCCS está ya fuera de combate, pero la historia no estaría completa sin él. (Gracias a los lectores por las notas!).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;RCS&lt;/h3&gt;&lt;br /&gt;Y entonces llegó 1982 y RCS vio la luz (bueno, y naranjito, pero esa es otra historia). RCS no es un gran avance tecnológico pero todavía lo puedes encontrar en diferentes distribuciones de Unix. Es sencillo y va directo al grano.&lt;br /&gt;Una buena característica era que los cambios de texto se almacenaban como deltas (muy importante teniendo en cuenta que los discos de la época no eran muy grandes). Los deltas todavía se usan actualmente en la mayoría de los SCMs.&lt;br /&gt;&lt;br /&gt;Algunos inconvenientes y carencias que merece la pena mencionar:&lt;br /&gt;&lt;li&gt;Sólo soporta texto&lt;br /&gt;&lt;li&gt;No hay repositorio central. Cada fichero controlado tiene su propio repositorio en el formato de un fichero RCS, guardado cerca del propio fichero. Por ejemplo, el fichero RCS para /usr/project/foo.c será /usr/project/foo.c,v.&lt;br /&gt;&lt;li&gt;Para crear un workspace (espacio de trabajo) los programadores creaban links simbólicos a los directorios RCS. Ejemplo: symlink de /usr/home/John/RCS a /usr/project/RCS.&lt;br /&gt;&lt;li&gt;La nomenclatura de versiones y ramas es… hostil. Una versión podría llamarse 1.3 y una rama 1.3.1 y una versión en la rama 1.3.1.7.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;La época clásica&lt;/h2&gt;&lt;br /&gt;En el mundo de los SCM, la época clásica fueron los 90.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;CVS&lt;/h3&gt;&lt;br /&gt;Todo empezó con CVS (Concurrent Version System) en 1990. Era capaz de gestionar múltiples versiones desarrolladas de forma concurrente en diferentes máquinas y almacenadas en un servidor central. La era cliente-servidor estaba naciendo y los desarrolladores sacaron partido de ello.&lt;br /&gt;&lt;br /&gt;CVS era capaz de gestionar versiones de forma decente. Incluso soportaba ramas y merges (branching and merging) aunque no era muy bueno haciéndolo. Y esa es una de las razones por las que hay tantos programadores a los que les da miedo la letra “B” y la letra “M”… :P&lt;br /&gt;&lt;br /&gt;CVS no trazaba cambios en directorios o en nombres de ficheros (¡olvidad los refactors!) y necesitaba hacer bloqueos de todo el repositorio para muchas operaciones. CVS está totalmente desactualizado ahora pero… ¡funcionaba en los 90! Regla de oro: si estás usando CVS… no le des muchas vueltas… ¡¡cambia a otro sistema moderno!! Cualquiera (repito, cualquiera) será mejor. (Esto va dedicado a los equipos que evalúan 3 SCMs, encuentran pegas a todos y … ¡¡siguen usando un CVS o un VSS!!. En fin.).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;PVCS&lt;/h3&gt;&lt;br /&gt;Polytron Version Control System (PVCS) vio la luz en 1985 y después fue cambiando de mano en mano a través de compras de empresas y fusiones: Polytron, Sage, Merant y finalmente Serena.&lt;br /&gt;Es un sistema viejo y desactualizado, inicialmente diseñado para evitar desarrollo concurrente usando bloqueos de ficheros, pero todavía mantenido por Serena Software.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Clearcase&lt;/h3&gt;&lt;br /&gt;En 1992 nació una de las mayores bestias de la historia del SCM. Clearcase estaba claramente adelantado a su tiempo y para muchos es todavía el SCM más potente jamás construido.&lt;br /&gt;Sin evolución clara, demasiado caro y demasiado complejo de administrar (en los viejos tiempos tenías que compilar un nuevo kernel de Unix para que funcionase la bestia!), el bueno de CC ya no es el tío guay de la ciudad, de hecho casi ya no se puede leer nada sobre él en la red. Pero, es todavía muy bueno con ramas y merges y tiene algunas características únicas, como las legendarias “vistas dinánicas”. Aunque potente, CC viene de una época en la que el espacio en disco era muy escaso y las redes eran LANs, sin preocupaciones por cosas como la latencia o trabajar tras un firewall.&lt;br /&gt;&lt;br /&gt;Atria, el desarrollador original de Clearcase, se fusionó con Pure (cuando lo dirigía Reed Hastings, ahora el jefe de Netflix), luego fue adquirido por Rational y finalmente por IBM. Y entonces el poderoso Clearcase dejó de evolucionar. Bueno, evolucionó hacia UCM a principios de 2000, que básicamente sirvió para quitarle todas las características buenas y dejar sólo las malas, junto con un precio demasiado caro. No fue muy buena idea.&lt;br /&gt;&lt;br /&gt;A pesar de todo Clearcase sigue siendo uno de los SCMs más usados por grandes empresas en todo el mundo, y según los analistas, uno de los líderes en cuanto a facturación.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;VSS&lt;/h3&gt;&lt;br /&gt;Todos los sistemas de mi lista han tenido su momento y ventajas claras respecto a sus predecesores. Todos menos Visual Source Safe. VSS ha sido un sistema flojo desde el primer día, forzando a los desarrolladores a coordinar su trabajo mediante bloqueos, prohibiendo el desarrollo paralelo y creando una cultura de “miedo al merge”. Nota: vale, ya sé que se puede llegar a hacer un poco de desarrollo paralelo con VSS configurándolo para trabajar sin el modo de bloqueo… pero vamos, que creo que es menos doloroso dormir en una cama de clavos.&lt;br /&gt;&lt;br /&gt;Lento, lleno de fallos, limitado por todos los lados, VSS ha sido uno de los sistemas más utilizados por los desarrolladores en Windows en todo el mundo (¡ojo! Por los desarrolladores EN Windows, no los desarrolladores DE Windows, que en Microsoft la gente de los equipos punteros jamás utilizó esta aberración). VSS todavía está en uso, extendiendo el dolor y el miedo entre ingenuos programadores de buen corazón.&lt;br /&gt;Pero sí que hay una cosa en la que VSS estaba por delante de su tiempo: debería pertenecer a la categoría de “la oscura edad media del SCM” (ver debajo) en lugar de a la era clásica.&lt;br /&gt;VSS, eso sí, es totalmente gráfico y esa ha sido una de las principales razones de que se haya usado tanto (eso y que venía con Visual Studio ;) ).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Perforce&lt;/h3&gt;&lt;br /&gt;Perforce (P4) es una de las empresas de software independientes que están totalmente centradas en SCM y que luchan por llevarse el oro del mercado SCM contra los grandes gigantes del sector. Es todavía uno de los líderes del mercado en el rango de empresas medianas con equipos grandes, y tiene una presencia muy fuerte en ciertos nichos de mercado, como por ejemplo el sector de los video-juegos.&lt;br /&gt;Cuando salió a mediados de los 90, Perforce era uno de los sistemas más potentes y asequibles hasta la fecha. Estaba infinitamente por delante de VSS y de SVN aunque nunca llegó al nivel de Clearcase (ni en funcionalidad, y me refiero a branching y merging, ni en precio y complejidad), pero podía machacarlo en precio, rendimiento y facilidad de uso.&lt;br /&gt;&lt;br /&gt;Al ser un sistema centralizado y no demasiado bueno con ramas y merges (las ramas se implementan como subdirectorios) Perforce no parece ser la mejor opción de futuro, pero es innegable que es muy sólido, muy maduro y muy bien establecido en el mercado. Eso le ayudará a seguir creciendo. Ahora mismo, Perforce es todavía el sistema que gestiona todos los grandes repositorios dentro de Google. No está mal, ¿no?&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Y llegó la edad media&lt;/h2&gt;&lt;br /&gt;Un tiempo de oscuridad en la que la mayor parte de los avances previos se perdieron y sistemas claramente menguados florecieron…&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Subversion&lt;/h3&gt;&lt;br /&gt;Subversion fue concebido como  un “CVS mejorado” y sus desarrolladores lo lograron: es mejor que CVS. Punto.&lt;br /&gt;&lt;br /&gt;Mientras que sistemas como Clearcase eran ya perfectamente capaces de gestionar el desarrollo paralelo mediante branching y merging, Subversion (SVN) es el responsable de que una generación entera de desarrolladores se formase con la idea de que hay que evitr las ramas y los merges a toda costa. Esto creó un daño global que todavía persiste y sólo está empezando a curarse gracias al auge de los DVCS.&lt;br /&gt;SVN estaba cerca de P4 en características  y se extendió como una enfermedad contagiosa: más de 5 millones de desarrolladores usan SVN cada día en todo el mundo. ¡¡Tremendo!!&lt;br /&gt;&lt;br /&gt;Subversion es muy sencillo y evangelizó a todo el mundo en el “desarrollo en línea principal” (mainline development model). Una técnica propensa a errores en proyectos que no sean de juguete, ayudó a crear técnicas como “integración continua” como forma de “evitar merges”. Aunque la idea es buena, muchos de los conceptos en las que se basa surgen únicamente de las limitaciones de SVN.&lt;br /&gt;&lt;br /&gt;El mismísimo Linus Torvalds cargó contra Subversion cuando presentó Git en 2006.&lt;br /&gt;La realidad es que Subversion ya no está de moda y la mayor parte de los proyectos open source importantes en todo el mundo se han ido de Subversion durante 2009 y 2010. Un buen síntoma de lo equivocado que Subversion estaba. Pero todavía está muy extendido y no será extirpado en décadas.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;AccuRev&lt;/h3&gt;&lt;br /&gt;Aunque nació en una época de oscuridad marcada por SVN, AccuRev fue diseñado como una forma nueva de hacer control de versiones. Su forma original de hacer las cosas todavía es novedosa parra muchos desarrolladores.&lt;br /&gt;AccuRev tiene un soporte muy bueno de ramas (“streams” en su jerga) y de merges. Ha jugado un papel esencial ayudando a empresas a moverse fuera de Clearcase y de sistemas más antiguos como CVS.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;El Renacimiento&lt;/h2&gt;&lt;br /&gt;Tras una época de oscuridad una nueva generación de sistemas SCM rompieron el “status quo”. “El mercado de SCM es muy maduro y estable” repiten todavía algunos analistas como loros, pero la nueva generación ha entrado en escena rompiendo con todo lo establecido.&lt;br /&gt;&lt;br /&gt;Capaces de romper las cadenas de Internet y de trabajar desconectados (unplugged, como las estrellas de rock más “cool”), la nueva generación es también excelente haciendo branching y merging, lo que se conoció como “la madre de todos los males” durante la anterior edad oscura. Estos sistemas han podido romper con el pasado y proclamar “las ramas y los merges son buenos” marcando una nueva dirección.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;BitKeeper&lt;/h3&gt;&lt;br /&gt;BitKeeper fue uno de los innovadores en el área de los DVCS. Diseñado por Larry McVoy (que antes trabajó en TeamWare, el sistema interno de control de versiones de la mismísima Sun Microsystems, construido usando SCCS como base y con una larga historia de evolución por detrás) saltó a la fama en 2002 cuando los desarrolladores del kernel de Linux comenzaron a usarlo. Entonces comenzó una guerra de email con algunos programadores protestando por usar un sistema comercial para gestionar el desarrollo del proyecto open source más conocido del mundo. Las cosas se pusieron todavía peor en 2005 cuando las luchas entre los programadores principales del kernel fueron a más. BitMover, la empresa detrás del producto, se comenzó a preocupar por que hicieran ingeniería inversa a su código, cortó el soporte a los proyectos open source e irónicamente desencadenó la creación de Git para cerrar el hueco creado.&lt;br /&gt;Para más información echa un vistazo a &lt;a href="http://en.wikipedia.org/wiki/Bitkeeper"&gt;http://en.wikipedia.org/wiki/Bitkeeper&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Git&lt;/h3&gt;&lt;br /&gt;Linus Torvalds, el mismísimo creador de Linux, diseñó e implementó la primera versión de Git (prácticamente durante un fin de semana, al puro estilo hacker) para dar a sus programadores del kernel una alternativa a BitKeeper. Linus no sólo hizo el diseño original (simple, sencillo… ¡¡genial!!) sino que fue vital para promover el proyecto con su estilo único (mira See &lt;a href="http://codicesoftware.blogspot.com/2007/05/linus-torvalds-on-git-and-scm.html"&gt;http://codicesoftware.blogspot.com/2007/05/linus-torvalds-on-git-and-scm.html&lt;/a&gt;). Durante su famosa presentación criticó duramente (vale, insultó abiertamente) a CVS, Subversion e incluso Perforce. Dijo perlas como “Subversion ha sido el proyecto con menos sentido que jamás se ha empezado”, “si te gusta usar CVS es que deberías estar en un centro mental o algo así” y “Deja de usar Perforce, es triste, pero es cierto”. Puedes odiarlo o adorarlo pero está claro que Linus dejó algo muy claro: la edad media de los controles de versiones ha pasado y ahora los DVCS dominarán el mundo, erradicando el miedo ancestral al branching y merging, un concepto vital en todos los sistemas de control de versiones distribuidos.&lt;br /&gt;&lt;br /&gt;Durante los siguientes años, y especialmente desde 2009, todos los proyectos open source importantes del mundo migraron de Subversion a Git (y aquí www.github.com ha sido clave mediante un fantástico sistema de hosting) convirtiéndolo en uno de los SCM más guays y potentes del mundo.&lt;br /&gt;&lt;br /&gt;Git se basa en una estructura de grafo acíclico dirigido (DAG, directed acyclic graph) en el que la principal unidad de cambio es el changeset (o commit en su jerga). Git implementa merge tracking completo pero a nivel de “commit” en lugar de a nivel de revisión (como, por ejemplo, hace Clearcase). Es muy rápido y las únicas pegas son el manejo de ficheros grandes y la restricción de tener que replicar los repositorios completos.&lt;br /&gt;&lt;br /&gt;Git está claramente influenciado por sus raíces como herramienta de desarrollo del kernel de Linux y obviamente no es el sistema más fácil de usar del mundo. Pero definitivamente será el SCM de la próxima década. Recomiendo leer el siguiente libro, que me parece buenísimo: &lt;a href="http://peepcode.com/products/git-internals-pdf"&gt;http://peepcode.com/products/git-internals-pdf&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Mercurial&lt;/h3&gt;&lt;br /&gt;Mercurial (Hg) fue anunciado en Abril de 2005, también a toda prisa tras la decisión de BitMover de eliminar el soporte de su versión gratuita. Hg es el otro DVCS open source junto con Git. Incluso pueden conectarse bastante bien: Scott Chacon, el “evangelista de Git” y uno de los mejores escritores sobre SCM que he visto, preparó una integración bastante buena: &lt;a href="http://mercurial.selenic.com/wiki/HgGit"&gt;http://mercurial.selenic.com/wiki/HgGit&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Pero Hg es bastante diferente de Git en cuanto a su diseño interno. Ambos comparten el concepto de commit/changeset como unidad de cambio. Git implementa sus commits basándose en árboles, cada árbol apunta a un árbol más antiguo y así sucesivamente (de ahí lo del grafo acíclico). Con Hg cada changeset es una lista completa de todos los ficheros y directorios, y se le llama revlog (internamente la implementación del propio revlog está basado en deltas por lo que el almacenamiento es eficiente).&lt;br /&gt;&lt;br /&gt;Para más información sobre Hg, incluyendo cómo funciona internamente, merece la pena ver &lt;a href="http://mercurial.selenic.com/wiki/Design"&gt;http://mercurial.selenic.com/wiki/Design&lt;/a&gt; y &lt;a href="http://mercurial.selenic.com/wiki/DeveloperInfo"&gt;http://mercurial.selenic.com/wiki/DeveloperInfo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Mercurial también proporciona un merge muy potente pero su sistema de ramas es un poco diferente a los otros controles de versiones. Tiene “ramas con nombre” pero la preferencia es crear un nuevo repositorio como rama separada en lugar de tener varias “cabezas” (heads) dentro de uno sólo.&lt;br /&gt;&lt;br /&gt;Joel Spolsky (el de joelonsoftware.com, un blog buenísimo) ha escrito un tutorial muy bueno sobre Hg (hginit.com). La empresa de Spolsky, Fog Creez Software, acaba de lanzar Kiln, un SCM comercial aprovechando el esfuerzo open source hecho con Hg… No es listo ni nada el tío, y nosotros desarrollando un SCM completo… :P&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Darcs&lt;/h3&gt;&lt;br /&gt;Darcs (Darcs Advanced Revision Control System) es otro intento de quitarse del medio a SVN y a CVS. Empezó en 2002 y ha continuado evolucionando desde entonces, llegando a la versión 2.5 en Noviembre de 2010.&lt;br /&gt;Las mayores limitaciones de Darcs han sido siempre el rendimiento y su forma un poco diferente de manejar la historia: en lugar de hacer “snapshots” (commits o changesets capturando un estado completo del proyecto en un instante dado) maneja “patches” pero de un modo que hace que recorrer la historia sea difícil de entender (un estado concreto puede no haber sido nunca una situación real del desarrollo).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Bazaar&lt;/h3&gt;&lt;br /&gt;Bazaar (bzr) es otro DVCS open source que intenta traer un poco de aire fresco al mundo del SCM. A pesar de ser menos usado que Git y que Mercurial, Bazaar introduce características interesantes como la posibilidad de trabajar también de forma centralizada (de hecho los DVCS puros no consideraban tener servidores centrales en su diseño original).&lt;br /&gt;Bazaar ha sido desarrollado por Canonical (sí, la empresa de Ubuntu!) y se pasó a licencia GNU al principio de 2008.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Plastic SCM&lt;/h3&gt;&lt;br /&gt;Plastic es un DVCS diseñado para ser usado en empresas en lugar de en proyectos open source a diferencia de Git y Mercurial. La primera versión de Plastic salió a finales de 2006 centrándose en branching y merging, con trazabilidad de merge completa (merge tracking) y soporte de renombrados en los merges. Proporciona un entorno de trabajo fundamentalmente gráfico, con muchas visualizaciones como por ejemplo el árbol de historia en 3D o el “explorador de ramas”. Esto es uno de los puntos que lo diferencian de los DVCS open source que están orientados a usuarios que usan más la línea de comandos.&lt;br /&gt;&lt;br /&gt;El objetivo de los desarrolladores de Plastic (recordad que soy uno de ellos) es llegar a equipos pequeños y medianos y cerrar el hueco que había entre los grandes sistemas como Clearcase y los de menor nivel como SVN, con un producto tan potente como los primeros, más fácil de usar, rápido, pero asequible (de hecho hemos lanzado una Community Edition gratuita en Noviembre de 2010).&lt;br /&gt;&lt;br /&gt;Plastic se centra en el concepto de desarrollo paralelo y recomienda el uso del patrón de “rama por tarea” (feature branches). Puede gestionar miles y miles de ramas sin problema. Plastic también es distribuido, soportando desarrollo desconectado, haciendo “push” y “pull” de ramas y gestionando posibles conflictos.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Team Foundation Server&lt;/h3&gt;&lt;br /&gt;Microsoft también ha querido meterse en el mercado de SCM/ALM y lanzó Team Foundation Server (TFS). Un esfuerzo para curar el dolor creado por su propio demonio: Source Safe.&lt;br /&gt;&lt;br /&gt;A pesar de que TFS no es muy bueno como sistema de control de versiones (es el chico nuevo en el barrio SCM pero usando tecnología de la década pasada) viene con un montón de herramientas accesorias como gestión de tareas, sistema de test integrado, etc, al más puro estilo “paquete corporativo con todo en uno”.&lt;br /&gt;&lt;br /&gt;No harás muchas ramas ni muchos merges ni desarrollo distribuido si vas a TFS, pero quizá tu empresa ya lo tiene junto a su subscripción de MSDN.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-230056643391925965?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/230056643391925965/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=230056643391925965' title='18 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/230056643391925965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/230056643391925965'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/11/la-historia-del-control-de-versiones.html' title='La historia del control de versiones'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_z6qpykplUvI/TO-T1e_vRgI/AAAAAAAAA-M/N0az2DmCtAo/s72-c/scmhistory-es.png' height='72' width='72'/><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-8854790327780368862</id><published>2010-09-28T18:42:00.001+02:00</published><updated>2010-09-28T18:55:39.449+02:00</updated><title type='text'>Agile Retrospectives (III): Actividades (I)</title><content type='html'>&lt;h2&gt;Actividades para preparar el escenario.&lt;/h2&gt; &lt;h3&gt;Check-in&lt;/h3&gt; &lt;p&gt;Haz una pregunta y que cada miembro la vaya respondiendo, por turnos, en una o dos palabras. Ejemplo: ¿Cuál es tu impresión del último sprint?&lt;/p&gt; &lt;h3&gt;Focus on / Focus off&lt;/h3&gt; &lt;p&gt;Prepara pares de palabras o conceptos interesantes, forma grupos en los cuales cada grupo discuta un par diferente.&lt;/p&gt; &lt;h3&gt;ESVP&lt;/h3&gt; &lt;p&gt;Cada miembro anota, anónimamente, sus impresiones sobre hacer el retrospective según su opinión o estado de ánimo: &lt;em&gt;Explorer &lt;/em&gt;(interés alto), &lt;em&gt;Shopper &lt;/em&gt;(interesado pero que sea rápido que tengo que volver a mi trabajo), &lt;em&gt;Vacationer&lt;/em&gt; (estoy aquí por perder tiempo), &lt;em&gt;Prisoner &lt;/em&gt;(estoy aquí por obligación; preferiría estar trabajando).&lt;/p&gt; &lt;h3&gt;Working agreements&lt;/h3&gt; &lt;p&gt;Hacer grupos. Cada grupo propone una serie de ideas para comportamientos efectivos y mejorar la productividad. Al final se exponen y se eligen de 3 a 7 propuestas. El equipo al completo se hace responsable de que todos lo cumplan.&lt;/p&gt; &lt;h2&gt;Actividades para recopilar datos.&lt;/h2&gt; &lt;h3&gt;Timeline&lt;/h3&gt; &lt;p&gt;En grupos, decidir eventos, actividades, etc. importantes durante la iteración que acaba de terminar. Momentos clave, momentos buenos, malos, etc. Recopilar los datos y elaborar una línea temporal común.&lt;/p&gt; &lt;h3&gt;Triple Nickels&lt;/h3&gt; &lt;p&gt;Formar gurpos. Cada miembro tiene cinco minutos para anotar acciones de mejora en un papel. Transcurrido ese tiempo, se lo pasa el miembro de su derecha. Al final, se recopilan las notas y se ponen en común. El objetivo es tener la mayor cantidad de ideas posible. Si el equipo es menor de 7 u 8 miembros, hazlo en un sólo grupo. Se escriben sentimientos, eventos, reacciones importantes que hayan ocurrido durante el sprint.&lt;/p&gt; &lt;h3&gt;Color code dots&lt;/h3&gt; &lt;p&gt;Usar junto con Timeline. Una vez tenemos el timeline, cada miembro pinta un círculo rojo o verde según la impresión que le ha causado cada evento del Timeline. Al final, analizar qué actividades han dejado una mejor / peor impresión y discutir el porqué.&lt;/p&gt; &lt;h3&gt;Mad Sad Glad&lt;/h3&gt; &lt;p&gt;Identificar con colores en el timeline qué períodos hicieron sentir a cada miembro estresado, triste o contento. Extraer conclusiones y analizar períodos mejores y peores.&lt;/p&gt; &lt;h3&gt;Locate Strenghts&lt;/h3&gt; &lt;p&gt;Preguntar, por parejas, los puntos fuertes del sprint. No se trata de dialogar ni discutir, sino de entrevistar.&lt;/p&gt; &lt;h3&gt;Satisfaction Histogram&lt;/h3&gt; &lt;p&gt;Hacer un historgrama con las impresiones recogidas en cada sprint de cada miembro. Acota el grado de satisfacción y que anónmamente, cada miembro escriba su número. Variación: en lugar de impresión personal, valoración como equipo. Analizar resultados al final y evolución del historgrama.&lt;/p&gt; &lt;h3&gt;Team radar&lt;/h3&gt; &lt;p&gt;Se establece una serie de factores u objetivos a analizar y cada miembro puntúa desde el punto de vista del equipo: ¿cómo de bien hace el equipo el factor …? Discutir los resultados.&lt;/p&gt; &lt;h3&gt;Like to Like&lt;/h3&gt; &lt;p&gt;Cada miembro destaca los eventos que han ido especialmente bien en su opinión. Es importante analizar la opinión de cada uno: cada miembro elabora una lista con 3 cosas que hay que dejar de hacer; 3 cosas que hay que seguir haciendo y 3 cosas que habría que empezar a hacer. Se van destapando uno a uno estos factores y los demás destapan “cartas de calidad” que manifiestan su valoración. Para agilizar, la última carta en ser destapada queda eliminada. Dar tiempo a pensar antes del destape.&lt;/p&gt; &lt;h2&gt;Y en la siguiente entrega…&lt;/h2&gt; &lt;p&gt;Actividades para generar reflexiones, para decidir qué hacer y para cerrar el retrospective.&lt;/p&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;p&gt;Referencias:&lt;/p&gt; &lt;p&gt;&lt;b&gt;Agile Retrospectives – Making good teams great&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;Esther Derby, Diana Larsen&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-8854790327780368862?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/8854790327780368862/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=8854790327780368862' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8854790327780368862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8854790327780368862'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/09/agile-retrospectives-iii-actividades-i.html' title='Agile Retrospectives (III): Actividades (I)'/><author><name>Luix</name><uri>http://www.blogger.com/profile/07097113195001698472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_7ogr8wNjLG4/SDCpP_C1POI/AAAAAAAAAGo/gxjmeNyHIu4/S220/buk16-02-2008+003.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-4897951752059037552</id><published>2010-08-30T11:50:00.003+02:00</published><updated>2010-08-30T11:54:37.805+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Recortes, el arma secreta de la gestión de proyectos</title><content type='html'>Una nueva entrada en el blog de agile-cyl que creo que es interesante! :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://agilecyl.org/2010/08/26/recortes-el-arma-secreta-de-la-gestion-de-proyectos"&gt;http://agilecyl.org/2010/08/26/recortes-el-arma-secreta-de-la-gestion-de-proyectos&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-4897951752059037552?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/4897951752059037552/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=4897951752059037552' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/4897951752059037552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/4897951752059037552'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/08/recortes-el-arma-secreta-de-la-gestion.html' title='Recortes, el arma secreta de la gestión de proyectos'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-130259487092896152</id><published>2010-08-04T11:59:00.004+02:00</published><updated>2010-08-04T12:04:05.734+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><title type='text'>Nuevo "view switcher" y vídeos en Mac</title><content type='html'>En 3.0 hemos introducido en la GUI una característica que muchos usuarios estaban esperando: poder cambiar de vista activa usando teclas. Algo básico, pero que todavía no teníamos.&lt;br /&gt;&lt;br /&gt;Así que hemos desarrollado un "view switcher" (cambia-vistas): pulsando CTRL-TAB se muestra una ventana que te permite ir saltando de una vista a otra.&lt;br /&gt;&lt;br /&gt;He grabado un vídeo corto, esta vez en Mac OS X en lugar de en Windows, para que se vea un poco de cómo queda Plastic en Mac.&lt;br /&gt;&lt;br /&gt;Por cierto, que es interesante, para los desarrolladores de Mono, ver como su MWF queda con un poco de diseño ;)&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="200"&gt;&lt;param name="movie" value="http://www.youtube.com/v/t_8WizR5Lms&amp;amp;hl=es_ES&amp;amp;fs=1?hd=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/t_8WizR5Lms&amp;amp;hl=es_ES&amp;amp;fs=1?hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="200"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Queda bien, no?&lt;br /&gt;&lt;br /&gt;Tengo algún vídeo más en Mac, mostrando el branch explorer (de nuestro repositorio, así que montones de ramas), que subiré en los próximos días.&lt;br /&gt;&lt;br /&gt;Pero, primero, un vídeo más en Mac, esta vez mostrando la nueva "code review", una de las características importantes en 3.0. (Recordad que el vídeo se puede poner a pantalla completa y en HD)&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="200"&gt;&lt;param name="movie" value="http://www.youtube.com/v/R8zmZFAcSJc&amp;amp;hl=es_ES&amp;amp;fs=1?hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/R8zmZFAcSJc&amp;amp;hl=es_ES&amp;amp;fs=1?hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="200"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Lo bueno de esta característica es que todos los usuarios de Plastic tendrán ahora code review integrada, y además es, que sepamos, la primera code review distribuida...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-130259487092896152?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/130259487092896152/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=130259487092896152' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/130259487092896152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/130259487092896152'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/08/nuevo-view-switcher-y-videos-en-mac.html' title='Nuevo &quot;view switcher&quot; y vídeos en Mac'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-708299704041908951</id><published>2010-07-29T16:51:00.003+02:00</published><updated>2010-07-29T17:10:31.760+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='merge'/><title type='text'>Xmerge para integrar código refactorizado</title><content type='html'>Llevamos unos días con bastante movimiento. Primero &lt;a href="http://codicesoftware-es.blogspot.com/2010/07/acabamos-de-lanzar-plastic-scm-30.html"&gt;lanzamos 3.0&lt;/a&gt;, luego anunciamos el &lt;a href="http://codicesoftware-es.blogspot.com/2010/07/xdiff-para-ver-diferencias-de-codigo.html"&gt;nuevo Xdiff&lt;/a&gt;, después hicimos una comparativa entre varios controles de versiones bajo escenarios de carga, y &lt;a href="http://codicesoftware.blogspot.com/2010/07/version-control-scalability-shoot-out.html"&gt;machacamos a Perforce y a Subversion&lt;/a&gt;, así que ahora voy a ver si puedo explicar, de la forma más simple posible, cómo funciona el nuevo Xmerge.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Mezclando código que se ha movido&lt;/h2&gt;&lt;br /&gt;Si no te aclaras muy bien con lo que estoy explicando sobre diff y merge, creo que sería mejor que empezases con el &lt;a href="http://codicesoftware-es.blogspot.com/2010/07/xdiff-para-ver-diferencias-de-codigo.html"&gt;post que escribí la semana pasada sobre Xdiff&lt;/a&gt;. Hay un vídeo corto y todo por si no te apetece mucho leer :-P.&lt;br /&gt;&lt;br /&gt;Básicamente Xmerge aplica la tecnología que hemos desarrollado para Xdiff dentro del proceso de merge (mezcla o integración). El escenario es muy sencillo:&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Tenemos un fichero con algo de código&lt;br /&gt;&lt;li&gt;Tu vas y mueves un método de sitio, desde la parte de arriba hasta abajo, por ejemplo (porque prefieres los privados al final, o símplemente porque sí).&lt;br /&gt;&lt;li&gt;Mientras tú haces eso, en mi propia rama de tara, yo voy y cambio el método en su posición "original".&lt;br /&gt;&lt;li&gt;Y ahora te toca hacer el merge... ¿Resultado? Pues un rollo a menos que tengas Xmerge :-P&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Código original&lt;/h2&gt;&lt;br /&gt;Vamos a empezar con un código muy sencillo como el de la siguiente imagen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_z6qpykplUvI/TE3Y0uspOLI/AAAAAAAAAzs/D5Oo4BE6OLo/s1600/initialcode.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://3.bp.blogspot.com/_z6qpykplUvI/TE3Y0uspOLI/AAAAAAAAAzs/D5Oo4BE6OLo/s400/initialcode.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5498289120489322674" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Alguien mueve el método "multiply" hasta abajo&lt;/h2&gt;&lt;br /&gt;El método "multiply" es privado así que vamos a ponerlo al final.&lt;br /&gt;&lt;br /&gt;Una vez movido comprobamos las diferencias en Plastic:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_z6qpykplUvI/TE3ZIJrG6OI/AAAAAAAAAz0/Bo_ryrb2yrU/s1600/changesontask001.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://2.bp.blogspot.com/_z6qpykplUvI/TE3ZIJrG6OI/AAAAAAAAAz0/Bo_ryrb2yrU/s400/changesontask001.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5498289454148151522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Y mientras tanto alguien 'refactoriza' el método original&lt;/h2&gt;&lt;br /&gt;El método "multiply" no es precísamente una maravilla... :). Vamos a cambiar alguna cosa:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_z6qpykplUvI/TE3ZW5Uyd-I/AAAAAAAAAz8/5Duszo0pkHs/s1600/changesontask002.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 224px;" src="http://1.bp.blogspot.com/_z6qpykplUvI/TE3ZW5Uyd-I/AAAAAAAAAz8/5Duszo0pkHs/s400/changesontask002.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5498289707457607650" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Estructura de ramas antes de integrar&lt;/h2&gt;&lt;br /&gt;Aquí está la estructura de ramas tal y como la dibuja Plastic justo antes de hacer el merge (recuerda que he usado una rama diferente para cada cambio, rama por tarea... lo de siempre!).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_z6qpykplUvI/TE3ZgvDFbhI/AAAAAAAAA0E/N36nfdbg13k/s1600/branchexplorer.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 326px; height: 333px;" src="http://3.bp.blogspot.com/_z6qpykplUvI/TE3ZgvDFbhI/AAAAAAAAA0E/N36nfdbg13k/s400/branchexplorer.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5498289876497690130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Ejecutando xmerge&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Cuando hagamos el merge de las dos ramas hacia /main (bueno, la primera no va a protestar porque es un cambio directo) obtendremos un conflicto como el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Lo bueno de Xmerge es que lo detecta y te muestra un botón 'xmerge' para avisarte de que te puede echar una mano para resolver este lío.&lt;/span&gt; (Haz clic en la imagen de debajo para hacerla más grande).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_z6qpykplUvI/TE3Z4GJmM2I/AAAAAAAAA0M/hP3tUSWV8rY/s1600/xmerge.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 278px;" src="http://2.bp.blogspot.com/_z6qpykplUvI/TE3Z4GJmM2I/AAAAAAAAA0M/hP3tUSWV8rY/s400/xmerge.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5498290277836010338" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Vale, de qué va esto?&lt;br /&gt;&lt;br /&gt;Xmerge detecta que el bloque de código que estás intentando mezclar ha sido movido. Así que detectará también a dónde se ha movido y lanzará un "submerge" sólo de los fragmentos involucrados. Así puedes resolver el conflicto de manera más simple y una vez que lo tengas, el resultado se "pegará" en la herramienta de merge original.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_z6qpykplUvI/TE3agQ59CMI/AAAAAAAAA0U/WMrnoIbzRUY/s1600/subxmerge.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 182px;" src="http://2.bp.blogspot.com/_z6qpykplUvI/TE3agQ59CMI/AAAAAAAAA0U/WMrnoIbzRUY/s400/subxmerge.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5498290967917955266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No sé si queda claro porque es un caso avanzado, pero ninguna herramienta es capaz de hacer algo como esto... Es la tecnología de merge más avanzada del mercado! :)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Resultado del cross-merged&lt;/h2&gt;&lt;br /&gt;Allá va:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_z6qpykplUvI/TE3apZWqPnI/AAAAAAAAA0c/i4qgjdGSxII/s1600/xmergeresult.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 278px;" src="http://3.bp.blogspot.com/_z6qpykplUvI/TE3apZWqPnI/AAAAAAAAA0c/i4qgjdGSxII/s400/xmergeresult.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5498291124804664946" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Y la peli...&lt;/h2&gt;&lt;br /&gt;Bueno, para los que prefieran "ver la peli en lugar de leer el libro"... :)&lt;br /&gt;&lt;br /&gt;Ponedlo a pantalla completa porque lo he grabado a 1024x768 así que debería verse muy bien.&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/jeDIoKtd2ks&amp;amp;hl=en_US&amp;amp;fs=1?rel=0&amp;amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/jeDIoKtd2ks&amp;amp;hl=en_US&amp;amp;fs=1?rel=0&amp;amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="480"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Conclusión&lt;/h2&gt;&lt;br /&gt;Bueno, no es la funcionalidad más sencilla de explicar de todas las que hemos desarrollado así que... preguntad!&lt;br /&gt;&lt;br /&gt;Esta es nuestra segunda versión de Xmerge. La primera (en Plastic 2.8) era ya capaz de hacer todo lo del "submerge" pero el usuario tenía que localizar el código movido a mano. Ahora es el propio Xmerge el que es capaz de localizar el código movido (de eso va toda la tecnología, claro).&lt;br /&gt;&lt;br /&gt;Estamos preparando más cosas en esta línea, así que atentos al blog :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-708299704041908951?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/708299704041908951/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=708299704041908951' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/708299704041908951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/708299704041908951'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/07/xmerge-para-integrar-codigo.html' title='Xmerge para integrar código refactorizado'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_z6qpykplUvI/TE3Y0uspOLI/AAAAAAAAAzs/D5Oo4BE6OLo/s72-c/initialcode.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-7680642392535544484</id><published>2010-07-22T13:27:00.002+02:00</published><updated>2010-07-22T13:31:41.078+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><title type='text'>Xdiff para ver diferencias de código movido</title><content type='html'>Una de las características más importantes que acabamos de sacar para 3.0 es el nuevo Xdiff. Lo llamamos "cross-diff" porque localiza código movido y lo solíamos dibujar en papel con líneas que se cruzaban entre el código original y el movido...&lt;br /&gt;&lt;br /&gt;Bueno, vamos a ver por qué esto es tan bueno...&lt;br /&gt;&lt;br /&gt;Empecemos con un trozo de código como el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_z6qpykplUvI/TEgko10JPZI/AAAAAAAAAy0/30tkPpieM54/s1600/xdiff00.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 149px;" src="http://3.bp.blogspot.com/_z6qpykplUvI/TEgko10JPZI/AAAAAAAAAy0/30tkPpieM54/s400/xdiff00.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5496683629264846226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y entonces movemos un fragmento un poco hacia abajo:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/TEglpNByZvI/AAAAAAAAAy8/Gf8xn3mDrhM/s1600/xdiff01b.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 146px;" src="http://1.bp.blogspot.com/_z6qpykplUvI/TEglpNByZvI/AAAAAAAAAy8/Gf8xn3mDrhM/s400/xdiff01b.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5496684735007713010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y después de haberlo movido modificamos el código como se ve aquí:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/TEgmdhDsMOI/AAAAAAAAAzE/_-IteMLWovE/s1600/xdiff03a.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 147px;" src="http://1.bp.blogspot.com/_z6qpykplUvI/TEgmdhDsMOI/AAAAAAAAAzE/_-IteMLWovE/s400/xdiff03a.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5496685633737601250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y a ver qué es lo que puede hacer el Xdiff de Plastic!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/TEgmrGnWoRI/AAAAAAAAAzM/MBTS8msVOEw/s1600/xdiff03b.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 233px;" src="http://1.bp.blogspot.com/_z6qpykplUvI/TEgmrGnWoRI/AAAAAAAAAzM/MBTS8msVOEw/s400/xdiff03b.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5496685867157594386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Como veis puede localizar código que se ha movido incluso aunque después se haya modificado. Y se puede hacer click en el botón de "mostrar diferencias" que lanza un nuevo "subdiff" con el fragmento que ha detectado como movido para poder ver en detalle qué ha cambiado.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/TEgm378Sw2I/AAAAAAAAAzU/Pg846C8xF_U/s1600/xdiff04.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 88px;" src="http://4.bp.blogspot.com/_z6qpykplUvI/TEgm378Sw2I/AAAAAAAAAzU/Pg846C8xF_U/s400/xdiff04.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5496686087630930786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mola, o no???&lt;br /&gt;&lt;br /&gt;Podemos detectar el código movido en cualquier lenguaje de programación porque el algoritmo no se basa en parsing sino en detección de texto plano (os suena Levenstein?? :-P).&lt;br /&gt;&lt;br /&gt;En el siguiente vídeo se puede ver el Xdiff en acción.&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/kpRGtnQQRPs&amp;amp;hl=es_ES&amp;amp;fs=1?color1=0xe1600f&amp;amp;color2=0xfebd01"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/kpRGtnQQRPs&amp;amp;hl=es_ES&amp;amp;fs=1?color1=0xe1600f&amp;amp;color2=0xfebd01" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Espero que os guste!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-7680642392535544484?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/7680642392535544484/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=7680642392535544484' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/7680642392535544484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/7680642392535544484'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/07/xdiff-para-ver-diferencias-de-codigo.html' title='Xdiff para ver diferencias de código movido'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_z6qpykplUvI/TEgko10JPZI/AAAAAAAAAy0/30tkPpieM54/s72-c/xdiff00.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-8182936160586636713</id><published>2010-07-19T15:34:00.005+02:00</published><updated>2010-07-19T18:53:46.291+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><title type='text'>Acabamos de lanzar Plastic SCM 3.0!</title><content type='html'>¡¡Plastic SCM 3.0 ya está disponible para descargar!!&lt;br /&gt;&lt;br /&gt;Nos ha costado casi 400mil líneas de código y 83 sprints (usamos SCRUM) llegar aquí desde la versión 1.0, pero 3.0 es la mejor "release" que hemos hecho hasta ahora.&lt;br /&gt;&lt;br /&gt;Por un lado tenemos muchas características nuevas: desde Xmerge/Xdiff (capaz de mostrar diferencias en los merges y en las diferencias, algo que ninguna otra herramienta del mercado tiene!) hasta revisión de código integrada, y por otro muchísimas mejoras de usabilidad (cosas que nos habían pedido varias veces, otras que hemos encontrado nosotros mismos) y como siempre de rendimiento (3.0 es un 30% más rápido que 2.9 en nuestras pruebas de carga).&lt;br /&gt;&lt;br /&gt;En Códice tenemos un equipo mucho más pequeño que el de nuestros competidores: desde Accurev (www.accurev.com) a Perforce (www.perfoce.com) pasando por Clearcase (el sistema más extendido a nivel empresarial, ahora de IBM), Team Foundation Server (el ALM de Microsoft, que a nivel de control de versiones es un chiste comparado con Plastic) e incluyendo Subversion y los otros DVCS open source como Git y Mercurial, todos tienen un equipo de desarrollo al menos cuatro veces más grande (echad un vistazo al número de 'committers' diarios en Git). Por eso estamos especialmente orgullosos de 3.0, porque nuestro 'pequeño equipo' es capaz de producir uno de los SCMs más avanzados del mercado: realmente Plastic proporciona de todo, desde distribuido (ningún otro sistema comercial excepto BitKeeper es distribuido, por mucho que diga su marketing engañoso! :-P) hasta manejo ágil y avanzado de ramas, representaciones gráficas, etc. La verdad es que un equipo más pequeño no es una desventaja, más bien todo lo contrario.&lt;br /&gt;&lt;br /&gt;Mi objetivo para las próximas semanas es reactivar el blog en español. La verdad es que casi todos nuestros clientes hablan inglés, pero creo que no viene nada mal reforzar un poco el "blog nativo". Espero contar experiencias sobre el desarrollo de 3.0, así como de nuestro propio proceso (SCRUM + branch per task + gestión de releases + testing!) (bendito testing automático!).&lt;br /&gt;&lt;br /&gt;Pero ahora vamos a por la 3.0, ¿qué hay de nuevo?&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Revisión de código integrada (y distribuida): hace unos meses desarrollamos una integración con ReviewBoard. No está mal y aunque algunos de nuestros clientes lo usan (os suena el juego GuitarHero??? Pues la gente de Vicarious Visions usa Plastic + ReviewBoard) al final nosotros nunca lo pusimos en marcha. ReviewBoard, como casi todos los sistemas de 'code review', recibe un parche (patch) y es eso lo que analiza. Para nosotros lo natural es revisar ramas y changesets, y hacerlo de esa forma, no mediante un "intermediario". Así que añadimos esa funcionalidad para 3.0: desde una rama puedes crear una "code review" y añadir comentarios. Muy sencillo. Y lo mejor: también se replica! Es decir, que acabamos de lanzar el primer sistema de code review distribuido del mercado. :)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_z6qpykplUvI/TEBr6ZvGWII/AAAAAAAAAyc/d4kHHRejf1s/s1600/codereview.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 362px;" src="http://2.bp.blogspot.com/_z6qpykplUvI/TEBr6ZvGWII/AAAAAAAAAyc/d4kHHRejf1s/s400/codereview.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5494510196477024386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Shell extension: integración con el Shell de Windows. Nada nuevo porque seguro que todo el mundo ha usado TortoiseSVN (o TortoiseHg, muy común en estos días también), pero algo que nos habían pedido varias veces. Por supuesto, no nos hemos limitado a las operaciones básicas y ahora puedes usar todo Plastic desde la "shellext": sacar vistas, gráficos, etc, etc... Eso ya no lo hacen las "tortugas" :)&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Nuevo importador para Subversion. Bueno, en primer lugar hemos vuelto a escribir el "SVN importer" (los desarrolladores que han trabajado en esto durante meses bromeaban diciendo que ya no trabajaban en una empresa de software sino en el negocio de la "importación-exportación" :-^) que ahora es más rápido, más usable (el wizard es mejor, también la ayuda) y soporta conexión directa mediante el ra_api (raw access) en lugar de sólo automatizando la línea de comandos. Lo hemos probado con más de 100 repositorios de SVN con éxito.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Importador de Perforce: desde que estuvimos en &lt;a href="http://www.gdconf.com/"&gt;GDC 2010&lt;/a&gt; han venido muchas empresas del sector de los video-juegos interesadas en abandonar Perforce para venir a Plastic. ¿Los motivos? Los de siempre: necesitan branching y merging a tope, como todo el mundo! Y necesitan un sistema distribuido, y que sea gráfico... Bueno, el caso es que hemos desarrollado un importador de Perforce que simplifica el proceso de migración. Listo en 3.0.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Nueva vista de "cambios pendientes" en la GUI (y en la shellext): ahora los checkouts + los cambiados (modificados fuera del control de plastic, por ejemplo sobrescribiendo un fichero sin más) + los privados (y potencialmente pendientes de añadir) se muestran juntos y se les puede hacer "checkin" a la vez. Mucho más cómodo que antes, especialmente para usuarios SVN.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_z6qpykplUvI/TEBsAPy3K0I/AAAAAAAAAyk/D823He0UBKM/s1600/pendingchanges.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 190px;" src="http://2.bp.blogspot.com/_z6qpykplUvI/TEBsAPy3K0I/AAAAAAAAAyk/D823He0UBKM/s400/pendingchanges.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5494510296887667522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Xmerge / Xdiff&lt;/span&gt; 2.0: la joya de la corona en 3.0. Hemos estado desarrollando esta tecnología durante mucho tiempo, y por fin ve la luz. ¿De qué va esto de "cross-merge" y "cross-diff"? Símplemente, de detectar código movido en las diferencias. Editas un fichero, mueves un trozo de código de sitio, lo modificas, y Plastic sigue sabiendo de dónde viene. Y lo mejor, que es capaz de hacerlo con los "merges" también. Suena pretencioso pero... ¡¡nadie más es capaz de hacer esto a día de hoy!! Merece la pena probarlo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_z6qpykplUvI/TEBsFDvlxTI/AAAAAAAAAys/6tvRo67pDu8/s1600/xdiff.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 296px;" src="http://4.bp.blogspot.com/_z6qpykplUvI/TEBsFDvlxTI/AAAAAAAAAys/6tvRo67pDu8/s400/xdiff.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5494510379552064818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;External data storage: una característica totalmente pensada para los equipos de desarrollo de videojuegos que trabajan con ficheros enormes. La idea es poder "extraer" revisiones de la base de datos del repositorio de modo que dejen de ocupar en el "servidor central" pero que todavía sigan siendo accesibles, ya sea bajo demanda (el usuario accede a esa revisión y Plastic le pide que meta un DVD con esos datos, vamos, un DVD o lo que sea) o centralizado (se monta un disco externo en el servidor y se ponen ahí los datos extraídos en lugar de en el repo principal). Útil cuando se manejan ficheros muuuuy grandes.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Annotate en la GUI: ahora el annotate (cm annotate or cm blame) ya no sólo es accesible en la línea de comandos (y en IntelliJ) sino también desde la herramienta gráfica.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_z6qpykplUvI/TEBruXdqFFI/AAAAAAAAAyU/WhvX4cR8OxY/s1600/annotate.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 218px;" src="http://2.bp.blogspot.com/_z6qpykplUvI/TEBruXdqFFI/AAAAAAAAAyU/WhvX4cR8OxY/s400/annotate.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5494509989708567634" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;SQLite backend: otra base de datos más a la lista! Hasta ahora un servidor de Plastic se podía configurar para trabajar contra Oracle, SQL Server, MySQL y Firebird, y a partir de ahora SQLite está también en la lista. Yo lo llevo usando desde hace 3 meses y va muy bien (tan rápido como un MySQL para uso individual), pero claro, está pensado no para servidores centrales (no admite acceso concurrente!) sino para montarte un servidor en un portátil y replicar.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Selector explorer: algo que también nos habían pedido 1 millón de veces: poder explorar selectores, ramas, etiquetas, sin tener que bajar el contenido. Sirve para experimentar con selectores y aprender mejor cómo funcionan.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Mejoras de rendimiento. 3.0 es al menos un 30% más rápido que 2.9 en situaciones de carga. ¿Qué quiere decir esto? Probamos Plastic con un servidor (un QuadCore con 4Gb de RAM, nada del otro mundo) y 100 máquinas cliente simulando usuarios a tope de carga (de hecho realmente la carga simulada es mucho mayor que la de un grupo de 100 desarrolladores, en nuestras pruebas generamos más carga en 20 minutos de test que un grupo de 150 programadores durante un día entero), y con esa configuración optimizamos Plastic y comparamos con otros sistemas, como por ejemplo Subversion. Publicaremos en las próximas semanas los números de Plastic vs SVN, pero os puedo adelantar que, literalmente, volamos mientras SVN se arrastra... y cuanta más carga, más rápidos nosotros y peor Subversion. También se aplica a operaciones individuales. Por ejemplo, un ciclo "add + ci" (añadir un workpace y hacer ci) es mucho más rápido ahora que con 3.0.&lt;br /&gt;&lt;br /&gt;Detallaré cada una de las características en los próximos días, mientras tanto, ¡¡descargad 3.0 y probad todas las nuevas características!! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-8182936160586636713?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/8182936160586636713/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=8182936160586636713' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8182936160586636713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8182936160586636713'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/07/acabamos-de-lanzar-plastic-scm-30.html' title='Acabamos de lanzar Plastic SCM 3.0!'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_z6qpykplUvI/TEBr6ZvGWII/AAAAAAAAAyc/d4kHHRejf1s/s72-c/codereview.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-7959504577937186096</id><published>2010-06-07T14:00:00.001+02:00</published><updated>2010-06-07T14:01:08.168+02:00</updated><title type='text'>Agile Retrospectives (II): Fases</title><content type='html'>&lt;p&gt;En el artículo anterior presentábamos las generalidades de una reunión retrospectiva y algunos consejos. En esta ocasión presentaremos detalladamente las secciones de que debería constar un retrospective, que son:&lt;/p&gt; &lt;ol&gt;&lt;li&gt;Establecer el escenario.&lt;/li&gt;&lt;li&gt;Recoger datos y métricas.&lt;/li&gt;&lt;li&gt;Generar reflexiones y opiniones.&lt;/li&gt;&lt;li&gt;Decidir qué hacer.&lt;/li&gt;&lt;li&gt;Cerrar el retrospective.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;Establecer el escenario&lt;/h2&gt; &lt;p&gt;Introduce el encuentro, procura que todo el mundo diga sus imporesiones en una palabra o dos al comienzo. Sé breve, pero es importante hacer que todo el mundo hable desde el primer minuto, y la mejor manera de hacerlo es solicitando a cada uno una primera impresión muy breve.&lt;/p&gt; &lt;p&gt;Establece el tiempo que durará la reunión y los puntos a tratar. Describe una serie de objetivos o normas que identifican al equipo y que deben cumplirse durante la reunión. Ejemplo: "Todo el mundo debe participar".&lt;/p&gt; &lt;h2&gt;Recoger datos y métricas&lt;/h2&gt; &lt;p&gt;No sólo recoger datos, sino también compartirlo con el equipo. Esto aumenta la perspectiva de cada miembro, haciendo que expongan sus impresiones generales en lugar de sus impresiones personales. Facilita el que cada miembro comparta sus emociones con el resto acerca del último sprint. No preguntes directamente por sus emociones, sino pregunta indirectamente. Ejemplos: &lt;i&gt;¿qué día viniste a trabajar con más entusiasmo? ¿qué tarea te gustó más? ¿qué día viniste solamente por obligación? ¿qué tarea te gustó menos?&lt;/i&gt; Todo esto se convierte en una vía de escape controlada para el equipo, en lugar de retener sentimientos y explotar al final.&lt;/p&gt; &lt;h2&gt;Generar reflexiones y opinones&lt;/h2&gt; &lt;p&gt;Es el momento de pensar "¿por qué?" y pensar qué debería hacerse de forma diferente. Conduce a que el equipo piense en qué condiciones, interacciones y patrones contribuyeron al éxito. Investiga deficiencias, riesgos y malos resultados.&lt;/p&gt; &lt;h2&gt;Decidir qué hacer&lt;/h2&gt; &lt;p&gt;Escoge no más de dos puntos de mejora para el siguiente sprint y céntrate en cumplirlos. Demasiados puntos de mejora tienden a sobrecargar, estresar y que al final no se cumpla ninguno.&lt;/p&gt; &lt;p&gt;Planifica un descanso entre el retrospective y la reunión de planificación, para que la gente reflexione sobre qué y cómo planificar en base a lo decidido en el retrospective.&lt;/p&gt; &lt;h2&gt;Cerrar el retrospective&lt;/h2&gt; &lt;p&gt;Cierra adecuadamente la reunión. Resume conclusiones. Resume en una pizarra bien visible y a la vista de todos, los puntos de mejora adoptados. Éstos pertenecen al equipo, no al gestor. De este modo evitaremos el que cuando todo el mundo salga de la reunión se olvide de lo hablado hasta el siguiente sprint.&lt;/p&gt; &lt;p&gt;Haz un rápido retrospective del retrospective: qué fue bien durante la reunión y qué se puede mejorar para la siguiente.&lt;/p&gt; &lt;h2&gt;Y en la siguiente entrega...&lt;/h2&gt; &lt;p&gt;Actividades para realizar duante la reunión, cuyo objetivo es fomentar la participación de los asistentes, desentumedecer mentes adormiladas y fomentar la aparición de ideas. Nos leemos en el siguiente, entonces.&lt;/p&gt; &lt;hr /&gt;&lt;p&gt;Referencias:&lt;/p&gt; &lt;p&gt;&lt;b&gt;Agile Retrospectives – Making good teams great&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;Esther Derby, Diana Larsen&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-7959504577937186096?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/7959504577937186096/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=7959504577937186096' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/7959504577937186096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/7959504577937186096'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/06/agile-retrospectives-ii-fases.html' title='Agile Retrospectives (II): Fases'/><author><name>Luix</name><uri>http://www.blogger.com/profile/07097113195001698472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_7ogr8wNjLG4/SDCpP_C1POI/AAAAAAAAAGo/gxjmeNyHIu4/S220/buk16-02-2008+003.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-1803864327079880844</id><published>2010-06-07T13:59:00.000+02:00</published><updated>2010-06-07T14:00:20.853+02:00</updated><title type='text'>Agile Retrospectives: cómo mejorar</title><content type='html'>&lt;p&gt;En una pequeña serie de artículos resumiré lo que encontré recientemente en el libro que abajo se referencia referente a cómo mejorar las reuniones retrospectivas (qué mal suena; no, no estoy hablando de Retrospector ni nada relacionado con La Hora Chanante).&lt;/p&gt; &lt;h2&gt;¿Qué es un 'retrospective'?&lt;/h2&gt; &lt;p&gt;Una retrospección en la vida es pararse por un momento, mirar hacia atrás y reflexionar sobre el camino trazado hasta la fecha, evaluando las cosas buenas y las malas, y aprendiendo de todo ello para ser mejor persona.&lt;/p&gt; &lt;p&gt;Esto, que muchos seres humanos que andan sueltos por ahí deberían hacer a menudo, en las metodologías de desarrollo ágil de software se llama "retrospective" y en un modelo de desarrollo iterativo viene muy bien para evaluar cada una de esas iteraciones que se realizan. En nuestro caso particular orientaremos el discurso hacia SCRUM, quizá la metodología ágil más conocida y extendida, junto con eXtreme Programming.&lt;/p&gt; &lt;h2&gt;Fases de un 'retrospective'&lt;/h2&gt; &lt;p&gt;Una buena reunión retrospectiva debería constar de las siguientes fases:&lt;/p&gt; &lt;ol&gt;&lt;li&gt;Establecer el escenario.&lt;/li&gt;&lt;li&gt;Recoger datos y métricas.&lt;/li&gt;&lt;li&gt;Generar reflexiones y opiniones.&lt;/li&gt;&lt;li&gt;Decidir qué hacer.&lt;/li&gt;&lt;li&gt;Cerrar el retrospective.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Estas fases, no parecen nada del otro mundo y muchos equipos las llevan a cabo, en mayor o menor medida. ¿Por qué aun así no hacen buenos retrospectives? Bueno, quizá el problema está en el cómo y no en el qué.&lt;/p&gt; &lt;h2&gt;¿Quién dirige un 'retrospective'?&lt;/h2&gt; &lt;p&gt;Un retrospective puede estar dirigido por el gestor del equipo o por cualquier miembro del mismo, o incluso ir variando en cada ocasión. Quien dirige la reunión deberá mantenerse lo más al margen posible, porque el poder subyacente que posee quien dirige la reunión puede coartar a los demás miembros a participar. Esto es especialmente apblicable al gestor, que en cualquier caso se mantendrá lo más al margen posible de la discusión, debido a que su estátus puede influir en las opiniones del equipo y romper la dinámica del grupo.&lt;/p&gt; &lt;p&gt;Es importante identificar qué parámetros se han de analizar en un retrospective. Algunos buenos ejemplos:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Buscar modos de mejorar las prácticas.&lt;/li&gt;&lt;li&gt;Descubrir qué se hizo bien.&lt;/li&gt;&lt;li&gt;Entender las razones subyacentes por las que no se cumplieron los objetivos.&lt;/li&gt;&lt;li&gt;Buscar modos de mejorar la responsabilidad de cara a los clientes.&lt;/li&gt;&lt;li&gt;Reconstruir relaciones maltrechas.&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Y para terminar esta sección, dos máximas que deben cumplirse durante una reunión retrospectiva:&lt;/p&gt; &lt;ol&gt;&lt;li&gt;Evitar culpabilizar a sujetos por el incumplimiento de un objetivo.&lt;/li&gt;&lt;li&gt;Facilitar el que todo el mundo hable.&lt;/li&gt;&lt;/ol&gt; &lt;h2&gt;¿Cuánto debe durar un retrospective?&lt;/h2&gt; &lt;p&gt;Depende.&lt;/p&gt; &lt;p&gt;De la duración del sprint, de la complejidad de la tecnología que se maneja en dicho sprint, del tamaño del equipo y del nivel de conflictos y controversias en las opiniones de los miembros. Como guía: cada semana de sprint, una hora de reunión retrospectiva.&lt;/p&gt; &lt;p&gt;Acortar el tiempo de la reunión es hacer trampa y engañarse uno mismo; sin embargo, si los objetivos se cumplieron se puede acortar la reunión.&lt;/p&gt; &lt;p&gt;Por otro lado, los retrospectives deben prepararse previamente. El equipo debe entrar en la sala de reuniones con algo mínimamente preparado, un adelanto de lo que se va a hablar.&lt;/p&gt; &lt;h2&gt;¿Cómo preparar retrospectives?&lt;/h2&gt; &lt;p&gt;El responsable debe responder a las siguientes preguntas:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;¿Cuál es el objetivo de la reunión?&lt;/li&gt;&lt;li&gt;¿Quién atenderá?&lt;/li&gt;&lt;li&gt;¿Cuánto durará?&lt;/li&gt;&lt;li&gt;¿Dónde se celebrará?&lt;/li&gt;&lt;li&gt;¿Cómo se organizará la sala?&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;¿Como hacer que el equipo prepare la reunión?&lt;/h2&gt; &lt;p&gt;Puede enviarse un pequeño cuestionario por correo electrónico a todas las personas que van a asistir a la reunión antes de hacer el retrospective. De este modo se forzará a que el equipo se tome unos minutos en reflexionar sobre el sprint. Tras recibir las respuestas, que se tratarán anónimamente, pueden leerse los resultados en voz alta durante el retrospective, de manera que sirva como resumen de las impresiones generales del grupo.&lt;/p&gt; &lt;p&gt;Otra opción es solicitar un breve resumen de las impresiones del sprint.&lt;/p&gt; &lt;h2&gt;¿Y después de la reunión?&lt;/h2&gt; &lt;p&gt;Asigna cada acción a realizar en el siguiente sprint a un responsable. Muchos retrospectives fracasan porque, a pesar de que se aportan buenas ideas, éstas quedan en el aire y se olvidan para el siguiente sprint. Asigna responsables y haz que el equipo colabore en el cumplimiento de dichas acciones.&lt;/p&gt; &lt;h2&gt;Y en la próxima entrega...&lt;/h2&gt; &lt;p&gt;He dado un rodeo a propósito para no explicar detalladamente las fases de una reunión retrospectiva. Mi objetivo aquí ha sido el de sentar las bases, dar unos primeros consejos y establecer algunas ideas. En la próxima entrega explicaré detalladamente en qué consiste cada fase.&lt;/p&gt; &lt;p&gt;Y en siguientes entregas explicaremos una serie de actividades que pueden realizarse durante la reunión retrospectiva y cuyo objetivo primordial es fomentar la participación. Fuera aparte de las ideas que surjan, de las decisiones tomadas y todo lo demás. Lo principal es hacer que todo el mundo participe. Lo demás vendrá sólo.&lt;/p&gt; &lt;hr /&gt;&lt;p&gt;Referencias:&lt;/p&gt; &lt;p&gt;&lt;b&gt;Agile Retrospectives - Making good teams great&lt;/b&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;Esther Derby, Diana Larsen&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-1803864327079880844?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/1803864327079880844/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=1803864327079880844' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/1803864327079880844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/1803864327079880844'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/06/agile-retrospectives-como-mejorar.html' title='Agile Retrospectives: cómo mejorar'/><author><name>Luix</name><uri>http://www.blogger.com/profile/07097113195001698472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_7ogr8wNjLG4/SDCpP_C1POI/AAAAAAAAAGo/gxjmeNyHIu4/S220/buk16-02-2008+003.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-7830722876800307959</id><published>2010-03-26T12:33:00.004+01:00</published><updated>2010-03-26T12:36:03.917+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>¿Es tu software como esto?</title><content type='html'>&lt;div&gt;He visto el link a la imagen en reddit.com, qué os parece??&lt;/div&gt;&lt;br /&gt;&lt;a href="http://i.imgur.com/yzVW1.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 460px; DISPLAY: block; HEIGHT: 345px; CURSOR: hand" border="0" alt="" src="http://i.imgur.com/yzVW1.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-7830722876800307959?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/7830722876800307959/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=7830722876800307959' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/7830722876800307959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/7830722876800307959'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/03/es-tu-software-como-esto.html' title='¿Es tu software como esto?'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-370548470038836427</id><published>2010-03-24T16:03:00.012+01:00</published><updated>2010-03-24T16:25:42.221+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Demasiada memoria gracias al Garbage Collector</title><content type='html'>&lt;span xmlns=""&gt; &lt;p&gt;Parece que está claro que programar en algo como C#/.NET (incluso C#/Mono) es mucho más rápido que intentarlo con C/C++: unas librerías potentes, un lenguaje sencillo y (lo que todos dicen) no más &lt;em&gt;mallocs &lt;/em&gt;ni &lt;em&gt;frees&lt;/em&gt;. &lt;/p&gt;&lt;p&gt;(&lt;strong&gt;Nota:&lt;/strong&gt; hace un par de semanas en Game Developers Conference 2010 había una mesa rendonda en la que precisamente hablaban de las limitaciones de C++ (su complejidad básicamente) para el desarrollo de videojuegos y cómo les gustaría tener GarbageCollector… aunque al final todo el mundo coincidía en que les gustaba C++ &lt;em&gt;a pesar de todo&lt;/em&gt;…) &lt;/p&gt;&lt;p&gt;Bien, volviendo a .NET: Garbage Collector, uno de los elementos claves de &lt;em&gt;framework&lt;/em&gt; (y lo mismo se puede decir en Java) proporciona muchas ventajas: escribes y listo, te olvidas de líos. Pero… ¿es todo positivo? En Java estamos acostumbrados a ver aplicaciones consumiendo cantidades astronómicas de memoria (incluso hay IDEs como IntelliJ con un botoncito para llamar al GC, ni más ni menos) y lo mismo puede ocurrir con .NET. En muchas ocasiones no es un problema sino un tema &lt;em&gt;estético&lt;/em&gt;: como el GC sabe que hay memoria de sobra disponible, y para mejorar el rendimiento, no &lt;em&gt;recolecta&lt;/em&gt; la basura, así que el proceso sigue creciendo. &lt;/p&gt;&lt;p&gt;Pero para mí el mayor problema no es ese sino la sensación que va creando en todos los programadores de que &lt;strong&gt;la memoria es gratis&lt;/strong&gt;. ¿Qué quiero decir con esto? Pues que acabas creando objetos y objetos y objetos nuevos porque es rápido y sencillo… aunque puedes estar &lt;em&gt;estresando&lt;/em&gt; al GC más de la cuenta.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Un ejemplo práctico: servidor y blobs&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Un ejemplo claro de cómo me encontré con el problema y cómo creo que en C jamás hubiera ocurrido. &lt;/p&gt;&lt;p&gt;Tengo un proceso servidor en .NET que procesa peticiones de clientes realizadas a través de la red, lee datos (blobs) de una base de datos y los devuelve al cliente. Muy sencillo.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Bien, cuando el nivel de carga del servidor no es muy alto todo funciona perfectamente: el servidor lee objetos, los devuelve, libera memoria de vez en cuando… todo perfecto. &lt;/p&gt;&lt;p&gt;Pero, ¿qué ocurre cuando ponemos unos cuantos cientos de clientes contra el mismo servidor? &lt;/p&gt;&lt;p&gt;Pues que la memoria del servidor comienza a crecer muchísimo, vemos como el tiempo haciendo GC aumenta también (se puede ver con el Process Explorer de SysInternals, &lt;a href="http://technet.microsoft.com/es-es/sysinternals/bb896653.aspx"&gt;http://technet.microsoft.com/es-es/sysinternals/bb896653.aspx&lt;/a&gt;, por ejemplo, donde te da una medida del tiempo que tu proceso (.Net 2 o superior) está gastando en GC). &lt;/p&gt;&lt;p&gt;¿Por qué ocurre esto? &lt;/p&gt;&lt;p&gt;Lo que yo estaba haciendo para procesar la petición era algo como esto (tipo pseudocódigo): &lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] GetData(&lt;span style="color:blue;"&gt;long&lt;/span&gt; dataId)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] result = &lt;span style="color:blue;"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;[GetDataLen(dataId)];&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;ReadData(dataId, result);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; result;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;} &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;¿Veis el problema? &lt;/p&gt;&lt;p&gt;Ahora me parece totalmente evidente pero la verdad es que tardé un rato en darme cuenta porque con el profiler de memoria (usaba la herramienta de RedGate Ants, &lt;a href="http://www.red-gate.com/products/ants_memory_profiler"&gt;http://www.red-gate.com/products/ants_memory_profiler&lt;/a&gt;) no detectaba nada de nada, parecía que todo estaba bien.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Objetos en tránsito &lt;/h2&gt;&lt;p&gt;¿Cómo funciona el servidor? Cada método &lt;em&gt;GetData&lt;/em&gt; se va a invocar en un thread (realmente no creando un thread nuevo, que parece un pecado, sino usando un thread pool) diferente, hace su trabajo y termina. &lt;/p&gt;&lt;p&gt;Entonces, ¿por qué tanta memoria? El siguiente gráfico lo explica claramente: &lt;a href="http://3.bp.blogspot.com/_z6qpykplUvI/S6oqKnCckiI/AAAAAAAAAvY/hQtNE0Uqf6w/s1600/toomuchmem.png"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 215px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5452216660651708962" border="0" alt="" src="http://3.bp.blogspot.com/_z6qpykplUvI/S6oqKnCckiI/AAAAAAAAAvY/hQtNE0Uqf6w/s400/toomuchmem.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;El método &lt;em&gt;GetData&lt;/em&gt; está funcionando bien pero lo está haciendo en "modo .NET", es decir, lo he escrito como si la memoria fuera gratis. &lt;/p&gt;&lt;p&gt;Cuando se acumulan peticiones la cantidad de memoria &lt;em&gt;inútil&lt;/em&gt; reservada será enorme dependiendo de cuántas llamadas se estén procesando (de la carga del servidor). Viendo el gráfico está claro que la memoria que se reservó para procesar la primera petición en el &lt;em&gt;instante 0&lt;/em&gt; en el primer &lt;em&gt;thread&lt;/em&gt; no vale para nada ya en el &lt;em&gt;instante 2&lt;/em&gt; y sin embargo sigue ocupando sitio en el proceso… &lt;/p&gt;&lt;p&gt;Y este es precisamente el problema: &lt;em&gt;los objetos en tránsito&lt;/em&gt;, objetos que todavía no se han liberado pero que siguen ocupando sitio.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;Pensamiento tipo C &lt;/h2&gt;&lt;p&gt;Esto nunca le hubiera pasado a un desarrollador C/C++ por dos motivos: primero porque un &lt;em&gt;free&lt;/em&gt; es un &lt;em&gt;free de verdad&lt;/em&gt; y liberaría la memoria inmediatamente. Segundo porque estando acostumbrado a una vida mucho más dura, trataría de evitar tanto &lt;em&gt;malloc/free&lt;/em&gt; (o &lt;em&gt;new/dispose&lt;/em&gt;). &lt;/p&gt;&lt;p&gt;¿Qué pasa si creamos un &lt;em&gt;buffer pool&lt;/em&gt; con unos cuantos buffers &lt;em&gt;pre-creados&lt;/em&gt; que reutilizamos en cada petición? El código pasaría a ser algo como esto: &lt;/p&gt;&lt;p&gt;&lt;pre&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] GetData(&lt;span style="color:blue;"&gt;long&lt;/span&gt; dataId)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] result = GetBuffer(GetDataLen(dataId));&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;ReadData(dataId, result);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; result;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; ProcessRequest(&lt;span style="color:blue;"&gt;long&lt;/span&gt; dataId)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] result = GetData(dataId);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;ReturnData(result);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;ReleaseBuffer(result);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:78%;"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;Varios puntos a tener en cuenta:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Para simplificar algo como esto ayuda mucho si los &lt;em&gt;datos&lt;/em&gt; son de tamaño fijo, o al menos tienen un tamaño máximo. En mi caso un bloque de datos nunca era mayor de 4Mb, por lo que es muy sencillo de manejar el &lt;em&gt;buffer pool&lt;/em&gt; porque todos los buffers serán del mismo tamaño (el máximo).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Si todos los buffers son del mismo tamaño habrá que manejar cuál es el tamaño usado de verdad, es decir, si estás leyendo 1024bytes en un buffer de 4Mb, luego no envíes 4Mb por la red!!! Envía sólo lo que estás usando. Esto posiblemente requerirá un código del tipo:&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; ProcessRequest(&lt;span style="color:blue;"&gt;long&lt;/span&gt; dataId)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] result = GetBuffer();&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;color:blue;"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; size = ReadData(dataId, result);&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;ReturnData(size, result);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;color:blue;"&gt;finally&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;ReleaseBuffer(result);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="font-size:85%;"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Que por otro lado es mucho más limpio. &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Hay que acordarse de &lt;em&gt;liberar el buffer&lt;/em&gt; (tipo C) que realmente no hace nada más que devolverlo al &lt;em&gt;buffer pool&lt;/em&gt;. Si el código de obtención y liberación del buffer está en el mismo método y con un try/finally, mucho mejor: más fácil de leer y menos propenso a fallos (no me gusta cuando el código de obtener y liberar un recurso o memoria, o lo que sea, no está en el mismo bloque). &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Lógicamente hay que implementar el &lt;em&gt;buffer pool &lt;/em&gt;de forma que:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Sincronice el acceso de varios threads &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Se pueda limitar el número máximo de buffers: de este modo se puede controlar cuál va a ser el uso de memoria de nuestro servidor: no ocurrirá NUNCA que se descontrole como pasaba antes, el consumo será plano, el GC no tendrá trabajo y todo será más rápido. ¿Cómo limitarlo? Por ejemplo con un sencillo semáforo que &lt;em&gt;bloquee&lt;/em&gt; en la llamada &lt;em&gt;GetBuffer&lt;/em&gt; hasta que queden buffers libres. &lt;strong&gt;NOTA IMPORTANTE!&lt;/strong&gt; En caso de usar un semáforo es muy importante considerar el riesgo de deadlocks si empezamos a usar múltiples pools (después del primero vendrán más) y los &lt;em&gt;threads&lt;/em&gt; intentan acceder a ellos sin un orden muy estricto (la vieja regla: reserva SIEMPRE en el mismo orden y nunca tendrás deadlocks, reserva en orden diferente y espera el desastre). &lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Remoting: más complicado&lt;br /&gt;&lt;/h2&gt;&lt;br /&gt;&lt;p&gt;En mi caso &lt;em&gt;real&lt;/em&gt; (no descubrí esto en un programa de 5 líneas con un &lt;em&gt;GetData&lt;/em&gt;, desgraciadamente) el servidor no estaba usando sockets directamente sino .NET Remoting, así que en la película entraban más complicaciones como la serialización de objetos y las múltiples copias que Remoting hace hasta llegar a la capa de red. Para &lt;em&gt;evitarlo&lt;/em&gt; no quedó más remedio que escribir un &lt;em&gt;custom tcp channel&lt;/em&gt; capaz de manejar el &lt;em&gt;buffer pool&lt;/em&gt; reservado en la &lt;em&gt;capa de aplicación&lt;/em&gt; y liberarlo justo después de poner los datos en la red, y evitando también la lenta serialización estándar de .Net… pero esto ya es otra historia para otro día.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-370548470038836427?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/370548470038836427/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=370548470038836427' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/370548470038836427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/370548470038836427'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/03/demasiada-memoria-gracias-al-garbage.html' title='Demasiada memoria gracias al Garbage Collector'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_z6qpykplUvI/S6oqKnCckiI/AAAAAAAAAvY/hQtNE0Uqf6w/s72-c/toomuchmem.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-3144363239518791252</id><published>2010-03-02T00:09:00.004+01:00</published><updated>2010-03-02T10:12:27.318+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='noticias'/><title type='text'>Plastic SCM 2.9 ya está aquí!!</title><content type='html'>Plastic SCM llega a su versión 2.9 y está listo para descargarse desde nuestra web: &lt;a href="http://www.codicesoftware.com/app01/opdownloads2.aspx"&gt;www.plasticscm.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;La nueva versión viene cargada con un buen número de nuevas características y también es mucho más rápida, especialmente bajo carga.&lt;br /&gt;&lt;br /&gt;Estas son algunas de las nuevas características:&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Soporte de Oracle&lt;/strong&gt;: hemos añadido Oracle a la lista de &lt;em&gt;backends&lt;/em&gt; con los que PLlastic puede funcionar. Hasta ahora soportábamos MySql, SQL Server y Firebird (tanto servidor como embebido). Nos han pedido Oracle varias veces, especialmente desde grandes equipos así que por fin está disponible. Se trata posíblemente del gestor de bases de datos más conocido tanto por rendimiento como estabilidad y escalabilidad y puede usarse con servidores Plastic en Windows, Linux y MacOS X.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Integración continua con Pulse&lt;/strong&gt;: hemos desarrollado un plugin para el producto de integración continua de Zutubi. Hasta ahora ya nos integrábamos con productos como CruiseControl y FinalBuilder, pero Pulse es quizá mi favorito y estamos trabajando en ampliar la integración para que soporte patrones como rama por tarea, y así poder implantarlo internamente. Otros sistemas, como Hudson, también funcionan con Plastic.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Servidor proxy&lt;/strong&gt;: otra de las características más esperadas. Ahora se puede configurar un servidor proxy de Plastic para reducir el uso de red mientras se trabaja conectado a un servidor central. El servidor proxy es muy sencillo: símplemente descarga datos bajo demanda que le solicitan los clientes y los &lt;em&gt;cachea&lt;/em&gt; para el siguiente uso. Con esto se ahorra uso de red lo que puede ser crítico cuando se acceede al servidor a través de VPN o conexiones lentas. Nota: Plastic puede funcionar en modo distribuido pero algunas empresas prefieren llevar ciertos proyectos de forma centralizada, y es ahí donde el proxy server juega un papel importante.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Sparse tree y cloaking&lt;/strong&gt;: que se traduce por algo como árboles parciales y evitar que ciertos ficheros se actualicen. Mediante un nuevo fichero de configuración llamado cloaked.conf es posible definir reglas para indicar qué ficheros se pueden descargar y qué ficheros no, es algo complementario a lo que ya se puede hacer con los selectores, pero permite funcionalidades diferentes. Por ejemplo, se puede descargar un árbol de directorios y luego indicar que ese árbol está &lt;em&gt;cloaked&lt;/em&gt; lo que quiere decir que no se volverá a actualizar. Es útil para mejorar el rendimiento cuando se trabaja con proyectos muy grandes. Sólo para usuarios avanzados.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Uso de memoria en la replicación. El uso de memoria en todo el proceso de replicación se ha reducido considerablemente, haciendo que el proceso sea mucho más rápido y eficiente que antes. Ahora se puede replicar un repositorio completo sin que el servidor se entere a nivel de uso de memoria!&lt;br /&gt;&lt;br /&gt;&lt;li&gt;¡Eliminación del workspace server! Sí, como leeéis, el hemos eliminado el componente &lt;em&gt;servidor de workspaces&lt;/em&gt; del mapa. Bueno, de hecho no se ha ido sino que se ha trasladado a cada cliente, de modo que el rendimiento aumenta de forma espectacular. ¿Qué significa esto? Echa un vistazo a un nuevo workspace y verás que contiene un directorio (oculto) denominado .plastic. Contiene información sobre el workspace como el selector y el árbol de la copia de trabajo. Toda esa información solía estar en el servidor y ahora se ha movido al cliente, lo que supone que se reduce significativamente el uso de red, lo que podrán apreciar especialmente los usuarios de redes VPN (en LAN la velocidad ya era tan alta que no se apreciará mucha diferencia). Nota importante: cuando te actualices de Plastic 2.8 a 2.9 verás, en el primer arranque, un diálogo como el siguiente que indicará el progreso de la conversión de workspaces.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/S4pfCpVlCTI/AAAAAAAAAsg/vgY2VbpwA-8/s1600-h/upgradingworkspaces.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 352px; height: 160px;" src="http://4.bp.blogspot.com/_z6qpykplUvI/S4pfCpVlCTI/AAAAAAAAAsg/vgY2VbpwA-8/s400/upgradingworkspaces.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5443267598691404082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Workspaces compartidos&lt;/strong&gt;: tras las modificaciones realizadas en los workspaces ahora se pueden compartir: se puede ubicar un espacio de trabajo en un directorio compartido (por Samba o por NFS, por ejemplo) de forma que más de un usuario pueda acceder a él e incluso actualizarlo y acceder a información de Plastic desde varias ubicaciones. Antes se podía hacer registrando el workspace en diferentes máquinas, pero se podía llegar fácilmente a condiciones en las que el sistema no se comportase bien porque para Plastic eran workspaces diferentes. Lógicamente es una característica para usar con cuidado: es útil para usarlo con sistemas de compilación, o de paso a producción, no para trabajar a diario ya que el objetivo de un control de versiones es precísamente coordinar diferentes copias de trabajo, ¡¡no trabajar sobre una misma!!&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Exploración de changesets&lt;/strong&gt;: una de las nuevas características más potentes. Ahora se puede &lt;em&gt;caminar&lt;/em&gt; por las ramas cambio a cambio (changeset a changeset) leyendo la historia que cuentan. Escribiré otro post sobre esto pero para hacer una breve introducción: en tu propia rama de tarea eres libre de hacer tantos checkins como quieras, pero todos esos checkins deberían de tener un significado, ir describiendo cambios uno a uno, de modo que todos tengan una lógica. Supongamos que vamos a hacer un refactor importante, de muchos ficheros, si comparas el contenido de la rama una vez que has terminado verás tantísimos cambios que será difícil de entender lo que has hecho, sin embargo si has podido descomponer el refactor en pequeñas operaciones y has ido haciendo checkin de cada una de ellas, se podrá revisar posteriormente los cambios que has hecho, como si fuera ver una &lt;em&gt;repetición de la jugada&lt;/em&gt;. El mecanismo de commit no es nuevo, por supuesto, pero la herramienta de recorrido de cambios permite que se usen para describir cambios casi contando cómo lo has ido haciendo, dejando registrado no sólo lo que haces sino cómo lo haces, con todas las aplicaciones que eso tiene.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/S4pfL9L8KbI/AAAAAAAAAso/btfjJiNryUw/s1600-h/changesetwalking.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 289px;" src="http://4.bp.blogspot.com/_z6qpykplUvI/S4pfL9L8KbI/AAAAAAAAAso/btfjJiNryUw/s400/changesetwalking.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5443267758638508466" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Mejoras en el branch explorer&lt;/strong&gt;: siempre en evolución, hemos añadido la capacidad de búsqueda que permite ir navegando las ramas que cumplan el filtro, lo que es mucho más útil que antes. También la posibilidad de hacer clic sobre los link de merge y ver de dónde vienen y hacia dónde van. Y por último el editor de visibilidad que tantas veces nos han pedido y que permite ocultar ramas que no interese ver.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_z6qpykplUvI/S4pfZijsRNI/AAAAAAAAAsw/0Y4cJjI3ch8/s1600-h/newsearchbar.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 159px;" src="http://3.bp.blogspot.com/_z6qpykplUvI/S4pfZijsRNI/AAAAAAAAAsw/0Y4cJjI3ch8/s400/newsearchbar.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5443267992008541394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/S4pfsJTcOiI/AAAAAAAAAs4/KG9magRegv0/s1600-h/visibilitymode.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 161px;" src="http://1.bp.blogspot.com/_z6qpykplUvI/S4pfsJTcOiI/AAAAAAAAAs4/KG9magRegv0/s400/visibilitymode.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5443268311647009314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y estas son todas las funcionalidades importantes en 2.9 junto con un buen número de correcciones.&lt;br /&gt;&lt;br /&gt;Y por supuesto mejoras de rendimiento: probamos Plastic cada semana en un cluster con 100 nodos y bajo esa carga 2.9 es un 30% más rápida que 2.8. &lt;strong&gt;Recordad que Plastic 2.8 era ya 10 veces más rápido que SVN...&lt;/strong&gt; así que calculad 2.9!!&lt;br /&gt;&lt;br /&gt;Y por supuesto a pesar de seguir creciendo Plastic es todavía fácil de usar y de instalar. Echad un vistazo al siguiente vídeo en el que se configura un servidor en menos de 45 segundos!! Y después se hace una importación inicial de código (algo que es muy común en cualquier evaluacion) durante el siguiente minuto!&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CVlsVtxZUkk&amp;hl=es_ES&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/CVlsVtxZUkk&amp;hl=es_ES&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-3144363239518791252?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/3144363239518791252/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=3144363239518791252' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/3144363239518791252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/3144363239518791252'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2010/03/plastic-scm-29-ya-esta-aqui.html' title='Plastic SCM 2.9 ya está aquí!!'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_z6qpykplUvI/S4pfCpVlCTI/AAAAAAAAAsg/vgY2VbpwA-8/s72-c/upgradingworkspaces.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-1704296137507067015</id><published>2009-04-16T10:39:00.004+02:00</published><updated>2009-04-16T10:43:05.137+02:00</updated><title type='text'>Tutorial sobre selectores (II)</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:pixelsperinch&gt;72&lt;/o:PixelsPerInch&gt;   &lt;o:targetscreensize&gt;544x376&lt;/o:TargetScreenSize&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Cambria; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073741899 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Cambria","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:36.0pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Cambria","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:0cm; 	margin-left:36.0pt; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Cambria","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:0cm; 	margin-left:36.0pt; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Cambria","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:36.0pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Cambria","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt; 	mso-ascii-font-family:Cambria; 	mso-hansi-font-family:Cambria;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;&lt;strong&gt;&lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:14;"   lang="EN-US"&gt;&lt;span style="font-size:130%;"&gt;Cambio de selector en un Espacio de trabajo.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Cambiar el selector de un espacio de trabajo en PlasticSCM es sencillo. En primer lugar debemos activar el espacio de trabajo cuyo selector queremos editar. Esto es lógico, pues no tendría mucho sentido cambiar el selector de un espacio de trabajo que no se va a utilizar. Además, si posteriormente activáramos tal espacio de trabajo sin mirar su selector podríamos estar realizando acciones que no deberíamos con la consiguiente pérdida de trabajo.&lt;br /&gt;&lt;br /&gt;Para activar un espacio de trabajo, haga clic sobre la vista Workspaces, situada en la esquina superior derecha de la pantalla. Esta vista muestra la lista de espacios de trabajo existentes. A continuación haga clic derecho sobre el espacio de trabajo a activar y seleccione “Activar espacio de trabajo…”, tras lo cual se le pedirá confirmar tal acción y se descargará el espacio de trabajo.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7ogr8wNjLG4/SebvMcQIReI/AAAAAAAAAMs/Os6f6AvuHPU/s1600-h/captura.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 160px;" src="http://2.bp.blogspot.com/_7ogr8wNjLG4/SebvMcQIReI/AAAAAAAAAMs/Os6f6AvuHPU/s320/captura.PNG" alt="" id="BLOGGER_PHOTO_ID_5325206606433502690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Opción de cambiar selector. Haga clic para ver la imagen más grande.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;A continuación ya podemos cambiar el selector del espacio de trabajo activo. Para ello, haga clic derecho sobre el espacio de trabajo activo en la lista y seleccione la opción “Establecer selector…”, tras lo cual se abrirá la ventana del editor del selector en la cual podrá teclear las nuevas reglas a aplicar. Una vez introducidas tales reglas, el sistema tratará de aplicarlas, actualizando el espacio de trabajo con lo que hay en el repositorio según las reglas, lo cual demorará unos segundos. Si todo ha ido bien la barra de progreso desaparecerá y podrá constatar los cambios aplicados en la esquina superior derecha de la pantalla, donde se indica la rama y etiqueta seleccionadas actualmente, así como en la lista de ítems descargados. Si la regla especificada contiene algún error se mostrará una ventana con los errores encontrados.&lt;br /&gt;&lt;br /&gt;Un error bastante común, aparte de los típicos errores de sintaxis es tratar de descargar una etiqueta no aplicada. Vigile que aplica sus etiquetas (no solamente creándolas, sino aplicándolas a una versión particular) para que el selector pueda aplicar las reglas correctamente.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-1704296137507067015?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/1704296137507067015/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=1704296137507067015' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/1704296137507067015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/1704296137507067015'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2009/04/tutorial-sobre-selectores-ii.html' title='Tutorial sobre selectores (II)'/><author><name>Luix</name><uri>http://www.blogger.com/profile/07097113195001698472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_7ogr8wNjLG4/SDCpP_C1POI/AAAAAAAAAGo/gxjmeNyHIu4/S220/buk16-02-2008+003.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7ogr8wNjLG4/SebvMcQIReI/AAAAAAAAAMs/Os6f6AvuHPU/s72-c/captura.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-8913228588156652363</id><published>2009-04-08T09:56:00.003+02:00</published><updated>2009-04-08T10:02:13.226+02:00</updated><title type='text'>Tutorial sobre selectores (I)</title><content type='html'>&lt;span style="font-size:130%;"&gt;QUÉ ES UN SELECTOR. NECESIDAD DE LOS SELECTORES&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Un selector es una herramienta sintáctico-descriptiva que permite al usuario indicar qué ficheros desea obtener del repositorio en su espacio de trabajo. La necesidad de tal herramienta se debe a que no siempre desearemos obtener la última versión existente, sino que en ocasiones desearemos crear espacios de trabajo locales con un release pasado, una versión etiquetada de una determinada forma o el contenido de una rama en particular, con el objetivo de realizar una revisión del código o reparar un error.&lt;br /&gt;Mediante el uso de selectores, por tanto, el usuario puede elegir sobre qué ítems del repositorio desea trabajar.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;CÓMO LO IMPLEMENTA PLASTICSCM.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Un selector es una especificación de qué revisiones de qué ítems serán descargados al espacio de trabajo local. Como consecuencia de la necesidad de un selector, es necesario también indicar en qué rama se crearán las desprotecciones de las nuevas revisiones creadas fruto de los cambios realizados sobre tales ítems.&lt;br /&gt;&lt;br /&gt;El selector más común es el que se tiene por defecto al crear un espacio de trabajo nuevo, que tiene este aspecto:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7ogr8wNjLG4/SdxY-EN9sQI/AAAAAAAAAMc/rp0KRoHbgrw/s1600-h/Dibujo1.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 75px;" src="http://4.bp.blogspot.com/_7ogr8wNjLG4/SdxY-EN9sQI/AAAAAAAAAMc/rp0KRoHbgrw/s320/Dibujo1.PNG" alt="" id="BLOGGER_PHOTO_ID_5322226682952528130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:pixelsperinch&gt;72&lt;/o:PixelsPerInch&gt;   &lt;o:targetscreensize&gt;544x376&lt;/o:TargetScreenSize&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Helvetica; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536881799 -2147483648 8 0 511 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Cambria; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073741899 0 0 159 0;} @font-face 	{font-family:"ヒラギノ角ゴ Pro W3"; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:auto; 	mso-font-signature:0 0 0 0 0 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Cambria","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} p.Cuerpo, li.Cuerpo, div.Cuerpo 	{mso-style-name:Cuerpo; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	mso-bidi-font-size:11.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt; 	mso-ascii-font-family:Cambria; 	mso-hansi-font-family:Cambria;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="Cuerpo" style=""&gt;&lt;span style=";font-family:&amp;quot;;color:#000000;"  &gt;Tal especificación indica que se tomarán ítems del repositorio &lt;i style=""&gt;default&lt;/i&gt;, del cual se descargará todo aquello que esté directamente bajo el directorio raíz, en la rama principal. Las desprotecciones y cambios en los ítems descargados irán a parar a la propia rama principal.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Cuerpo" style=""&gt;&lt;span style=";font-family:&amp;quot;;color:#000000;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;span style="line-height: 115%;font-family:&amp;quot;;font-size:100%;"  &gt;En lugar de descargar una rama podemos indicar que deseamos descargar una etiqueta, un grupo de cambios (&lt;i style=""&gt;changeset&lt;/i&gt;) o una revisión de un ítem determinada. Lo que siempre hay que tener en cuenta es que debemos indicar una rama que almacenará los cambios realizados, es decir, hay que indicar una rama de &lt;i style=""&gt;checkout&lt;/i&gt;. La sintaxis para la especificación de un selector es la siguiente (haga clic sobre la imagen para verla más grande):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7ogr8wNjLG4/SdxZcUaVdoI/AAAAAAAAAMk/EbXH8qrKGas/s1600-h/Dibujo2.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 229px; height: 320px;" src="http://1.bp.blogspot.com/_7ogr8wNjLG4/SdxZcUaVdoI/AAAAAAAAAMk/EbXH8qrKGas/s320/Dibujo2.PNG" alt="" id="BLOGGER_PHOTO_ID_5322227202695460482" border="0" /&gt;&lt;/a&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:pixelsperinch&gt;72&lt;/o:PixelsPerInch&gt;   &lt;o:targetscreensize&gt;544x376&lt;/o:TargetScreenSize&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Helvetica; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536881799 -2147483648 8 0 511 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Cambria; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073741899 0 0 159 0;} @font-face 	{font-family:"ヒラギノ角ゴ Pro W3"; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:auto; 	mso-font-signature:0 0 0 0 0 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Cambria","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} p.Cuerpo, li.Cuerpo, div.Cuerpo 	{mso-style-name:Cuerpo; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	mso-bidi-font-size:11.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt; 	mso-ascii-font-family:Cambria; 	mso-hansi-font-family:Cambria;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="Cuerpo" style=""&gt;&lt;span style=";font-family:&amp;quot;;color:#000000;"  &gt;Podemos indicar un número de revisión concreta o bien la primera (&lt;i style=""&gt;FIRST&lt;/i&gt;) o la última (&lt;i style=""&gt;LAST&lt;/i&gt;) disponible; indicar un &lt;i style=""&gt;changeset&lt;/i&gt; determinado, una rama concreta o una etiqueta marcada. Podemos descargar directorios recursivamente o no, según sea nuestra intención. La sintaxis admite algunas expresiones regulares, con lo cual podemos especificar ficheros de una determinada extensión, de un determinado patrón de caracteres en el nombre, etc. Ejemplo:&lt;/span&gt;&lt;/p&gt;&lt;p class="Cuerpo" style=""&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="Cuerpo" style=""&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:pixelsperinch&gt;72&lt;/o:PixelsPerInch&gt;   &lt;o:targetscreensize&gt;544x376&lt;/o:TargetScreenSize&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Helvetica; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536881799 -2147483648 8 0 511 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Cambria; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073741899 0 0 159 0;} @font-face 	{font-family:"ヒラギノ角ゴ Pro W3"; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:auto; 	mso-font-signature:0 0 0 0 0 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Cambria","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} p.Cuerpo, li.Cuerpo, div.Cuerpo 	{mso-style-name:Cuerpo; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	mso-bidi-font-size:11.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt; 	mso-ascii-font-family:Cambria; 	mso-hansi-font-family:Cambria;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/p&gt;&lt;p class="Cuerpo" style="font-family: courier new;"&gt;&lt;span style="" lang="ES-TRAD"&gt;repository "codice"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Cuerpo" style="font-family: courier new;"&gt;&lt;span style="" lang="ES-TRAD"&gt;path "/01nerva/doc/*.doc"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Cuerpo" style="font-family: courier new;"&gt;&lt;span style="" lang="ES-TRAD"&gt;lb "BL034"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Cuerpo" style="font-family: courier new;"&gt;&lt;span style="" lang="ES-TRAD"&gt;path "/01nerva/doc" norecursive&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Cuerpo" style="font-family: courier new;"&gt;&lt;span style="" lang="ES-TRAD"&gt;lb "BL034"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Cuerpo" style="font-family: courier new;"&gt;&lt;span style="" lang="ES-TRAD"&gt;path "/01nerva" norecursive&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Cuerpo" style="font-family: courier new;"&gt;&lt;span style="" lang="ES-TRAD"&gt;lb "BL034"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Cuerpo" style="font-family: courier new;"&gt;&lt;span style="" lang="ES-TRAD"&gt;path "/" norecursive&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;span style="line-height: 115%; font-family: courier new;font-family:&amp;quot;;font-size:100%;"   lang="EN-US"&gt;br "/main"&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:&amp;quot;;color:#000000;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:pixelsperinch&gt;72&lt;/o:PixelsPerInch&gt;   &lt;o:targetscreensize&gt;544x376&lt;/o:TargetScreenSize&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Helvetica; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536881799 -2147483648 8 0 511 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Cambria; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073741899 0 0 159 0;} @font-face 	{font-family:"ヒラギノ角ゴ Pro W3"; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:auto; 	mso-font-signature:0 0 0 0 0 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Cambria","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} p.Cuerpo, li.Cuerpo, div.Cuerpo 	{mso-style-name:Cuerpo; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	mso-bidi-font-size:11.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD; 	mso-fareast-language:EN-US; 	mso-bidi-language:EN-US;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt; 	mso-ascii-font-family:Cambria; 	mso-hansi-font-family:Cambria;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="Cuerpo" style=""&gt;&lt;span style=";font-family:&amp;quot;;color:#000000;"  &gt;Este selector descargaría del repositorio &lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;codice&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;color:#000000;"  &gt;, utilizando la ruta &lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;/01nerva/doc/ &lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;todos los ficheros con extensión .&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;doc&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt; etiquetados con &lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;BL034&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;, además de todos los ficheros del directorio padre, del directorio abuelo y del directorio raíz que estén en la rama principal etiquetados de la misma forma. Conviene fijarse en que solamente se descargará el camino que va desde la raíz hasta el directorio de documentación, y que si tal direcotorio &lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;doc&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt; tuviera directorios hermanos (en el mismo nivel), éstos no serían descargados. Esto se debe a la opción &lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;norecursive&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt; utilizada en la especificación de path de los directorios de nivel superior.&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;color:#000000;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-8913228588156652363?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/8913228588156652363/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=8913228588156652363' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8913228588156652363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8913228588156652363'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2009/04/tutorial-sobre-selectores-i.html' title='Tutorial sobre selectores (I)'/><author><name>Luix</name><uri>http://www.blogger.com/profile/07097113195001698472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_7ogr8wNjLG4/SDCpP_C1POI/AAAAAAAAAGo/gxjmeNyHIu4/S220/buk16-02-2008+003.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7ogr8wNjLG4/SdxY-EN9sQI/AAAAAAAAAMc/rp0KRoHbgrw/s72-c/Dibujo1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-43700557253874406</id><published>2009-04-01T09:44:00.006+02:00</published><updated>2009-04-01T09:54:49.194+02:00</updated><title type='text'>Tutorial sobre branching (III)</title><content type='html'>En esta última parte del tutorial explicaremos cómo manejar ramas con Plastic SCM.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:pixelsperinch&gt;72&lt;/o:PixelsPerInch&gt;   &lt;o:targetscreensize&gt;544x376&lt;/o:TargetScreenSize&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Helvetica; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536881799 -2147483648 8 0 511 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:"Trebuchet MS"; 	panose-1:2 11 6 3 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:647 0 0 0 159 0;} @font-face 	{font-family:"ヒラギノ角ゴ Pro W3"; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:auto; 	mso-font-signature:0 0 0 0 0 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US;} p.CuerpoA, li.CuerpoA, div.CuerpoA 	{mso-style-name:"Cuerpo A"; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	mso-bidi-font-size:10.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD;} p.Encabezamiento2A, li.Encabezamiento2A, div.Encabezamiento2A 	{mso-style-name:"Encabezamiento 2 A"; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	page-break-after:avoid; 	mso-outline-level:2; 	font-size:12.0pt; 	mso-bidi-font-size:10.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD; 	font-weight:bold; 	mso-bidi-font-weight:normal;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="Encabezamiento2A"&gt;&lt;span  lang="ES-TRAD" style="font-size:14;"&gt;&lt;span style="font-size:130%;"&gt;Crear una rama en Plastic.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="Encabezamiento2A"&gt;&lt;br /&gt;&lt;span  lang="ES-TRAD" style="font-size:14;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Encabezamiento2A"&gt;&lt;span  lang="ES-TRAD" style="font-size:14;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="CuerpoA"&gt;&lt;span lang="ES-TRAD"&gt;Una vez arrancada la aplicación, haremos clic sobre el botón “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Explorador de Ramas&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”, que cargará el gráfico descriptivo del estado del desarrollo actual. Una vez cargado el gráfico haremos clic derecho sobre la rama principal y selecc&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;ionaremos la opción “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Crear rama hija...&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”. &lt;/span&gt;&lt;/p&gt;  &lt;p class="CuerpoA"&gt;&lt;span lang="ES-TRAD"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="CuerpoA"&gt;&lt;span lang="ES-TRAD"&gt;Aparece un cuadro de diálogo donde indicaremos el nombre de la rama, unos comentarios (opcionalmente), e indicaremos el punto de creación de la nueva rama desde la rama principal: si va a partir de una etiqueta o conjunto de cambios concretos, o bien si va a partir del último punto que actualmente existe en la rama princi&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;pal. Finalmente pulsaremos sobre “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Aceptar&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”.&lt;/span&gt;&lt;/p&gt;  &lt;p class="CuerpoA"&gt;&lt;span lang="ES-TRAD"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="CuerpoA"&gt;&lt;span lang="ES-TRAD"&gt;Pulsando sobre el botón “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Actualizar&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;” en el “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Explorador de Ramas&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;” podremos visualizar ahora la nueva rama creada.&lt;/span&gt;&lt;/p&gt;  &lt;p class="CuerpoA"&gt;&lt;span lang="ES-TRAD"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="CuerpoA"&gt;&lt;span lang="ES-TRAD"&gt;Otra forma de crear nuevas ramas es desde la vista “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Ramas&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”. Hacemos clic derecho sobre una de las ramas listadas y a continuación sobre la opción “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Crear rama hija...&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”. El proceso a partir de aquí es idéntico a lo&lt;span style=""&gt;  &lt;/span&gt;explicado antes.&lt;/span&gt;&lt;/p&gt;&lt;p class="CuerpoA"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="CuerpoA"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7ogr8wNjLG4/SdMcFMSK3bI/AAAAAAAAAME/xnyPUBkPSKA/s1600-h/Dibujo.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 242px;" src="http://4.bp.blogspot.com/_7ogr8wNjLG4/SdMcFMSK3bI/AAAAAAAAAME/xnyPUBkPSKA/s320/Dibujo.PNG" alt="" id="BLOGGER_PHOTO_ID_5319626460377046450" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:pixelsperinch&gt;72&lt;/o:PixelsPerInch&gt;   &lt;o:targetscreensize&gt;544x376&lt;/o:TargetScreenSize&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Helvetica; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536881799 -2147483648 8 0 511 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:"ヒラギノ角ゴ Pro W3"; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:auto; 	mso-font-signature:0 0 0 0 0 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US;} p.Encabezamiento2A, li.Encabezamiento2A, div.Encabezamiento2A 	{mso-style-name:"Encabezamiento 2 A"; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	page-break-after:avoid; 	mso-outline-level:2; 	font-size:12.0pt; 	mso-bidi-font-size:10.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD; 	font-weight:bold; 	mso-bidi-font-weight:normal;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="Encabezamiento2A"&gt;&lt;span  lang="ES-TRAD" style="font-size:14;"&gt;&lt;span style="font-size:130%;"&gt;Unir ramas.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="Encabezamiento2A"&gt;&lt;span  lang="ES-TRAD" style="font-size:14;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="Encabezamiento2A"&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:pixelsperinch&gt;72&lt;/o:PixelsPerInch&gt;   &lt;o:targetscreensize&gt;544x376&lt;/o:TargetScreenSize&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Helvetica; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536881799 -2147483648 8 0 511 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:"Trebuchet MS"; 	panose-1:2 11 6 3 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:647 0 0 0 159 0;} @font-face 	{font-family:"ヒラギノ角ゴ Pro W3"; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:auto; 	mso-font-signature:0 0 0 0 0 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US;} p.CuerpoA, li.CuerpoA, div.CuerpoA 	{mso-style-name:"Cuerpo A"; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	mso-bidi-font-size:10.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/p&gt;&lt;p style="font-weight: normal;" class="CuerpoA"&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="ES-TRAD"&gt;Una vez se han realizado los cambios deseados en la rama, podemos actualizar dichos cambios en la rama principal. Para ello realizaremos una operación de merge entre dicha rama y la rama principal. Esta operación se lleva a cabo de la siguiente manera:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-weight: normal;" class="CuerpoA"&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="ES-TRAD"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-weight: normal;" class="CuerpoA"&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="ES-TRAD"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-weight: normal;" class="CuerpoA"&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="ES-TRAD"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-weight: normal;" class="CuerpoA"&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="ES-TRAD"&gt;En la vista “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Explorador de Ramas&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”, hacemos clic derecho sobre la rama principal y seleccionamos la opción “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Cambiar espacio de trabajo a esta rama...&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;” y a continuación confirmamos el cambio pulsando sobre “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Sí&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;” en el cuadro de diálogo que aparece. Esto se hace porque el destino del merge es la rama principal.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-weight: normal;" class="CuerpoA"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font-weight: normal;" class="CuerpoA"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7ogr8wNjLG4/SdMcjhRiJUI/AAAAAAAAAMM/BXR6H6V0Xrs/s1600-h/Dibujo2.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 242px;" src="http://2.bp.blogspot.com/_7ogr8wNjLG4/SdMcjhRiJUI/AAAAAAAAAMM/BXR6H6V0Xrs/s320/Dibujo2.PNG" alt="" id="BLOGGER_PHOTO_ID_5319626981407597890" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p style="font-weight: normal;" class="CuerpoA"&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="ES-TRAD"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="font-weight: normal;" class="CuerpoA"&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="ES-TRAD"&gt;A continuación hacemos clic derecho nuevamente sobre la rama principal y seleccionamos la opción “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Merge desde esta rama...&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”; aparece un cuadro de diálogo donde indicaremos la rama o etiqueta con la que se unirá la principal pulsando sobre el botón “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Cambiar...&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;” adecuado. Una vez seleccionada la etiqueta o rama con la cual se desea unir (eligiendo la deseada en la lista de la ventana que aparece y haciendo clic sobre “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Aceptar&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”) pulsaremos sobre “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Buscar merges&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”. Se nos sugerirán los posibles merges que habría que realizar para unir las ramas. Seleccionaremos uno de ellos y pulsaremos sobre “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Merge&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;” o bien elegiremos la opción “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Merge todo&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”. Si no hay conflictos el programa resolverá los merges mostrando una ventana de progreso y al final un mensaje de éxito en la operación. Podremos cerrar la ventana. Ya hemos añadido los cambios de la rama secundaria a la rama principal.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="font-weight: normal;" class="CuerpoA"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font-weight: normal;" class="CuerpoA"&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:pixelsperinch&gt;72&lt;/o:PixelsPerInch&gt;   &lt;o:targetscreensize&gt;544x376&lt;/o:TargetScreenSize&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Helvetica; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536881799 -2147483648 8 0 511 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:"Trebuchet MS"; 	panose-1:2 11 6 3 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:647 0 0 0 159 0;} @font-face 	{font-family:"ヒラギノ角ゴ Pro W3"; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:auto; 	mso-font-signature:0 0 0 0 0 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US;} p.CuerpoA, li.CuerpoA, div.CuerpoA 	{mso-style-name:"Cuerpo A"; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	mso-bidi-font-size:10.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD;} p.Encabezamiento4A, li.Encabezamiento4A, div.Encabezamiento4A 	{mso-style-name:"Encabezamiento 4 A"; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	page-break-after:avoid; 	mso-outline-level:4; 	font-size:12.0pt; 	mso-bidi-font-size:10.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD; 	font-weight:bold; 	mso-bidi-font-weight:normal;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/p&gt;&lt;p style="font-weight: bold;" class="Encabezamiento4A"&gt;&lt;span style="font-size:100%;"&gt;&lt;span lang="ES-TRAD"&gt;Unir ramas con conflictos.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="CuerpoA"&gt;&lt;span lang="ES-TRAD"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="CuerpoA"&gt;&lt;span lang="ES-TRAD"&gt;¿Qué ocurre si al unir las ramas existen conflictos entre algunos ficheros? En este caso se cargará la herramienta de diferencias, que nos mostrará los conflictos existentes entre los ficheros. Se mostrará en la parte superior de la pantalla el contenido del archivo origen del merge, el del destino del merge y la copia antigua del destino. En la parte inferior se mostrará cómo quedaría el resultado. Mediante un código de colores podemos conocer qué texto pertenece a cada uno de los componentes del merge. Este panel inferior se puede editar a mano, tecleando sobre el mismo. Además podemos marcar o desmarcar uno de los componentes del merge pulsando en el texto superior de cada panel para hacer que los cambios introducidos en ese componente se reproduzcan en el resultado o no. Una vez hayamos seleccionado el aspecto final del fichero, pulsaremos sobre el botón “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Guardar&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”, situado en la esquina superior izquierda de la pantalla. La herramienta de diferencias nos llevará al siguiente conflicto, y así hasta que no haya más conflictos. Podemos navegar entre los conflictos utilizando los botones de flecha que aparecen en la parte superior de la pantalla de diferencias y que asemejan a un reproductor de música.&lt;/span&gt;&lt;/p&gt;  &lt;p class="CuerpoA"&gt;&lt;span lang="ES-TRAD"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="CuerpoA"&gt;&lt;b style=""&gt;&lt;span lang="ES-TRAD"&gt;Nota: &lt;/span&gt;&lt;/b&gt;&lt;span lang="ES-TRAD"&gt;En cualquier caso, una vez completada la unión entre ambas ramas, tanto los ítems que han sufrido un merge automático como los que han sufrido un merge manual están desprotegidos para que el usuario pueda constatar los resultados del merge y comprobar si está conforme. Para ver estos elementos, puede pulsar sobre la vista “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Checkouts&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”. Puede abrir tales elementos haciendo doble clic sobre cada ítem de la lista. Una vez esté conforme con el resultado puede proceder a proteger tales ficheros. Para ello, seleccione uno o varios de los elementos, a continuación haga clic derecho y seleccione “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Check in&lt;/span&gt;&lt;span lang="ES-TRAD"&gt;”, o bien pulse Ctrl+I.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:pixelsperinch&gt;72&lt;/o:PixelsPerInch&gt;   &lt;o:targetscreensize&gt;544x376&lt;/o:TargetScreenSize&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Helvetica; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536881799 -2147483648 8 0 511 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:"ヒラギノ角ゴ Pro W3"; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:auto; 	mso-font-signature:0 0 0 0 0 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US;} p.Encabezamiento2A, li.Encabezamiento2A, div.Encabezamiento2A 	{mso-style-name:"Encabezamiento 2 A"; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	page-break-after:avoid; 	mso-outline-level:2; 	font-size:12.0pt; 	mso-bidi-font-size:10.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD; 	font-weight:bold; 	mso-bidi-font-weight:normal;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="Encabezamiento2A"&gt;&lt;span  lang="ES-TRAD" style="font-size:14;"&gt;&lt;span style="font-size:130%;"&gt;Otras opciones.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="Encabezamiento2A"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="Encabezamiento2A"&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 12"&gt;&lt;meta name="Originator" content="Microsoft Word 12"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:pixelsperinch&gt;72&lt;/o:PixelsPerInch&gt;   &lt;o:targetscreensize&gt;544x376&lt;/o:TargetScreenSize&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;link rel="themeData" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"&gt;&lt;link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5CLuix_2%5CCONFIG%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;ES&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:donotoptimizeforbrowser/&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Helvetica; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:536881799 -2147483648 8 0 511 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:"Trebuchet MS"; 	panose-1:2 11 6 3 2 2 2 2 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:647 0 0 0 159 0;} @font-face 	{font-family:"ヒラギノ角ゴ Pro W3"; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:auto; 	mso-font-signature:0 0 0 0 0 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman","serif"; 	mso-fareast-font-family:"Times New Roman"; 	mso-ansi-language:EN-US; 	mso-fareast-language:EN-US;} p.CabeceraypieA, li.CabeceraypieA, div.CabeceraypieA 	{mso-style-name:"Cabecera y pie A"; 	mso-style-update:auto; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	tab-stops:right 481.6pt; 	font-size:10.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD;} p.CuerpoA, li.CuerpoA, div.CuerpoA 	{mso-style-name:"Cuerpo A"; 	mso-style-unhide:no; 	mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	mso-bidi-font-size:10.0pt; 	font-family:"Helvetica","sans-serif"; 	mso-fareast-font-family:"ヒラギノ角ゴ Pro W3"; 	mso-bidi-font-family:"Times New Roman"; 	color:black; 	mso-ansi-language:ES-TRAD;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	font-size:10.0pt; 	mso-ansi-font-size:10.0pt; 	mso-bidi-font-size:10.0pt;} @page Section1 	{size:595.0pt 842.0pt; 	margin:2.0cm 2.0cm 2.0cm 2.0cm; 	mso-header-margin:35.45pt; 	mso-footer-margin:42.5pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/p&gt;&lt;p class="CuerpoA"&gt;&lt;span style="font-weight: normal;" lang="ES-TRAD"&gt;Además de lo anteriormente expuesto, haciendo clic derecho en una de las ramas listadas en la vista “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Ramas&lt;/span&gt;&lt;span style="font-weight: normal;" lang="ES-TRAD"&gt;” o sobre una de las ramas representadas en el gráfico del “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Explorador de Ramas&lt;/span&gt;&lt;span style="font-weight: normal;" lang="ES-TRAD"&gt;”, podemos visualizar el contenido en ítems de una rama, “&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES-TRAD"&gt;Cambiar el espacio de trabajo a esta rama&lt;/span&gt;&lt;span style="font-weight: normal;" lang="ES-TRAD"&gt;” para activarla y trabajar con ella, podremos realizar diversas opciones de replicación de ramas, renombrar y borrar una rama, comparar el contenido de una rama con el de otra rama o con una etiqueta, crear una rama de primer nivel (&lt;i style=""&gt;/main&lt;/i&gt;), ver las propiedades de la rama o cambiar sus permisos.&lt;/span&gt;&lt;/p&gt;&lt;p class="CuerpoA"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="CuerpoA"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7ogr8wNjLG4/SdMdKEc6NKI/AAAAAAAAAMU/lsCzHFceyUI/s1600-h/Dibujo3.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 250px;" src="http://4.bp.blogspot.com/_7ogr8wNjLG4/SdMdKEc6NKI/AAAAAAAAAMU/lsCzHFceyUI/s320/Dibujo3.PNG" alt="" id="BLOGGER_PHOTO_ID_5319627643685581986" border="0" /&gt;&lt;/a&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;color:#000000;"   &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;span  lang="ES-TRAD" style="font-size:14;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-43700557253874406?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/43700557253874406/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=43700557253874406' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/43700557253874406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/43700557253874406'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2009/04/tutorial-sobre-branching-iii.html' title='Tutorial sobre branching (III)'/><author><name>Luix</name><uri>http://www.blogger.com/profile/07097113195001698472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_7ogr8wNjLG4/SDCpP_C1POI/AAAAAAAAAGo/gxjmeNyHIu4/S220/buk16-02-2008+003.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7ogr8wNjLG4/SdMcFMSK3bI/AAAAAAAAAME/xnyPUBkPSKA/s72-c/Dibujo.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-6908902286431946013</id><published>2009-03-26T09:44:00.004+01:00</published><updated>2009-03-26T09:49:23.945+01:00</updated><title type='text'>Tutorial sobre branching (II)</title><content type='html'>&lt;span style="font-weight: bold;font-family:times new roman;font-size:130%;"  &gt;Cómo resuelve el problema PlasticSCM.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: arial;font-family:times new roman;" &gt;¿Qué herramientas proporcionan un mecanismo de branching potente complementado con un mecanismo de merging eficaz?&lt;/span&gt;&lt;br /&gt;&lt;p style="font-family: arial;" class="CuerpoA" face="arial"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7ogr8wNjLG4/Scs_KWoFvRI/AAAAAAAAALc/zFJSoHB-uLY/s1600-h/foto1.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 182px;" src="http://4.bp.blogspot.com/_7ogr8wNjLG4/Scs_KWoFvRI/AAAAAAAAALc/zFJSoHB-uLY/s320/foto1.PNG" alt="" id="BLOGGER_PHOTO_ID_5317413232145972498" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;font-family:times new roman;" &gt;PlasticSCM implementa un mecanismo de branching que permite tener abiertas un gran número de ramas sin que el sistema se vea afectado en rendimiento. Además la gestión de tales ramas es bien sencillo mediante sus representaciones gráficas en dos y tres dimensiones.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="CuerpoA" style="font-family: arial;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7ogr8wNjLG4/Scs_QTd7uBI/AAAAAAAAALk/rwCSVIRn4P4/s1600-h/foto2.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 245px;" src="http://2.bp.blogspot.com/_7ogr8wNjLG4/Scs_QTd7uBI/AAAAAAAAALk/rwCSVIRn4P4/s320/foto2.PNG" alt="" id="BLOGGER_PHOTO_ID_5317413334377281554" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;font-family:times new roman;" &gt;El rendimiento del sistema de branching es muy alto en PlasticSCM debido a que no implementa las ramas como lo hacen otros Sistemas de Configuración Software. PlasticSCM únicamente enlaza de forma lógica la nueva rama a la rama origen de la que parte, de manera que en el momento de creación de la rama ésta se encuentra vacía. A continuación va añadiendo las modificaciones de los ficheros de la rama origen que van siendo desprotegidos y modificados en la rama creada. Con ello el espacio ocupado, tanto en disco como en memoria es mucho menor, ya que no se replica todo el contenido de la rama original en la rama secundaria.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="CuerpoA" style="font-family: arial;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7ogr8wNjLG4/Scs_j0DWoPI/AAAAAAAAALs/CRtp0qmwfYU/s1600-h/foto3.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 257px;" src="http://3.bp.blogspot.com/_7ogr8wNjLG4/Scs_j0DWoPI/AAAAAAAAALs/CRtp0qmwfYU/s320/foto3.PNG" alt="" id="BLOGGER_PHOTO_ID_5317413669541683442" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: trebuchet ms;font-family:times new roman;" &gt;PlasticSCM, además, implementa un eficaz sistema de merging que permite unir ramas, etiquetas, revisiones, conjuntos de cambios, etc. de la forma más automática y transparente posible para el usuario, y en aquellos casos en los que existen conflictos en las modificaciones de los mismos ficheros proporciona una sencilla herramienta de diferencias que permitirá seleccionar y editar qué modificaciones se quedarán en el resultado.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="CuerpoA" style="font-family: arial;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_7ogr8wNjLG4/Scs_sMuf8xI/AAAAAAAAAL0/AwDBBKSVM90/s1600-h/foto4.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 306px; height: 320px;" src="http://1.bp.blogspot.com/_7ogr8wNjLG4/Scs_sMuf8xI/AAAAAAAAAL0/AwDBBKSVM90/s320/foto4.PNG" alt="" id="BLOGGER_PHOTO_ID_5317413813604053778" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="CuerpoA" style="font-family: arial;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7ogr8wNjLG4/Scs_0fVok_I/AAAAAAAAAL8/2Hwk9lFP4rc/s1600-h/foto5.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 261px;" src="http://3.bp.blogspot.com/_7ogr8wNjLG4/Scs_0fVok_I/AAAAAAAAAL8/2Hwk9lFP4rc/s320/foto5.PNG" alt="" id="BLOGGER_PHOTO_ID_5317413956038988786" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-6908902286431946013?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/6908902286431946013/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=6908902286431946013' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/6908902286431946013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/6908902286431946013'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2009/03/tutorial-sobre-branching-ii.html' title='Tutorial sobre branching (II)'/><author><name>Luix</name><uri>http://www.blogger.com/profile/07097113195001698472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_7ogr8wNjLG4/SDCpP_C1POI/AAAAAAAAAGo/gxjmeNyHIu4/S220/buk16-02-2008+003.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7ogr8wNjLG4/Scs_KWoFvRI/AAAAAAAAALc/zFJSoHB-uLY/s72-c/foto1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-5508962010914112297</id><published>2009-03-17T09:55:00.003+01:00</published><updated>2009-03-17T10:14:11.193+01:00</updated><title type='text'>Tutorial sobre branching (I)</title><content type='html'>&lt;em&gt;A lo largo de 3 entregas veremos un pequeño tutorial sobre branching. En la primera entrega enunciaremos algunos conceptos y la necesidad de branching; en la segunda, cómo resuelve PlasticSCM el problema del branching, y en una tercera y última entrega veremos qué pasos hay que seguir en PlasticSCM para trabajar con ramas.&lt;/em&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Introducción y necesidad de branching.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;br /&gt;Cuando en el desarrollo de un proyecto software intervienen varias personas o se desea realizar un desarrollo iterativo de entrega incremental, en el cual se van publicando sucesivos &lt;em&gt;releases&lt;/em&gt; del producto, se hace necesario un modelo de construcción estructurado, que se adapte a nuestra forma de trabajar y que facilite un desarrollo paralelo en la medida de lo posible.&lt;br /&gt;&lt;br /&gt;Pero, &lt;strong&gt;¿qué es realmente un desarrollo paralelo?&lt;/strong&gt; Un desarrollo paralelo no es aquél en el que un programador espera a que otro acabe para editar un mismo fichero, sino aquél que permite que los programadores trabajen de forma independiente unos de otros, sin tener que preocuparse por si alguien estará trabajando sobre los mismos ficheros que yo.&lt;br /&gt;&lt;br /&gt;Este modelo de trabajo es realmente productivo, pues permite aprovechar todo el potencial de cada desarrollador individual pero trabajando en colectivo. Claro, que no deja de ser una propuesta bastante ambiciosa. ¿Cómo lograr esto?&lt;br /&gt;&lt;br /&gt;Planteemos otro problema: en un proyecto que utiliza desarrollo iterativo con entrega incremental, ¿cómo podemos organizar los sucesivos &lt;em&gt;releases&lt;/em&gt; sin interferir unos con otros?&lt;br /&gt;&lt;br /&gt;La solución a estos y otros problemas pasa por el branching, que consiste en crear distintas ramas de desarrollo, distintos flujos de progreso. Antes de entrar en materia, es conveniente aclarar que una rama es una herramienta, no una solución como tal, y como toda herramienta debe ser utilizada con responsabilidad y debe estar sustentada por una política de uso como base que permita aprovechar su potencial. Es decir: hay que decidir cuándo se crea una rama, cuándo se une tal rama a la rama principal, qué contiene la rama, etc.&lt;br /&gt;&lt;br /&gt;También es necesario indicar que un mecanismo de branching tiene poca utilidad sin un mecanismo de merging (unión o reunión de distintas ramas) potente. Si no podemos unir las ramas secundarias a la rama principal de forma potente y a poder ser, sencilla y automatizada, de poco nos sirve poder ramificar.&lt;br /&gt;&lt;br /&gt;¿Cómo resuelve el branching los anteriores problemas planteados? Para el primero, la solución pasa por crear una rama para cada tarea, o bien una rama para cada programador. De este modo cada programador trabajará en una rama independiente, en un espacio de trabajo independiente y no interferirá su trabajo con el de los demás, salvo en el momento de reunir los cambios con los del resto mediante una operación de merge. El segundo problema se puede resolver creando una rama para el release. Las pruebas y modificaciones que se realicen sobre ese release se realizarán sobre la rama secundaria creada a tal efecto, mientras que el desarrollo normal del proyecto puede continuar en la rama principal (posiblemente creando nuevas ramas por tarea o por programador), con lo cual el desarrollo no queda parado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-5508962010914112297?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/5508962010914112297/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=5508962010914112297' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/5508962010914112297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/5508962010914112297'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2009/03/tutorial-sobre-branching-i.html' title='Tutorial sobre branching (I)'/><author><name>Luix</name><uri>http://www.blogger.com/profile/07097113195001698472</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp2.blogger.com/_7ogr8wNjLG4/SDCpP_C1POI/AAAAAAAAAGo/gxjmeNyHIu4/S220/buk16-02-2008+003.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-572282793155684885</id><published>2008-08-20T09:46:00.003+02:00</published><updated>2008-08-20T09:58:46.507+02:00</updated><title type='text'>4 reglas para tu proceso de control de versiones</title><content type='html'>Al principio todo era plano.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_z6qpykplUvI/SJsuPOftnbI/AAAAAAAAAYU/ILVX9YWClnc/s1600-h/mainbranch.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5231826231244987826" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_z6qpykplUvI/SJsuPOftnbI/AAAAAAAAAYU/ILVX9YWClnc/s400/mainbranch.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pero ahora, ¡afortunadamente!, ya no es así...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/SJsuWFCKK1I/AAAAAAAAAYc/skUZf4MgXaM/s1600-h/branches.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5231826348964195154" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SJsuWFCKK1I/AAAAAAAAAYc/skUZf4MgXaM/s400/branches.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Antecedentes&lt;/strong&gt;&lt;br /&gt;Vale, ¿por qué estoy escribiendo esto? Esta semana tuve la oportunidad de ver dos estupendas presentaciones de &lt;a href="http://en.oreilly.com/oscon2008/public/schedule/proceedings"&gt;OSCON 2008&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;La primera es de &lt;a href="http://en.wikipedia.org/wiki/Mark_Shuttleworth"&gt;Mark Shuttleworth&lt;/a&gt; (Canonical, Ubuntu), titulada &lt;strong&gt;Más allá del desarrollo ágil: Posibilitar la Siguiente Generación de Métodos de Desarrollo de Software&lt;/strong&gt;, y que trata sobre diversos temas muy interesantes tales como &lt;a href="http://en.wikipedia.org/wiki/Lean_software_development"&gt;Lean Software Development&lt;/a&gt;. Podéis ver una presentación &lt;a href="http://assets.en.oreilly.com/1/event/12/Beyond%20Agile_%20Enabling%20the%20Next%20Wave%20of%20Software%20Development%20Methods%20Paper.pdf"&gt;aqui&lt;/a&gt;, merece la pena.&lt;br /&gt;&lt;br /&gt;La que realmente me gustó fué la diapositiva 17 en la que dice:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;Branching and Merging&lt;br /&gt;  Keep trunk pristine,&lt;br /&gt;    Keep features flowing,&lt;br /&gt;      Release on demand.&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Que yo traduzco por:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;strong&gt;Ramificación e integración&lt;/strong&gt;&lt;br /&gt;  Mantener la línea principal impoluta,&lt;br /&gt;    Mantener la potencia de la herramienta en uso,&lt;br /&gt;      Crear versiones bajo demanda.&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Y la diapositiva 20 dónde menciona:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;Pre-Commit Testing&lt;br /&gt;  I see you knocking&lt;br /&gt;    but you can't come in.&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Que viene a ser:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;Probar antes de realizar commit&lt;br /&gt;  Veo que estás llamando&lt;br /&gt;    pero no puedes entrar.&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Como veis se centran en un punto crítico que es pasar todo el juego de tests antes de hacer commit, algo que puede sonar opuesto a la integración continua, pero que en realidad es una evolución del modelo.&lt;br /&gt;&lt;br /&gt;También me gustó &lt;strong&gt;Code Reviews for Fun and Profit&lt;/strong&gt; de &lt;a href="http://en.wikipedia.org/wiki/Alex_Martelli"&gt;Alex Martelli &lt;/a&gt;(Google) que se puede encontrar &lt;a href="http://assets.en.oreilly.com/1/event/12/Code%20Reviews%20for%20Fun%20and%20Profit%20Paper.pdf"&gt;aquí &lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Menciona lo siguiente en la diapositiva 26:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;idealmente, la CR (code review) debería de tener lugar ANTES&lt;br /&gt;del commit/inclusión de cambios en la&lt;br /&gt;base de código &lt;br /&gt;-- mantener la línea principal/inteligente/consejo de calidad&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;Esto también parece interesante, ¿no?&lt;br /&gt;&lt;br /&gt;E incide sobre el mismo tema: revisar, probar, comprobar que no se rompe nada &lt;strong&gt;antes&lt;/strong&gt; de hacer commit a la línea principal.&lt;br /&gt;&lt;br /&gt;Y de todo esto se me ocurrió este post (que &lt;a href="http://codicesoftware.blogspot.com/2008/08/4-steps-to-make-version-control-shine.html"&gt;primero publiqué en inglés&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Las reglas&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Vale, vamos a intentar localizar las principales reglas para conseguir el mejor control de versiones posible en la era &lt;em&gt;post-agile&lt;/em&gt;:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Regla 1&lt;/strong&gt;: Mantener la rama principal incorrupta. ¡La rama principal es tu proyecto! No la uses como un trastero (lleno de cosas que no sirven) para dejar todos los cambios y nuevas características. ¡Utiliza las ramas para eso! (Ya, ya lo oigo: "acabaremos con miles de ramas!!", claaaro, ¡y eso no es un problema! Usa un control de versiones adecuado! :-P)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Regla 2&lt;/strong&gt;: Aislar cambios en ramas. Es una consequencia de la Regla #1. Guarda cada cambio o característica nueva en su propia rama. Ayudará a mantener la rama principal limpia, y te dará toda la potencia del desarrollo paralelo real. También es muy bueno para &lt;a href="http://codicesoftware-es.blogspot.com/2006/11/cambios-de-tarea.html"&gt;cambiar de tarea &lt;/a&gt;y hacer un seguimiento de los cambios intermedios.&lt;br /&gt;&lt;br /&gt;Nota:  Asocia tu rama con una con una tarea en tu herramienta de control de tareas (Bugzilla, Mantis, Jira ...) para poder tener el ciclo completo.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Regla 3&lt;/strong&gt;: Guarda los cambios con cierta frecuencia, con más de la que lo haces ahora. Si desarrollas en la línea principal no harás commt cada 5 minutos, los cambios suelen tardar más en realizarse. Si tienes tu propia rama para la tarea puedes hacer commit tantas veces como quieras (¡aunque no compile!)... y luego tendrás un historial privado de los cambios.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Regla 4&lt;/strong&gt;: Revisar los cambios antes de incluirlos en la línea principal. En el desarrollo en la rama principal (y en integración continua) se realizan las pruebas de tests &lt;em&gt;después&lt;/em&gt; de que se hayan integrado los cambios. ¡No lo hagas! Sería demasiado tarde, el código ya está roto. Saca el máximo partido a tu herramienta de SCM, revisa los cambios antes de integrarlos.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_z6qpykplUvI/SJsvy3RitCI/AAAAAAAAAYk/TvpN6zt8QuU/s1600-h/4stepstoshine.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_z6qpykplUvI/SJsvy3RitCI/AAAAAAAAAYk/TvpN6zt8QuU/s400/4stepstoshine.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5231827942998455330" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;La buena noticia es que hay herramientas que soportan este modelo, tanto en el ámbito comercial como en herramientas de código libre: &lt;a href="http://www.plasticscm.com/"&gt;plastic&lt;/a&gt;, &lt;a href="http://www.accurev.com/"&gt;accurev&lt;/a&gt;, &lt;a href="http://git.or.cz/"&gt;git &lt;/a&gt;(&lt;a href="http://bazaar-vcs.org/"&gt;bazaar&lt;/a&gt;?)...&lt;br /&gt;&lt;br /&gt;La mala noticia es que algunas de las herramientas más utilizadas no soportan este modelo.&lt;br /&gt;&lt;br /&gt;Llega una nueva era... ¡preparate!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-572282793155684885?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/572282793155684885/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=572282793155684885' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/572282793155684885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/572282793155684885'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2008/08/4-reglas-para-tu-proceso-de-control-de.html' title='4 reglas para tu proceso de control de versiones'/><author><name>pablo</name><uri>http://www.blogger.com/profile/08083682682597484025</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://1.bp.blogspot.com/_z6qpykplUvI/TQi0oJF2nUI/AAAAAAAABBs/Ix-9YZXzAwg/S220/helmetface.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_z6qpykplUvI/SJsuPOftnbI/AAAAAAAAAYU/ILVX9YWClnc/s72-c/mainbranch.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-6701277147410133479</id><published>2008-08-14T13:27:00.009+02:00</published><updated>2008-08-20T10:03:08.501+02:00</updated><title type='text'>Herramienta de Xmerge para gestionar refactors</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/SJx1OAzK2YI/AAAAAAAAAY0/FLxU93YundU/s1600-h/xmerge.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5232185750690912642" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_z6qpykplUvI/SJx1OAzK2YI/AAAAAAAAAY0/FLxU93YundU/s200/xmerge.jpg" border="0" /&gt;&lt;/a&gt;Si has leido este blog anteriormente, probablemente te habrás dado cuenta de que de vez en cuando hablamos de gestión de ramas y de integraciones :-P&lt;br /&gt;&lt;br /&gt;Pues hoy vamos a introducir la última idea que hemos tenido: el Xmerge (integración cruzada o cross-merging).&lt;br /&gt;&lt;br /&gt;¿Y qué es la integración cruzada? Explicado de manera simple: es tan sólo una herramienta que ayuda a los desarrolladores a integrar el código que se ha movido y modificado en paralelo. Esto pasa muy a menudo al hacer un refactor del código, ¿no?&lt;br /&gt;&lt;br /&gt;Vamos a verlo con un ejemplo: supongamos que tenemos un fichero inicial como el siguiente:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/SJx1bV7EOJI/AAAAAAAAAY8/BGJwDoGi1os/s1600-h/base.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5232185979699476626" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SJx1bV7EOJI/AAAAAAAAAY8/BGJwDoGi1os/s320/base.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora dos desarrolladores comienzan a hacer cambios en paralelo en este fichero (lo cual es una buena idea, para que no tengan que estar esperando el uno a que termine el otro... :-P):&lt;br /&gt;&lt;br /&gt;El primer desarrollador hace sus cambios y el segundo mueve el código.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/SJx1ysxXMZI/AAAAAAAAAZM/hzCHKCoQyzY/s1600-h/source.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5232186380969783698" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SJx1ysxXMZI/AAAAAAAAAZM/hzCHKCoQyzY/s320/source.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/SJx1yk1HFxI/AAAAAAAAAZE/9YXymD8Vq1Q/s1600-h/destination.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5232186378838021906" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SJx1yk1HFxI/AAAAAAAAAZE/9YXymD8Vq1Q/s320/destination.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;¿Qué pasará al intentar integrar los cambios?&lt;br /&gt;&lt;br /&gt;Una herramienta de merge (o de integración) no detectará el código que se ha movido, pero verá que se ha quitado parte del código y que otra parte se ha añadido. Así que habrá que editar el código manualmente e ir copiando y pegando bloques de código. ¡Un dolor de cabeza!.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/SJx2QhRE9KI/AAAAAAAAAZU/-3nIM_NBqeY/s1600-h/initialmerge.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5232186893277656226" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_z6qpykplUvI/SJx2QhRE9KI/AAAAAAAAAZU/-3nIM_NBqeY/s320/initialmerge.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;¿Y si la herramienta pudiera ayudar?&lt;br /&gt;&lt;br /&gt;Lo mejor sería que detectara cuál ha sido el código que se ha movido, pero significaría que habría que realizar algún tipo de análisis sintáctico, que no es lo más sencillo de hacer ya que la herramienta se hace dependiente del lenguaje, etc (y esto es en lo que estamos trabajando en este momento, así que estad al loro...).&lt;br /&gt;&lt;br /&gt;Pero, ¿y si tan sólo te dejara que encontraras el código que se ha movido y entonces la herramienta pudiera hacer el trabajo sucio? Te ahorrarías el cortar y pegar, ¿no?&lt;br /&gt;&lt;br /&gt;Lo ideal sería tener algo como lo siguiente: que la herramienta detecte que "algo ha pasado", entonces indicaría que se debe de buscar el código que ha sido movido, entonces realiza un "sub-merge" sólo con los contribuidores afectados.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_z6qpykplUvI/SJx3AEIPFgI/AAAAAAAAAZc/5Q7tyavH-_E/s1600-h/extracted-merge.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5232187710089664002" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_z6qpykplUvI/SJx3AEIPFgI/AAAAAAAAAZc/5Q7tyavH-_E/s320/extracted-merge.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Se realiza el sub-merge, solucionando los conflictos potenciales y la herramienta cambiará tu selección por el código que se ha integrado.&lt;br /&gt;&lt;br /&gt;Fácil, ¿no?&lt;br /&gt;&lt;br /&gt;Estamos trabajando en una nueva versión de la herramienta de integración de Plastic y la podéis &lt;strong&gt;ver en acción en el siguiente vídeo&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codicesoftware.com/xschannel/xmergeintro.aspx"&gt;&lt;img id="BLOGGER_PHOTO_ID_5232188518575202786" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SJx3vH-NYeI/AAAAAAAAAZk/Rc-p9iOuHbc/s320/xmerge.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;¿Los siguientes pasos?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Estos son algunos:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;¿Qué pasa cuando el código se mueve a un fichero diferente? Estamos trabajando en ello.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Sistema que detecte de manera automática el código movido&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Búsqueda de código movido en ficheros&lt;br /&gt;&lt;br /&gt;¡Estad atentos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-6701277147410133479?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/6701277147410133479/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=6701277147410133479' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/6701277147410133479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/6701277147410133479'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2008/08/herramienta-de-xmerge-para-gestionar.html' title='Herramienta de Xmerge para gestionar refactors'/><author><name>mdepedro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_z6qpykplUvI/SJx1OAzK2YI/AAAAAAAAAY0/FLxU93YundU/s72-c/xmerge.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-5886728464376286455</id><published>2008-08-04T11:02:00.015+02:00</published><updated>2008-12-11T18:51:46.833+01:00</updated><title type='text'>Como utilizar Plastic SCM y DevTrack parte I</title><content type='html'>Como ya habréis visto en posts anteriores, Plastic SCM ofrecer la opción de ser utilizado integrado con diversas herramientas de control de tareas, ya que se integra con los sistemas más utilizados en el mercado, &lt;a href="http://www.codice.es/spproducts/spintegrations/sptasktracking.aspx"&gt;aquí &lt;/a&gt;podéis ver cuáles son estas herramientas. Una de ellas es DevTrack, de Tech Excel.&lt;br /&gt;En este post voy a explicar con ejemplos, como utilizar Plastic SCM integrado con DevTrack. Para comenzar tenemos que tener en cuenta que Plastic no sólo se integra con este sistema, sino que además proporciona diversas opciones para la integración. ¿Por qué se ofrecen diversas opciones? Pues simplemente para que cada organización pueda utilizar el modo que mejor se adapte a su patrón de trabajo; en este post vamos a ver la opción del modo de trabajo "Tarea en Rama".&lt;br /&gt;El primer paso para configurar la extensión de DevTrack por parte del desarrollador será copiar el fichero “devtrackextension.dll” en la carpeta dónde está instalado el cliente de Plastic SCM y añadir las siguientes líneas (rodeadas en rojo) para indicar al cliente que esta es la extensión que se va a usar:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://1.bp.blogspot.com/_WDZTL-ijf64/SJLJMP2w5KI/AAAAAAAAALM/o1Hm-8nEVJ4/s1600-h/clientconf.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5229463329582408866" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_WDZTL-ijf64/SJLJMP2w5KI/AAAAAAAAALM/o1Hm-8nEVJ4/s400/clientconf.gif" border="0" /&gt;&lt;/a&gt;Y además habría que crear un fichero “devtrackextension.conf”, la apariencia por defecto del mismo es la siguiente:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;devtrackextensionconfiguration&amp;gt;&lt;br /&gt;&amp;lt;dtlinkplusurl&amp;gt;http://192.168.1.237/LinkPlusWebService/WSDTIncident.asmx&amp;lt;/&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;dtlinkplusurl&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;&amp;lt;user&amp;gt;terry-j&amp;lt;/user&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;&amp;lt;projectid&amp;gt;daveProject&amp;lt;/projectid&amp;gt;&lt;br /&gt;&amp;lt;systemid&amp;gt;daveSystem&amp;lt;/systemid&amp;gt;&lt;br /&gt;&amp;lt;branchprefix&amp;gt;issue&amp;lt;/branchprefix&amp;gt;&lt;br /&gt;&amp;lt;dtbuginfobrowserurl&amp;gt;http://192.168.1.237/scripts/texcel/devtrack/b&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#000000;"&gt;uginfo.dll&amp;lt;/dtbuginfobrowserurl&amp;gt;&lt;br /&gt;&amp;lt;/devtrackextensionconfiguration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;Finalmente, debemos de asegurarnos de que el fichero devtrackextension.dll esté en la carpeta del cliente de Plastic SCM.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Una vez que se ha configurado la extensión el primer paso para comenzar a trabajar será crear una nueva tarea en nuestro sistema de control de tareas, DevTrack en este caso. En DevTrack las tareas se pueden crear como defecto o como nuevas características, y además se pueden clasificar en diversas categorías.&lt;br /&gt;Al guardar la nueva tarea se puede ver el número que se le ha asignado, además se pueden realizar búsquedas por desarrollador, tipo de tarea, etc. En este caso vemos que se ha creado la tarea 107, y se puede indicar al sistema que envíe un email al desarrollador al que se le encarga esta tarea.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_WDZTL-ijf64/SJbT6Kt_WSI/AAAAAAAAAMk/0bl6yR8c2qw/s1600-h/SP2.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5230601013500533026" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_WDZTL-ijf64/SJbT6Kt_WSI/AAAAAAAAAMk/0bl6yR8c2qw/s400/SP2.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Cuando el desarrollador asignado, en este caso, Terry, esté preparado para comenzar a trabajar en la tarea 107, irá a la vista de ramas para crear una nueva rama a la que pondrá el mismo nombre que la tarea creada en DevTrack e incluirá sus comentarios. También se puede incluir la base que tendrá la rama, que esta recordará cada vez que un usuario vaya a trabajar con ella; se puede ver más información de las ramas inteligentes de Plastic &lt;a href="http://www.codice.es/spproducts/spcore/spsmartbranches.aspx"&gt;aquí&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_WDZTL-ijf64/SJbV2W68N5I/AAAAAAAAAMs/cxcHUs4zfrk/s1600-h/SP3.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5230603147079858066" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_WDZTL-ijf64/SJbV2W68N5I/AAAAAAAAAMs/cxcHUs4zfrk/s400/SP3.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Después de que se haya creado la rama, yendo a la parte superior izquierda de la vista de ramas podemos ver la información extendida de las ramas, que muestra informacion de las tareas enlazadas de DevTrack al seleccionar una rama. En la siguiente imágen podemos ver que se selecciona la rama recién creada (/scm00107) y en la parte de la derecha podemos ver inmediatamente la información de la tarea 107 en DevTrack: título, comentarios, propietario,etc:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_WDZTL-ijf64/SJbXGAXZJ8I/AAAAAAAAAM0/yHT82nUp9eQ/s1600-h/SP4.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5230604515414714306" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_WDZTL-ijf64/SJbXGAXZJ8I/AAAAAAAAAM0/yHT82nUp9eQ/s400/SP4.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Y una vez que se haya realizado la tarea, haciendo doble click en el diálogo o click en el botón de la extensión, podemos ir a las tareas en DevTrack, cambiar el estado o cualquier otra información de la tarea, que se refrescará en la información de Plastic:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_WDZTL-ijf64/SDv4551peJI/AAAAAAAAADU/4tg26zGSqUg/s1600-h/bugzilla06.png"&gt;&lt;/a&gt;&lt;br /&gt;¡Así de sencillo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-5886728464376286455?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/5886728464376286455/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=5886728464376286455' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/5886728464376286455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/5886728464376286455'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2008/08/como-utilizar-plastic-scm-y-devtrack.html' title='Como utilizar Plastic SCM y DevTrack parte I'/><author><name>mdepedro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_WDZTL-ijf64/SJLJMP2w5KI/AAAAAAAAALM/o1Hm-8nEVJ4/s72-c/clientconf.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-6387679191282111373</id><published>2008-07-28T14:37:00.000+02:00</published><updated>2008-12-11T18:51:49.586+01:00</updated><title type='text'>Repositorio de Mono en Plastic</title><content type='html'>Estamos trabajando en una sincronización de dos modos de Subversion con Plastic. Permitirá que los grupos de desarrollo que utilizan Subversion puedan migrar a Plastic poco a poco mientras continúan en sincronización con otras localizaciones que tardarán más en moverse a Plastic.&lt;br /&gt;&lt;br /&gt;Como prueba estamos importando el repositorio de Mono. Nuestra intención es crear un sitio público en el cual tener proyectos de código libre con Plastic, y por supuesto, el primer repositorio que se va a replicar será el código base de Mono.&lt;br /&gt;&lt;br /&gt;Aquí podéis encontrar algunas capturas de la importación preliminar que hemos estado haciendo hoy.&lt;br /&gt;Esta es una vista de las etiquetas:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/SImnOcsvwSI/AAAAAAAAAXI/NbuWUZfcxlA/s1600-h/monorepos00.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226892709204050210" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SImnOcsvwSI/AAAAAAAAAXI/NbuWUZfcxlA/s400/monorepos00.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ramas:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_z6qpykplUvI/SImnOTRqDqI/AAAAAAAAAXQ/ejbbMG3XR80/s1600-h/monorepos01.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226892706674511522" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_z6qpykplUvI/SImnOTRqDqI/AAAAAAAAAXQ/ejbbMG3XR80/s400/monorepos01.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Un árbol de versiones del directorio de Mono:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_z6qpykplUvI/SImnOxUDv2I/AAAAAAAAAXY/FbzFjU95qIQ/s1600-h/monorepos03.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226892714737647458" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_z6qpykplUvI/SImnOxUDv2I/AAAAAAAAAXY/FbzFjU95qIQ/s400/monorepos03.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Los últimos changesets que se importaron (por favor, tengan en cuenta que no estamos utilizando el último repositorio de SVN)&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/SImnOwaqufI/AAAAAAAAAXg/TheP0y-5uP0/s1600-h/monorepos04.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226892714496932338" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_z6qpykplUvI/SImnOwaqufI/AAAAAAAAAXg/TheP0y-5uP0/s400/monorepos04.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El explorador de ramas...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_z6qpykplUvI/SImnO-sb68I/AAAAAAAAAXo/Apeg_aXtOuY/s1600-h/monorepos05.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226892718329555906" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_z6qpykplUvI/SImnO-sb68I/AAAAAAAAAXo/Apeg_aXtOuY/s400/monorepos05.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y la vista de contenido de una rama:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_z6qpykplUvI/SImn6LSrGJI/AAAAAAAAAX4/XV0qQqmyTGM/s1600-h/monorepos07.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5226893460445534354" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_z6qpykplUvI/SImn6LSrGJI/AAAAAAAAAX4/XV0qQqmyTGM/s400/monorepos07.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Así que aún tardaremos un tiempo, pero espero que publiquemos un repositorio de Mono bastante pronto para que podáis ver las características de Plastic en un repositorio grande tan amplio como conocido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-6387679191282111373?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/6387679191282111373/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=6387679191282111373' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/6387679191282111373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/6387679191282111373'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2008/07/repositorio-de-mono-en-plastic.html' title='Repositorio de Mono en Plastic'/><author><name>mdepedro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_z6qpykplUvI/SImnOcsvwSI/AAAAAAAAAXI/NbuWUZfcxlA/s72-c/monorepos00.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-8838919796932617860</id><published>2008-07-28T13:23:00.004+02:00</published><updated>2008-07-28T13:36:13.344+02:00</updated><title type='text'>Como configurar MySQL como backend en Plastic SCM 2.5</title><content type='html'>&lt;p&gt;Es muy sencillo de configurar, tan sólo hay que crear (o editar) un fichero denominado 'db.conf' en el directorio de instalación del servidor.&lt;br /&gt;El contenido de este fichero debe de ser el siguiente:&lt;pre&gt;&amp;lt;dbconfig&amp;gt;&lt;br /&gt;  &amp;lt;providername&amp;gt;mysql&amp;lt;/providername&amp;gt;&lt;br /&gt;  &amp;lt;connectionstring&amp;gt;Server=_SERVER_;UserID=_USER_;Password=_PASSWORD_;Database={0};Pooling=true&amp;lt;/connectionstring&amp;gt;&lt;br /&gt;  &amp;lt;databasepath&amp;gt;&amp;lt;/databasepath&amp;gt;&lt;br /&gt;&amp;lt;/dbconfig&amp;gt;&lt;/pre&gt;cambiando los parámetros _SERVER_, _USER_ y _PASSWORD_ con los necesarios según la configuración del servidor que se quiera utilizar. Por ejemplo, un fichero with 'db.conf' ´válido para nuestro entorno de desarrollo sería:&lt;br /&gt;&lt;pre&gt;&amp;lt;dbconfig&amp;gt;&lt;br /&gt;  &amp;lt;providername&amp;gt;mysql&amp;lt;/providername&amp;gt;&lt;br /&gt;  &amp;lt;connectionstring&amp;gt;Server=venus;UserID=myuser;Password=mypwd;Database={0};Pooling=true&amp;lt;/connectionstring&amp;gt;&lt;br /&gt;  &amp;lt;databasepath&amp;gt;&amp;lt;/databasepath&amp;gt;&lt;br /&gt;&amp;lt;/dbconfig&amp;gt;&lt;/pre&gt;Finalmente, debemos indicar que el parámetro de configuración de mysql &lt;strong&gt;max_allowed_packet&lt;/strong&gt; soporte hasta 10MB. Para más información de cómo configurar este parámetro puede ver el siguiente &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/packet-too-large.html" rel="nofollow"&gt;artículo.&lt;/a&gt; &lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-8838919796932617860?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/8838919796932617860/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=8838919796932617860' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8838919796932617860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8838919796932617860'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2008/07/como-configurar-mysql-como-backend-en.html' title='Como configurar MySQL como backend en Plastic SCM 2.5'/><author><name>mdepedro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-5172385602703504787</id><published>2008-07-22T10:13:00.001+02:00</published><updated>2008-12-11T18:51:50.635+01:00</updated><title type='text'>Cómo utilizar Plastic SCM y Bugzilla II</title><content type='html'>Como vimos en el post anterior de cómo utilzar Plastic SCM con la extensión de Bugzilla, hay dos opciones diferentes para trabajar con la extensión, dependiendo del patrón de trabajo que su empresa esté utilizando. En este post nos vamos a centrar en la opción de “Tarea en Changeset” (Task on Changeset), que utilizarán empresas que trabajen con el patrón de desarrollo en línea principal o en “rama por desarrollador”.&lt;br /&gt;Para configurar la extensión con este método de trabajo hay que configurar el fichero “bugzillaextension.dll” de la misma manera que en el caso anterior, pero en este caso el fichero “bugzillaextension.conf” se configura de manera diferente, por lo que debe de tener la siguiente apariencia:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;BugzillaExtensionConfiguration&amp;gt;&lt;br /&gt; &amp;lt;BugzillaBaseUrl&amp;gt;http://192.168.1.14:8888/bugzilla/&lt;br /&gt;         3.0/&amp;lt;/BugzillaBaseUrl&amp;gt;&lt;br /&gt; &amp;lt;BranchPrefix&amp;gt;SCM&amp;lt;/BranchPrefix&amp;gt;&lt;br /&gt;        &amp;lt;WorkingMode&amp;gt;TaskOnChangeset&amp;lt;/WorkingMode&amp;gt;&lt;br /&gt;&amp;lt;/BugzillaExtensionConfiguration&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;¡Y ya está listo para empezar a trabajar!&lt;br /&gt;Como en el caso anterior, empezamos a trabajar creando una nueva tarea en Bugzilla que se asigna al desarrollador denominado “tester”, se deja la tarea en estado de asignada:&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_WDZTL-ijf64/SDwZt51peOI/AAAAAAAAAD8/wTv01g6QnPg/s1600-h/bugzilla01.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205063545744095458" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_WDZTL-ijf64/SDwZt51peOI/AAAAAAAAAD8/wTv01g6QnPg/s400/bugzilla01.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;En este caso podemos ver que el número de defecto asignado es el 14, tenemos más defectos creados, así que podemos ver la lista de defectos utilizando la herramienta de búsqueda de Bugzilla:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_WDZTL-ijf64/SDwdKJ1peQI/AAAAAAAAAEM/kLR73Oq0C5w/s1600-h/bugzilla03.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205067329610283266" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_WDZTL-ijf64/SDwdKJ1peQI/AAAAAAAAAEM/kLR73Oq0C5w/s400/bugzilla03.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Y como resultado de la búsqueda obtenemos el listado de defectos con estado nuevo, asignado, reabierto o resuelto, como hemos indicado en la búsqueda, y entre ellos encontramos el defecto que acabamos de añadir, con número de identificación 14:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_WDZTL-ijf64/SDwdXp1peRI/AAAAAAAAAEU/XCyeFMhU7q8/s1600-h/bugzilla04.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205067561538517266" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_WDZTL-ijf64/SDwdXp1peRI/AAAAAAAAAEU/XCyeFMhU7q8/s400/bugzilla04.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ahora pongámonos a trabajar y editar el fichero “assfile” como nos indica la tarea asignada: vamos a Plastic, desprotegemos el fichero, lo editamos con los cambios que tengamos que introducir en él y lo protegemos de nuevo: en este punto Plastic abrirá una nueva ventana en la que incluiremos la información de la protección; esta ventana tiene la siguiente apariencia:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_WDZTL-ijf64/SDwiFJ1peVI/AAAAAAAAAE0/tRvCratMOFQ/s1600-h/bugzillasp01.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205072741269076306" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_WDZTL-ijf64/SDwiFJ1peVI/AAAAAAAAAE0/tRvCratMOFQ/s400/bugzillasp01.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;En esta ventana el usuario puede incluir los comentarios de la operación de protección y enlazar dicha operación (changeset) con el defecto o defectos relacionados, ya que en la opción de “tarea en changeset” se pueden enlazar uno o más changesets a una o más tareas o defectos.&lt;br /&gt;Si pinchamos en la opción de “Añadir nueva tarea” se abrirá otra ventana desde la cual podremos seleccionar el defecto que queramos enlazar, en este caso vamos a enlazar el defecto 14 como muestra la imagen:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_WDZTL-ijf64/SDwiSJ1peWI/AAAAAAAAAE8/xGAC42NG0T8/s1600-h/bugzillasp02.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205072964607375714" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_WDZTL-ijf64/SDwiSJ1peWI/AAAAAAAAAE8/xGAC42NG0T8/s400/bugzillasp02.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;¡Y ya lo tenemos enlazado!, si ahora vamos a la vista de changesets podemos encontrar información de los defectos de bugzilla enlazados a cada uno de los changesets, desde esta vista además podemos enlazar más defectos a un mismo changeset o borrar defectos que se hayan añadido previamente, y como en el caso del método de trabajo “tarea en rama”, podemos ir directamente a ese defecto en Bugzilla, hacer cambios en los defectos y cambiarlos en cualquier momento.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_WDZTL-ijf64/SDwioZ1peXI/AAAAAAAAAFE/5i5x3hzaY9c/s1600-h/bugzillasp03.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205073346859465074" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_WDZTL-ijf64/SDwioZ1peXI/AAAAAAAAAFE/5i5x3hzaY9c/s400/bugzillasp03.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;¡Espero que os guste!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-5172385602703504787?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/5172385602703504787/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=5172385602703504787' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/5172385602703504787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/5172385602703504787'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2008/05/cmo-utilizar-plastic-scm-y-bugzilla-ii.html' title='Cómo utilizar Plastic SCM y Bugzilla II'/><author><name>mdepedro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WDZTL-ijf64/SDwZt51peOI/AAAAAAAAAD8/wTv01g6QnPg/s72-c/bugzilla01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-428966315094553770</id><published>2008-07-22T10:10:00.000+02:00</published><updated>2008-12-11T18:51:52.867+01:00</updated><title type='text'>Cómo utilizar Plastic SCM y Bugzilla I</title><content type='html'>Como probablemente habrá visto ya, Plastic SCM le ofrece la opción de utilizar el sistema de gestión de tareas de su elección ya que se integra totalmente con diversos sistemas del mercado, &lt;a href="http://www.codice.es/spproducts/spintegrations/sptasktracking.aspx"&gt;aquí&lt;/a&gt; podrá ver cuales son.&lt;br /&gt;En este post intentaré explicar con un ejemplo cómo utilizar Plastic SCM integrado con uno de estos sistemas, Bugzilla…Lo primero aquí es tener en cuenta que Plastic SCM no sólo se integra con este sistema, sino que además ofrece diversas opciones de integración.&lt;br /&gt;¿Por qué? Simplemente para ofrecer el método de trabajo más adecuado según el patrón de trabajo que utilice su empresa. En primer lugar en este post vamos a ver la opción de “tarea en rama” (task on branch).&lt;br /&gt;&lt;br /&gt;Para configurar la extensión de Bugzilla en el cliente se debe de copiar “bugzillaextension.dll”, en el fichero en el que tenga instalado el cliente de Plastic SCM, y se añaden las siguientes líneas (rodeadas en rojo) para indicar al cliente que utilice esta extensión:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_WDZTL-ijf64/SDv13J1peEI/AAAAAAAAACs/qpnx4McENTA/s1600-h/bugzilla00.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205024122239285314" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_WDZTL-ijf64/SDv13J1peEI/AAAAAAAAACs/qpnx4McENTA/s400/bugzilla00.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Y también debe de crear un fichero “bugzillaextension.conf”. La apariencia por defecto de este fichero es la siguiente:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;bugzillaextensionconfiguration&amp;gt;&lt;br /&gt;     &amp;lt;bugzillabaseurl&amp;gt;http://192.168.1.14:8888/bugzilla/3.0&amp;lt;/bugzillabaseurl&amp;gt;&lt;br /&gt;     &amp;lt;branchprefix&amp;gt;SCM&amp;lt;/BRANCHPREFIX&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;La opción que se fija por defecto es la de “Tarea en Rama” aunque tambien se puede especificar de la siguiente manera:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;bugzillaextensionconfiguration&amp;gt;&lt;br /&gt; &amp;lt;bugzillabaseurl&amp;gt;http://192.168.1.14:8888/bugzilla/3.0/&amp;lt;/bugzillabaseurl&amp;gt;&lt;br /&gt; &amp;lt;branchprefix&amp;gt;SCM$lt;/branchprefix&amp;gt;&lt;br /&gt;        &amp;lt;workingmode&amp;gt;TaskOnBranch&amp;lt;/workingmode&amp;gt;&lt;br /&gt;&amp;lt;/bugzillaextensionconfiguration&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahora que ya está configurada la extensión el primer paso para empezar a trabajar con ella será crear un nuevo defecto (bug) en el sistema de control de tareas o defectos que vamos a utilizar: Bugzilla:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_WDZTL-ijf64/SDQvCV9A12I/AAAAAAAAACc/mQDMJRYSyMM/s1600-h/bugzilla01.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5202835186819061602" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_WDZTL-ijf64/SDQvCV9A12I/AAAAAAAAACc/mQDMJRYSyMM/s400/bugzilla01.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Se crea un nuevo defecto, en este caso se pone en estado “NEW” (nuevo) y se asigna a “tester”, también podemos incluir el número de horas estimadas y el plazo para realizar la tarea.&lt;br /&gt;El título que se da a esta nueva tarea es “New Task Created: Comments on a file” (Nueva tarea creada: Comentarios en un fichero) y se incluye una descripción de lo que se va a hacer para la tarea.&lt;br /&gt;Al guardar el defecto podemos ver el número que se le asigna en Bugzilla: en este caso es el 13 y podemos además indicar al sistema que envíe un email al desarrollador al que hemos asignado para que lo resuelva para que sepa que se ha encomendado una nueva tarea:&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_WDZTL-ijf64/SDv3HZ1peFI/AAAAAAAAAC0/dfeQDgpeRxw/s1600-h/bugzilla02.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205025500923787346" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_WDZTL-ijf64/SDv3HZ1peFI/AAAAAAAAAC0/dfeQDgpeRxw/s400/bugzilla02.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cuando el desarrollador tester vaya a comenzar a trabajar en el defecto 13, creará fácilmente una nueva rama y la nombrará según el defecto creado en Bugzilla, además de añadir sus comentarios, puede poner los mismos que en el defecto en Bugzilla:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_WDZTL-ijf64/SDwVup1peKI/AAAAAAAAADc/7__1cSMsTNw/s1600-h/SPbugzilla01.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205059160582486178" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_WDZTL-ijf64/SDwVup1peKI/AAAAAAAAADc/7__1cSMsTNw/s400/SPbugzilla01.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Entonces tendrá que acceder a la parte superior izquierda de la vista de ramas desde la que se muestra la información ampliada de las ramas, que muestra información del defecto correspondiente en Bugzilla al seleccionar una rama. En la siguiente imagen seleccionamos la rama que se acaba de crear (/scm013) y en la parte de la derecha podemos ver inmediatamente la información del defecto número 13, asociado a esa rama: su número, propietario o desarrollador al que se ha asignado la tarea, título y comentarios como muestra la vista normal:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_WDZTL-ijf64/SDwWAp1peLI/AAAAAAAAADk/5PfRca10yOg/s1600-h/SPbugzilla02.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205059469820131506" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_WDZTL-ijf64/SDwWAp1peLI/AAAAAAAAADk/5PfRca10yOg/s400/SPbugzilla02.png" border="0" /&gt;&lt;/a&gt;Además está disponible la vista estándar que también muestra el estado del defecto en cada momento:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_WDZTL-ijf64/SDwWP51peMI/AAAAAAAAADs/Ma_8F2mRu-I/s1600-h/SPbugzilla03.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205059731813136578" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_WDZTL-ijf64/SDwWP51peMI/AAAAAAAAADs/Ma_8F2mRu-I/s400/SPbugzilla03.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Y tan pronto como se haya realizado la tarea se hace doble click en el diálogo o simplemente click en el botón de la extensión, que nos llevará a ese defecto en Bugzilla, dónde podremos cambiar el estado que se refresca instantáneamente en Plastic:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_WDZTL-ijf64/SDwWdp1peNI/AAAAAAAAAD0/JWuldZtOrQI/s1600-h/SPbugzilla04.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5205059968036337874" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_WDZTL-ijf64/SDwWdp1peNI/AAAAAAAAAD0/JWuldZtOrQI/s400/SPbugzilla04.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;¡Simple e intuitivo…que lo disfrutéis!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-428966315094553770?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/428966315094553770/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=428966315094553770' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/428966315094553770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/428966315094553770'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2008/05/cmo-utilizar-plastic-scm-y-bugzilla-i.html' title='Cómo utilizar Plastic SCM y Bugzilla I'/><author><name>mdepedro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WDZTL-ijf64/SDv13J1peEI/AAAAAAAAACs/qpnx4McENTA/s72-c/bugzilla00.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-6289946778421875869</id><published>2008-07-22T09:16:00.001+02:00</published><updated>2008-12-11T18:51:53.257+01:00</updated><title type='text'>¡Nueva versión, Plastic SCM 2.5 ya disponible!</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_WDZTL-ijf64/SHt3xKOpSqI/AAAAAAAAAHc/GlKln2r0TtI/s1600-h/aver.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5222899879309298338" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_WDZTL-ijf64/SHt3xKOpSqI/AAAAAAAAAHc/GlKln2r0TtI/s400/aver.gif" border="0" /&gt;&lt;/a&gt;Nos alegramos de poder anunciaros que acabamos de lanzar el nuevo Plastic SCM 2.5, que ofrece un nuevo mundo de posibilidades para tus necesidades de gestión de la configuración.&lt;br /&gt;&lt;br /&gt;Esta nueva versión incluye:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;El &lt;strong&gt;sistema de triggers&lt;/strong&gt;, demandado por algunos de vosotros, que permite la ejecución de comandos de usuario para tareas tales como instaurar políticas de creación de ramas o crear reglas de formato.&lt;br /&gt;Los triggers de “Antes” y “después” de eventos inician de manera automática acciones cuando tienen lugar los eventos. El sistema de triggers proporciona tanto triggers de espacios de trabajo que se ejecutan desde el servidor de espacios de trabajo (crear espacio de trabajo, configurar el selector, añadir nuevos ítems, protección y desprotección), y los triggers de repositorio que se ejecutan desde el servidor de repositorios (crear rama, atributo, etiqueta y repositorio) en el servidor, y en el cliente se ejecuta el trigger de "update". &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Sistema de&lt;strong&gt; ramas "smart"&lt;/strong&gt;: El nuevo sistema de ramas que se ha incluido en Plastic SCM permite que los usuarios implementen cualquier tipo de patrón de trabajo ya que las propias ramas "recuerdan" su punto de partida, por lo que cada vez que un usuario cambia a una rama no tiene que configurar su base... y no sólo esto...las propiedades de una rama se pueden ir cambiando pero su historia no se pierde ya que Plastic se encarga de guardarla. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Sistema de&lt;strong&gt; atributos&lt;/strong&gt;: Permite que los usuarios incluyan información adicional en cualquier objeto del sistema. Se trata de un sistema muy potente y altamente configurable ya que los desarrolladores pueden añadir cualquier atributo y cualquier valor para los atributos...y realizar búsquedas utilizando los atributos (como buscar las ramas que han sido integradas, siendo el atributo estado y el valor integrada...; o buscar etiquetas que se han entregado a los clientes A y B, etc). &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Las extensiones de Plastic SCM para herramientas de control de tareas (Jira, Mantis, DevTrack, OnTime, VersionOne y Bugzilla) se han mejorado considerablemente: Como se puede observar en la imagen inferior, hemos incluido una opción en la interfaz gráfica desde la cuál se puede ver la información de la tarea asociada en la extensión. Y además hemos extendido la funcionalidad de las extensiones, ahora soportan dos diferentes métodos de trabajo: Tarea en rama o tarea en changeset.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_WDZTL-ijf64/SHxqyZlD9BI/AAAAAAAAAHs/kV2luGdpvMU/s1600-h/EN3.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5223167081935270930" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_WDZTL-ijf64/SHxqyZlD9BI/AAAAAAAAAHs/kV2luGdpvMU/s400/EN3.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Mejoras en el &lt;strong&gt;rendimiento&lt;/strong&gt; de diversas operaciones como añadir nuevos ficheros, proteger y desproteger al realizarse en bloque: ¡hemos conseguido que estas operaciones sean el doble de rápidas!. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Mejoras en el sistema: en la integración con Eclipse, el importador de CVS y el instalador.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Correción de errores.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;¡Hemos logrado un importante avance en esta nueva versión como resultado de un gran trabajo de nuestro equipo de desarrollo!&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-6289946778421875869?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/6289946778421875869/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=6289946778421875869' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/6289946778421875869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/6289946778421875869'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2008/07/nueva-versin-plastic-scm-25-ya.html' title='¡Nueva versión, Plastic SCM 2.5 ya disponible!'/><author><name>mdepedro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_WDZTL-ijf64/SHt3xKOpSqI/AAAAAAAAAHc/GlKln2r0TtI/s72-c/aver.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-2620324266420402413</id><published>2008-07-04T14:15:00.004+02:00</published><updated>2008-12-11T18:51:54.951+01:00</updated><title type='text'>Problemas de usuarios</title><content type='html'>Después de leer &lt;a href="http://jpobst.blogspot.com/2008/06/on-bug-triaging.html"&gt;el interesante post de Jonathan&lt;/a&gt; sobre clasificación de errores, me interesó el artículo del que habla ya que parece un enfoque muy interesante. Hemos tenido problemas en los últimos meses con este tema y parecía una buena opción.&lt;br /&gt;&lt;br /&gt;Después de realizar varios ejemplos con distintas variantes de la fórmula decidimos intentarlo por lo que implementé unos cuantos cambios para soportarlo en nuestra herramienta interna de control de tareas (es un poco primitiva pero con muchas opciones de personalización), aquí se puede ver el resultado:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_-O_O8wZ7KPU/SF_eLISSRAI/AAAAAAAAAfM/WamI7G6DUq8/s1600-h/Clipboard01.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5215131176302429186" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_-O_O8wZ7KPU/SF_eLISSRAI/AAAAAAAAAfM/WamI7G6DUq8/s400/Clipboard01.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_-O_O8wZ7KPU/SF_eLKnHL2I/AAAAAAAAAfU/0M8VNI3PZ_Q/s1600-h/Clipboard02.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5215131176926654306" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_-O_O8wZ7KPU/SF_eLKnHL2I/AAAAAAAAAfU/0M8VNI3PZ_Q/s400/Clipboard02.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Creo que el método se tiene que ajustar más a nuestras necesidades pero ya se ve una mejora a la opción de tener un campo "prioridad" muy subjetivo para los defectos.&lt;br /&gt;&lt;br /&gt;¡Gracias por la estupenda referencia Jonathan!&lt;br /&gt;&lt;br /&gt;Por cierto, podéis encontrar el artículo original &lt;a href="http://lostgarden.com/2008/05/improving-bug-triage-with-user-pain.html"&gt;aquí&lt;/a&gt;. ¡Merece la pena!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-2620324266420402413?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/2620324266420402413/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=2620324266420402413' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/2620324266420402413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/2620324266420402413'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2008/07/problemas-de-usuarios.html' title='Problemas de usuarios'/><author><name>mdepedro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-O_O8wZ7KPU/SF_eLISSRAI/AAAAAAAAAfM/WamI7G6DUq8/s72-c/Clipboard01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-8558327441649334190</id><published>2008-06-26T11:21:00.027+02:00</published><updated>2008-12-11T18:51:56.662+01:00</updated><title type='text'>El modo desconectado de Visual Studio</title><content type='html'>&lt;div align="justify"&gt;A continuación se muestra un resumen del funcionamiento del modo desconectado de Visual Studio 2003/2005. &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;Cuando no tenemos conexión con el servidor de control de versiones, Visual Studio detecta esta situación y ofrece trabajar en modo desconectado. Aparecerá una ventana como ésta si estamos trabajando con Visual Studio 2003: &lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="http://4.bp.blogspot.com/_MwDksj3Si8Q/SGNiTEz2tsI/AAAAAAAAADM/T8S5tPxSnSs/s1600-h/bindings.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5216120873273439938" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_MwDksj3Si8Q/SGNiTEz2tsI/AAAAAAAAADM/T8S5tPxSnSs/s320/bindings.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;O como ésta si estamos trabajando con Visual Studio2005: &lt;/p&gt;&lt;p&gt;&lt;a href="http://1.bp.blogspot.com/_MwDksj3Si8Q/SGNiib1mV4I/AAAAAAAAADU/TPnwApO4Shk/s1600-h/connection.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5216121137152808834" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_MwDksj3Si8Q/SGNiib1mV4I/AAAAAAAAADU/TPnwApO4Shk/s320/connection.PNG" border="0" /&gt; &lt;/a&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;br /&gt;Para desconectar manualmente una solución tenemos que pulsar sobre &lt;strong&gt;Archivo --&gt; Control de código fuente --&gt; Cambiar control de código fuente ... &lt;/strong&gt;y pulsar sobre el botón "Desconectar"&lt;/p&gt;&lt;p align="justify"&gt;Una vez que hemos desonectado la solución, podemos seguir trabajando normalmente aunque no tengamos conexión con el servidor. Cuando queremos modificar un fichero, Visual Studio "simula" el &lt;em&gt;checkout&lt;/em&gt; (desprotección). La desprotección no se ha enviado al servidor, por tanto es muy importante reconectar en cuanto se disponga nuevamente de conexión, ya que las modificaciones que se realizan mientras se está desconectado son exclusivamente locales al disco donde se están realizando.&lt;/p&gt;&lt;p align="justify"&gt;La información sobre si una solución o sus proyectos están conectado o no con el control de código fuente, Visual Studio las almacena en los ficheros con extensión .suo (Solution User Options). Es muy importante que los ficheros .suo nunca estén bajo el control de versiones, sino que sean privados a cada workspace, ya que esta información es diferente para cada usuario. &lt;/p&gt;&lt;p align="justify"&gt;Cuando una solución &lt;strong&gt;&lt;em&gt;está desconectada&lt;/em&gt;&lt;/strong&gt;, Visual Studio deduce el estado de los ficheros únicamente por el atributo de sólo lectura en el disco local. Es un fichero de sólo lectura estará protegido y uno &lt;em&gt;writable&lt;/em&gt; estará desprotegido.&lt;/p&gt;&lt;p align="justify"&gt;La única operación de control de código fuente disponible en modo desconectado es el &lt;em&gt;checkout&lt;/em&gt; (desproteger). Cuando se hace un checkout a un fichero, Visual Studio simplemente quita la protección contra escritura a ese fichero en disco.&lt;br /&gt;&lt;br /&gt;A la hora de reconectar, Visual Studio busca ficheros sin protección contra escritura y lanza &lt;em&gt;checkouts&lt;/em&gt; reales contra el servidor de control de código fuente.&lt;br /&gt;&lt;br /&gt;Adicionalmente, para cada fichero se hace un &lt;em&gt;Diff()&lt;/em&gt;, y para aquellos que hayan cambiado en disco fuera del control de código fuente Visual Studio da un aviso, indicando que el contenido en disco es diferente del contenido en el control de código fuente:&lt;br /&gt;&lt;/p&gt;&lt;p align="justify"&gt;&lt;a href="http://2.bp.blogspot.com/_MwDksj3Si8Q/SGNi2hyyooI/AAAAAAAAADc/IQyWISiCVnw/s1600-h/changed.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5216121482349027970" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_MwDksj3Si8Q/SGNi2hyyooI/AAAAAAAAADc/IQyWISiCVnw/s320/changed.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Algunos problemas conocidos&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Varios clientes han reportado en ocasiones problemas al utilizar el modo desconectado, que se enumeran a continuación:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Error no especificado al tratar de desconectar una proyecto o solución&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Las pantallas de error que puede obtener son las siguientes (VS2003 y VS2005 respectivamente):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_MwDksj3Si8Q/SGNj3sSSVcI/AAAAAAAAADk/k418KD4fWKY/s1600-h/not_especified_error.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5216122601856980418" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_MwDksj3Si8Q/SGNj3sSSVcI/AAAAAAAAADk/k418KD4fWKY/s200/not_especified_error.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_MwDksj3Si8Q/SGNkbIlKUoI/AAAAAAAAAD0/N1urQhd9pCM/s1600-h/non_specified_2005.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5216123210747761282" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_MwDksj3Si8Q/SGNkbIlKUoI/AAAAAAAAAD0/N1urQhd9pCM/s200/non_specified_2005.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En ambos casos se trata de bugs de Visual Studio. Puede aprender más sobre este tipo de errores en la siguiente dirección:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://alinconstantin.homeip.net/WebDocs/Scc/_UnspecifiedError.htm"&gt;http://alinconstantin.homeip.net/WebDocs/Scc/_UnspecifiedError.htm&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Es más común encontrar fallos cuando se trata de proyectos &lt;strong&gt;Web&lt;/strong&gt;, para los cuáles se recomienda seguir las siguientes pautas:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codicesoftware.com/releases/webDevelopmentwhitepaper.pdf"&gt;http://www.codicesoftware.com/releases/webDevelopmentwhitepaper.pdf&lt;/a&gt;&lt;/p&gt;&lt;p&gt;En caso de proyectos &lt;strong&gt;no Web&lt;/strong&gt;, una buena práctica a seguir es colocar de forma adecuada en disco la solución y los proyectos. En Visual Studio 2003 ocurre que cuando el fichero de solución está en un directorio más interno que alguno de los proyectos que contiene, Visual Studio no es capaz de manejarlo bien. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;Una forma muy sencilla de reproducir el caso es montar una solución con dos proyectos como se describe en la siguiente imagen:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_MwDksj3Si8Q/SGNmnek_KUI/AAAAAAAAAD8/DiMux_cRsWE/s1600-h/file_structure.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5216125621834295618" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_MwDksj3Si8Q/SGNmnek_KUI/AAAAAAAAAD8/DiMux_cRsWE/s200/file_structure.PNG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Cuando no se tiene conexión con el servidor, se da un error controlado y aparece el diálogo para desconectar. Una vez que se pulsa en desconectar y se pulsa ok, aparece el "Error desconocido" citado anteriormente.&lt;br /&gt;&lt;br /&gt;La forma de evitar este caso es refactorizar el fichero de solución modificando su ruta, de tal forma que la solución siempre esté en un directorio más externo que todos los proyectos que contiene. Algo parecido a la siguiente figura:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_MwDksj3Si8Q/SGNnV5c1L2I/AAAAAAAAAEE/qml4QPU_BlU/s1600-h/f_s2.PNG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5216126419321827170" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_MwDksj3Si8Q/SGNnV5c1L2I/AAAAAAAAAEE/qml4QPU_BlU/s200/f_s2.PNG" border="0" /&gt;&lt;/a&gt; En Visual Studio 2005 este problema está corregido. &lt;/p&gt;&lt;a href="http://www.codicesoftware.com/releases/webDevelopmentwhitepaper.pdf"&gt;&lt;/a&gt;&lt;a href="http://www.codicesoftware.com/releases/webDevelopmentwhitepaper.pdf"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/27541911-8558327441649334190?l=codicesoftware-es.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codicesoftware-es.blogspot.com/feeds/8558327441649334190/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=27541911&amp;postID=8558327441649334190' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8558327441649334190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/27541911/posts/default/8558327441649334190'/><link rel='alternate' type='text/html' href='http://codicesoftware-es.blogspot.com/2008/06/modo-desconectado-de-visual-studio.html' title='El modo desconectado de Visual Studio'/><author><name>Daniel Peñalba</name><uri>http://www.blogger.com/profile/14794998230103982047</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_MwDksj3Si8Q/SGNiTEz2tsI/AAAAAAAAADM/T8S5tPxSnSs/s72-c/bindings.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-27541911.post-1410025625179653499</id><published>2008-06-09T14:56:00.013+02:00</published><updated>2008-12-11T18:52:03.292+01:00</updated><title type='text'>Ramas e integraciones con Delphi parte II</title><content type='html'>En la primera parte hablamos de la parte más básica de utilizar the Plastic SCM con Delphi. Ahora nos vamos a centrar en cómo gestionar las ramas y las integraciones y en cómo Plastic maneja el código fuente de Delphi.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Creación de ramas&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Mi patrón de ramas preferido utilizando Plastic SCM es el de rama por tarea así que es lo que voy a hacer ahora: crearé un par de ramas y trabajaré en paralelo modificando el mismo código de manera diferente como harían dos desarrolladores. No me importa dónde hago los cambios y dejo que Plastic reconcilie los cambios una vez que haya terminado, para eso están la gestión de ramas y las integraciones, ¿no?.&lt;br /&gt;&lt;br /&gt;¿Qué hay que hacer para crear una nueva rama en Plastic? Muy fácil: no tiene nada que ver con los comandos antiguos de copiar o instrucciones raras (bueno, se puede escribir cm mkbr si te gusta trabajar en línea de comandos, por supuesto), simplemente tienes que ir al explorador de ramas, hacer botón derecho en la rama desde la que se quiera crear una nueva y seleccionar "crear rama hija". Entonces saldrá el diálogo de crear una rama intelignete:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_WDZTL-ijf64/SE5XFYJxm-I/AAAAAAAAAFM/Bcnp6mGR21g/s1600-h/Nuevarama.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5210197568808655842" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_WDZTL-ijf64/SE5XFYJxm-I/AAAAAAAAAFM/Bcnp6mGR21g/s400/Nuevarama.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;¿Qué es una rama inteligente? Pues es simplemente una rama que es capaz de recordar su punto de partida. Para explicarlo de manera simple; se le dice a la rama dónde están las fuentes que se quieren modificar y más adelante se puede modificar esta localización. En mi ejemplo le dije a Plastic que creara una rama denominada task001 que partiese de la etiqueta que había creado anteriormente: initial_version.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Nota&lt;/strong&gt;: no, no es necesario escribir guión bajo en vez de espacios en los nombres de las etiquetas, se podría escribir una versión inicial y sería un nombre de etiqueta válido, pero habiendo utilizado el viejo DOS durante años no te acostumbras a que pueda funcionar realmente... ;-)&lt;br /&gt;&lt;br /&gt;Después de crear la nueva rama, puedes ver el explorador de ramas como en la figura inferior, y puedes utilizarlo además para cambiar a esa rama y empezar a trabajar con ella.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/SEQqQOWFA-I/AAAAAAAAAUI/nKfoAqHlKw0/s1600-h/12afterbranchcreated.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207333527364109282" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SEQqQOWFA-I/AAAAAAAAAUI/nKfoAqHlKw0/s400/12afterbranchcreated.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;También se puede ver la información de las propiedades de la rama y comprobar un pequeño esquema que muestra cómo está configurada la rama.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/SEQqQLnt6XI/AAAAAAAAAUQ/iRBLMJ-3FrU/s1600-h/13branchproperties.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207333526632786290" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SEQqQLnt6XI/AAAAAAAAAUQ/iRBLMJ-3FrU/s400/13branchproperties.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Trabajando en la primera tarea&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Centrémonos ahora en el primer trabajo que tenemos que realizar: modificar el formulario para que tenga una mejor presentación, una parte para editar más ancha y fondo en verde. También modificaremos el código asociado al botón OnClick para realizar una acción diferente como muestra la figura de abajo.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/SEQqQdT84iI/AAAAAAAAAUY/lIz9vWv5fGQ/s1600-h/14codechangeonfirstbranch.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207333531381719586" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SEQqQdT84iI/AAAAAAAAAUY/lIz9vWv5fGQ/s400/14codechangeonfirstbranch.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora utilizaré otra herramiente muy útil desde el menú de control de código fuente: la herramienta de revisión de cambios. Utilizando esta opción obtengo los siguientes resultados que muestras cómo he modificado el código del Button1Click.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_z6qpykplUvI/SEQqQixyqEI/AAAAAAAAAUg/vmXcwswMWPA/s1600-h/15sourcecontrol-reviewchangesafterfirstchange.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207333532849055810" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_z6qpykplUvI/SEQqQixyqEI/AAAAAAAAAUg/vmXcwswMWPA/s400/15sourcecontrol-reviewchangesafterfirstchange.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Así que ahora puedo proteger mis primeros cambios: he modificado los ficheros .dfm y .pas.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/SEQqpXTMopI/AAAAAAAAAUo/tg3tRg-8b1M/s1600-h/16checkinafterfirstchanges.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207333959264674450" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SEQqpXTMopI/AAAAAAAAAUo/tg3tRg-8b1M/s400/16checkinafterfirstchanges.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Me acabo de dar cuenta de que no me gusta el cambio que acabo de hacer en el código (creo que ni siquiera está funcionando), así que vuelvo a modificar el fichero .pas y escribo el siguiente código:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_z6qpykplUvI/SEQqpqnZEEI/AAAAAAAAAUw/uFYpEzxIHGY/s1600-h/17secondchangeonfirstbranch.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207333964449648706" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_z6qpykplUvI/SEQqpqnZEEI/AAAAAAAAAUw/uFYpEzxIHGY/s400/17secondchangeonfirstbranch.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Lo bueno de utilizar una rama para cada tarea es que no te tienes que preocupar de cuántos commits (o protecciones) haces: simplemente proteges cuando quieras guardar una copia, el código no irá a la línea principal del proyecto así que no afecta a nadie incluso si los cambios intermedios no compilan, y se puede seguir usando el control de versiones como mecanismo de versionado.&lt;br /&gt;&lt;br /&gt;Finalmente cambiaré el fondo del formulario para que parezca más feo con color verde.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/SEQqraOsOUI/AAAAAAAAAU4/lqD1yetbl-I/s1600-h/18thirdchangecolortomoneygreen.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207333994410817858" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SEQqraOsOUI/AAAAAAAAAU4/lqD1yetbl-I/s400/18thirdchangecolortomoneygreen.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;¿Qué ha cambiado en el fichero .dfm? Lo bueno de .dfm (al menos desde la versión 2, si recuerdo bien, cuando se convertían de formato binario a texto) es que toda la interfaz gráfica está definida en formato de texto (si, ahora estamos todos acostumbrados, pero Delphi era capaz de hacerlo...¡hace diez años!), con lo que se pueden utilizar fácilmente las herramientas de diferencias y de integraciones.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/SEQqrvCAkHI/AAAAAAAAAVA/TaSTN14FqTQ/s1600-h/19dfmchanges.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207333999994769522" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_z6qpykplUvI/SEQqrvCAkHI/AAAAAAAAAVA/TaSTN14FqTQ/s400/19dfmchanges.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;¿Que apariencia tiene mi explorador de ramas después de trabajar en la misma rama?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/SEQqrmAcYUI/AAAAAAAAAVI/41cf5rROtJA/s1600-h/20branchexplorerafterchangesontask001.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207333997572284738" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_z6qpykplUvI/SEQqrmAcYUI/AAAAAAAAAVI/41cf5rROtJA/s400/20branchexplorerafterchangesontask001.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Colocar un gráfico en el formulario&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Bien, consideramos lo siguiente: antes de que termine con la primera tarea de programación un segundo desarrollador comienza también a trabajar en la aplicación. Él ha incluido un gráfico en el formulario.&lt;br /&gt;&lt;br /&gt;Comenzará a trabajar desde la última versión estable de nuestra aplicación de testing, que era intial_version. Su explorador de ramas tendrá la siguiente apariencia:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_z6qpykplUvI/SEQrEzZpbtI/AAAAAAAAAVQ/EzyRxCLd9aQ/s1600-h/21createsecondbranch.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207334430664388306" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_z6qpykplUvI/SEQrEzZpbtI/AAAAAAAAAVQ/EzyRxCLd9aQ/s400/21createsecondbranch.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Por favor, ten en cuenta que he activado los enlaces de parentesco para esta captura, por esto ahora se ven las líneas amarillas que señalan desde una rama hasta su punto de partida.&lt;br /&gt;&lt;br /&gt;El desarrollador añade un gráfico en el formulario que tiene la siguiente apariencia:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/SEQrGM-NkkI/AAAAAAAAAVY/zhBCb06Ssyo/s1600-h/22secondtaskaddedchart.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207334454708507202" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_z6qpykplUvI/SEQrGM-NkkI/AAAAAAAAAVY/zhBCb06Ssyo/s400/22secondtaskaddedchart.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hay que tener en cuenta que no estoy viendo el fondo verde ni el resto de cambios que ha realizado el otro desarrollador en task001 porque estoy partiendo de la última línea base estable.&lt;br /&gt;&lt;br /&gt;Bueno, puedo oir que alguna dice: “eh, pero entonces tendrás que reorganizar todo el dfm manualmente después de hacer los cambios en paralelo”. Creedme, esto no es así.&lt;br /&gt;&lt;br /&gt;Aquí podéis ver el árbol de versiones en 3D que muestra el fichero dfm que contiene la definición de la GUI:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_z6qpykplUvI/SEQrGYGyRtI/AAAAAAAAAVg/1SnbCK_kedk/s1600-h/23versiontree3d.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5207334457697257170" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_z6qpykplUvI/SEQrGYGyRtI/AAAAAAAAAVg/1SnbCK_kedk/s400/23versiontree3d.png" border="0" /&gt;
