<?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-737852566628141571</id><updated>2011-12-20T08:38:58.245-08:00</updated><category term='servicios'/><category term='linux'/><category term='sonido'/><category term='virtualbox'/><category term='emacs'/><category term='idiomas'/><category term='configuración'/><category term='java'/><category term='GNU/Linux'/><category term='sqlite'/><category term='comandos'/><category term='consola'/><category term='documentacion'/><category term='pdf'/><category term='openoffice'/><category term='firefox'/><category term='repositorio'/><category term='posgresql'/><category term='programación'/><category term='git'/><category term='python'/><category term='eventos'/><category term='usabilidad'/><category term='eclipse'/><category term='jython'/><category term='scripts'/><category term='ftp'/><category term='base de datos'/><category term='estadistica'/><category term='zip'/><category term='mdb'/><category term='svn'/><category term='R'/><category term='humor'/><category term='receta'/><title type='text'>No sólo libresig</title><subtitle type='html'>Blog de Nacho Varela no exclusivo de Sistemas de Información Geográfica, pero siempre Software Libre.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-5345816414729269445</id><published>2011-12-20T08:38:00.000-08:00</published><updated>2011-12-20T08:38:58.252-08:00</updated><title type='text'>Alternativa a PuTTY en windows</title><content type='html'>Para conectarme mediante ssh/telnet en windows hasta ahora utilizaba el mítico &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html"&gt;Putty&lt;/a&gt;. Cumplía bastante bien su función aunque era incómodo y se volvía un poco loco si trabajaba con editores.Hoy he probado &lt;a href="http://ttssh2.sourceforge.jp/"&gt;TeraTerm&lt;/a&gt; y me encuentro más cómodo. Recomendado! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-5345816414729269445?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/5345816414729269445/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=5345816414729269445' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/5345816414729269445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/5345816414729269445'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2011/12/alternativa-putty-en-windows.html' title='Alternativa a PuTTY en windows'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-8392543073743757711</id><published>2011-11-24T05:23:00.001-08:00</published><updated>2011-11-24T05:30:47.273-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comandos'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='receta'/><title type='text'>Escapar espacios en blanco en variables en Bash</title><content type='html'>Hoy me he sentido un poco estúpido... la típica chorrada que no te acuerdas ni se te ocurre como solucionar. Lo pongo aquí etiquetado como "humor". :DEn un script para la línea de comandos, tenía que entrar en un directorio con espacios en su nombre.&lt;br /&gt;&lt;br /&gt;Pues no era capaz... &lt;br /&gt;&lt;code&gt;&amp;gt; foo="/tmp/foo bar/"&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;gt; cd $foo&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;bash: cd: /tmp/foo: No such file or directory&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Intenté todas las combinaciones posible para escapar el espacio y mil trucos.Solución: &lt;br /&gt;&lt;code&gt;&amp;gt; foo="/tmp/foo bar/"&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;gt; cd "$foo"&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Las comillas!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-8392543073743757711?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/8392543073743757711/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=8392543073743757711' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/8392543073743757711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/8392543073743757711'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2011/11/escapar-espacios-en-blanco-en-variables.html' title='Escapar espacios en blanco en variables en Bash'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-2482200656885705537</id><published>2011-11-05T03:19:00.000-07:00</published><updated>2011-11-05T03:20:52.809-07:00</updated><title type='text'>Drivers en PDO de PHP</title><content type='html'>¿Cómo saber que driver tengo disponibles para acceder a bases de datos con PHP::PDO?&lt;br /&gt;Ejecuta esto en un terminal:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;echo "PDO avalable drivers: \n";&amp;nbsp;&lt;br /&gt;foreach(PDO::getAvailableDrivers() as $driver) {&amp;nbsp;&lt;br /&gt;    echo '* '.$driver."\n";&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Y obtendo como salida el siguiente resultado:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;PDO avalable drivers:&amp;nbsp;&lt;br /&gt;* mysql&amp;nbsp;&lt;br /&gt;* pgsql&amp;nbsp;&lt;br /&gt;* sqlite&amp;nbsp;&lt;br /&gt;* sqlite2&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-2482200656885705537?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/2482200656885705537/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=2482200656885705537' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/2482200656885705537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/2482200656885705537'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2011/11/como-saber-que-driver-tengo-disponibles.html' title='Drivers en PDO de PHP'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-8103305998451220737</id><published>2011-06-23T11:37:00.000-07:00</published><updated>2011-06-23T11:42:33.944-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Indentar todo una sección de código python con emacs</title><content type='html'>Cuando has programado un trozo de código en python y luego es necesario meterlo en un bucle... Arrrgggg... ¿a indentar línea por línea?&lt;br /&gt;&lt;br /&gt;Emacs tiene la solución. Marca la sección que quieres desplazar y teclea:&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;C-c &amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Otros comandos (extraídos de &lt;a href="http://python.about.com/b/2007/09/24/emacs-tips-for-python-programmers.htm"&gt;python.about.com&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;    * C-j: Insert a new line with the same indentation level as the current line&lt;br /&gt;    * RET: Insert a new line with the same indentation level as the current line&lt;br /&gt;    * C-M-a: Go to the beginning of the current function or class&lt;br /&gt;    * C-M-e: Go to the end of the current function or class&lt;br /&gt;    * C-M-h: Mark the current function or class for copying, etc.&lt;br /&gt;    * C-M-x: Execute the current function or class&lt;br /&gt;    * C-c C-b: Submit a bug report&lt;br /&gt;    * C-c C-c: Execute the buffer (i.e., the file being displayed)&lt;br /&gt;    * C-c C-d: Trace the stack of the process being executed&lt;br /&gt;    * C-c C-h: Get context-based help&lt;br /&gt;    * C-c TAB: Indent a highlighted (or marked) region&lt;br /&gt;    * C-c C-k: Mark a block of text. Using this at the head of a class or function definition will mark the entire block.&lt;br /&gt;    * C-c C-l: Shift the region to the left. If the cursor is in the middle of a region, the lower half of the region will shift.&lt;br /&gt;    * C-c RET: Execute the current file, opening a new window to show the output.&lt;br /&gt;    * C-c C-n: Jump to the next statement.&lt;br /&gt;    * C-c C-p: Jump to the previous statement.&lt;br /&gt;    * C-c C-r: Shift the region to the right. If the cursor is in the middle of a region, the lower half of the region will shift.&lt;br /&gt;    * C-c C-s: Execute a Python command.&lt;br /&gt;    * C-c C-t: Toggle shells&lt;br /&gt;    * C-c C-u: Go up one block&lt;br /&gt;    * C-c C-v: List the version of the Python mode&lt;br /&gt;    * C-c C-w: Run PyChecker&lt;br /&gt;    * C-c !: Open the Python interactive shell&lt;br /&gt;    * C-c #: Comment the highlighted (marked) region&lt;br /&gt;    * C-c :: Check the indentation off-set&lt;br /&gt;    * C-c &amp;lt;: Shift the region to the left&lt;br /&gt;    * C-c &amp;gt;: Shift the region to the right&lt;br /&gt;    * C-c ?: Show Python mode documentation&lt;br /&gt;    * C-c |: Execute the highlighted (marked) part of the current program.&lt;br /&gt;&lt;br /&gt;Note that Python mode for Emacs offers more functionality than this, but these are the basics. If you know Emacs from editing other languages, learning your way around the Python mode is a snap.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-8103305998451220737?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/8103305998451220737/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=8103305998451220737' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/8103305998451220737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/8103305998451220737'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2011/06/indentar-todo-una-seccion-de-codigo.html' title='Indentar todo una sección de código python con emacs'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-3162722875611869440</id><published>2010-12-29T13:34:00.001-08:00</published><updated>2010-12-29T13:46:22.932-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='sonido'/><category scheme='http://www.blogger.com/atom/ns#' term='receta'/><title type='text'>Metrónomo en Ubuntu</title><content type='html'>Qué lejos queda mi época de técnico de sonido... y de mis estudio casero. Actualmente tengo problemas hasta para sacar sonido por la tarjeta del portatil. Dejando aparte los problemas con rosegarden, qsynth y jack, estuve atascado para poder ejecutar sin problemas &lt;a href="http://www.antcom.de/gtick/"&gt;GTick&lt;/a&gt; un métronomo simple y cómodo que usa GTK+ y OSS (compatible con ALSA). &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.antcom.de/gtick/logo.www.jpg"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 330px; height: 137px;" src="http://www.antcom.de/gtick/logo.www.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pues el caso es que tenía el siguiente error:&lt;br /&gt;&lt;blockquote style="color: rgb(255, 0, 0);"&gt;Couldn't start metronome.&lt;br /&gt;Please check if specified sound device&lt;br /&gt;and sample file are accessible.&lt;/blockquote&gt;Y "/dev/dsp" que era el dispositivo configurado no existía.&lt;br /&gt;&lt;br /&gt;Finalmente encontré con la solución. Ejecutar con el comando:&lt;br /&gt;&lt;blockquote style="color: rgb(51, 51, 255);"&gt;&lt;span style="font-weight: bold;"&gt;$ aoss gtick&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;aoss&lt;/span&gt; es un script que permite la compatibilidad de las librerías OSS y ALSA.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-3162722875611869440?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/3162722875611869440/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=3162722875611869440' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/3162722875611869440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/3162722875611869440'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2010/12/metronomo-en-ubuntu.html' title='Metrónomo en Ubuntu'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-6214486935625965867</id><published>2010-12-27T08:08:00.001-08:00</published><updated>2010-12-27T11:26:02.895-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuración'/><category scheme='http://www.blogger.com/atom/ns#' term='servicios'/><category scheme='http://www.blogger.com/atom/ns#' term='receta'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><title type='text'>Máquina virtual en VirtualBox como servidor</title><content type='html'>Tengo un máquina virtual con Debian servida desde "Windows XP" con VirtualBox 3.2. Quiero tener accesibles  servicios lanzados en la máquida huesped (el Debian) que sean sólo desde la máquina windows.&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;La solución es hacer Port Forwarding como explican &lt;a href="http://www.linuxjournal.com/content/tech-tip-port-forwarding-virtualbox-vboxmanage"&gt;aquí&lt;/a&gt;. En mi caso particular con jetty, para acceder a servicios en el puerto 8080 hice:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;C:\...\Orable\VirtualBox&gt; VBoxManage.exe setextradata "VM Name Here" \&lt;br /&gt;    "VBoxInternal/Devices/pcnet/0/LUN#0/Config/jetty/Protocol" TCP&lt;br /&gt;&lt;br /&gt;C:\...\Orable\VirtualBox&gt; VBoxManage.exe setextradata "VM Name Here" \&lt;br /&gt;    "VBoxInternal/Devices/pcnet/0/LUN#0/Config/jetty/GuestPort" 8080&lt;br /&gt;&lt;br /&gt;C:\...\Orable\VirtualBox&gt; VBoxManage.exe setextradata "VM Name Here” \&lt;br /&gt;    "VBoxInternal/Devices/pcnet/0/LUN#0/Config/jetty/HostPort" 9999&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Todo esto con la máquina parada. Antes de iniciarla, en la configuración la red tuve que marcar "pcnet" porque sino daba un error relacionado con la obtención de la MAC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-6214486935625965867?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/6214486935625965867/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=6214486935625965867' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/6214486935625965867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/6214486935625965867'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2010/12/maquina-virtual-en-virtualbox-como.html' title='Máquina virtual en VirtualBox como servidor'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-5399374452352506584</id><published>2010-07-29T01:27:00.001-07:00</published><updated>2010-07-29T01:54:55.580-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='posgresql'/><category scheme='http://www.blogger.com/atom/ns#' term='consola'/><category scheme='http://www.blogger.com/atom/ns#' term='base de datos'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Usar editor externo en postgresql</title><content type='html'>Aunque &lt;a href="http://www.pgadmin.org/"&gt;pgAdmin&lt;/a&gt; es un programa bastante cómodo e intuitivo para administrar bases de datos &lt;a href="http://www.postgresql.org/"&gt;postgres&lt;/a&gt;, el cliente en línea de comandos es realmente potente y ágil.&lt;br /&gt;&lt;br /&gt;En algunas ocasiones es verdad que para programar sobre la base de datos, hacer consultas muy complejas o realizar otras operaciones trabajar en el terminal es algo engorroso. En el terminal no es tan sencillo editar y no tienen tantas ayudas como en un programa de edición de textos o un &lt;a href="http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado"&gt;IDE&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Existe la posibilidad de usar un editor externo para editar una consulta concreta. &lt;br /&gt;&lt;br /&gt;El comando&lt;br /&gt;&lt;pre&gt; \e &lt;/pre&gt;&lt;br /&gt;permite abrir un editor con el "Query Buffer" actual. La primera vez que se ejecuta este comando '\e' te pregunta qué programa externo usar; emacs con su &lt;a href="http://www.emacswiki.org/emacs/SqlMode"&gt;sql-mode&lt;/a&gt; puede que sea el mejor ;). Admite como parámetro un fichero también.&lt;br /&gt;&lt;pre&gt; \e [FILE]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Si quieres editar una función concreta, puedes utilizar:&lt;br /&gt;&lt;pre&gt; \ef [FUNCTION_NAME] &lt;/pre&gt;&lt;br /&gt;que si ejecutas sin parámetros te genera una plantilla básica para empezar a programar.&lt;br /&gt;&lt;br /&gt;En ocasiones puede pasar lo siguiente si queremos editar/ver una función:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#\ef dropgeometrycolumn&lt;br /&gt;ERROR:  more than one function named "dropgeometrycolumn"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Esta función es de PostGIS y existe un conflicto de nombres debido a que es posible aplicar "polimorfismo". Si miramos la firma de las funciones:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# \df dropgeometrycolumn&lt;br /&gt;&lt;br /&gt; Schema |        Name        | Result data type | Argument data types |  Type  &lt;br /&gt;--------+--------------------+------------------+---------------------+--------------&lt;br /&gt; public | dropgeometrycolumn | text             | character varying, character varying | normal&lt;br /&gt; public | dropgeometrycolumn | text             | character varying, character varying, character varying| normal&lt;br /&gt; public | dropgeometrycolumn | text             | character varying, character varying, character varying, character varying | normal&lt;br /&gt;(3 rows)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para poder editar una de esas funciones concretas habría que espedificar los argumentos:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# \ef addgeometrycolumn(character varying, character varying, integer, character varying, integer)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-5399374452352506584?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/5399374452352506584/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=5399374452352506584' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/5399374452352506584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/5399374452352506584'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2010/07/usar-editor-externo-en-postgresql.html' title='Usar editor externo en postgresql'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-3199835196192388000</id><published>2010-07-06T16:04:00.000-07:00</published><updated>2010-07-29T02:16:03.098-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openoffice'/><category scheme='http://www.blogger.com/atom/ns#' term='base de datos'/><title type='text'>Error con DBF en OpenOffice 3.2</title><content type='html'>Con Ubuntu 10.4 cuando intentaba abrir o guardar un fichero DBF en OpenOffice Calc me daba el siguiente mensaje de error:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;General Error.&lt;br /&gt;General Input/Output Error.&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Pensé que podía ser, que como pasa en las nuevas versiones de Office de Microsoft, que han dejado de dar soporte a este formato "clásico". Pero no, buscando un poco encontré la &lt;a href="https://bugs.launchpad.net/ubuntu/+source/openoffice.org/+bug/502462"&gt;solución que parece que dio la lata a más de uno&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Hay que &lt;b&gt;instalar openoffice.org-base&lt;/b&gt; y todo arreglado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-3199835196192388000?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/3199835196192388000/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=3199835196192388000' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/3199835196192388000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/3199835196192388000'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2010/07/error-con-dbf-en-openoffice-32.html' title='Error con DBF en OpenOffice 3.2'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-3882001722817152378</id><published>2010-02-02T06:53:00.000-08:00</published><updated>2010-02-02T06:59:08.908-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='consola'/><category scheme='http://www.blogger.com/atom/ns#' term='GNU/Linux'/><title type='text'>Baixar videos de agalega.info</title><content type='html'>Con GNU/Linux non son quen de ver os videos de agalega.info nin con Firefox nin cun video player usando mms. &lt;br /&gt;&lt;br /&gt;A solución foi baixar o arquivo usando o seguinte comando:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; mplayer mms://url -dumpstream -dumpfile foo.wmv &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-3882001722817152378?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/3882001722817152378/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=3882001722817152378' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/3882001722817152378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/3882001722817152378'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2010/02/baixar-videos-de-agalegainfo.html' title='Baixar videos de agalega.info'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-1957020982948861033</id><published>2010-01-27T03:14:00.000-08:00</published><updated>2010-01-27T04:45:40.231-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comandos'/><category scheme='http://www.blogger.com/atom/ns#' term='receta'/><category scheme='http://www.blogger.com/atom/ns#' term='consola'/><title type='text'>Copiando todo con los permisos</title><content type='html'>Esto es un uso de &lt;a href="http://www.gnu.org/software/tar/"&gt;tar&lt;/a&gt; simple que conviene tener a mano para cuando tienes que hacer un backup y necesitas que mantenga los permisos de los ficheros y directorios.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; tar -pczf foo_backup.tar.gz foo/ &lt;/pre&gt;&lt;br /&gt;Este comando creará (&lt;span style="font-weight: bold;"&gt;-c&lt;/span&gt;) un nuevo fichero foo_backup.tar.gz (&lt;span style="font-weight: bold;"&gt;-f&lt;/span&gt;), comprimido con gzip (&lt;span style="font-weight: bold;"&gt;-z&lt;/span&gt;) guardando todos los permisos (&lt;span style="font-weight: bold;"&gt;-p&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Actualización:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En caso de tener que volcarlo en un disco externo &lt;a href="http://nosololibresig.blogspot.com/2008/06/dividir-ficheros-en-trozos.html"&gt;este post&lt;/a&gt; puede ser interesante para evitar el mensaje "File too large"... :)&lt;br /&gt;&lt;br /&gt;Todo junto quedaría:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; tar -to-stdout -pcz foo/ | split -b3500m - foo_backup.@&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Y cortesía de &lt;a href="http://conocimientoabierto.es"&gt;fpuga&lt;/a&gt; un par de links interesantes para usar la opción &lt;span style="font-weight: bold;"&gt;-L&lt;/span&gt; de tar y otras cosas más:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://forums.fedoraforum.org/showthread.php?t=171469"&gt;http://forums.fedoraforum.org/showthread.php?t=171469&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.linuxquestions.org/questions/linux-soft#%20http://www.linuxquestions.org/questions/linux-software-2/multi-volume-tar-278989/ware-2/multi-volume-tar-278989/"&gt;http://www.linuxquestions.org/questions/linux-software-2/multi-volume-tar-278989/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-1957020982948861033?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/1957020982948861033/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=1957020982948861033' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/1957020982948861033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/1957020982948861033'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2010/01/copiando-todo-con-los-permisos.html' title='Copiando todo con los permisos'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-4165245121530934100</id><published>2009-11-18T01:16:00.000-08:00</published><updated>2010-01-27T03:14:56.488-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Where do you want to fetch from today?</title><content type='html'>Tras un tiempo sin usar un repositorio de código me pasó lo siguiente:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;$git pull&lt;br /&gt;fatal: Where do you want to fetch from today?&lt;br /&gt;&lt;/blockquote&gt;Y no conectaba!!!&lt;br /&gt;- ¿Cómo se pudo resolver el problema?&lt;br /&gt;&lt;br /&gt;- Pues haciendo memoria...  y recordando que era un repositorio Subversion y no git al que accedía mediante &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/git-svn.html"&gt;&lt;span style="font-weight: bold;"&gt;git-svn&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-4165245121530934100?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/4165245121530934100/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=4165245121530934100' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/4165245121530934100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/4165245121530934100'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2009/11/where-do-you-want-to-fetch-from-today.html' title='Where do you want to fetch from today?'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-5524405446569187864</id><published>2009-10-22T03:13:00.000-07:00</published><updated>2009-10-22T03:47:16.804-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><title type='text'>Claves primarias en SQLite</title><content type='html'>SQLite es una base de datos muy interesante. Entre sus características hay cosas que puede resultar extrañas para las personas acostumbradas a otros gestores de base de datos.  Por ejemplo, un campo que sea de tipo INTERGER puede almacenar un STRING; esto es consecuencia del tipado dinámico de SQLite.&lt;br /&gt;&lt;br /&gt;Otra cosa a comentar es que no se comprueban las restricciones de PRIMARY KEY, teniendo que hacerlo manualmente a través de triggers en caso de que sea necesario. Si  necesitas saber cuales son los campos con clave primaria una forma de hacerlo puede ser mediante la siguiente sentencia:&lt;br /&gt;&lt;blockquote&gt;PRAGMA table_info(&lt;span style="font-style: italic;"&gt;tablename&lt;/span&gt;)&lt;br /&gt;&lt;/blockquote&gt;Esto devuelve una tabla con un campo &lt;span style="font-style: italic;"&gt;pk &lt;/span&gt;con valor&lt;span style="font-style: italic;"&gt; 1&lt;/span&gt; cuando el atributo tiene esta CONSTRAINT.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-5524405446569187864?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/5524405446569187864/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=5524405446569187864' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/5524405446569187864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/5524405446569187864'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2009/10/claves-primarias-en-sqlite.html' title='Claves primarias en SQLite'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-1214308565773028215</id><published>2009-10-19T08:38:00.000-07:00</published><updated>2010-12-27T11:26:44.922-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='consola'/><category scheme='http://www.blogger.com/atom/ns#' term='repositorio'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Cambiar origen de un repositorio SVN</title><content type='html'>Si el origen de un repositorio SVN del que eres cliente ha cambiado de host o IP, incluso has cambiado de nombre de usuario puedes ejecutar esta simple instrucción para, de un modo bastante poco elegante, cambiar todas las referencias de los archivos .svn.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;cd root_path_svn&lt;br /&gt;for i in `find | grep .svn`; do&lt;br /&gt; cat $i | sed s/'oldusername@xxx.xxx.xxx.xxx'/'newusername@yyy.yyy.yyy.yyy'/g &gt; /tmp/foo.aux;&lt;br /&gt; sudo mv /tmp/foo.aux $i;&lt;br /&gt;done&lt;/blockquote&gt; &lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-1214308565773028215?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/1214308565773028215/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=1214308565773028215' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/1214308565773028215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/1214308565773028215'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2009/10/cambiar-origen-de-un-repositorio-svn.html' title='Cambiar origen de un repositorio SVN'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-3811471042549994164</id><published>2009-08-31T10:33:00.000-07:00</published><updated>2009-09-14T01:51:41.538-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuración'/><category scheme='http://www.blogger.com/atom/ns#' term='GNU/Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='usabilidad'/><title type='text'>Dando pasos para un GNU/Linux para todos</title><content type='html'>Lo de que se desconfiguren (o no funcionen directamente) cosas en GNU/Linux es un clásico (casi tanto como los pantallazos azules de Windows). A pesar de estos problemas, que para un usuario básico hacen inusable el sistema, como desarrollador y usuario avanzado estoy infinitamente más feliz con un S.O. de Software Libre que uno privativo... pero siendo sinceros, quedarse sin X tras cada actualización es muy molesto!!&lt;br /&gt;&lt;br /&gt;En mi portatil Toshiba hay muchas cosas que nunca han funcionado, pero los mayores problemas han sido con la tarjeta gráfica (ATI HD Radeon 2400) y desde que actualicé a Ubuntu 9.04 el sonido no iba. Lo de la ATI he intentado de todo desde hace tiempo (todos los trucos, compilar drivers, etc.), pero la cosa no quedaba como debería ser.&lt;br /&gt;&lt;br /&gt;Hoy tengo que decir que, por fin, he encontrado la solución a estos problemas... y sin necesidad de saber lo que es 'gcc'!!!! ¿Cómo? Usando el programa de instalación de los drivers de ATI!!! Guauuuuuuu!! Menos mal!!!! [1]&lt;br /&gt;&lt;br /&gt;Y con el audio tenemos que seguir con truquitos de instalar y desinstalar módulos, etc. etc... [2] Pero al menos funciona, sin estar toda la tarde haciendo pruebas!&lt;br /&gt;&lt;br /&gt;[1]: http://www.islabit.com/7262/instalando-driver-de-ati-en-ubuntu-904.html&lt;br /&gt;[2]: https://help.ubuntu.com/community/SoundTroubleshooting&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-3811471042549994164?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/3811471042549994164/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=3811471042549994164' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/3811471042549994164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/3811471042549994164'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2009/08/dando-pasos-para-un-gnulinux-para-todos.html' title='Dando pasos para un GNU/Linux para todos'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-3092261126812743565</id><published>2009-07-08T10:56:00.001-07:00</published><updated>2009-09-02T00:55:22.286-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Ignorando ficheros con GIT</title><content type='html'>A veces dentro de un proyecto se generan ciertos archivos que no se desean tener en el repositorio de versiones. En mi caso, a veces tengo ficheros de configuración propios con rutas a carpetas de mi máquina o con cosas raras que tampoco quiero que sean subidas.&lt;br /&gt;&lt;br /&gt;En &lt;span&gt;git&lt;/span&gt; es fácil poder indicar que no se incluyan estos ficheros creando un fichero &lt;span style="font-weight: bold;"&gt;.gitignore&lt;/span&gt; en la raíz del proyecto. Más detalles en:&lt;br /&gt;&lt;a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#ignoring-files"&gt;http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#ignoring-files&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esto funcionaría si los ficheros no han sido ya agregados con &lt;span style="font-style: italic;"&gt;git add&lt;/span&gt;. Si este es el caso quedan 2 opciones:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Hacer commits selectivos de ficheros y carpetas concretos ignorando estos ficheros&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Usar el comando &lt;span style="font-style: italic; font-weight: bold;"&gt;git-update-index --assume-unchanged&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;** Ampliación **&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Para analizar más en profundidad el contenido del &lt;span style="font-weight: bold;"&gt;index&lt;/span&gt; y el estado de los ficheros es útil (además de &lt;span style="font-style: italic;"&gt;git status&lt;/span&gt;) el comando:&lt;br /&gt;&lt;pre&gt; git ls-files -v&lt;/pre&gt;Con este comando se listan los ficheros en el índice indicando su estado con las letras al principio de la línea:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;           H   cached&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;           M   unmerged&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;           R   removed/deleted&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;           C   modified/changed&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;           K   to be killed&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;           ?   other&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;En caso de que las letras sean en minúscula indica que se encuentran con el bit activo de "assume-unchanged".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-3092261126812743565?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/3092261126812743565/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=3092261126812743565' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/3092261126812743565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/3092261126812743565'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2009/07/ignorando-ficheros-con-git.html' title='Ignorando ficheros con GIT'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-6381787795697928741</id><published>2009-05-08T03:04:00.000-07:00</published><updated>2010-12-27T11:26:25.558-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Eclipse en modo Emacs</title><content type='html'>Para los tecleamos mucho código y hemos logrado pasar la barrera inicial de uso de Emacs (aunque sea al tercer intento), siempre echamos de menos cosas de Emacs en todos los demás editores, e incluso en TextFields en una web.&lt;br /&gt;&lt;br /&gt;Por otro lado, aunque Emacs permite ser un buen IDE para programar en Java, hay que reconocer que &lt;a href="http://www.eclipse.org/"&gt;&lt;span style="font-weight: bold;"&gt;eclipse&lt;/span&gt;&lt;/a&gt; (o NetBeans) es una alternativa extremadamente cómodo para trabajar. Pero claro, eclipse no es Emacs... aunque éste cuenta con un esquema de teclas que emula a Emacs. Se pierden muchísimas de las ventajas de emacs  y además sólo tiene algunas de las combinaciones habituales como cut, yank, incremental search, etc...&lt;br /&gt;&lt;br /&gt;Para activarlo, hay que ir a menú:&lt;br /&gt;&lt;br /&gt;           Windows -&gt; Preferences -&gt; Keys -&gt; Schema:&lt;span style="font-weight: bold;"&gt;Emacs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Algunas combinaciones de teclas que no aparecen son configurables. Ahí van 2 de las imprescindibles que se pueden (y se deben) de ajustar:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Find and Replace&lt;/span&gt; -&gt; CTL+SHIFT+5&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Go to Line&lt;/span&gt; -&gt; ALT+G ALT+G&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_n83sWasLyCU/SgQMFHBBDGI/AAAAAAAAAII/c4PzuoGkOWg/s1600-h/Eclipse_emacs.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 294px;" src="http://4.bp.blogspot.com/_n83sWasLyCU/SgQMFHBBDGI/AAAAAAAAAII/c4PzuoGkOWg/s400/Eclipse_emacs.png" alt="" id="BLOGGER_PHOTO_ID_5333401140635700322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Investigando un poco he visto que existen algunos plugins que aumentan la sensación emacs en eclipse:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Emacs+:&lt;/span&gt; http://www.eclipseplugincentral.com/Web_Links-index-req-viewlink-cid-1442.html&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Emacish:&lt;/span&gt; http://www.eclipseplugincentral.com/Web_Links-index-req-viewlink-cid-1012.html&lt;/li&gt;&lt;/ul&gt;Habrá que probarlos!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-6381787795697928741?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/6381787795697928741/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=6381787795697928741' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/6381787795697928741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/6381787795697928741'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2009/05/eclipse-en-modo-emacs.html' title='Eclipse en modo Emacs'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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/_n83sWasLyCU/SgQMFHBBDGI/AAAAAAAAAII/c4PzuoGkOWg/s72-c/Eclipse_emacs.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-5523256230447940791</id><published>2009-01-30T09:22:00.000-08:00</published><updated>2009-11-12T08:56:10.919-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffice'/><title type='text'>Pasar archivos de openoffice a pdf automáticamente</title><content type='html'>Una de las grandes comodidades de openoffice es poder contar con un botón que pase los documentos a PDF con un simple click. Pero si tienes muchos documentos y todos los quieres pasar a pdf, el hecho de abrirlos uno a uno y pulsar ese botón puede resultar laborioso.&lt;br /&gt;&lt;br /&gt;Buscando alguna solución mágica del tipo "openoffice2pdf" o "odt2pdf", encontré el siguiente enlace&lt;br /&gt;&lt;a href="http://www.oooforum.org/forum/viewtopic.phtml?p=61967#61967"&gt;http://www.oooforum.org/forum/viewtopic.phtml?p=61967#61967&lt;/a&gt; donde se ofrece una macro que hace justamente eso.&lt;br /&gt;&lt;br /&gt;Los pasos para poder usarlo son los siguientes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Abrir openoffice e ir a Herramientas-&gt;Macros-&gt;Organizar-&gt;Basic&lt;/li&gt;&lt;li&gt;Crear una nueva y copiar el siguiente código&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:verdana;"&gt;Sub ExportAsPDF(strFile as string)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  Dim oDoc&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  Dim strFilterSubName as String&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  Dim oLoadArgs(0) as New com.sun.star.beans.PropertyValue&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  oLoadArgs(0).Name  = "Hidden"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  oLoadArgs(0).Value = True&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  oDoc = StarDesktop.loadComponentFromURL(ConvertToUrl(strFile), "_blank", 0, oLoadArgs())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  If IsNull(oDoc) Then Exit Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  strFilterSubName = ""&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  ' select appropriate filter&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  If oDoc.SupportsService("com.sun.star.presentation.PresentationDocument") Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    strFilterSubName = "impress_pdf_Export"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  ElseIf oDoc.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    strFilterSubName = "calc_pdf_Export"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  ElseIf oDoc.SupportsService("com.sun.star.text.WebDocument") Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    strFilterSubName = "writer_web_pdf_Export"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  ElseIf oDoc.SupportsService("com.sun.star.text.GlobalDocument") Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;     strFilterSubName = "writer_globaldocument_pdf_Export"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  ElseIf oDoc.SupportsService("com.sun.star.text.TextDocument") Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    strFilterSubName = "writer_pdf_Export"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  ElseIf oDoc.SupportsService("com.sun.star.drawing.DrawingDocument") Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    strFilterSubName = "draw_pdf_Export"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  ElseIf oDoc.SupportsService("com.sun.star.formula.FormulaProperties") Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    strFilterSubName = "math_pdf_Export"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  ElseIf oDoc.SupportsService("com.sun.star.chart.ChartDocument") Then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    strFilterSubName = "chart_pdf_Export"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  Else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    Exit Sub&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  EndIf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  Dim oSaveArgs(1) as New com.sun.star.beans.PropertyValue&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  oSaveArgs(0).Name = "FilterName"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  oSaveArgs(0).Value = strFilterSubName&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  oSaveArgs(1).Name = "CompressMode"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  oSaveArgs(1).Value = "1"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  oDoc.storeToUrl(ConvertToUrl( strFile &amp;amp; ".pdf" ), oSaveArgs())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;  oDoc.close(True)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;End Sub &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Guardar la macro&lt;/li&gt;&lt;li&gt;Llamar a openoffice desde línea de comandos con la siguiente instrucción:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;$openoffice.org3 "macro:///Standard.Module1.ExportAsPDF(pathCompleto/archivo.odt)"&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;Esto genera un archivo con nombre "miarchivo.odt.pdf" en la misma carpeta que el archivo origen. Y con esto... ya podemos crear un script que nos exporte a PDF de forma masiva!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-5523256230447940791?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/5523256230447940791/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=5523256230447940791' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/5523256230447940791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/5523256230447940791'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2009/01/pasar-archivos-de-openoffice-pdf.html' title='Pasar archivos de openoffice a pdf automáticamente'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-1916911586552659371</id><published>2008-12-13T03:14:00.000-08:00</published><updated>2009-03-23T07:20:36.349-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comandos'/><category scheme='http://www.blogger.com/atom/ns#' term='mdb'/><category scheme='http://www.blogger.com/atom/ns#' term='receta'/><category scheme='http://www.blogger.com/atom/ns#' term='consola'/><category scheme='http://www.blogger.com/atom/ns#' term='base de datos'/><title type='text'>MDB en Linux</title><content type='html'>A pesar de que se vive mucho mejor sin Windows, el uso extendido de ciertas aplicaciones dependientes de este sistema operativo hacen que los usuarios se encuentren a merced de los antojos comerciales de Microsoft. Un caso bien conocido son las herramientas de CAD que no acaban de encontrar su competidor en el mundo FLOSS (Free Libre Open Software Libre). Pero quizás, es la suite ofimática Microsoft Office la que más impide el paso de los usuarios al uso de Linux.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;OpenOffice&lt;/span&gt; es una alternativa plena para substituir a la suite ofimática de Microsoft, pero a veces la conversión de formatos no es satisfactoria y si hay macros de por medio menos. De todos modos, yo me resisto a volver a Windows y existen formas de lograr trabajar a gusto sobre Linux a pesar de la traba de los formatos propietarios.&lt;br /&gt;&lt;br /&gt;En mi caso actual me encuentro con una "base de datos" Access &lt;a href="http://www.blogger.com/es.wikipedia.org/wiki/Access"&gt;mdb&lt;/a&gt; con muchísimas tablas que quería poder manejar desde Linux. Para ello existe &lt;a href="http://sourceforge.net/projects/mdbtools/"&gt;mdbtools&lt;/a&gt; que es un conjunto de herramientas para leer mdb. Se puede instalar mediante el comando:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$sudo aptitude install mdbtools&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Para listar las tablas de un mdb podemos usar el comando:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$mdb-table -1 nombrefichero.mdb&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Para exportar a CSV sin comillas y separado por comas he usado la siguiente sentencia:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;$mdb-export -S -q '' -d ';' -D '%Y-%m-%d' nombrefichero.mdb nombretabla &gt; nombretable.csv &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y para exportar todas las tablas a la vez...&lt;br /&gt;&lt;code&gt;&lt;br /&gt;IFS=$'\n'&lt;br /&gt;for table in `mdb-tables -1 nombrefichero.mdb`; do&lt;br /&gt;echo '**** Exporting table: '$table '****'&lt;br /&gt;mdb-export -S -q '' -d ';' -D '%Y-%m-%d' nombrefichero.mdb $table &gt; $table'.csv'&lt;br /&gt;echo 'Done.'&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;***** Actualización *****&lt;br /&gt;Se puede abrir un MDB desde openoffice conectándose mediante ODBC. La receta:&lt;br /&gt;&lt;a href="http://wiki.services.openoffice.org/wiki/Connecting_to_Microsoft_Access"&gt;http://wiki.services.openoffice.org/wiki/Connecting_to_Microsoft_Access&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-1916911586552659371?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/1916911586552659371/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=1916911586552659371' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/1916911586552659371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/1916911586552659371'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/12/mdb-en-linux.html' title='MDB en Linux'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-1583864317321417792</id><published>2008-10-25T13:12:00.000-07:00</published><updated>2008-10-28T16:29:32.738-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='receta'/><category scheme='http://www.blogger.com/atom/ns#' term='openoffice'/><title type='text'>Cómo instalar OpenOffice 3.0</title><content type='html'>El pasado 13 Oct 2008 se &lt;a href="http://www.openoffice.org/news/"&gt;anunció&lt;/a&gt; la release de OpenOffice 3.0. Ésta incluye interesantes &lt;a href="http://www.openoffice.org/dev_docs/features/3.0/"&gt;mejoras&lt;/a&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;entre ellas me llamaron la atención las siguientes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Importación y edición de archivos PDF&lt;/li&gt;&lt;li&gt;Una extensión de publicación en WikiMedia&lt;/li&gt;&lt;li&gt;Mejoras en gráficos estadísticos&lt;/li&gt;&lt;/ul&gt;Para instalarlo en Ubuntu 8.04 hice lo siguiente:&lt;br /&gt;&lt;ol&gt;&lt;blockquote&gt;&lt;li&gt;Desinstalar la versión antigua (creo que no es estrictamente necesario).&lt;br /&gt;&lt;blockquote&gt;$apt-get remove openoffice.org-core&lt;br /&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Bajar el tar.gz de la página oficial de &lt;a href="http://download.openoffice.org/index.html"&gt;OpenOffice&lt;/a&gt; y descomprimirlo en /tmp&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Entrar en la nueva carpeta y en el directorio &lt;span style="font-weight: bold;"&gt;DEBS&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Instalar los paquetes debian con la instrucción:&lt;br /&gt;&lt;blockquote&gt;$sudo dpkg -i *.deb&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Entrar en la carpeta desktop-integration y repetir el comando del punto 4.&lt;br /&gt;&lt;/li&gt;&lt;/blockquote&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_n83sWasLyCU/SQOCm83ZQNI/AAAAAAAAAFE/NNbGq_eayuM/s1600-h/ooo3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 347px; height: 400px;" src="http://2.bp.blogspot.com/_n83sWasLyCU/SQOCm83ZQNI/AAAAAAAAAFE/NNbGq_eayuM/s400/ooo3.png" alt="" id="BLOGGER_PHOTO_ID_5261192395383980242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;La prueba de que me funcionó :)&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;i&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-1583864317321417792?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/1583864317321417792/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=1583864317321417792' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/1583864317321417792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/1583864317321417792'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/10/cmo-instalar-openoffice-30.html' title='Cómo instalar OpenOffice 3.0'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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://2.bp.blogspot.com/_n83sWasLyCU/SQOCm83ZQNI/AAAAAAAAAFE/NNbGq_eayuM/s72-c/ooo3.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-7086937185736072452</id><published>2008-09-11T03:02:00.000-07:00</published><updated>2008-09-12T07:32:07.772-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='documentacion'/><category scheme='http://www.blogger.com/atom/ns#' term='idiomas'/><title type='text'>Corrección ortográfica en Latex</title><content type='html'>Estoy "entregado a la entrega" de mi &lt;a href="http://libresig.blogspot.com/2008/06/telfono-mvil-cmara-y-gps_03.html"&gt;proyecto fin de carrera&lt;/a&gt; cuya memoria estoy redactando en galego usando Latex. Las ventajas de escribir textos y documentación con Latex o Docbook son muy altas (sobre todo en calidad y rapidez de escritura de contenido), pero tienen pequeñas incomodidades frente a los procesadores de texto más habituales. Una de ellas es la falta de corrección ortográfica automática que suele ser de gran ayuda.&lt;br /&gt;&lt;br /&gt;La alternativa es &lt;a href="http://aspell.net/"&gt;GNU Aspell&lt;/a&gt;. Este corrector permite, entre otros formator, trabajar directamente con ficheros Tex. Se puede integrar con otras aplicaciones [1].&lt;br /&gt;&lt;br /&gt;Un uso básico sería:&lt;br /&gt;&lt;blockquote&gt;$aspell -d es -encoding\=iso-8859-15 -c fichero.tex&lt;br /&gt;&lt;/blockquote&gt;Para correción ortográfica del gallego en Debian y Ubuntu, existe sólo el paquete &lt;span style="font-weight: bold;"&gt;aspell-gl-minimos&lt;/span&gt;. Esto es un problema dado que en galego exiten diferentes  convenciones: oficial, de minimos y reintegracionista.&lt;br /&gt;&lt;br /&gt;Otra alternativa es MySpell utilizado en la suite OpenOffice y ahora sustituído por &lt;a href="http://hunspell.sourceforge.net/"&gt;HunsPell&lt;/a&gt;. En mancomun.org fixeron o &lt;a href="http://wiki.mancomun.org/index.php/Corrector_ortogr%C3%A1fico_para_OpenOffice.org"&gt;paquete para galego&lt;/a&gt;[2]. El uso básico sería:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;$hunspell -t -d gl fichero.tex&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;[1]: http://aspell.net/man-html/Using-Aspell-with-other-Applications.html&lt;br /&gt;[2]: http://wiki.mancomun.org/index.php/Corrector_ortogr%C3%A1fico_para_OpenOffice.org&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-7086937185736072452?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/7086937185736072452/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=7086937185736072452' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/7086937185736072452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/7086937185736072452'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/09/correccin-ortogrfica-en-latex.html' title='Corrección ortográfica en Latex'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-1452754508447310637</id><published>2008-07-14T04:39:00.000-07:00</published><updated>2008-07-14T09:17:13.686-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='estadistica'/><category scheme='http://www.blogger.com/atom/ns#' term='receta'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>Ejecutar un script en R</title><content type='html'>&lt;a href="http://www.r-project.org/"&gt;R&lt;/a&gt; (the R Project for Statistical Computing) es un potente programa de software libre de estadística y gráficos. La cantidad de funciones que ofrece es inmensa: en el momento de escribir este post cuenta con 1493 paquetes adicionales. Es muy probable que cualquier cosa que necesites de estadística, gráficos, etc. esté ya implementada en R. Me gustaría destacar que existen muchas funciones relacionadas con la &lt;a href="http://cran.r-project.org/web/views/Spatial.html"&gt;geomática&lt;/a&gt;, como acceso a datos espaciales, geoestadística, etc.&lt;br /&gt;&lt;br /&gt;Su uso está principalmente orientado a la línea de comando, pero permite también la ejecución de scripts de comandos R.&lt;br /&gt;&lt;br /&gt;Si tenemos el fichero "/home/foo/myRscript.R" existen 2 alternativas para ejecutarlo:&lt;br /&gt;&lt;br /&gt;Desde consola:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$&lt;/span&gt;&lt;code&gt;&lt;span style="font-weight: bold;"&gt; R CMD BATCH /home/foo/myRscript.R&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;o desde el propio R:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;R&gt; source("/home/foo/myRscript.R")&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-1452754508447310637?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/1452754508447310637/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=1452754508447310637' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/1452754508447310637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/1452754508447310637'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/07/ejecutar-un-script-en-r.html' title='Ejecutar un script en R'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-4213095116790290112</id><published>2008-06-17T02:43:00.000-07:00</published><updated>2008-09-12T08:32:50.935-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comandos'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='receta'/><title type='text'>Dividir ficheros en trozos</title><content type='html'>Trabajando con datos geográficos referentes a grandes extensiones de terreno es normal encontrarse con la necesidad de guardar ficheros de gran tamaño en un disco externo. Si este disco está formateado con &lt;a href="http://en.wikipedia.org/wiki/File_allocation_table"&gt;FAT&lt;/a&gt;, sistema de ficheros que no admite ficheros de un mayores de 4GB de tamaño, tenemos un pequeño problema.  Es común encontrarse con errores del tipo:&lt;br /&gt;&lt;blockquote style="color: rgb(255, 0, 0);"&gt;cp: writing `/media/EXT-HDD/mdt.asc': File too large&lt;/blockquote&gt;Lo mismo puede pasar al mandar un fichero grande a través de una cuenta de correo con restricciones en el peso de los adjuntos.&lt;br /&gt;&lt;br /&gt;La solución que dividir el fichero, por ejemplo usando el comando, &lt;span style="font-weight: bold;"&gt;split&lt;/span&gt;:&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;$split -b1500m archivo.ext archivo.@ &lt;/blockquote&gt;&lt;br /&gt;Con esta simple sentencia tengo mi archivo cortado en trozos de 1500 MB.&lt;br /&gt;Para restituir el archivo original bastaría con hacer un &lt;span style="font-weight: bold;"&gt;cat&lt;/span&gt;:&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;$cat archivo.* &gt; archivo.ext&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-4213095116790290112?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/4213095116790290112/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=4213095116790290112' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/4213095116790290112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/4213095116790290112'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/06/dividir-ficheros-en-trozos.html' title='Dividir ficheros en trozos'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-160177771259717628</id><published>2008-06-12T02:24:00.000-07:00</published><updated>2008-09-11T02:46:08.587-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comandos'/><category scheme='http://www.blogger.com/atom/ns#' term='receta'/><category scheme='http://www.blogger.com/atom/ns#' term='consola'/><category scheme='http://www.blogger.com/atom/ns#' term='zip'/><title type='text'>Descomprimir archivos ZIP</title><content type='html'>Normalmente descomprimir un zip en Ubuntu es muy sencillo; se pincha sobre el archivo comprimido, se abre automáticamente el programa &lt;a href="http://fileroller.sourceforge.net/home.html"&gt;File-Roller&lt;/a&gt; (que viene por defecto en los escritorios GNOME), selecciona el directorio de destino y listo.&lt;br /&gt;&lt;br /&gt;Para descomprimir desde línea de comandos lo normal es usar el programa &lt;a href="http://linux.about.com/od/commands/l/blcmdl1_unzip.htm"&gt;unzip&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ejemplo de uso:&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;$unzip &lt;span style="font-style: italic;"&gt;fichecho.zip&lt;/span&gt; -d &lt;span style="font-style: italic;"&gt;destino&lt;/span&gt;&lt;/blockquote&gt;Otra alternativa es usar &lt;a href="http://fileroller.sourceforge.net/home.html"&gt;File-Roller&lt;/a&gt; directamente desde linea de comandos. Para el mismo caso que antes escribiríamos:&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;$file-roller -e &lt;span style="font-style: italic;"&gt;destino &lt;/span&gt;-f&lt;span style="font-style: italic;"&gt; fichecho.zip&lt;/span&gt;&lt;/blockquote&gt;Usar file-roller tiene la ventaja de que ofrece soporte para muchos formatos de compresión con la misma forma de comprimirlos/descomprimirlos. Además, mi experiencia personal es que &lt;span style="font-weight: bold;"&gt;file-roller&lt;/span&gt; es más fiable que &lt;span style="font-weight: bold;"&gt;unzip&lt;/span&gt; descomprimiendo grandes ficheros.&lt;br /&gt;&lt;br /&gt;Formatos soportados a día de hoy por file-roller:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Zip (.zip) &lt;/li&gt;&lt;li&gt;Jar (.jar , .ear , .war) &lt;/li&gt;&lt;li&gt;Lha  (.lzh) &lt;/li&gt;&lt;li&gt;Rar  (.rar) &lt;/li&gt;&lt;li&gt;Zoo  (.zoo) &lt;/li&gt;&lt;li&gt;Arj  (.arj) &lt;/li&gt;&lt;li&gt;AR  (.ar) &lt;/li&gt;&lt;li&gt;Paquetes Debian  (.deb) (Read-only mode) &lt;/li&gt;&lt;li&gt;Paquetes RPM  (.rpm) (Read-only mode) &lt;/li&gt;&lt;li&gt;7-zip (.7z) &lt;/li&gt;&lt;li&gt;ISO  (.iso) (Read-only mode) &lt;/li&gt;&lt;li&gt;Stuffit (.bin, .sit) &lt;/li&gt;&lt;li&gt;Ficheros gzip, bzip, bzip2, compress, lzo &lt;/li&gt;&lt;li&gt;...y por supuesto, maneja ficheros tar&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-160177771259717628?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/160177771259717628/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=160177771259717628' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/160177771259717628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/160177771259717628'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/06/descomprimir-archivos-zip.html' title='Descomprimir archivos ZIP'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-7041177345809898084</id><published>2008-06-10T07:27:00.000-07:00</published><updated>2008-07-29T08:18:57.951-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comandos'/><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Ejecutar programas externos desde python</title><content type='html'>Existen muchas alternativas para ejecutar programas desde python.&lt;br /&gt;Aquí dejo unos ejemplos:&lt;br /&gt;&lt;br /&gt;&lt;div class="python" style="border: 1px dotted rgb(160, 160, 160); margin: 0pt; padding: 0pt; white-space: nowrap; font-family: 'Courier New',Courier,monospace; font-size: 90%; background-color: rgb(240, 240, 240); line-height: 90%; color: rgb(0, 0, 153);"&gt;&lt;div class="head"&gt;Highlighting with GeSHi © 2004, Nigel McNie&lt;/div&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="kw3"&gt;os&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;system&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'ls /home/'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt; &lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;# Existen multiples variantes del comando os.exec(). Por ejemplo,&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;# Ejecuta el programa indicado reemplazando el proceso actual&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;execl&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'/bin/ls'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;# Con un listado de parámetros&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;#(ojo: la lista de argumentos empieza en 0, no en 1)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;execl&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'/bin/ls'&lt;/span&gt;, &lt;span class="st0"&gt;'/bin/ls'&lt;/span&gt;, &lt;span class="st0"&gt;'-l'&lt;/span&gt;, &lt;span class="st0"&gt;'-i'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;# Ejecuta el comando buscando en $PATH y reemplazando el proceso actual&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;execlp&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'ls'&lt;/span&gt;, &lt;span class="st0"&gt;'ls'&lt;/span&gt;, &lt;span class="st0"&gt;'-lisa'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt; &lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;#Creando un nuevo proceso primero&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;fork&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;==&lt;span class="nu0"&gt;0&lt;/span&gt;:&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;    &lt;span class="kw3"&gt;os&lt;/span&gt;.&lt;span class="me1"&gt;execlp&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'ls'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;else&lt;/span&gt;:&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;    &lt;span class="kw1"&gt;print&lt;/span&gt; &lt;span class="st0"&gt;'Fork has failed!'&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt; &lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt; &lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;import&lt;/span&gt; &lt;span class="kw3"&gt;commands&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;#Devuelve la salida del programa ejecutado&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;a = &lt;span class="kw3"&gt;commands&lt;/span&gt;.&lt;span class="me1"&gt;getstatusoutput&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'ls'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;aList = a.&lt;span class="me1"&gt;split&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'&lt;span class="es0"&gt;\n&lt;/span&gt;'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;En lugar de usar la opción de hacer un fork() y obtener un nuevo proceso que controlaremos con su PID, es recomendable usar el módulo &lt;span style="font-weight: bold;"&gt;subprocess&lt;/span&gt; y su clase &lt;span style="font-weight: bold;"&gt;Popen&lt;/span&gt;. Más sobre esto y otros temas relacionados en el &lt;a href="http://docs.python.org/lib/ipc.html"&gt;aquí&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-7041177345809898084?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/7041177345809898084/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=7041177345809898084' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/7041177345809898084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/7041177345809898084'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/06/ejecutar-programas-externos-desde.html' title='Ejecutar programas externos desde python'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-7077309068508596303</id><published>2008-06-06T03:33:00.000-07:00</published><updated>2008-12-09T09:00:32.483-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='receta'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><title type='text'>Selección vertical en emacs</title><content type='html'>&lt;a href="http://www.gnu.org/software/emacs/tour/"&gt;Emacs&lt;/a&gt; es un super editor para programadores. Es un poco complejo, al principio, y yo confieso que lo intenté usar en 2 ocasiones y decidí volver a editores &lt;span style="font-style: italic;"&gt;"menos sofisticados"&lt;/span&gt;. A día de hoy, soy un entusiasta de Emacs, pero no me enzarzaré en la &lt;a href="http://en.wikipedia.org/wiki/Editor_war"&gt;guerra entre editores&lt;/a&gt;... Con los editores me pasa como con los GIS, uso muchos diferentes, según para qué cosa... aunque Emacs apunta a ser el "EDITOR" para todo. ¿Cuál será el GIS definitivo...?&lt;br /&gt;&lt;br /&gt;Emacs tiene innumerables características y funciones. Hoy voy a comentar una bastante curiosa (no &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_text_editors"&gt;exclusiva&lt;/a&gt; de emacs): la &lt;span style="font-weight: bold;"&gt;selección vertical&lt;/span&gt; también llamada, block-selection, o &lt;span style="font-weight: bold;"&gt;rectangle selec&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;tion&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;En emacs, los &lt;a href="http://www.gnu.org/software/emacs/manual/html_mono/emacs.html#Rectangles"&gt;rectángulos&lt;/a&gt; son zonas rectangulares definidas por dos columnas y dos filas cualesquiera.   Esto permite, por ejemplo, copiar, pegar, borrar o insertar columnas de texto en cualquier parte, o realizar ciertas operaciones sobre el texto dentro del rectángulo.&lt;br /&gt;&lt;br /&gt;Para definir la región o rectángulo sobre el que se va a aplicar el comando se pone una &lt;em&gt;marca&lt;/em&gt; (C-space) en una esquina y el cursor en la esquina diagonalmente opuesta.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_n83sWasLyCU/SEkhOWUfi7I/AAAAAAAAAEs/dHfGXHSK9lE/s1600-h/emacs_verticalSelection.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_n83sWasLyCU/SEkhOWUfi7I/AAAAAAAAAEs/dHfGXHSK9lE/s400/emacs_verticalSelection.png" alt="" id="BLOGGER_PHOTO_ID_5208730974424107954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Una vez seleccionado se pueden realizar las acciones típicas sobre la región seleccionada intercalando 'r' en el comando:&lt;br /&gt;&lt;table class="normal"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Cortar (kill)&lt;/td&gt;&lt;td&gt;C-x r &lt;span style="font-weight: bold;"&gt;k&lt;/span&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Pegar (yank)&lt;/td&gt;&lt;td&gt;C-x r &lt;span style="font-weight: bold;"&gt;y&lt;/span&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Borrar (delete)&lt;/td&gt;&lt;td&gt;C-x r &lt;span style="font-weight: bold;"&gt;d&lt;/span&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Insertar espacio (open)&lt;/td&gt;&lt;td&gt;C-x r &lt;span style="font-weight: bold;"&gt;o&lt;/span&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Limpiar (clear)&lt;/td&gt;&lt;td&gt;C-x r &lt;span style="font-weight: bold;"&gt;c&lt;/span&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;Insertar texto (string)&lt;/td&gt;&lt;td&gt;C-x r &lt;span style="font-weight: bold;"&gt;t&lt;/span&gt; string RET&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;En el ejemplo, he usado un rectangle para copiar unas cotas de un MDE con formato xyz de manera muy rápida y visual:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_n83sWasLyCU/SEkoH6nyF6I/AAAAAAAAAE0/w6WRuKxO_XY/s1600-h/emacs_yankCotas.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_n83sWasLyCU/SEkoH6nyF6I/AAAAAAAAAE0/w6WRuKxO_XY/s400/emacs_yankCotas.png" alt="" id="BLOGGER_PHOTO_ID_5208738560491001762" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-7077309068508596303?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/7077309068508596303/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=7077309068508596303' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/7077309068508596303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/7077309068508596303'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/06/seleccin-vertical-en-emacs.html' title='Selección vertical en emacs'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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/_n83sWasLyCU/SEkhOWUfi7I/AAAAAAAAAEs/dHfGXHSK9lE/s72-c/emacs_verticalSelection.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-7284476198609721189</id><published>2008-05-30T11:49:00.000-07:00</published><updated>2008-12-09T09:00:33.064-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comandos'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='consola'/><title type='text'>Distintas formas de listar ficheros en linux</title><content type='html'>Trabajando en consola es muy común listar los contenidos de los directorios.&lt;br /&gt;Lo típico es usar el comando &lt;span style="font-weight: bold;"&gt;ls&lt;/span&gt; que tiene muchisimas opciones, pero su uso normal es:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_n83sWasLyCU/SEBNY-AwPnI/AAAAAAAAAEM/i3WbmAz0_K0/s1600-h/ls.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_n83sWasLyCU/SEBNY-AwPnI/AAAAAAAAAEM/i3WbmAz0_K0/s400/ls.jpg" alt="" id="BLOGGER_PHOTO_ID_5206246260598652530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Otra manera es usar el comando &lt;span style="font-weight: bold;"&gt;find&lt;/span&gt; sin parámetros:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_n83sWasLyCU/SEBNfeAwPoI/AAAAAAAAAEU/904-85zSR08/s1600-h/find.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_n83sWasLyCU/SEBNfeAwPoI/AAAAAAAAAEU/904-85zSR08/s400/find.jpg" alt="" id="BLOGGER_PHOTO_ID_5206246372267802242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hoy he aprendido una nueva: &lt;span style="font-weight: bold;"&gt;tree&lt;/span&gt;&lt;span&gt;. ¿Quién necesita entorno gráfico? jejeje&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_n83sWasLyCU/SEBNkeAwPpI/AAAAAAAAAEc/d0_mf__i85k/s1600-h/tree.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_n83sWasLyCU/SEBNkeAwPpI/AAAAAAAAAEc/d0_mf__i85k/s400/tree.jpg" alt="" id="BLOGGER_PHOTO_ID_5206246458167148178" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-7284476198609721189?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/7284476198609721189/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=7284476198609721189' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/7284476198609721189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/7284476198609721189'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/05/distintas-formas-de-listar-ficheros-en.html' title='Distintas formas de listar ficheros en linux'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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://2.bp.blogspot.com/_n83sWasLyCU/SEBNY-AwPnI/AAAAAAAAAEM/i3WbmAz0_K0/s72-c/ls.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-7113081455860356805</id><published>2008-05-27T03:18:00.000-07:00</published><updated>2008-12-09T09:00:33.609-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='idiomas'/><title type='text'>Diccionario de English-Español para Firefox</title><content type='html'>Hace años usaba el programa &lt;span style="font-weight: bold;"&gt;Babylon&lt;/span&gt; que pinchando sobre cualquier palabra (en una web, en un editor de texto, incluso en una fotografía) te ofrecía su traducción en una ventanita. Este software incluso buscaba las preposiciones en caso de que fuera un phrasal verb... El programa era muy útil, pero de pago y dejé de usarlo.&lt;br /&gt;&lt;br /&gt;Googleando un poco, descubrí que existe un &lt;a href="http://free-babylon.sourceforge.net/"&gt;free-babylon&lt;/a&gt; en source-forge, pero parece que no tiene mucha actividad actualmente.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://sourceforge.net/dbimage.php?id=92839"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="https://sourceforge.net/dbimage.php?id=92839" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sin embargo, &lt;span style="font-weight: bold;"&gt;firefox&lt;/span&gt;  ofrece muchos &lt;span style="font-weight: bold;"&gt;addons &lt;/span&gt;relacionados con traducción de palabras, páginas web, etc. Existe uno en concreto, que me resulta especialmente útil y que recuerda al funcionamiento de Babylon. Se trata de &lt;a href="https://addons.mozilla.org/es-ES/firefox/addon/3654"&gt;SpanishTrans&lt;/a&gt;. Esta extensión te permite seleccionar una determinada palabra y pulsando botón derecho de ratón y clickando en English-&gt;Spanish te abre una ventana con la definición extraída de &lt;a href="http://www.wordreference.com/"&gt;wordreference&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_n83sWasLyCU/SDvkkeAwPlI/AAAAAAAAADw/12ZYRbnWjnc/s1600-h/pandereiretaTranslation.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_n83sWasLyCU/SDvkkeAwPlI/AAAAAAAAADw/12ZYRbnWjnc/s320/pandereiretaTranslation.png" alt="" id="BLOGGER_PHOTO_ID_5205005109539389010" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-7113081455860356805?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/7113081455860356805/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=7113081455860356805' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/7113081455860356805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/7113081455860356805'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/05/diccionario-de-english-espaol-para.html' title='Diccionario de English-Español para Firefox'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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://3.bp.blogspot.com/_n83sWasLyCU/SDvkkeAwPlI/AAAAAAAAADw/12ZYRbnWjnc/s72-c/pandereiretaTranslation.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-2217822905250397622</id><published>2008-05-26T07:24:00.000-07:00</published><updated>2008-07-14T15:51:38.050-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jython'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Ejecutar un script externo en Jython y en BeanShell</title><content type='html'>&lt;a href="http://www.jython.org/"&gt;Jython&lt;/a&gt; y &lt;a href="http://www.beanshell.org/"&gt;BeanShell&lt;/a&gt; son muy útiles para ejecturar comandos de forma interactiva. Sin embargo, cuando  se quieren ejecutar directamente scripts escritos la opción de cortar y pegar no es muy cómoda. Por eso en ocasiones, puede ser útil usar lo siguiente:&lt;br /&gt;&lt;br /&gt;En &lt;a href="http://www.beanshell.org/"&gt;BeanShell&lt;/a&gt;:&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;filepath = "/usr/local/scripts/bsh/myscript.bsh";&lt;br /&gt;source(filepath);&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;En &lt;a href="http://www.jython.org/"&gt;Jython&lt;/a&gt;:&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;filepath = '/usr/local/scripts/py/myscript.py'&lt;br /&gt;execfile(filepath)&lt;/blockquote&gt;&lt;br /&gt;Este modo de lanzar scripts tiene también la ventaja de que, en caso de fallos en el script, los mensajes de error dan una información más completa aportando por ejemplo la línea donde se ha producido el error.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-2217822905250397622?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/2217822905250397622/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=2217822905250397622' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/2217822905250397622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/2217822905250397622'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/05/ejecutar-un-script-externo-en-jython-y.html' title='Ejecutar un script externo en Jython y en BeanShell'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-2481042616912564782</id><published>2008-05-24T02:36:00.000-07:00</published><updated>2008-12-09T09:00:33.673-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='programación'/><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Definición Programación Orientada a Eventos</title><content type='html'>&lt;a href="http://nosolosoftware.es/"&gt;Andrés&lt;/a&gt;, &lt;a href="http://psanxiao.blogspot.com/"&gt;Pablo&lt;/a&gt; y yo hemos comprendido por fin un término difícil de entender para aquellos programadores nutridos de otros paradigmas de programación. La "programación orientada a eventos" puede ser resumida, tras varios congresos, charlas, conferencias, etc. a los que he asistido con mi portátil, con la siguiente fotografía:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_n83sWasLyCU/SDQ7DzyBJOI/AAAAAAAAADk/2dHXBZF_wN0/s1600-h/ProgramacionOrientadaaEventos.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_n83sWasLyCU/SDQ7DzyBJOI/AAAAAAAAADk/2dHXBZF_wN0/s320/ProgramacionOrientadaaEventos.jpg" alt="" id="BLOGGER_PHOTO_ID_5202848406145410274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Indispensable la acreditación colgada del cuello... :-)&lt;br /&gt;Para los que prefieran la definición tradicional, consultar &lt;a href="http://en.wikipedia.org/wiki/Event-driven_programming"&gt;wikipedia&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-2481042616912564782?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/2481042616912564782/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=2481042616912564782' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/2481042616912564782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/2481042616912564782'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/05/definicin-programacin-orientada-eventos.html' title='Definición Programación Orientada a Eventos'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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://3.bp.blogspot.com/_n83sWasLyCU/SDQ7DzyBJOI/AAAAAAAAADk/2dHXBZF_wN0/s72-c/ProgramacionOrientadaaEventos.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-737852566628141571.post-5716058300332004193</id><published>2008-05-23T02:56:00.000-07:00</published><updated>2008-05-26T01:53:11.786-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='ftp'/><category scheme='http://www.blogger.com/atom/ns#' term='receta'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Bajar automáticamente archivos de un FTP con python</title><content type='html'>A menudo hay que acceder a un ftp y bajarse gran número de ficheros con un determinado nombre de diferentes directorios. Automatizar este proceso puede ser bastante útil en muchos casos. Usar un cliente FTP gráfico no suele ser de ayuda en estos casos. Los clientes FTP en línea de comandos son&lt;span style="font-weight: bold;"&gt; interactivos&lt;/span&gt; por lo que no se pueden realizar scripts con ellos, más allá de &lt;a href="http://www.inlumineconsulting.com:8080/website/scripting.ftp.html"&gt;ejecutar una lista de comandos &lt;/a&gt;predefinida.&lt;br /&gt;&lt;br /&gt;Este simple script se conecta a un servidor, se posiciona en la carpeta 'CATASTRO', y se accede a todos los directorios con profundidad '1' guardando los ficheros que interesan, en este caso &lt;a href="http://es.wikipedia.org/wiki/Shapefile"&gt;shapefiles&lt;/a&gt; llamados MASA, en una carpeta local.&lt;br /&gt;&lt;pre class="python" style="border: 1px solid rgb(208, 208, 208); color: rgb(0, 0, 102);"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;#!/usr/bin/python&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;# DESCRIPTION: Python script that connects to a FTP server and gets some Shapefiles from&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;#              'CATRASTRO' folder and subfolders&lt;br /&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;# AUTHOR: Nacho Uve&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;#&lt;span class="co1"&gt; DATE  : May 2008&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;span class="co1"&gt;# LICENSE: GPL2 or greater&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt; &lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;from&lt;/span&gt; &lt;span class="kw3"&gt;ftplib&lt;/span&gt; &lt;span class="kw1"&gt;import&lt;/span&gt; FTP&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de2"&gt;ftp = FTP&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'server.com'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de1"&gt;ftp.&lt;span class="me1"&gt;login&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="kw3"&gt;user&lt;/span&gt;=&lt;span class="st0"&gt;'myuser'&lt;/span&gt;, passwd=&lt;span class="st0"&gt;'mypassword'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;ftp.&lt;span class="me1"&gt;cwd&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;"CATASTRO"&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;# OPTION: To get a 'ls -l' list                                                                                                                                                                 &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de2"&gt;&lt;span class="co1"&gt;# dirs = []                                                                                                                                                                                     &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;# # Used a callback to 'dirs'                                                                                                                                                                   &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="co1"&gt;# ftp.dir(dirs.append)                                                                                                                                                                          &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;dirs = ftp.&lt;span class="me1"&gt;nlst&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;for&lt;/span&gt; row &lt;span class="kw1"&gt;in&lt;/span&gt; dirs:&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;    &lt;span class="kw1"&gt;print&lt;/span&gt; row&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;    ftp.&lt;span class="me1"&gt;cwd&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;row&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;span class="br0"&gt;    # Save shapefiles in the local machine with the first word of the folder as filename&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;    ftp.&lt;span class="me1"&gt;retrbinary&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'RETR MASA.SHP'&lt;/span&gt;, &lt;span class="kw2"&gt;open&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;row.&lt;span class="me1"&gt;split&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="br0"&gt;[&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;]&lt;/span&gt;+&lt;span class="st0"&gt;'.shp'&lt;/span&gt;,&lt;span class="st0"&gt;'wb'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li2"&gt;&lt;div class="de2"&gt;    ftp.&lt;span class="me1"&gt;retrbinary&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'RETR MASA.SHX'&lt;/span&gt;, &lt;span class="kw2"&gt;open&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;row.&lt;span class="me1"&gt;split&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="br0"&gt;[&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;]&lt;/span&gt;+&lt;span class="st0"&gt;'.shx'&lt;/span&gt;,&lt;span class="st0"&gt;'wb'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;    ftp.&lt;span class="me1"&gt;retrbinary&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'RETR MASA.DBF'&lt;/span&gt;, &lt;span class="kw2"&gt;open&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;row.&lt;span class="me1"&gt;split&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;span class="br0"&gt;[&lt;/span&gt;&lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="br0"&gt;]&lt;/span&gt;+&lt;span class="st0"&gt;'.dbf'&lt;/span&gt;,&lt;span class="st0"&gt;'wb'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;.&lt;span class="me1"&gt;write&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;    ftp.&lt;span class="me1"&gt;cwd&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="st0"&gt;'..'&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;ftp.&lt;span class="me1"&gt;quit&lt;/span&gt;&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/737852566628141571-5716058300332004193?l=nosololibresig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nosololibresig.blogspot.com/feeds/5716058300332004193/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=737852566628141571&amp;postID=5716058300332004193' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/5716058300332004193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/737852566628141571/posts/default/5716058300332004193'/><link rel='alternate' type='text/html' href='http://nosololibresig.blogspot.com/2008/05/cmo-bajarse-cosas-un-ftp-con-python.html' title='Bajar automáticamente archivos de un FTP con python'/><author><name>Nacho Uve</name><uri>http://www.blogger.com/profile/06998393541768122354</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><thr:total>0</thr:total></entry></feed>
