<?xml-stylesheet type="text/xsl" href="http://ajayu.memi.umss.edu.bo/viborita/rss/rssstyles.xsl"?>
<rss version='2.0'   xmlns:dc='http://purl.org/dc/elements/1.1/'>
    <channel xml:base='http://ajayu.memi.umss.edu.bo/viborita/'>
        <title><![CDATA[Python : Actividad]]></title>
        <description><![CDATA[Actividad para  Python, alojada en Ajayu.]]></description>
        <generator>Elgg</generator>
        <link>http://ajayu.memi.umss.edu.bo/viborita/</link>        
        <item>
            <title><![CDATA[Google App Engine]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/weblog/google-app-engine</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/viborita/weblog/google-app-engine</guid>
            <pubDate>Thu, 10 Apr 2008 15:32:34 GMT</pubDate>
		<dc:subject><![CDATA[FLOSS]]></dc:subject>
		<dc:subject><![CDATA[Google]]></dc:subject>
		<dc:subject><![CDATA[Google App Engine]]></dc:subject>
		<dc:subject><![CDATA[Software Libre]]></dc:subject>
		<dc:subject><![CDATA[Software restringido]]></dc:subject>
		<dc:subject><![CDATA[WebApp]]></dc:subject>
		<dc:subject><![CDATA[competencia]]></dc:subject>
		<dc:subject><![CDATA[mod_python]]></dc:subject>
		<dc:subject><![CDATA[mod_wsgi]]></dc:subject>
		<dc:subject><![CDATA[Python]]></dc:subject>
            <description><![CDATA[<p>
 Manteniendo todavía una posición a medias tintas <img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-undecided.gif"  border="0"  alt="Undecided"  title="Undecided" /> respecto a lo que realmente busca el movimiento del software libre, Google volvió a liberar un producto libre de uso, pero <em>con claras restricciones de despliegue</em>. <a href="http://code.google.com/appengine/"  target="_blank"  title="Google App Engine"><em>Google App Engine</em></a> representa una alternativa tan tentadora que el propio autor de <a href="http://code.google.com/p/modwsgi/"  target="_blank"  title="mod_wsgi at code.google.com">mod_wsgi</a> (alternativa emergente al relegado <a href="http://www.modpython.org/"  target="_blank"  title="http://www.modpython.org/">mod_python</a>), Graham Dumpleton, publicó en su grupo de noticias la siguiente entrada:
</p>
<blockquote>
	<span>
	<a href="http://groups.google.com/group/modwsgi/browse_thread/thread/c55c7921e2abc9c4"  target="_blank"  title="... mod_wsgi obsolete ...">Google App Server makes mod_wsgi obsolete.</a></span>
</blockquote>
<p>
&nbsp;
</p>
<p>
 Lo cierto es que ambas alternativas competirían en cierto grado, y es lo que Graham alega que le quita parte del interés para continuar con el mismo ímpetu.
</p>
<p>
 ¿No te recuerda esto a las tropecientas distribuciones que hay de GNU/Linux?, todas alegado ser mejores que las anteriores, con sus cientos de fans que de repente se desvanecen con su popularidad<img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-yell.gif"  border="0"  alt="Yell"  title="Yell" />, mientras nosotros los desarrolladores peleamos continuamente por obtener una plataforma de despliegue estable y bajo nuestro control total. 
</p>
<p>
 Es totalmente irónico, mod_wsgi es un proyecto de software libre y estuvo hospedado en code.google.com, y ahora el autor tiene el sentimiento de que si implementa algunas de las ideas que tiene en la cabeza será acusado de plagiarlas de Google App Engine.
</p>
<p>
 No se puede negar que cuando se tiene a mano una alternativa mas tentadora, aunque renunciando a parte del control de esta, nos inclinaremos a ésta.
</p>
<p>
 Muchos proyectos se ahogan o al menos se detienen al emerger alternativas con mayor influencia<img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-cry.gif"  border="0"  alt="Cry"  title="Cry" />, ¿que se aprenden de estas lecciones?.
</p>
<p>
 Comparto el sentimiento de Grahan, y me imagino que si tu desarrollas software, algún día lo harás. ¡Que no te detenga!<img src="http://ajayu.memi.umss.edu.bo/_tinymce/jscripts/tiny_mce/plugins/emotions/images/smiley-wink.gif"  border="0"  alt="Wink"  title="Wink" />
</p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[Mercurial SCM: Instalador para Windows(r)]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/weblog/mercurial-scm-instalador-para-windows-r</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/viborita/weblog/mercurial-scm-instalador-para-windows-r</guid>
            <pubDate>Thu, 18 Oct 2007 14:57:39 GMT</pubDate>
		<dc:subject><![CDATA[installer]]></dc:subject>
		<dc:subject><![CDATA[instalador]]></dc:subject>
		<dc:subject><![CDATA[control de versiones distribuido]]></dc:subject>
		<dc:subject><![CDATA[control de versiones]]></dc:subject>
		<dc:subject><![CDATA[mercurial]]></dc:subject>
		<dc:subject><![CDATA[scm]]></dc:subject>
		<dc:subject><![CDATA[windows]]></dc:subject>
		<dc:subject><![CDATA[dvcs]]></dc:subject>
            <description><![CDATA[<p>
Hace un tiempo que un colaborador de mercurial realiza un empaquetado del mismo para usuarios windows.
</p>
<p>
El instalador consta de:
</p>
<ul>
	<li>Python 2.5.1 + Setuptools and PyWin32</li>
	<li>Mercurial <em>(of course)</em></li>
	<li>Putty/Plink <em>(ssh)</em><br />
	</li>
	<li>hgk + tclkit <em>(visor gráfico de las revisiones)</em></li>
	<li>KDiff3 <em> (diff/merge tool)</em> </li>
	<li>qct + pyqt4 <em>(gui commit tool)</em> </li>
	<li>gpyfm + pygtk <em>(diff/merge python tool) </em></li>
</ul>
<p>
Para quienes extrañan la <em>tortuga</em>, pueden probar <a href="http://tortoisehg.sourceforge.net/InstallingTortoiseHg.html">tortoisehg</a> <em>(semi-experimental)</em>
</p>
<p>
<strong>Más detalles</strong> | <a href="http://qct.sourceforge.net/Mercurial-NSI.html">http://qct.sourceforge.net/Mercurial-NSI.html</a>
</p>
<p>
<strong>Descarga </strong>| <a href="http://sourceforge.net/project/showfiles.php?group_id=188871&amp;package_id=245108">http://sourceforge.net/project/showfiles.php?group_id=188871&a</a> 
</p>
<p>
&nbsp;
</p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[Python 3000! (alpha 1)]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/weblog/python-3000-alpha-1</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/viborita/weblog/python-3000-alpha-1</guid>
            <pubDate>Fri, 31 Aug 2007 18:03:26 GMT</pubDate>
		<dc:subject><![CDATA[release]]></dc:subject>
		<dc:subject><![CDATA[python]]></dc:subject>
		<dc:subject><![CDATA[alpha]]></dc:subject>
		<dc:subject><![CDATA[3000]]></dc:subject>
            <description><![CDATA[<h5>Guido van Rossum (home page: <a href="http://www.python.org/%7Eguido/"  target="_blank">http://www.python.org/~guido/</a>)</h5>
<p>
<br />
The first Python 3000 release is out -- Python 3.0a1. Be the first one<br />
on your block to download it!<br />
<br />
<a href="http://python.org/download/releases/3.0/"  target="_blank">http://python.org/download/releases/3.0/</a><br />
</p>
<h5>Excerpts:<br />
</h5>
<p>
Python 3000 (a.k.a. "Py3k", and released as Python 3.0) is a new<br />
version of the language that is incompatible with the 2.x line of<br />
releases. The language is mostly the same, but many details,<br />
especially how built-in objects like dictionaries and strings work,<br />
have changed considerably, and a lot of deprecated features have<br />
finally been removed.<br />
<br />
This is an ongoing project; the cleanup isn't expected to be complete<br />
until 2008. In particular there are plans to reorganize the standard<br />
library namespace.<br />
<br />
The release plan is to have a series of alpha releases in 2007, beta<br />
releases in 2008, and a final release in August 2008. The alpha<br />
releases are primarily aimed at developers who want a sneak peek at<br />
the new langauge, especially those folks who plan to port their code<br />
to Python 3000. The hope is that by the time of the final release,<br />
many 3rd party packages will already be available in a 3.0-compatible<br />
form.<br />
</p>
<h5>More links:  </h5>
<ul>
	<li>Online docs: <a href="http://docs.python.org/dev/3.0/"  target="_blank">http://docs.python.org/dev/3.0/</a></li>
	<li>What's new: <a href="http://docs.python.org/dev/3.0/whatsnew/3.0.html"  target="_blank">http://docs.python.org/dev/3.0/whatsnew/3.0.html</a></li>
</ul>
<ul>
	<li>Source tar ball: <a href="http://python.org/ftp/python/3.0/Python-3.0a1.tgz"  target="_blank">http://python.org/ftp/python/3.0/Python-3.0a1.tgz</a></li>
	<li>Windows MSI installer: <a href="http://python.org/ftp/python/3.0/python-3.0a1.msi"  target="_blank">http://python.org/ftp/python/3.0/python-3.0a1.msi</a>  </li>
</ul>
<ul>
	<li>PEP 3000: <a href="http://python.org/dev/peps/pep-3000/"  target="_blank">http://python.org/dev/peps/pep-3000/</a></li>
	<li>Issue tracker: <a href="http://bugs.python.org/"  target="_blank">http://bugs.python.org/</a></li>
	<li>Py3k dev list: <a href="http://mail.python.org/mailman/listinfo/python-3000/"  target="_blank">http://mail.python.org/mailman/listinfo/python-3000/</a></li>
	<li>Conversion tool for Python 2.x code: <a href="http://svn.python.org/view/sandbox/trunk/2to3/"  target="_blank">http://svn.python.org/view/sandbox/trunk/2to3/</a></li>
</ul>]]></description>
        </item>
                
        <item>
            <title><![CDATA[The Python Papers, Volume 2 Issue 2]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/weblog/the-python-papers-volume-2-issue-2</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/viborita/weblog/the-python-papers-volume-2-issue-2</guid>
            <pubDate>Thu, 24 May 2007 16:58:25 GMT</pubDate>
		<dc:subject><![CDATA[journal]]></dc:subject>
		<dc:subject><![CDATA[paper]]></dc:subject>
		<dc:subject><![CDATA[papers]]></dc:subject>
		<dc:subject><![CDATA[revista]]></dc:subject>
		<dc:subject><![CDATA[viborita]]></dc:subject>
		<dc:subject><![CDATA[python]]></dc:subject>
            <description><![CDATA[<p><a href="http://pythonpapers.cgpublisher.com">Python Papers</a> es el esfuerzo de unos entusiastas apasionados por python. Donde se abarcan tem&aacute;ticas de interes para la industria y el mundo acad&eacute;mico.</p><p>En esta segunda edici&oacute;n del volumen 2, se puede destacar los siguientes art&iacute;culos:</p><ul><li>Python in Education</li><li>Python for Kids&nbsp;</li><li>MPD WebAMP</li><li>A Rails / Django Comparison&nbsp;</li></ul><p>Incluye informaci&oacute;n sobre la EuroCon 2007 y PyCon 2007 y mucho m&aacute;s en 54 p&aacute;ginas de puro contenido pythonico!</p><p>Pueden descargar la edici&oacute;n actual: <a href="http://pythonpapers.cgpublisher.com/product/pub.169/prod.6">The Python Papers, Volume 2 Issue 2, 2007</a>&nbsp;</p><p>O ediciones anteriores en su web oficial: <a href="http://pythonpapers.cgpublisher.com/ ">The Python Papers</a></p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[Google Calendar: Guia para programadores en python]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/weblog/google-calendar-guia-para-programadores-python</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/viborita/weblog/google-calendar-guia-para-programadores-python</guid>
            <pubDate>Wed, 25 Apr 2007 18:08:23 GMT</pubDate>
		<dc:subject><![CDATA[api]]></dc:subject>
		<dc:subject><![CDATA[calendar]]></dc:subject>
		<dc:subject><![CDATA[google]]></dc:subject>
		<dc:subject><![CDATA[python]]></dc:subject>
            <description><![CDATA[<p>Google acaba de publicar la gu&iacute;a para programadores en python de su api de <a href="http://calendar.google.com">Google Calendar</a>:</p><ul><li><a href="http://googledataapis.blogspot.com/2007/04/python-developers-guide-for-google.html">El anuncio en Google Data APIs</a></li><li><a href="http://code.google.com/apis/calendar/developers_guide_python.html">La gu&iacute;a para programadores en python</a> <br /></li></ul>Tambien tiene disponible la API para java, .net y php.]]></description>
        </item>
                
        <item>
            <title><![CDATA[Python en la revista "Computing Science & Engineering"]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/weblog/python-revista-computer-science-engineering</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/viborita/weblog/python-revista-computer-science-engineering</guid>
            <pubDate>Wed, 25 Apr 2007 18:02:46 GMT</pubDate>
		<dc:subject><![CDATA[revista]]></dc:subject>
		<dc:subject><![CDATA[python]]></dc:subject>
		<dc:subject><![CDATA[ieee]]></dc:subject>
		<dc:subject><![CDATA[cise]]></dc:subject>
		<dc:subject><![CDATA[artículos]]></dc:subject>
            <description><![CDATA[<p>La revista <a href="http://www.computer.org/cise">Computing Science &amp; Engineering</a>, es su <a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml">actual edici&oacute;n</a>, publica varios art&iacute;culos sobre python, desde computaci&oacute;n cient&iacute;fica hasta control robots. </p><p>Contenido:</p><ul><li><a href="http://csdl.computer.org/comp/mags/cs/2007/03/c3002.pdf">You&#39;re Recommending What?!</a> (PDF)</li><li><a href="http://csdl.computer.org/comp/mags/cs/2007/03/c3003.pdf">Computationally Complete</a> (PDF)</li><li><a href="http://csdl.computer.org/comp/mags/cs/2007/03/c3007.pdf">Guest Editor&#39;s Introduction: Python: Batteries Included</a> (PDF)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.58">Python for Scientific Computing</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.53">IPython: A System for Interactive Scientific Computing</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.48">Computational Physics Education with Python</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.60">Python Unleashed on Systems Biology</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.62">Reaching for the Stars with Python</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.44">A Python Module for Modeling and Control Design of Flexible Robots</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.59">Python in Nanophotonics Research</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.64">Using Python to Solve Partial Differential Equations</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.46">Analysis of Functional Magnetic Resonance Imaging in Python</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.57">Python for Internet GIS Applications</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.61">Quantum Chaos in Billiards</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.45">An Ice-Free Arctic? Opportunities for Computational Science</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.56">Python for Education: Computational Methods for Nonlinear Systems</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.43">A Partial Solution to Last Issue&#39;s Homework Assignment: Beetles, Cannibalism, and Chaos--Analyzing a Dynamical System Model</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.54">Making the Complex Simple</a> (Abstract)</li><li><a href="http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/mags/cs/&amp;toc=comp/mags/cs/2007/03/c3toc.xml&amp;DOI=10.1109/MCSE.2007.55">Matplotlib: A 2D Graphics Environment</a> (Abstract)</li><li><a href="http://csdl.computer.org/comp/mags/cs/2007/03/c3096.pdf">Wrong Again!</a> (PDF)</li></ul>]]></description>
        </item>
                
        <item>
            <title><![CDATA[Mercurial: más alla de subversión]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/weblog/mercurial-mas-alla-subversion</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/viborita/weblog/mercurial-mas-alla-subversion</guid>
            <pubDate>Thu, 19 Apr 2007 18:04:06 GMT</pubDate>
		<dc:subject><![CDATA[mercurial]]></dc:subject>
		<dc:subject><![CDATA[vcs]]></dc:subject>
		<dc:subject><![CDATA[subversion]]></dc:subject>
		<dc:subject><![CDATA[rcs]]></dc:subject>
            <description><![CDATA[<p>Tres art&iacute;culos para empezar con mercurial:</p><ul><li><a href="http://blog.rvburke.com/2006/08/25/control-de-versiones-con-mercurial-i-conceptos-generales/"  title="Conceptos generales">Conceptos generales</a></li><li><a href="http://blog.rvburke.com/2006/09/08/control-de-versiones-con-mercurial-ii-uso-de-mercurial/"  title="Uso de Mercurial">Uso de Mercurial</a></li><li><a href="http://blog.rvburke.com/2006/09/11/control-de-versiones-con-mercurial-iii-publicacion-de-proyectos/"  title="Publicaci&oacute;n de proyectos">Publicaci&oacute;n de proyectos</a></li></ul><p>Otra de las cosas que me gusta de mercurial, es lo sencillo que es publicar los proyectos, por ejemplo estan disponibles algunos repositorios p&uacute;blicos ac&aacute;: <a href="http://devel.memi.umss.edu.bo/rolando/hg/">http://devel.memi.umss.edu.bo/rolando/hg/</a>&nbsp;</p><p>Mercurial lo tengo corriendo como cgi, y con autentificaci&oacute;n, que se configura de manera trivial y ning&uacute;n problema con proxies ni nada.</p><p>Con subversi&oacute;n es mucho tr&aacute;mite, se tiene que integrar apache con svn a trav&eacute;s de WebDAV, y la autentificaci&oacute;n por los archivos ht*. Otro problema que tuvimos, son los proxies, que no soportan m&eacute;todos DAV entonces, si uno esta detr&aacute;s de un proxy, no se puede trabajar con un repositorio <strong><em>http</em></strong>, hay que usar <strong><em>https.</em></strong></p><p>Aparte de que subversi&oacute;n, para la mayor&iacute;a de sus operaciones, necesita conetarse al repositorio principal. </p><p>Con <em>hg view</em> se puede ver el grafo de evoluci&oacute;n, por ejemplo, del repositorio de ajayu:</p><p><img src="http://ajayu.memi.umss.edu.bo/rho/files/21/129/hg-ajayu-log.png"  border="0"  alt="mercurial ajayu"  title="mercurial ajayu"  width="433"  height="532" />&nbsp;</p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[Mercurial: (SCM | RCS | VCS)  Distribuido]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/weblog/mercurial-scm-rcs-vcs-distribuido</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/viborita/weblog/mercurial-scm-rcs-vcs-distribuido</guid>
            <pubDate>Wed, 31 Jan 2007 17:29:53 GMT</pubDate>
		<dc:subject><![CDATA[darcs]]></dc:subject>
		<dc:subject><![CDATA[distributed]]></dc:subject>
		<dc:subject><![CDATA[hg]]></dc:subject>
		<dc:subject><![CDATA[mercurial]]></dc:subject>
		<dc:subject><![CDATA[scm]]></dc:subject>
		<dc:subject><![CDATA[subversion]]></dc:subject>
		<dc:subject><![CDATA[svn]]></dc:subject>
		<dc:subject><![CDATA[vcs]]></dc:subject>
		<dc:subject><![CDATA[python]]></dc:subject>
            <description><![CDATA[<p><a href="http://www.selenic.com/mercurial/">Mercurial</a> es un sistema de control de versiones distribuido o descentralizado. Esta dise&ntilde;ado para ser eficiente, por ejemplo lo usa el proyecto <a href="http://www.xensource.com/">Xen</a> en su <a href="http://xenbits.xensource.com/">repositorio de c&oacute;digo</a> <a href="http://www.opensolaris.org/os/">OpenSolaris</a> como <a href="http://www.opensolaris.org/os/community/tools/scm/">scm preferido.</a> </p><p>&nbsp;Uno de los problemas que tiene, y experimente, con <a href="http://subversion.tigris.org/">subversion</a> es la dependencia con el repositorio central para la mayor&iacute;a de las operaciones. En cambio, con mercurial (hg) pueden existir infinitos repositorios.</p><p>&nbsp;Cuando uno hace la operaci&oacute;n <span style="font-style: italic">clone</span>, que ser&iacute;a como un checkout, se obtiene el repositorio completo con toda historia. A partir de ah&iacute; podemos hacer todas las dem&aacute;s operaciones (revert, commit, add, remove, etc) en el repositorio local, y cuando queramos actualizar o enviar nuestros cambios simplemente un <span style="font-style: italic">pull</span> o <span style="font-style: italic">push</span> respectivamente.<br /> </p><p>Puede trabajar mediante ssh o http, que a diferencia de subversi&oacute;n donde se tiene problemas con proxys por el soporte webdav, funciona como cgi (o <span style="font-style: italic">standalone) </span>pudiendo hacer los push/pull directamente.&nbsp;</p><p>Esta a disposici&oacute;n el libro no oficial de mercurial: <a href="http://www.red-bean.com/~bos/hgbook.pdf">Distributed Revision Control with Mercurial</a> [pdf]  </p><p>Ah!, esta hecho en python, y las partes cr&iacute;ticas en c. Las malas lenguas dicen que es m&aacute;s r&aacute;pido que <a href="http://abridgegame.org/darcs/">darcs</a>, pero tambien le&iacute; que las &uacute;ltimas versiones de darcs mejoraron bastante el rendimiento.&nbsp;</p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[[svn2hg.py] Convertir repositorio subversion a mercurial]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/weblog/svn2hg.py-convertir-repositorio-subversion-mercurial</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/viborita/weblog/svn2hg.py-convertir-repositorio-subversion-mercurial</guid>
            <pubDate>Tue, 30 Jan 2007 01:47:32 GMT</pubDate>
		<dc:subject><![CDATA[svn2hg]]></dc:subject>
		<dc:subject><![CDATA[tailor]]></dc:subject>
		<dc:subject><![CDATA[subversion]]></dc:subject>
		<dc:subject><![CDATA[script]]></dc:subject>
		<dc:subject><![CDATA[python]]></dc:subject>
		<dc:subject><![CDATA[mercurial]]></dc:subject>
		<dc:subject><![CDATA[mercuial to subversion]]></dc:subject>
		<dc:subject><![CDATA[convert svn to hg]]></dc:subject>
            <description><![CDATA[<p>El siguiente script permite tener sincronizado un repositorio mercurial con un subversion. Solo es, como se dir&iacute;a &quot;one-way&quot;.</p><p>&nbsp; <code class="python">#!/usr/bin/env python
# -*- coding: utf-8 -*-
# $Id$
# 
# (c) 2007 - Rolando Espinoza La Fuente &lt;darkrho@gmail.com&gt;
# Distributed under the BSD License
# Use at your own risk!
#
# This script make a mercurial repository from a svn one.
# Keeping revision history with authors and dates.
# Just convert one-way, svn to hg. If you want two-way conversion checkout tailor.
# 
#
# Requirements:
#&nbsp;&nbsp; - Mercurial of course ;)
#&nbsp;&nbsp; - pysvn subversion bindings
#&nbsp;&nbsp;&nbsp;&nbsp; Ubuntu users: apt-get install python-svn
#
# Based on:
#&nbsp;&nbsp; &lt;a href="http://www.selenic.com/mercurial/wiki/index.cgi/SubversionToMercurialSync"&gt;http://www.selenic.com/mercurial/wiki/index.cgi/SubversionToMe&lt;/a&gt;
#
# (use backups)
# Usage: svn2hg.py svnrepo
#
# Tested on Ubuntu Edgy against small repositories (&lt;20Mb)
# TODO: Need more testing
&#160;
import sys, os
&#160;
# really don&#39;t need cPickle
# TODO: take out cPickle
import cPickle
&#160;
import pysvn # svn functions
import mercurial.commands # hg functions
&#160;
class svn2hg:
&#160;
&nbsp;&nbsp;&nbsp; def __init__(self, args):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if len(args) != 1:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sys.stderr.write(&quot;[*] Error: have to provide one argumentn&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sys.exit(-1)
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not os.path.isdir(args[0]):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sys.stderr.write(&quot;[*] Error: argument must be a directoryn&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sys.exit(-1) 
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  self.path = os.path.realpath(args[0]) + os.path.sep
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  self.statefile = self.path + &#39;.svn2hg_state&#39;
&#160;
&nbsp;&nbsp;&nbsp; def _pysvnrev(self, rev):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return pysvn.Revision(pysvn.opt_revision_kind.number, rev)
&#160;
&nbsp;&nbsp;&nbsp; def savestate(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #TODO: try/catch errors
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if self.currev:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; cPickle.dump(self.currev, open(self.statefile,&#39;wb+&#39;))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  except:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; pass
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; def loadstate(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #TODO: try/catch errors
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if os.path.exists(self.statefile):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; self.currev = cPickle.load(open(self.statefile))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  except:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; self.currev = None
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; pass
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  self.currev = None
&#160;
&nbsp;&nbsp;&nbsp; def builddate(self, timestamp):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from datetime import datetime
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; import time
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format = &#39;%Y-%m-%d %H:%M&#39;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = datetime.fromtimestamp(timestamp)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return time.strftime(format, date.timetuple())
&#160;
&nbsp;&nbsp;&nbsp; def check_hg(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hgdir = self.path + &#39;.hg&#39;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hgignore = self.path + &#39;.hgignore&#39;
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not os.path.exists(hgdir):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  self.hg.dispatch([&#39;init&#39;,self.path])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ignoreme = &quot;.hgignoren.svnn&quot; + os.path.basename(self.statefile) + &#39;n&#39;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  open(hgignore, &#39;w&#39;).writelines(ignoreme)
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif not os.path.isdir(hgdir):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sys.stderr.write(&quot;[*] Error: unknown .hg directoryn&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sys.exit(-1)
&#160;
&nbsp;&nbsp;&nbsp; def check_svn(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svndir = self.path + &#39;.svn&#39;
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not os.path.exists(svndir) or not os.path.isdir(svndir):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sys.stderr.write(&quot;[*] Error: unknown .svn directoryn&quot;) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sys.exit(-1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; def run(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.loadstate()
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.svn = pysvn.Client()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.hg = mercurial.commands
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.check_hg()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.check_svn()
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # why?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # get local repo info to get the url
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.info = self.svn.info2(self.path, recurse=False)[0][1]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #self.url = self.info[&#39;repos_root_URL&#39;]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.url = self.info[&#39;URL&#39;]
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ## Get current revisions...
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #print &#39;+ Updating svn repos... &#39;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #self.newrev = self.svn.update(self.path)[0]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #self.newrev = self.newrev.number
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #print &#39;donen&#39;
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Getting last revision
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &#39;[+] Getting last revision number from remote repo... &#39;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.remoteinfo = self.svn.info2(self.url, recurse=False)[0][1]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.newrev = self.remoteinfo[&#39;last_changed_rev&#39;].number
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # newer revision?
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not self.currev == self.newrev:
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if not self.currev:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; self.currev = 0
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  print &#39;[+] Getting remote changelog from r%s up to r%s)... &#39; % (self.currev, self.newrev)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  svnlog = self.svn.log(self.url, self._pysvnrev(self.newrev), self._pysvnrev(self.currev))
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  # reverse to process from old to new
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  svnlog.reverse()
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  # fix, hg needs to &#39;be&#39; inside the repo
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  os.chdir(self.path)
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  # cset dict
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  #&nbsp;&nbsp; - author &quot;&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  #&nbsp;&nbsp; - changed_paths []
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  #&nbsp;&nbsp; - date timestamp
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  #&nbsp;&nbsp; - message &quot;&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  #&nbsp;&nbsp; - revision _pysvnrev
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  # process one by one
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  for cset in svnlog:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; # update to rev
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; localrev = self.svn.update(self.path, revision=cset[&#39;revision&#39;])[0]
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; if not cset[&#39;message&#39;]:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # dirty hack to prevent rollback on empty svn commit message 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cset[&#39;message&#39;] = cset[&#39;author&#39;]
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; # commit changes to hg
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; # mantain the same author, message and date of the changeset
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; print &#39;[+] Process revision r%s ...&#39; % (localrev.number)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; self.hg.dispatch([&#39;commit&#39;, &#39;-A&#39;, &#39;-m&#39;, cset[&#39;message&#39;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;-u&#39;, cset[&#39;author&#39;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;-d&#39;, self.builddate(cset[&#39;date&#39;])])
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  # save newrev as currev
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  self.currev = self.newrev
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  print &#39;[-] Nothing to do&#39;
&#160;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # save currev to a file for further updates
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.savestate()
&#160;
if __name__ == &#39;__main__&#39;:
&nbsp;&nbsp;&nbsp; main = svn2hg(sys.argv[1:])
&nbsp;&nbsp;&nbsp; sys.exit(main.run())
&#160;
&#160;</code>&nbsp;</p><p><a href="http://ajayu.memi.umss.edu.bo/rho/files/41/128/svn2hg.py">&nbsp;Download svn2hg.py</a></p>]]></description>
        </item>
                
        <item>
            <title><![CDATA[Generando números de Fibonacci en python]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/weblog/generando-nmeros-fibonacci-python</link>
            <guid isPermaLink="true">http://ajayu.memi.umss.edu.bo/viborita/weblog/generando-nmeros-fibonacci-python</guid>
            <pubDate>Mon, 11 Dec 2006 16:13:16 GMT</pubDate>
		<dc:subject><![CDATA[fibonacci]]></dc:subject>
		<dc:subject><![CDATA[python]]></dc:subject>
		<dc:subject><![CDATA[generadores]]></dc:subject>
		<dc:subject><![CDATA[numeros]]></dc:subject>
            <description><![CDATA[<p>rolando@rho:~/src/myrepo/hg$ python fibo.py -v<br />Trying:<br />&nbsp;&nbsp;&nbsp; [n for n in fibogen(-1)]<br />Expecting:<br />&nbsp;&nbsp;&nbsp; [None]<br />ok<br />Trying:<br />&nbsp;&nbsp;&nbsp; [n for n in fibogen(0)]<br />Expecting:<br />&nbsp;&nbsp;&nbsp; [0]<br />ok<br />Trying:<br />&nbsp;&nbsp;&nbsp; [n for n in fibogen(1)]<br />Expecting:<br />&nbsp;&nbsp;&nbsp; [1]<br />ok<br />Trying:<br />&nbsp;&nbsp;&nbsp; [n for n in fibogen(100)]<br />Expecting:<br />&nbsp;&nbsp;&nbsp; [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]<br />ok<br />Trying:<br />&nbsp;&nbsp;&nbsp; [n for n in fibogen(1000000000000)].pop()<br />Expecting:<br />&nbsp;&nbsp;&nbsp; 956722026041L<br />ok<br />2 items had no tests:<br />&nbsp;&nbsp;&nbsp; __main__<br />&nbsp;&nbsp;&nbsp; __main__._test<br />1 items passed all tests:<br />&nbsp;&nbsp; 5 tests in __main__.fibogen<br />5 tests in 3 items.<br />5 passed and 0 failed.<br />Test passed.<br /><br /></p><hr /><p>&nbsp;</p><p>#!/usr/bin/python</p><p># -*- coding: utf-8 -*-<br /># $Id: fibo.py,v 84ad6436f97a 2006/12/11 12:09:34 -0400 $<br /><br />def fibogen(n):<br />&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;Calcula los numeros de fibo hasta n <br />&nbsp;&nbsp;&nbsp; usando generadores<br /><br />&nbsp;&nbsp;&nbsp; fibogen(n) -&gt; generator<br /><br />&nbsp;&nbsp;&nbsp; #for testing in doctest ;-)<br /><br />&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; [n for n in fibogen(-1)]<br />&nbsp;&nbsp;&nbsp; [None]<br />&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; [n for n in fibogen(0)]<br />&nbsp;&nbsp;&nbsp; [0]<br />&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; [n for n in fibogen(1)]<br />&nbsp;&nbsp;&nbsp; [1]<br />&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; [n for n in fibogen(100)]<br />&nbsp;&nbsp;&nbsp; [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]<br /><br />&nbsp;&nbsp;&nbsp; #el numero fibo m&aacute;s cercano a 1000000000000<br /><br />&nbsp;&nbsp;&nbsp; &gt;&gt;&gt; [n for n in fibogen(1000000000000)].pop()<br />&nbsp;&nbsp;&nbsp; 956722026041L<br /><br />&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;<br />&nbsp;&nbsp;&nbsp; n_0, n_1 = 1, 1<br /><br />&nbsp;&nbsp;&nbsp; if n &lt; 0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield None<br />&nbsp;&nbsp;&nbsp; if n == 0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield 0<br />&nbsp;&nbsp;&nbsp; if n &gt; 0:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield n_0<br />&nbsp;&nbsp;&nbsp; if n &gt; 1:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield n_1<br /><br />&nbsp;&nbsp;&nbsp; n_n = n_1 + n_0<br />&nbsp;&nbsp;&nbsp; while n_n &lt; n:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield n_n<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n_0, n_1 = n_1, n_n<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n_n = n_1 + n_0<br /><br />def _test():<br />&nbsp;&nbsp;&nbsp; import doctest<br />&nbsp;&nbsp;&nbsp; doctest.testmod()<br /><br />if __name__ == &quot;__main__&quot;:<br />&nbsp;&nbsp;&nbsp; _test()<br /><br /></p><p>&nbsp;</p>]]></description>
        </item>
        
        <item>
            <title><![CDATA[Número fibo un millón]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/files/-1/46/fibo_unmillon.txt</link>
            <enclosure url="http://ajayu.memi.umss.edu.bo/viborita/files/-1/46/fibo_unmillon.txt" length="208988" type="text/plain" />
            <pubDate>Mon, 11 Dec 2006 22:22:39 GMT</pubDate>
            <description><![CDATA[fibonacci, número, unmillon]]></description>
        </item>
        <item>
            <title><![CDATA[Python 2.5 , Slide]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/files/-1/42/py25.pdf</link>
            <enclosure url="http://ajayu.memi.umss.edu.bo/viborita/files/-1/42/py25.pdf" length="937738" type="application/pdf" />
            <pubDate>Fri, 24 Nov 2006 19:58:21 GMT</pubDate>
		<dc:subject><![CDATA[better]]></dc:subject>
		<dc:subject><![CDATA[faster]]></dc:subject>
		<dc:subject><![CDATA[py2.5]]></dc:subject>
		<dc:subject><![CDATA[smarter]]></dc:subject>
		<dc:subject><![CDATA[python]]></dc:subject>
            <description><![CDATA[Presentación de Alex Martelli:
"Better, faster, smarter
 Python: yesterdey, today, tomorrow]]></description>
        </item>
        <item>
            <title><![CDATA[python logo]]></title>
            <link>http://ajayu.memi.umss.edu.bo/viborita/files/-1/12/python-logo.gif</link>
            <enclosure url="http://ajayu.memi.umss.edu.bo/viborita/files/-1/12/python-logo.gif" length="2549" type="image/gif" />
            <pubDate>Tue, 01 Aug 2006 04:25:48 GMT</pubDate>
            <description><![CDATA[python logo]]></description>
        </item>
    </channel>
</rss>