<?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>Diario de Programación &#187; python</title>
	<atom:link href="http://blog.chuidiang.com/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chuidiang.com</link>
	<description>Programación e informática en general</description>
	<lastBuildDate>Wed, 25 Jan 2012 23:17:43 +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>Diabólico python &#8230; ¿o son cosas mías?</title>
		<link>http://blog.chuidiang.com/2009/02/19/diabolico-python-%c2%bfo-son-cosas-mias/</link>
		<comments>http://blog.chuidiang.com/2009/02/19/diabolico-python-%c2%bfo-son-cosas-mias/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 19:32:22 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[gmail]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=504</guid>
		<description><![CDATA[&#160; El otro d&#237;a me dio por retomar python y en concreto, me puse a ver c&#243;mo pod&#237;a enviar y recibir correos con python y gmail. Y la verdad, es cada vez entiendo menos el &#233;xito de python. Me puse a googlear, para ver c&#243;mo se hac&#237;a lo del env&#237;o y recepci&#243;n de correo. Sobre [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>El otro d&iacute;a me dio por retomar python y en concreto, me puse a ver <a href="http://www.chuidiang.com/chuwiki/index.php?title=Enviar_y_leer_email_con_python_y_gmail">c&oacute;mo pod&iacute;a enviar y recibir correos con python y gmail</a>. Y la verdad, es cada vez entiendo menos el &eacute;xito de python.</p>
<p>Me puse a googlear, para ver c&oacute;mo se hac&iacute;a lo del env&iacute;o y recepci&oacute;n de correo. Sobre el env&iacute;o hay muchos ejemplos y tutoriales, no me cost&oacute; mucho hacer un poco de copy-paste de esos ejemplos, ajustarlos a lo que quer&iacute;a y ponerlos en marcha. La recepci&oacute;n de correos es otro tema, apenas hay tutoriales o, por lo menos, no los he encontrado, salvo uno que parece copiado una y otra vez que es el de ver cu&aacute;ntos correos tengo y sacar por pantalla, en bruto, lo que recibimos del servidor. No me extra&ntilde;a, porque python se usa sobre todo con aplicaciones web y en estas aplicaciones web lo habitual es enviar correos, no leerlos. Me cost&oacute; un mont&oacute;n encontrar c&oacute;mo se &quot;parsea&quot; el mensaje leido, para extraer sus adjuntos, el texto, etc, etc. Al final encontr&eacute; un ejemplo en un foro perdido de alguien que lo hab&iacute;a puesto para contestar a alguien.</p>
<p>Pero bueno, eso son mis peripecias concretas y no tienen nada que ver con que python sea bueno o malo. Las cosas que veo mal de python son las siguientes:</p>
<p>Por un lado, al no ser en absoluto tipado, me da la impresi&oacute;n de que debe ser muy, pero que muy complejo, hacer y mantener un programa grande. O pones muy buenos comentarios, o nunca sabr&aacute;s qu&eacute; te esta llegando como par&aacute;metro en una funci&oacute;n, qu&eacute; tienes que pasar como par&aacute;metro a una funci&oacute;n o qu&eacute; te devuelve una funci&oacute;n.</p>
<p>Los IDE lo tienen bastante dificil con los autocompletar. Desde luego la sintaxis coloreada ayuda mucho, pero lo fundamental para m&iacute; de un IDE es el autocompletar. Sin necesidad de ir a mirar d&oacute;nde est&aacute; definida la clase o sin tener que ir a la documentaci&oacute;n, tener accesible qu&eacute; m&eacute;todos tiene y qu&eacute; par&aacute;metros puedo pasarle. Eso, en python, con un IDE, es poco menos que imposible, salvo quiz&aacute;s (no lo he probado), que se haga el &quot;new&quot; en el mismo sitio. El &uacute;nico autocompletar que he visto lo que hace es ponerte los m&eacute;todos que ya has usado para esa variable poco m&aacute;s arriba en el c&oacute;digo. El primer autocompletar de esa variable sale vac&iacute;o, el segundo sale con el m&eacute;todo que hayas usado en el primero y as&iacute; sucesivamente.</p>
<p>Bueno, el autocompletar, aunque es una ayuda importante, no ser&iacute;a tan grave si la documentaci&oacute;n estuviera en condiciones. Pero me temo que, al menos para m&iacute;, tampoco es as&iacute;. Con esto del correo me he ido a la documentaci&oacute;n, a ver los m&eacute;todos de clases como POP3_SSL o SMTP. Vamos, por ejemplo, al m&eacute;todo <a href="http://docs.python.org/library/poplib.html">list() de POP3</a> o el retr() que est&aacute; justo detr&aacute;s. Bien, ambos devuelven una cosa estilo (response, ['message num_octects', ... ], octects). &iexcl;&iexcl; Mande !!. Lo de response pone m&aacute;s arriba que es el texto de respuesta del servidor, as&iacute; que en principio no hay mucha pega. Lo de message num_octects&#8230; bueno, intuiremos que es un string por aquello de que est&aacute; entre comillas, intuiremos que es el n&uacute;mero de bytes del mensaje y que esa lista tiene tantos n&uacute;meros-string como mensajes. Lo del octects del final ya se me escapa. Tambi&eacute;n es cierto que eso que hemos intuido del segundo par&aacute;metro, lo he intuido despu&eacute;s de haber hecho el ejemplo, porque en mi primera lectura me son&oacute; a chino.</p>
<p>Dicen que la ventaja de python sobre java es que se escribe menos c&oacute;digo (ver imagen), pero mi impresi&oacute;n es que cuesta m&aacute;s escribirlo. Y desde luego, me hace la impresi&oacute;n de que cuesta much&iacute;simo m&aacute;s mantenerlo. Pero si tiene el &eacute;xito que tiene y se usa tanto, supongo que todo esto en realidad son las impresiones de un novato mal acostumbrado a java. Seguramente estoy equivocado y tendr&eacute; que seguir con ello para ver si llego a acostumbrarme.</p>
<p><img height="260" width="710" src="http://blog.chuidiang.com/wp-content/uploads/javapython.png" alt="Las mujeres piensan en java, los hombres en python." /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2009/02/19/diabolico-python-%c2%bfo-son-cosas-mias/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Python con MySQL</title>
		<link>http://blog.chuidiang.com/2008/05/01/python-con-mysql/</link>
		<comments>http://blog.chuidiang.com/2008/05/01/python-con-mysql/#comments</comments>
		<pubDate>Thu, 01 May 2008 05:01:49 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[Lenguajes de Programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[base de datos]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/?p=366</guid>
		<description><![CDATA[&#160; Hay una tonter&#237;a de la conexi&#243;n de python con MySQL que me ha llamado la atenci&#243;n y aprovecho para comentar aqu&#237;. El tema es que seg&#250;n obtengamos el cursor de la conexi&#243;n para hacer las consultas, podemos acceder a los resultados de una manera o de otra. Si obtenemos el cursor de esta manera [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Hay una tonter&iacute;a de la conexi&oacute;n de <em>python </em>con <em>MySQL </em>que me ha llamado la atenci&oacute;n y aprovecho para comentar aqu&iacute;. El tema es que seg&uacute;n obtengamos el cursor de la conexi&oacute;n para hacer las consultas, podemos acceder a los resultados de una manera o de otra.</p>
<p>Si obtenemos el cursor de esta manera</p>
<blockquote>
<p>conn = MySQLdb.connect (&#8230;.)<br />
cursor = conn.cursor()</p>
</blockquote>
<p>una vez que hagamos una consulta y obtengamos una de las filas resultado, debemos acceder a cada uno de los campos usando un &iacute;ndice de un array</p>
<blockquote>
<p>cursor.execute (&quot;select * from tabla&quot;)<br />
fila = cursor.fetchone()<br />
# para acceder al primer campo<br />
print fila[0]&nbsp;&nbsp;</p>
</blockquote>
<p>Sin embargo, al obtener el cursor podemos decir que queremos que las filas sean <em>dictionaries</em>, en vez de <em>tuplas</em>, de manera que podemos acceder a los campos usando el nombre del campo, en vez de un &iacute;ndice. Para ello, basta con obtener el cursor de esta manera</p>
<blockquote>
<p>conn = MySQLdb.connect (&#8230;)<br />
cursor = conn.cursor(MySQLdb.cursors.DictCursor)</p>
</blockquote>
<p>y as&iacute; podemos acceder a los campos a trav&eacute;s de su nombre</p>
<blockquote>
<p>cursor.execute(&quot;select * from tabla&quot;)<br />
fila = cursor.fecthone()<br />
# para acceder a uno de los campos<br />
print fila[&quot;nombre_columna&quot;]</p>
</blockquote>
<blockquote></blockquote>
<p>Una tonter&iacute;a, pero estoy acostumbrado a java y a C++ y no a lenguajes tan flexibles.</p>
<p>
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/05/01/python-con-mysql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Python: Una de cal y una de arena</title>
		<link>http://blog.chuidiang.com/2008/04/23/python-una-de-cal-y-una-de-arena/</link>
		<comments>http://blog.chuidiang.com/2008/04/23/python-una-de-cal-y-una-de-arena/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 03:56:28 +0000</pubDate>
		<dc:creator>Chuidiang</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[trabajo]]></category>

		<guid isPermaLink="false">http://blog.chuidiang.com/2008/04/23/python-una-de-cal-y-una-de-arena/</guid>
		<description><![CDATA[S&#233; que &#34;una de cal y una de arena&#34; significa una cosa buena y una cosa mala. El problema es que nunca he sabido si la cal es la mala, la arena la buena o a la viceinversa. Hace tiempo coment&#233; que iba a hacer una peque&#241;a aplicaci&#243;n web en python para pedirle a la [...]]]></description>
			<content:encoded><![CDATA[<p>S&eacute; que &quot;una de cal y una de arena&quot; significa una cosa buena y una cosa mala. El problema es que nunca he sabido si la cal es la mala, la arena la buena o a la viceinversa.</p>
<p>Hace tiempo coment&eacute; que iba a hacer una <a href="http://blog.chuidiang.com/2008/02/04/pythoneando/">peque&ntilde;a aplicaci&oacute;n web en <em>python</em></a> para pedirle a la gente que metiera cada mes el tiempo que dedica a cada uno de los proyectos, de forma que luego sacara en excel una tabla con dichos tiempos. Pues bien, ya est&aacute; hecha (un poco de aquella manera) y funcionando. As&iacute; que tras esta m&iacute;nima experiencia con <em>python</em>, ah&iacute; van un par de impresiones, una buena y otra mala, una de cal y otra de arena.</p>
<p><strong>La cosa mala</strong>: Me da la impresi&oacute;n, al igual que casi todos los lenguajes de script en los que defines las cosas sobre la marcha, que <em>python </em>es un lenguaje muy dif&iacute;cil de mantener. Al no definirse claramente los tipos, cuando en una funci&oacute;n o m&eacute;todo recibes par&aacute;metros, no tienes ni idea de lo que recibes, salvo que lo pongas muy bien comentado. De hecho, en eclipse con el <a href="http://pydev.sourceforge.net/">plugin pydev</a> para programar en <em>python</em>, el autocompletar que te muestra los nombres de atributos y m&eacute;todos de las clases, eclipse s&oacute;lo te puede mostrar aquellos atributos y clases que hayas usado previamente en el c&oacute;digo.</p>
<p>En <em>java</em>, por ejemplo, hay que declararlo todo, por lo que en cualquier momento sabes cada variable de qu&eacute; tipo es y qu&eacute; cosas tiene o a las que puedes llamar. No dependes (salvo para entenderlo mejor) de que el programador se haya acordado de comentar adecuadamente el c&oacute;digo.
</p>
<p><strong>La cosa buena</strong>: Precisamente esta falta de tipado y el poder meter una manzana donde se espera un higo me da la impresi&oacute;n que hace de <em>python </em>un lenguaje muy flexible, y pongo un ejemplo. Puesto que mi aplicaci&oacute;n es web, en casi todos los m&eacute;todos/funciones que he hecho recibo de par&aacute;metro un <em>Request Object</em>, que el mismo servidor web se encarga de pasarme y con el que tengo acceso a los par&aacute;metros de la petici&oacute;n http, con el que puedo escribir los tag html que se ver&aacute;n en el navegador, etc. Pues bien, para mis pruebas sin servidor web desde eclipse, me hice una clase <em>MiClase </em>con un m&eacute;todo <em>write()</em> similar al de <em>Request Object</em>, lo instanci&eacute; y llam&eacute; a mis m&eacute;todos a pelo pas&aacute;ndoles una instancia de <em>MiClase</em>. El c&oacute;digo &quot;trag&oacute;&quot; con eso perfectamente, y la salida html sal&iacute;a por donde dec&iacute;a <em>MiClase</em>, es decir, por pantalla normal.</p>
<p>En otros lenguajes como <em>java </em>habr&iacute;a sido necesario heredar del objeto en cuesti&oacute;n y sobreescribir los m&eacute;todos necesarios, quiz&aacute;s incluso declarar un constructor obligatorio con los par&aacute;metros raros que tuviera la clase padre. En <em>java </em>es aconsejable el uso de interfaces precisamente por este motivo, para poder cambiar una cosa por otra sin &quot;cargar&quot; con la clase original heredando de ella. En <em>python </em>no hacen falta interfaces. Basta con que la clase sustituta tenga los m&eacute;todos que se usen de la clase original.</p>
<p>Todo esto me hace preguntarme si lo del desarrollo r&aacute;pido de lenguajes como <em>python</em> se refiere a que no es necesario declarar los tipos (desde luego, eso ahorra tiempo, pero me parece un tiempo m&iacute;nimo respecto a todo el proceso o el tiempo que puedes perder en depuraci&oacute;n mientras decides si una variable es de un tipo u otro), o bien se debe a esta flexibilidad del lenguaje, que permite mezclar churras con merinas y todo funciona como debe.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chuidiang.com/2008/04/23/python-una-de-cal-y-una-de-arena/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

