<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux, Java y programación &#187; pygtk</title>
	<atom:link href="http://casidiablo.net/tag/pygtk/feed/" rel="self" type="application/rss+xml" />
	<link>http://casidiablo.net</link>
	<description>Blog de Java, Programación y Linux</description>
	<lastBuildDate>Fri, 11 Nov 2011 05:41:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>pyRenamer, renombrar de archivos en masa</title>
		<link>http://casidiablo.net/pyrenamer-renombrar-lotes-de-ficheros/</link>
		<comments>http://casidiablo.net/pyrenamer-renombrar-lotes-de-ficheros/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 18:36:31 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[programas]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[archivos]]></category>
		<category><![CDATA[pygtk]]></category>
		<category><![CDATA[pyrenamer]]></category>
		<category><![CDATA[renombrar]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2054</guid>
		<description><![CDATA[pyRenamer es una excelente aplicación desarrollada con PyGtk que nos permite renombrar lotes de archivos en masa. Tiene un montón de características interesantes que hacen realmente fácil el proceso de renombramiento: Renombramiento en base a patrones o expresiones regulares (usando variables como numeraciones, fechas, números aleatorios, etc.) Reemplazo de caracteres Inserción y eliminación de caracteres [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fpyrenamer-renombrar-lotes-de-ficheros%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22pyRenamer%2C%20renombrar%20de%20archivos%20en%20masa%22%20%7D);"></div>
<p style="text-align: center;"><img src="http://casidiablo.net/wordpress/wp-content/uploads/2008/10/pyeenamer.gif" alt="" /></p>
<p style="text-align: justify;"><a href="http://www.infinicode.org/code/pyrenamer/">pyRenamer</a> es una excelente aplicación desarrollada con <a href="http://casidiablo.net/tag/pygtk/">PyGtk</a> que nos permite renombrar lotes de archivos en masa. Tiene un montón de características interesantes que hacen realmente fácil el proceso de renombramiento:</p>
<ul style="text-align: justify;">
<li>Renombramiento en base a patrones o expresiones regulares (usando variables como numeraciones, fechas, números aleatorios, etc.)</li>
<li>Reemplazo de caracteres</li>
<li>Inserción y eliminación de caracteres</li>
<li>Renombramiento de archivos de audio e imágenes basado en sus metadatos</li>
<li>Nos permite previsualizar cómo quedarían nuestros archivos antes de renombrarlos</li>
</ul>
<p style="text-align: justify;">Para instalarlo y usarlo basta con ejecutar el siguiente par de comandos:</p>
<div class="consola">$ sudo apt-get install pyrenamer<br />
$ pyrenamer</div>
<h3>Bonus+</h3>
<p>Me comenta <a href="http://www.coplec.org">Tonny</a> de un proyecto suyo llamado <a href="http://www.coplec.org/?q=2008/07/22/jrenamer"><strong>JRenamer</strong></a>. Dicho programa es similar al pyRenamer, y tiene prácticamente todas sus características, con la ventaja de estar en <a href="http://casidiablo.net/java/">Java</a>, por lo que es multiplataforma.</p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/pyrenamer-renombrar-lotes-de-ficheros/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Threads en Python y PyGtk &#8211; evitar que se congelen las aplicaciones</title>
		<link>http://casidiablo.net/threads-python-pygtk-evitar-bloqueo/</link>
		<comments>http://casidiablo.net/threads-python-pygtk-evitar-bloqueo/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 14:10:17 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[hilos]]></category>
		<category><![CDATA[pygtk]]></category>
		<category><![CDATA[threads]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1806</guid>
		<description><![CDATA[Uno de los típicos problemas que se tienen al programar en PyGtk es que si necestamos ejecutar un comando externo, nuestra aplicación se bloquea hasta que el proceso termine. La solución a esto es usar threads, pero NO &#8220;de la manera normal&#8220;. La cosa es que, cuando estamos desarrollando software en PyGtk, usar threads de [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fthreads-python-pygtk-evitar-bloqueo%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Threads%20en%20Python%20y%20PyGtk%20-%20evitar%20que%20se%20congelen%20las%20aplicaciones%22%20%7D);"></div>
<p style="text-align: justify;">Uno de los típicos problemas que se tienen al programar en <a href="http://www.pygtk.org/">PyGtk</a> es que si necestamos ejecutar un comando externo, <strong>nuestra aplicación se bloquea hasta que el proceso termine</strong>. La solución a esto es usar <abbr title="hilos, programación concurrente, subprocesamiento múltiple, o como le llames">threads</abbr>, pero NO &#8220;<a href="http://mundogeek.net/archivos/2008/04/18/threads-en-python/">de la manera normal</a>&#8220;.</p>
<p style="text-align: justify;">La cosa es que, cuando estamos desarrollando software en PyGtk, <em>usar threads de la forma convencional tiene problemas</em>: algunas veces, <strong>los widgets como botones que ejecutan threads no trabajan adecuadamente</strong>, o simplemente <strong>la aplicación se congela como si no estuvieramos usando hilos</strong> <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p style="text-align: justify;">La solución es usar los métodos <strong><code>gtk.gdk.threads_init()</code></strong>, <strong><code>gtk.gdk.threads_enter()</code></strong> y <strong><code>gtk.gdk.threads_leave()</code></strong>. Vamos con un ejemplo, y luego de ello paso a explicar las particualiaridades del programa:<span id="more-1806"></span></p>
<pre class="brush: python; title: ; notranslate">#!/usr/bin/env python
import os, threading, locale, gtk
gtk.gdk.threads_init()

codificacion = locale.getpreferredencoding()
utf8conv = lambda x : unicode(x, codificacion).encode('utf8')

def clic_boton(boton, area_texto, buffer, comando):
 hilo = threading.Thread(target=leer_salida, args=(area_texto, buffer, comando))
 hilo.start()

def leer_salida(area_texto, buffer, comando):
 stdin, stdouterr = os.popen4(comando)
 while 1:
	 linea = stdouterr.readline()
	 if not linea:
		 break
	 gtk.gdk.threads_enter()
	 iter = buffer.get_end_iter()
	 buffer.place_cursor(iter)
	 buffer.insert(iter, utf8conv(linea))
	 area_texto.scroll_to_mark(buffer.get_insert(), 0.1)
	 gtk.gdk.threads_leave()

sw = gtk.ScrolledWindow()
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
area_texto = gtk.TextView()
buffer_texto = area_texto.get_buffer()
sw.add(area_texto)
ventana = gtk.Window()
ventana.resize(300,300)
ventana.set_title(&quot;Hilos en PyGtk&quot;)
ventana.connect('delete-event', gtk.main_quit)
boton = gtk.Button(&quot;Haz clic!&quot;)
comando = 'ls -R $HOME'
boton.connect(&quot;clicked&quot;, clic_boton, area_texto, buffer_texto, comando)
vbox = gtk.VBox()
vbox.pack_start(boton, False)
vbox.pack_start(sw)
ventana.add(vbox)
ventana.show_all()

gtk.main()</pre>
<ol>
<li style="text-align: justify;">Lo primero (<em>línea 2</em>) es importar el paquete <code>threading</code>, que nos permitirá usar threads</li>
<li style="text-align: justify;">Ahora, es necesario invocar la función <code>gtk.gdk.threads_init()</code> al inicio del programa (<em>línea 3</em>), lo que le indica a la aplicación que se van a usar hilos en la interfaz gráfica</li>
<li style="text-align: justify;">En tercer lugar, debemos identificar las líneas de nuestro programa que pueden congelar la aplicación, que por lo general son llamadas a comandos externos. Una vez indentificadas basta con invocar la función <code>gtk.gdk.threads_enter()</code> antes de dichas líneas (<em>línea 18</em>), y <code>gtk.gdk.threads_leave()</code> después de las mismas (<em>línea 23</em>).</li>
</ol>
<div class="nota">Asumo que, si este post es útil para ti es porque ya tienes experiencia programando en PyGtk, por lo que pasaré de explicar los detalles relacionados con la creación de widgets, eventos, etc.</div>
<p>El resultado del programa es el siguiente:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/10/hilos-pygtk.png" alt="pygtk thread" /></p>
<p><a class="tooltip descargacodigo" title="Descargar código fuente del programa" href="http://casidiablo.net/descargar/Thread+PyGtk">Descargar código fuente del ejemplo</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/threads-python-pygtk-evitar-bloqueo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>IDEs para Python &#8211; Los dos mejores en mi opinión</title>
		<link>http://casidiablo.net/ide-python/</link>
		<comments>http://casidiablo.net/ide-python/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 05:10:33 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[pygtk]]></category>
		<category><![CDATA[pyqt]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1227</guid>
		<description><![CDATA[Recientemente ando aprendiendo algo de Python, y por supuesto me he lanzado a la búsqueda de un bonito IDE para trabajar. Después de muchas vueltas probando diferentes opciones, al fin he seleccionado mis dos finalistas. PyDev Es sin duda el mejor de todos. Se trata de un plugin para Eclipse que tiene todo lo que [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fcasidiablo.net%252Fide-python%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22IDEs%20para%20Python%20-%20Los%20dos%20mejores%20en%20mi%20opini%C3%B3n%22%20%7D);"></div>
<p>Recientemente ando aprendiendo algo de Python, y por supuesto me he lanzado a la búsqueda de un bonito <abbr title="Integrated Develpment Enviroment::Entorno de desarrollo integrado" class="tooltip">IDE</abbr> para trabajar. Después de muchas vueltas probando diferentes opciones, al fin he seleccionado mis dos finalistas.</p>
<h3><a href="http://pydev.sourceforge.net">PyDev</a></h3>
<p style="text-align: center;"><a href="http://casidiablo.net/wordpress/wp-content/uploads/2008/08/debug-pydev.png"><img class="aligncenter" title="debug-pydev-600" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/08/debug-pydev-600.png" alt="pydev" /></a></p>
<p>Es sin duda el mejor de todos. Se trata de un plugin para Eclipse que tiene todo lo que pudiéramos necesitar de un <abbr title="Integrated Develpment Enviroment::Entorno de desarrollo integrado">IDE</abbr>:</p>
<ul>
<li>Resaltado de código</li>
<li><abbr class="tooltip" title="Identación">Sangrado</abbr> automática</li>
<li>Completado automático</li>
<li>Ejecución de programas</li>
<li>Depurador de soluciones</li>
<li>Administrador de proyectos</li>
</ul>
<h3><a href="http://www.openkomodo.com/">OpenKomodo</a></h3>
<p style="TEXT-ALIGN: center"><a href="http://casidiablo.net/wordpress/wp-content/uploads/2008/08/komodo.png"><img class="aligncenter" title="komodo-600" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/08/komodo-600.png" alt="komodo" /></a></p>
<p>Es muy bueno sin duda, y nace como resultado de la liberación de parte del código del editor de <a href="http://www.activestate.com/Products/komodo_ide/index.mhtml">Komodo</a>, <em>pero</em> <strong>es solo un editor</strong>, por lo que el proceso de ejecución y depuración de aplicaciones lo tenemos que hacer manualmente o usando otras herramientas. Aún así­ posee:</p>
<ul>
<li>Resaltado de código</li>
<li><abbr class="tooltip" title="Identación">Sangrado</abbr> automática</li>
<li>Completado automático</li>
<li>Administrador de proyectos</li>
<li>Y utilidades para el código (des/comentar bloques de código, uso de bookmarks, etc.)</li>
</ul>
<h3>Otros IDEs</h3>
<p>Existen por supuesto una gran variedad de alternativas muy buenas, cada una con sus <em>pros</em> y <em>contras</em>. Entre las que podemos encontrar (todos instalables usando apt-get en sistemas basados en Debian):</p>
<ul>
<li><a href="http://die-offenbachs.de/eric/index.html">Eric</a></li>
<li><a href="http://pida.co.uk/">PIDA</a></li>
<li><a href="http://pythonide.blogspot.com/">SPE</a></li>
<li><a href="http://www.wingware.com/wingide">WingIDE</a></li>
</ul>
<h3>Enlaces interesantes&#8230;</h3>
<ul>
<li><a href="http://www.python.org/">Página oficial de Python</a></li>
<li><a href="http://mundogeek.net/tutorial-python/">Python para todos</a>. Es un eBook escrito por <abbr title="Zootropo::Administrador de mundogeek.net" class="tooltip">Raúl González Duque</abbr> que cubre a grandes rasgos las principales caracterí­sticas de Python, y aunque es algo básico estoy seguro que sirve de gran ayuda a los que se inician con este maravilloso lenguaje.</li>
<li><a href="http://docs.python.org/ref/ref.html">Manual de referencia oficial de Python</a></li>
<li><a href="http://www.pygtk.org/">Página oficial del proyecto <strong>PyGtk</strong></a>, un conjunto de librerí­as que permiten desarrollar aplicaciones con interfaces gráficas Gtk, usando Python</li>
<li><a href="http://www.pygtk.org/pygtk2tutorial-es/">Tutorial oficial <strong>PyGtk</strong> en español</a>, la guí­a más completa para aprender a usar <strong><a href="http://www.pygtk.org/">PyGtk</a></strong></li>
<li><a href="http://www.riverbankcomputing.co.uk/software/pyqt/intro">Página oficial del proyecto <strong>PyQt</strong></a>, un conjunto de librerí­as que permiten desarrollar aplicaciones con interfaces gráficas Qt (para KDE), usando Python</li>
<li><a href="http://casidiablo.net/pyqt-desarrollando-aplicaciones-de-escritorio/">Tutorial de introducción al uso de <strong>PyQt</strong></a></li>
<li><a href="http://wiki.python.org/moin/IntegratedDevelopmentEnvironments">Listado de IDEs en Python</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/ide-python/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

