<?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; python</title>
	<atom:link href="http://casidiablo.net/category/python/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.3.1</generator>
		<item>
		<title>Obtener información del sistema con Python</title>
		<link>http://casidiablo.net/capturar-info-sistema-usando-python/</link>
		<comments>http://casidiablo.net/capturar-info-sistema-usando-python/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 13:46:30 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[informacion]]></category>
		<category><![CDATA[sistema]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=3307</guid>
		<description><![CDATA[Puesto que estaré haciendo un proyecto en Python, iré colocando aquellos tips útiles que he aprendido usando este maravilloso lenguaje de programación. En este caso, se trata de obtener la información del sistema que ejecuta el script; cosas como el PID del script, el directorio donde se está ejecutando, el nombre y versión del sistema [...]]]></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%252Fcapturar-info-sistema-usando-python%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Obtener%20informaci%C3%B3n%20del%20sistema%20con%20Python%22%20%7D);"></div>
<p style="text-align: justify;">Puesto que estaré haciendo un proyecto en Python, iré colocando aquellos tips útiles que he aprendido usando este maravilloso lenguaje de programación. En este caso, se trata de obtener la información del sistema que ejecuta el script; cosas como el PID del script, el directorio donde se está ejecutando, el nombre y versión del sistema operativo, etc.:</p>
<pre class="brush: python; title: ; notranslate">#!/usr/bin/python

import os
import time

numUsuario = os.getuid()
pidProceso = os.getpid()
donde = os.getcwd()
sistemaOperativo = os.uname()
tiempos = os.times()
horaRaw = time.time()
horaFormato = time.ctime(horaRaw)

print &quot;Numero de usuario&quot;,numUsuario
print &quot;PID&quot;,pidProceso
print &quot;Directorio actual&quot;,donde
print &quot;Informacion del sistema&quot;,sistemaOperativo
print &quot;Informacion de tiempos del sistema&quot;,tiempos

print &quot;\nLa hora/fecha actual es&quot;,horaRaw
print &quot;Lo cual significa&quot;,horaFormato</pre>
<p>Información extra: <a href="http://docs.python.org/library/os.html">http://docs.python.org/library/os.html</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/capturar-info-sistema-usando-python/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Crear paquete DEB para programas en Python</title>
		<link>http://casidiablo.net/debianizar-aplicacion-python/</link>
		<comments>http://casidiablo.net/debianizar-aplicacion-python/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 15:49:04 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[paquetes]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=2075</guid>
		<description><![CDATA[He leído bastante información acerca de cómo debianizar paquetes de software, pero en la mayoría de los casos se parte de el hecho de tener un programa en C/C++, en donde es necesario preocuparse por las tareas de compilación. Y puesto que no he visto ningún tutorial en español, he decidido escribir algo al respecto [...]]]></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%252Fdebianizar-aplicacion-python%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Crear%20paquete%20DEB%20para%20programas%20en%20Python%22%20%7D);"></div>
<p style="text-align: justify;">He leído bastante información acerca de cómo debianizar paquetes de software, pero en la mayoría de los casos se parte de el hecho de tener un programa en C/C++, en donde es necesario preocuparse por las tareas de compilación.</p>
<p style="text-align: justify;">Y puesto que <abbr class="tooltip" title="Tal vez no busqué bien :P">no he visto</abbr> ningún tutorial en español, he decidido escribir algo al respecto de la manera más clara posible. ¡Manos a la obra!</p>
<h3>0. Preparativos</h3>
<p style="text-align: justify;">Lo único que necesitas son dos herramientas: <code>dpkg-dev</code> y <code>dh-make</code>, las cuales puedes instalar ejecutando este comando:</p>
<div class="consola">apt-get install dpkg-dev dh-make</div>
<p style="text-align: justify;">Ten en cuenta que en éste ejemplo vamos a empaquetar un programa simple llamado &#8220;<code>pngcrushgtk</code>&#8220;, y que debes cambiar todo lo que aparece con ése nombre con el nombre de tu programa.</p>
<h3>1. Creando un espacio de trabajo</h3>
<p style="text-align: justify;">Puesto que mientras estemos realizando el empaquetado se van a crear varios archivos, lo ideal es tener un espacio de trabajo (una carpeta) totalmente vacío al comenzar. Así que crearemos una carpeta llamada <em>sandbox</em>, en donde realizaremos todo cómodamente:</p>
<div class="consola">$ mkdir sandbox<br />
$ cd sandbox</div>
<p>Dentro, debemos crear una carpeta cuyo nombre sea del tipo: <em><strong>nombreprograma-version</strong></em>:</p>
<div class="consola">$ mkdir pngcrushgtk-0.2</div>
<p>En la cual debemos copiar una versión empaquetada de nuestro programa dentro de un .tar.gz. Si aún no lo tienes, puedes hacer lo siguiente:</p>
<div class="consola">$ cd /ruta/de/tu/programa<br />
$ tar cfzv pngcrushgtk-0.2.tar.gz *<br />
$ cp pngcrushgtk-0.2.tar.gz /ruta/sandbox/pngcrushgtk-0.2/<br />
$ cd /ruta/sandbox/pngcrushgtk-0.2/</div>
<div class="nota"><strong>Nota</strong>: recuerda que debes poner el nombre de tu programa en vez de &#8220;pngcrushgtk&#8221;.</div>
<h3>2. Debianizando nuestro paquete</h3>
<p>Para ello utilizaremos el comando <code>dh_make</code> de la siguiente forma:</p>
<div class="consola">$ <strong>dh_make -e cristian@elhacker.net -f pngcrushgtk-0.2.tar.gz -c GPL</strong></p>
<p>Type of package: single binary, multiple binary, library, kernel module or cdbs?<br />
[s/m/l/k/b] sMaintainer name : cristian<br />
Email-Address   : cristian@elhacker.net<br />
Date            : Sat, 18 Oct 2008 11:15:08 -0500<br />
Package Name    : pngcrushgtk<br />
Version         : 0.2<br />
License         : gpl<br />
Using dpatch    : no<br />
Type of Package : Single<br />
Hit &lt;enter&gt; to confirm:<br />
Currently there is no top level Makefile. This may require additional tuning.<br />
Done. Please edit the files in the debian/ subdirectory now. You should also<br />
check that the pngcrushgtk Makefiles install into $DESTDIR and not in / .</p></div>
<p style="text-align: justify;">Nos preguntará qué tipo de paquete estamos creando, y seleccionamos &#8220;s&#8221; (simple). Permíteme explicarte cada parámetro:</p>
<ul>
<li style="text-align: justify;"><em>-e cristian@elhacker.net</em>, indicamos el correo electrónico del autor del programa</li>
<li style="text-align: justify;"><em>-f pngcrushgtk.tar-0.2.gz</em>, indicamos el paquete comprimido que contiene nuestro programa</li>
<li style="text-align: justify;"><em>-c GPL</em>, indicamos el tipo de licencia de nuestro programa</li>
</ul>
<p style="text-align: justify;">Luego de ejecutar el comando se habrá creado una carpeta llamada <em><strong>debian</strong></em> dentro de <em>pngcrushgtk-0.2</em>; y un archivo llamado <strong><em>pngcrushgtk_0.2.orig.tar.gz</em></strong> dentro de la carpeta <em>sandbox</em>, el cual debes eliminar.</p>
<p>Continúa leyendo en la siguiente página, en donde comenzamos con la configuración del paquete&#8230;</p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/debianizar-aplicacion-python/feed/</wfw:commentRss>
		<slash:comments>6</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>

