<?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/tag/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>Algoritmo: Obtener longitud del mayor subarreglo creciente de un arreglo</title>
		<link>http://casidiablo.net/algoritmo-longitud-mayor-subarreglo-creciente/</link>
		<comments>http://casidiablo.net/algoritmo-longitud-mayor-subarreglo-creciente/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 20:58:48 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[ejercicios en java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[algoritmos]]></category>
		<category><![CDATA[arreglos]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[subarreglos]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=3169</guid>
		<description><![CDATA[A falta de tiempo para cosas más profesionales, voy a ir poniendo los algoritmos bonitos que desarrolle en la Universidad. En este caso, la especificación del ejercicio sería: Dado un arreglo de números, determinar la longitud del subarreglo creciente más largo del arreglo. Ejemplo Si recibiéramos un arreglo de naturales con los siguientes elementos: 2, [...]]]></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%252Falgoritmo-longitud-mayor-subarreglo-creciente%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Algoritmo%3A%20Obtener%20longitud%20del%20mayor%20subarreglo%20creciente%20de%20un%20arreglo%22%20%7D);"></div>
<p style="text-align: justify;">A falta de tiempo para cosas más profesionales, voy a ir poniendo los algoritmos bonitos que desarrolle en la Universidad. En este caso, la especificación del ejercicio sería: <em>Dado un arreglo de números, determinar la longitud del subarreglo creciente más largo del arreglo</em>.</p>
<h3>Ejemplo</h3>
<p style="text-align: justify;">Si recibiéramos un arreglo de naturales con los siguientes elementos: <em>2, 6, 5, 1, 3, 4, 9, 8</em> el resultado sería 4, puesto que es el subarreglo más largo de elementos crecientes (es decir, la longitud del subarreglo <em>1, 3, 4, 9</em>)</p>
<h3>Solución en palabras</h3>
<p style="text-align: justify;">El algoritmo que resuelve este problema debería recorrer el arreglo e ir verificando si el elemento en la posición a la que apunta es menor al de la siguiente posición. Esto supone además que, puesto que evaluaremos el elemento de la siguiente posición, debemos recorrer el arreglo desde la posición <em>0</em> hasta <em>n-1</em> (siendo <em>n</em> la longitud del arreglo), ya que no queremos sobrepasar la longitud del mismo. Por otro lado, para <strong>cada elemento</strong> del arreglo contaremos sus sucesores que sean mayores que él mismo y con dicho conteo podremos determinar cual es la longitud de los subarreglos crecientes.</p>
<h3>Solución en Java</h3>
<p>El algoritmo en Java sería este:</p>
<pre class="brush: java; title: ; notranslate">public class SubarregloCreciente{
	public static void main(String args[]){
		//arreglo a evaluar
		int[] arr = {5,6,4,1,2,6,7,78,6,2,3,4,5,6,7,3,6,1};
		//la longitud al menos sera 0;
		//k contador por cada recorrido
		int longitud = 1, k;
		//recorremos el arreglo
		for(int i=0; i&lt;arr.length-1;i++){
			//contamos desde el indice i cuantos
			//elementos hay en orden ascendente
			for(k = i; k &lt; arr.length-1 &amp;&amp; arr[k] &lt; arr[k+1]; k++);
			//si la longitud es mayor que la anterior guardarla
			if(longitud &lt; k - i + 1)
				longitud = k - i + 1;
		}
		System.out.println(&quot;Longitud del subarreglo creciente mas grande: &quot;+longitud);
	}
}</pre>
<p><a class="descargacodigo tooltip" title="Descargar el código fuente" href="http://casidiablo.net/descargar/Subarreglo+Creciente">Descargar código fuente</a></p>
<h3>Solución en Python</h3>
<pre class="brush: python; title: ; notranslate">from array import array
#arreglo a evaluar
arr = array('d',[5,6,4,1,2,6,7,78,6,2,3,4,5,6,7,3,6,1])
#la longitud al menos sera 0;
#k contador por cada recorrido
longitud = 1
#k=0
#recorremos el arreglo
for i in range (0, len(arr)-1):
	#contamos desde el indice i cuantos
	#elementos hay en orden ascendente
	for k in range(i, len(arr)-1):
		if not arr[k] &lt; arr[k+1]: break
	#si la longitud es mayor que la anterior guardarla
	if longitud &lt; k - i + 1:
		longitud = k - i + 1
print &quot;Longitud del subarreglo creciente mas grande: &quot;+str(longitud)</pre>
<p><a class="descargacodigo tooltip" title="Descargar el código fuente" href="http://casidiablo.net/descargar/Subarreglo+Creciente+Python">Descargar código fuente</a></p>
<h3>Representación formal de la solución</h3>
<p style="text-align: center;"><img class="aligncenter" src="http://casidiablo.net/wordpress/wp-content/uploads/2009/08/subarreglo.png" alt="subarreglo creciente"  /></p>
<p>Por supuesto, el algoritmo planteado es solo la aproximación más sencilla, mas no la más eficiente de todas.</p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/algoritmo-longitud-mayor-subarreglo-creciente/feed/</wfw:commentRss>
		<slash:comments>13</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>
		<item>
		<title>KDE 4.1 disponible</title>
		<link>http://casidiablo.net/kde-41/</link>
		<comments>http://casidiablo.net/kde-41/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 18:40:47 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[noticias]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=1192</guid>
		<description><![CDATA[Hace apenas unas horas me entero en menéame del lanzamiento de KDE 4.1 (la segunda de la serie KDE4), con algunas novedades como el regreso de la suite KDE-PIM, mejoras en Plasma y muchas aplicaciones nueva. Los que desean actualizar desde la versión KDE 4.1 Beta 2, pueden seguir ésta pequeña guía que ha escrito [...]]]></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%252Fkde-41%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22KDE%204.1%20disponible%22%20%7D);"></div>
<p style="text-align: center;"><a href="http://www.kde.org/announcements/4.1/screenshots/desktop.png"><img title="kde41" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/07/kde41.png" alt="kde4" /></a></p>
<p>Hace apenas unas horas me <a href="http://meneame.net/story/publicada-version-4.1-de-kde">entero en <em>menéame</em> del lanzamiento de KDE 4.1</a> (la segunda de la serie KDE4), con algunas novedades como el regreso de la <em>suite</em> KDE-PIM, mejoras en Plasma y muchas aplicaciones nueva. Los que desean actualizar desde la versión KDE 4.1 Beta 2, pueden seguir <a href="http://ubuntulife.wordpress.com/2008/07/29/actualizar-kde-41-beta-2-a-kde-41/">ésta pequeña guía</a> que ha escrito José en UbuntuLife.</p>
<h3>Enlaces&#8230;</h3>
<ul>
<li><a href="http://www.kde.org/announcements/4.1/index-es.php">Anuncio oficial en Español</a></li>
<li><a href="http://blog.linuxoss.com/2008/07/kde-41-are-you-ready-to-switch/">KDE 4.1 &#8211; Are You Ready to Switch?</a></li>
<li><a href="http://www.linux.com/feature/142661">KDE 4.1 rocks the desktop</a></li>
<li><a href="http://ubuntulife.wordpress.com/2008/07/29/activar-los-efectos-3d-en-kde-41/"><strong>python docActivar los efectos 3D en KDE 4.1</strong></a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/kde-41/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Script simple para crear backups</title>
		<link>http://casidiablo.net/script-backup-linu/</link>
		<comments>http://casidiablo.net/script-backup-linu/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 15:56:10 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[programas]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=946</guid>
		<description><![CDATA[Uno de los aspectos más descuidados por muchos usuarios de computador, es el de realizar backups periódicamente de sus archivos. Aquí vamos a ver un pequeño tip para crear backups de una manera sencilla y rápida. Lo único que necesitaremos es un programa en Shell, tan solo de dos líneas: A este script le podemos [...]]]></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%252Fscript-backup-linu%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Script%20simple%20para%20crear%20backups%22%20%7D);"></div>
<p>Uno de los aspectos más descuidados por muchos usuarios de computador, es el de realizar backups periódicamente de sus archivos. Aquí vamos a ver un pequeño tip para crear backups de una manera sencilla y rápida. Lo único que necesitaremos es un programa en Shell, tan solo de dos líneas:</p>
<pre class="brush: python; title: ; notranslate">#!/bin/sh
tar czvf $1.$(date +%Y%m%d-%H%M%S).tgz $1
exit $?</pre>
<p>A este script le podemos pasar como parámetro un nombre de archivo o direcotorio, y éste crea un archivo comprimido con la fecha actual embebida en el nombre. Por ejemplo, si tenemos un directorio llamado <strong><em>src</em></strong> y deseas hacerle un bakcup, puedes invocar el script de esta manera:</p>
<p class="consola">$ ./backup.sh src<br />
src/<br />
src/EjemploGUI.java<br />
src/Suma.java<br />
src/EjemploGUI.class<br />
src/Hola4.java<br />
src/Tarea.java<br />
src/EjemploGUI2.java<br />
src/Hola2.java<br />
src/EjemploGUI2.class<br />
src/Hola3.java<br />
src/EjemploGUI2$MiPanel.class<br />
src/Hola.java<br />
src/Humano.java<br />
$ ls<br />
bin  src  <strong>src.20080719-181907.tgz</strong></p>
<p>Tal vez ponga algo más avanzado para hacer backups, pero de momento esto resultará muy útil para muchos. Además que es bastante sencillo!</p>
<p><strong>Nota:</strong> para darle permisos de ejecución a nuestro archivo es necesario ejecutar el comando: <strong><em>chmod a+x bakcup.sh</em></strong>, suponiendo que nuestro script se llama <em>bakcup.sh</em>.</p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/script-backup-linu/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>PyQT Desarrollando Aplicaciones de Escritorio</title>
		<link>http://casidiablo.net/pyqt-desarrollando-aplicaciones-de-escritorio/</link>
		<comments>http://casidiablo.net/pyqt-desarrollando-aplicaciones-de-escritorio/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 15:38:29 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[artículos]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[pyqt]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://casidiablo.net/?p=936</guid>
		<description><![CDATA[Me entero a través de UbuntuLife de PyQt, Desarrollando Aplicaciones de Escritorio un eBook escrito por Daniel M. Maldonado El codigo K, se trata de una pequeña guía que nos va a permitir entender como integrar de manera muy simple el lenguaje de programación Python con las librerías gráficas Qt (las que usa KDE), el mismo [...]]]></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%252Fpyqt-desarrollando-aplicaciones-de-escritorio%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22PyQT%20Desarrollando%20Aplicaciones%20de%20Escritorio%22%20%7D);"></div>
<p style="text-align: center;"><img class="size-full wp-image-937 aligncenter" title="Portada Libro" src="http://casidiablo.net/wordpress/wp-content/uploads/2008/07/pyqt1.jpg" alt="portada libro pyqt" width="214" height="302" /></p>
<p>Me entero a través de UbuntuLife de <strong>PyQt, Desarrollando Aplicaciones de Escritorio</strong> un eBook escrito por Daniel M. Maldonado <a href="http://www.elcodigok.com.ar/2008/07/pyqt-desarrollando-aplicaciones-de-escritorios/" target="_blank">El codigo K</a>, se trata de una pequeña guía que nos va a permitir entender como integrar de manera muy simple el lenguaje de programación Python con las librerías gráficas Qt (las que usa KDE), el mismo se encuentra bajo licencia Creative Commons. El documento es bastante simple y puedes descargarlo. Además está disponible el código fuente del ejemplo.</p>
<p><strong><a href="http://www.elcodigok.com.ar/2008/07/pyqt-desarrollando-aplicaciones-de-escritorios/">Anuncio del libro</a></strong></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/pyqt-desarrollando-aplicaciones-de-escritorio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Buscar en Google desde la consola</title>
		<link>http://casidiablo.net/consola-google/</link>
		<comments>http://casidiablo.net/consola-google/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 14:33:05 +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[opensuse]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.casidiablo.net/consola-google/</guid>
		<description><![CDATA[¿Para qué tomarnos la molestía de hacerlo desde un navegador web, si podemos hacerlos desde la comodidad de la consola? He encontrado un script bastante bonito con el que podemos buscar en google usando nuestra amada consola. El script lo programó Sebastien Bilbeau, pero yo le he hecho algunos ajustes para que los resultados sean [...]]]></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%252Fconsola-google%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Buscar%20en%20Google%20desde%20la%20consola%22%20%7D);"></div>
<p style="text-align: center;"><img class="aligncenter" src="http://i270.photobucket.com/albums/jj96/Casidiablo/linux-google.png" alt="logo linux google" width="258" height="114" /></p>
<p>¿Para qué tomarnos la molestía de hacerlo desde un navegador web, si podemos hacerlos desde la comodidad de la consola? He encontrado un script bastante bonito con el que podemos buscar en google usando nuestra amada consola. El script lo programó <a href="http://www.tux-planet.fr/">Sebastien Bilbeau</a>, pero yo le he hecho algunos ajustes para que los resultados sean de páginas que estén en español.</p>
<p>Es necesario tener instalado <a href="http://www.casidiablo.net/lynx/">lynx</a> para que funcione. He aquí un comando de instalación rápida:</p>
<h3>Ubuntu, Debian o derivados</h3>
<pre class="brush: python; title: ; notranslate">sudo apt-get install lynx &amp;&amp; wget http://casidiablo.net/codigos/google.zip &amp;&amp; unzip google.zip &amp;&amp; chmod a+x google</pre>
<h3>openSuse, Fedora o distros con RPM</h3>
<pre class="brush: python; title: ; notranslate">sudo yum install lynx &amp;&amp; wget http://casidiablo.net/codigos/google.zip &amp;&amp; unzip google.zip &amp;&amp; chmod a+x google</pre>
<h3>Uso</h3>
<p class="consola">cristian@alienxp:~/Escritorio$ ./google ubuntu<br />
10 de 5.440.000 resultados en total<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>http://en.wikipedia.org/wiki/Ubuntu_(Linux_distribution)</p>
<p>http://es.wikipedia.org/wiki/Ubuntu</p>
<p>http://es.wikipedia.org/wiki/Ubuntu_(distribuci%C3%B3n_Linux)</p>
<p>http://es.youtube.com/results?num=10&#038;hl=es&#038;safe=on&#038;q=ubuntu&#038;um=1&#038;ie=UTF-8&#038;sa=N&#038;tab=w1</p>
<p>http://ubuntu.com.es/</p>
<p>http://ubuntuforums.org/</p>
<p>http://www.guia-ubuntu.org/</p>
<p>http://www.ubuntu-es.org/</p>
<p>http://www.ubuntu.com/</p>
<p>http://www.ubuntu.com/GetUbuntu/download</p>
<p>http://www.ubuntu.upc.edu/</p>
<p><a class="download tooltip" title="Descargar este script" href="http://casidiablo.net/codigos/google.zip">Descargar script</a></p>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/consola-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Links interesantes de la semana&#8230;</title>
		<link>http://casidiablo.net/links-interesantes-de-la-semana/</link>
		<comments>http://casidiablo.net/links-interesantes-de-la-semana/#comments</comments>
		<pubDate>Wed, 07 May 2008 21:02:29 +0000</pubDate>
		<dc:creator>Cristian</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[noticias]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.casidiablo.net/wordpress/index.php/2008/05/07/links-interesantes-de-la-semana/</guid>
		<description><![CDATA[Y de hace ya un tiempo En orden cronológico: Como cambiar la clave de root en Mysql Compiz-check: Comprueba si puedes ejecutar Compiz en tu PC Comandos utiles para Ubuntu Consejos para optimizar bases de datos MySQL Ship it de Fedora Corre Ubuntu mobile desde tu PC de escritorio La mejor PHP Cheat Sheet El [...]]]></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%252Flinks-interesantes-de-la-semana%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Links%20interesantes%20de%20la%20semana...%22%20%7D);"></div>
<p>Y de hace ya un tiempo <img src='http://casidiablo.net/wordpress/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  En orden cronológico:</p>
<ul>
<li><a href="http://www.techno.mayix.net/2008/04/13/como-cambiar-la-clave-de-root-en-mysql/">Como cambiar la clave </a><a href="http://eveliotc.wordpress.com/2008/05/04/mysql-recuperar-contrasena-del-root/">de root en Mysql</a></li>
<li><a href="http://www.maty1206linuxeando.com/?p=1016">Compiz-check: Comprueba si puedes ejecutar Compiz en tu PC</a></li>
<li><a href="http://gndx.org/?p=249">Comandos utiles para Ubuntu</a></li>
<li><a href="http://www.kabytes.com/programacion/consejos-para-optimizar-bases-de-datos-mysql/">Consejos para optimizar bases de datos MySQL</a></li>
<li><a href="http://www.durmiendoafuera.com/ship-it-de-fedora/">Ship it de Fedora</a></li>
<li><a href="http://www.blux20.com/2008/05/corre-ubuntu-mobile-desde-tu-pc-de-escritorio/">Corre Ubuntu mobile desde tu PC de escritorio</a></li>
<li><a href="http://www.kabytes.com/general/la-mejor-php-cheat-sheet/">La mejor PHP Cheat Sheet</a></li>
<li><a href="http://mundogeek.net/archivos/2008/05/06/el-tutorial-de-python-en-pdf/">El tutorial de Python en PDF</a></li>
<li><a href="http://albertjh.cymaho.com/?p=409">Como conectar a Java y MySQL (NetBeans)</a></li>
<li><a href="http://picandocodigo.net/index.php/2008/05/07/el-resultado-del-proyecto-indiana-open-solaris-200805/">El resultado del Proyecto Indiana: Open Solaris 2008.05</a></li>
</ul>
<h3>Podcasts&#8230;</h3>
<ul>
<li><a href="http://www.linpodcast.emnhome.com/?p=65">Linpodcast 03 &#8211; 02</a></li>
<li><a href="http://linpodcast.com/mrcomputer1/?p=27">El podcast de mrcomputer 4</a></li>
<li><a href="http://www.linuxhispano.net/podcast/?p=34">#014 &#8211; El podcast de Linux Hispano</a></li>
<li><a href="http://javaposse.com/index.php?post_id=335433#">Java Posse #184 &#8211; Newscast for May 2nd 2008</a></li>
<li><a href="http://www.linuxactionshow.com/?p=182">Season 8, Episode 7 &#8211; Slightly Delayed</a></li>
<li><a href="http://www.pinguinos.org.mx/index.php?id=71">Pingüinos en el Alambre</a></li>
<li><a href="http://www.earthmusicnetwork.com/opsl/?p=41">OPSL 30 &#8211; Seguridad, VirtualBox, Compilando Mono y otras cosas</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://casidiablo.net/links-interesantes-de-la-semana/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

