{"id":2650,"date":"2018-04-23T06:21:52","date_gmt":"2018-04-23T06:21:52","guid":{"rendered":"https:\/\/esferas.org\/msqlu\/?p=2650"},"modified":"2018-04-23T06:26:38","modified_gmt":"2018-04-23T06:26:38","slug":"desarrollo-nomada","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2018\/04\/23\/desarrollo-nomada\/","title":{"rendered":"Desarrollo n\u00f3mada &#8230;"},"content":{"rendered":"<p>&#8230;. o c\u00f3mo se puede uno complicar la vida y qu\u00e9 soluciones hay.<\/p>\n<p><!--more--><\/p>\n<p>Soy de la vieja escuela. Eso significa que mi entorno de trabajo (como programador) emplea herramientas simples y directas.<\/p>\n<p>El editor de textos es <em>Vim<\/em> pero apenas uso una m\u00ednima cantidad de sus posibilidades. <em>Make<\/em> me sirve como constructor y lanzador de procesos. El depurador de <em>Perl<\/em> m\u00e1s b\u00e1sico es el que me permite arreglar cosas. Ninguno de ellos lo empleo en toda su capacidad; pero me sirven bien.<\/p>\n<p>Lo malo es cuando tengo que ir de m\u00e1quina en m\u00e1quina; hoy, por ejemplo, estoy en casa de mi hija para llevarla al colegio y como tengo una cuenta en su port\u00e1til Linux me he puesto a terminar unas bibliotecas de c\u00f3digo pendientes (mientras espero que se termine de preparar, que esa es otra). No es dif\u00edcil traerse una copia del repositorio central; lo complicado es replicar exactamente la configuraci\u00f3n del editor, los alias del <em>shell<\/em>, las particularidades de las conexiones <em>ssh<\/em> y un buen pu\u00f1ado de detalles m\u00e1s.<\/p>\n<p>Hace tiempo, antes de la aparici\u00f3n de <em>git<\/em>, ten\u00eda un peque\u00f1o mecanismo que importaba de una m\u00e1quina exterior los archivos de configuraci\u00f3n (<em>dotfile<\/em><em>s<\/em> en la jerga inform\u00e1tica) y los instalaba en los lugares correspondientes. Funcionaba bien pero era una pesadilla para mantener. Tanto que dej\u00e9 de usarlo y me limitaba a copiar y modificar fragmentos.<\/p>\n<p>Pero ahora mismo me encuentro con que tengo una limitaci\u00f3n de tiempo importante para cumplir con un proyecto y varios lugares (hasta cuatro) donde retomar el trabajo y aprovechar un rato. Pues bien, vamos a aprovechar que otros ya han lidiado con lo mismo y a reutilizar (con permiso) su trabajo.<\/p>\n<p><a href=\"https:\/\/developer.atlassian.com\/blog\/authors\/npaolucci\">Nicola Paolucci<\/a> tiene un <a href=\"https:\/\/developer.atlassian.com\/blog\/2016\/02\/best-way-to-store-dotfiles-git-bare-repo\/\">art\u00edculo<\/a> estupendo que describe un mecanismo para gestionar la configuraci\u00f3n personal empleando el programa <em>git<\/em> con alguna particularidad que desconoc\u00eda por completo. En su art\u00edculo reconoce que se basa en un hilo de <a href=\"https:\/\/news.ycombinator.com\/item?id=11070797\">Hacker News<\/a> del usuario <code>StreakyCobra<\/code>y que define como<\/p>\n<p style=\"padding-left: 30px;\">Sin herramientas adicionales, sin enlaces simb\u00f3licos, los archivos los gestiona un sistema de control de versiones; se pueden emplear ramas para diferentes m\u00e1quinas y replicarlo f\u00e1cilmente en una instalaci\u00f3n nueva.<\/p>\n<p>La t\u00e9cnica consiste en emplear <em>git<\/em> de una manera bastante ingeniosa: un repositorio desnudo (<em>bare repository<\/em>) para conservar los cambios y como directorio de trabajo usar el directorio de trabajo del usuario (<em>$HOME<\/em>). Despu\u00e9s, con un alias espec\u00edfico se crea una herramienta concreta para emplear con el mantenimiento.<\/p>\n<pre class=\"lang:sh decode:true\">$ git init --bare $HOME\/.cfg\r\n$ alias config='\/usr\/bin\/git --git-dir=$HOME\/.cfg\/ --work-tree=$HOME'\r\n$ config config --local status.showUntrackedFiles no\r\n\r\n<\/pre>\n<p>El alias <em>config<\/em> debe estar registrado en la configuraci\u00f3n del <em>shell<\/em> para que \u00e9ste funcione siempre a\u015bi que hacemos adem\u00e1s lo siguiente:<\/p>\n<pre class=\"lang:sh decode:true\">$ echo \"alias config='\/usr\/bin\/git --git-dir=$HOME\/.cfg\/ --work-tree=$HOME'\" &gt;&gt; $HOME\/.bashrc<\/pre>\n<p>Ahora las posibilidades son muchas, tantas como un repositorio <em>git<\/em> nos permite con otro tipo de archivos. Podemos a\u00f1adir la configuraci\u00f3n de <em>ssh<\/em> a su control, crear una rama para una m\u00e1quina concreta, y, si le a\u00f1adimos un servidor remoto como localizaci\u00f3n central tendremos siempre la misma configuraci\u00f3n disponible a golpe de clonado.<\/p>\n<p>El autor recomienda tambi\u00e9n crear un peque\u00f1o <em>script<\/em> que nos permita descargar y poner en marcha todo el mecanismo en cualquier m\u00e1quina nueva. Algo que he hecho antes con los <a href=\"https:\/\/esferas.org\/msqlu\/2017\/06\/06\/instrucciones-para-un-repositorio-git\/\">repositorios de paquetes<\/a> y que ha demostrado ser muy pr\u00e1ctico.<\/p>\n<p>Y ya para terminar de hablar de ello, en el art\u00edculo se muestra el procedimiento para integrar este mecanismo en un sistema ya en marcha, realizando copias de aquellos archivos de configuraci\u00f3n que puedan verse afectados.<\/p>\n<p>Muy recomendable por su limpieza y su sencillez.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230;. o c\u00f3mo se puede uno complicar la vida y qu\u00e9 soluciones hay.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[22,777,73,776],"class_list":["post-2650","post","type-post","status-publish","format-standard","hentry","category-software","tag-configuracion","tag-dotfiles","tag-git","tag-nicola-paolucci"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=2650"}],"version-history":[{"count":3,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2650\/revisions"}],"predecessor-version":[{"id":2654,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2650\/revisions\/2654"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=2650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=2650"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=2650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}