<?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>Varrojo@Linux &#187; Python</title>
	<atom:link href="http://varrojo.algorithmia.net/category/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://varrojo.algorithmia.net</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Tue, 23 Aug 2011 05:30:18 +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>Ceibal-Chess Beta 3 disponible</title>
		<link>http://varrojo.algorithmia.net/2010/12/09/ceibal-chess-beta-3-disponible/</link>
		<comments>http://varrojo.algorithmia.net/2010/12/09/ceibal-chess-beta-3-disponible/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 14:11:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ceibal-chess]]></category>
		<category><![CDATA[Computación Gráfica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://varrojo.algorithmia.net/?p=1159</guid>
		<description><![CDATA[Ha pasado algún tiempo, sin embargo me complace poder anunciar la disponibilidad de la Beta 3 de Ceibal-Chess para las plataformas XO, PC y Mac. La nueva Beta nos aproxima mucho a la tan esperada versión 1.0 que esperamos poder &#8230; <a href="http://varrojo.algorithmia.net/2010/12/09/ceibal-chess-beta-3-disponible/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ha pasado algún tiempo, sin embargo me complace poder anunciar la disponibilidad de la Beta 3 de Ceibal-Chess para las plataformas XO, PC y Mac. La nueva Beta nos aproxima mucho a la tan esperada versión 1.0 que esperamos poder liberar justo a tiempo para esta Navidad.<br />
<center><br />
<div id="attachment_1160" class="wp-caption aligncenter" style="width: 310px"><a href="http://varrojo.algorithmia.net/wp-content/uploads/2010/12/Ceibal-Chess-es_UY.png"><img class="size-medium wp-image-1160" title="Ceibal-Chess-es_UY" src="http://varrojo.algorithmia.net/wp-content/uploads/2010/12/Ceibal-Chess-es_UY-300x231.png" alt="Ceibal-Chess en Español de Uruguay" width="300" height="231" /></a><p class="wp-caption-text">Ceibal-Chess en Español de Uruguay</p></div><br />
</center><br />
Esta nueva versión de Ceibal-Chess incluye varias mejoras, concentrándose principalmente en las siguientes áreas:</p>
<ul>
<li>Mejor Integración con Sugar.</li>
<li>Internacionalización, soporte para Español e Inglés.</li>
<li>Mejoras Visuales*</li>
</ul>
<p><strong>Mejor Integración con Sugar</strong></p>
<p>La nueva versión hace uso del excelente paquete &#8220;sugargame&#8221; para mejorar significativamente la integración entre Pygame y Sugar.</p>
<p>La Beta 3 permite acceder al Marco y terminar/reanudar la Actividad desde la Vista Personal. También se resuelve el problema de &#8220;ícono muerto&#8221; en el escritorio tras ejecutar Ceibal-Chess, el cual prevenía que la Actividad pudiera iniciarse dos veces consecutivas.</p>
<p><strong>Internacionalización</strong></p>
<p>Ceibal-Chess soporta ahora internacionalización de Strings y la nueva versión se distribuye con soporte para los idiomas Español e Inglés. Contribuciones para otros idiomas serán bienvenidas, si alguien se encuentra interesado.</p>
<p>Ceibal-Chess debería detectar automáticamente el idioma en el cual se encuentra la plataforma y seleccionar su propio idioma en función de dicho entorno. En caso de que un entorno no sea soportado, se revertirá a Inglés automaticamente.</p>
<p><strong>Mejoras Visuales</strong></p>
<p>Ceibal-Chess incluye un efecto de transición entre estados del tablero (mediante Alpha Blending). Este efecto requiere Pygame 1.8 o superior. En plataformas donde se dispone de Pygame 1.7, este efecto se encontrará dehabilitado y un mensaje será escrito en el Log.</p>
<p><strong>Descarga</strong></p>
<p>Pasos para XO:</p>
<ol>
<li>Remover la Actividad &#8220;Ajedrez&#8221;, si esta se encuentra instalada y reiniciar Sugar (Ctrl + Alt + Erase).</li>
<li>Iniciar la Actividad &#8220;Navegar&#8221;, dirigirse a http://www.ceibaljam.org y hacer click en &#8220;Descargas&#8221;.</li>
<li>Identificar la fila correspondiente a &#8220;Ceibal-Chess&#8221; y descargar el bundle &#8220;ajedrez.xo&#8221;. Una vez descargado, seleccionar &#8220;Abrir&#8221; en el navegador.</li>
</ol>
<p>Pasos para otras plataformas (Windows, Linux, Mac con Python y Pygame):</p>
<ol>
<li>Iniciar el navegador Web e ingresar la siguiente dirección: <a href="http://www.algorithmia.net/software/download.py?dl=ceibal-chess-beta.zip">http://www.algorithmia.net/software/download.py?dl=ceibal-chess-beta.zip</a></li>
<li>Descomprimir el zip y dirigirse al Directorio &#8220;ceibal-chess-beta3&#8243;.</li>
<li>Ejecutar el script &#8220;main.py&#8221;.</li>
</ol>
<p><strong>Reportar Errores</strong></p>
<p>Como siempre, su feedback es invaluable para corregir problemas y asegurarnos que Ceibal-Chess se encuentre en un buen estado para alcanzar la versión 1.0.</p>
<p>Para reportar errores, por favor utilizar el siguiente formulario: <a href="http://code.google.com/p/ceibal-chess/issues/list">http://code.google.com/p/ceibal-chess/issues/list</a></p>
]]></content:encoded>
			<wfw:commentRss>http://varrojo.algorithmia.net/2010/12/09/ceibal-chess-beta-3-disponible/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Diferencia de Conjuntos con programación funcional de Python</title>
		<link>http://varrojo.algorithmia.net/2010/07/01/diferencia-de-conjunto-en-python/</link>
		<comments>http://varrojo.algorithmia.net/2010/07/01/diferencia-de-conjunto-en-python/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 15:00:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://varrojo.algorithmia.net/?p=880</guid>
		<description><![CDATA[Supongamos que tenemos dos listas a y b de Python y queremos calcular una lista d tal que: d = a &#8211; b #diferencia de conjuntos. Utilizando las construcciones funcionales de Python (en particular List Comprehension), resulta muy sencillo: d &#8230; <a href="http://varrojo.algorithmia.net/2010/07/01/diferencia-de-conjunto-en-python/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Supongamos que tenemos dos listas <strong>a </strong>y <strong>b</strong> de Python y queremos calcular una lista <strong>d</strong> tal que:</p>
<p>d = a &#8211; b #diferencia de conjuntos.</p>
<p>Utilizando las construcciones funcionales de Python (en particular List Comprehension), resulta muy sencillo:</p>
<pre class="brush:python">
d = [x for x in a if x not in b]
</pre>
<p>Vean como la construcción del lenguaje prácticamente se lee como la definición formal de diferencia de conjuntos: &#8220;<strong>d</strong> es igual a <em>x</em> para todo <em>x</em> que pertenece a <strong>a </strong>y <em>x</em> no pertenece a <strong>b</strong>&#8220;.</p>
<p>Si comparamos esto con el equivalente imperativo, es fácil ver que estamos expresando mediante el lenguaje lo que <em>queremos</em> que se haga y no <em>cómo</em> hacerlo exactamente.</p>
<p>Esta sutileza nos permite ahorrar mucho código y ser más productivos desarrollando aplicaciones cuando no es crítico el mantener el control sobre cada instrucción exacta a ser ejecutada.</p>
<p>¿Qué otros ejemplos interesantes de manejo de listas sueles utilizar?</p>
]]></content:encoded>
			<wfw:commentRss>http://varrojo.algorithmia.net/2010/07/01/diferencia-de-conjunto-en-python/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hoja de Helecho en Cython</title>
		<link>http://varrojo.algorithmia.net/2010/06/24/hoja-de-helecho-en-cython/</link>
		<comments>http://varrojo.algorithmia.net/2010/06/24/hoja-de-helecho-en-cython/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 20:31:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computación Gráfica]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://varrojo.algorithmia.net/?p=851</guid>
		<description><![CDATA[A modo de prueba de concepto aproveché un ratito libre para implementar uno de los trabajos obligatorios que asignamos a los alumnos en una de mis materias en Facultad. El trabajo consiste en desarrollar un programa que dibuja un conjunto &#8230; <a href="http://varrojo.algorithmia.net/2010/06/24/hoja-de-helecho-en-cython/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A modo de prueba de concepto aproveché un ratito libre para implementar uno de los trabajos obligatorios que asignamos a los alumnos en una de mis materias en Facultad.</p>
<p>El trabajo consiste en desarrollar un programa que dibuja un conjunto de Fractales mediante un sistema iterativo de funciones. La siguiente imagen muestra el programa corriendo para una configuración que corresponde a una Hoja de Helecho:<br />
<center><br />
<div id="attachment_852" class="wp-caption aligncenter" style="width: 308px"><a href="http://varrojo.algorithmia.net/wp-content/uploads/2010/06/helecho.png"><img class="size-medium wp-image-852" title="Hoja de Helecho" src="http://varrojo.algorithmia.net/wp-content/uploads/2010/06/helecho-298x300.png" alt="Hoja de Helecho" width="298" height="300" /></a><p class="wp-caption-text">Hoja de Helecho. Los cálculos del fractal fueron realizados en Cython y el resultado fue dibujado con Pygame. </p></div><br />
</center><br />
La novedad de esta aplicación consistió en que si bien la prototipé en Python, me tomé un momento para portarla a Cython, con el fin de determinar si podía llegar a notar una mejora en la performance. Cython no es más que una variación de Python que permite anotar las variables con tipos de datos C. En vez de generar código interpretado, Cython compila el módulo a C y crea una biblioteca compartida.</p>
<p>La optimización principal para el Fractal consistió en reemplazar el uso de una lista de Python de 10.000 elementos (utilizada para almacenar los puntos calculados) por un <em>array</em> de C. Por menos que esto parezca, el evitar tener que usar la lista de Python mejoró la performance general del cálculo en un 11%, aproximadamente.</p>
<p>Dentro de todo, 11% no está mal, sobre todo si tenemos en cuenta que el único cambio fue la declaración de la lista (y escribir un archivo de <em>setup</em>). El compilador de Cython se encargó del resto.</p>
<p>Creo que por más que se encuentre en sus primeras versiones, Cython ofrece mucho potencial para optimizar aplicaciones Python. Todo lo que uno debe hacer es dedicar algo de tiempo para encontrar las porciones críticas en performance en su código, anotar las variables apropiadas con tipos de datos C, y dejar que Cython se encargue del resto.</p>
]]></content:encoded>
			<wfw:commentRss>http://varrojo.algorithmia.net/2010/06/24/hoja-de-helecho-en-cython/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Poppler: una biblioteca para trabajar con PDFs</title>
		<link>http://varrojo.algorithmia.net/2010/04/09/poppler-una-biblioteca-para-trabajar-con-pdfs/</link>
		<comments>http://varrojo.algorithmia.net/2010/04/09/poppler-una-biblioteca-para-trabajar-con-pdfs/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 16:01:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://varrojo.algorithmia.net/?p=714</guid>
		<description><![CDATA[Ayer me enteraba a través de la lista de coordinación del FLISoL sobre un software que permite realizar presentaciones en PDF utilizando efectos estilo Keynote. Este programa, denominado pdfcube, aparentemente utilizaba OpenGL para dibujar la presentación y los efectos de &#8230; <a href="http://varrojo.algorithmia.net/2010/04/09/poppler-una-biblioteca-para-trabajar-con-pdfs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ayer me enteraba a través de la lista de coordinación del FLISoL sobre un software que permite realizar presentaciones en PDF utilizando efectos estilo Keynote.</p>
<p>Este programa, denominado pdfcube, aparentemente utilizaba OpenGL para dibujar la presentación y los efectos de transición, por lo cual me surgió la duda de cómo harían para convertir las páginas del documento en Texturas que pudieran aplicarse sobre objetos 3D.</p>
<p>Según aprendí leyendo el código fuente (el programa es de licenciamiento libre), aparentemente lo que se hace es abrir el documento utilizando una biblioteca que permite extraer información del PDF mismo, en particular, permite renderizar las páginas a un Pixmap, que luego puede ser convertido en una Textura. Esta biblioteca se denomina Poppler (<a href="http://poppler.freedesktop.org/">sitio oficial</a>), en honor a unos bichos de la serie de Fox: Futurama.</p>
<p>Investigando un poco más sobre esta biblioteca descubrí que se trata de un fork del proyecto xpdf-3.0 y es la biblioteca de rendering que utilizan varios programas conocidos como Evince, Okular y TeXworks, entre otros.</p>
<p>La biblioteca, que está desarrollada en C, tiene un wrapper sencillo para Python. Les dejo un pequeño snippet para que vean algunas cosas básicas que se puede hacer con ella.</p>
<pre class="brush:python">#!/usr/bin/python

import sys
import poppler

def dump_props(fileuri):
	try:
		doc = poppler.document_new_from_file(fileuri, "")
	except Exception, ex:
		print "Error:", ex
		return

	print "Title: %s\nVersion: %s\nAuthor: %s\nCreated using: %s, %s" %\
		(doc.get_properties("title")[0], \
		doc.get_properties("format")[0], \
		doc.get_properties("author")[0], \
		doc.get_properties("producer")[0], \
		doc.get_properties("creator")[0])

if __name__ == "__main__":
	if len(sys.argv) &gt; 1:
		dump_props(sys.argv[1])
	else:
		print "Usage: %s &lt;URI&gt;" % sys.argv[0]
		exit(-1)</pre>
<p>La salida para una corrida de prueba sería:</p>
<pre class="brush:bash">./poppertest.py file:///home/ale/Downloads/GLSLangSpec.4.00.7.pdf

Title: The OpenGL Shading Language
Version: PDF-1.4
Author: John Kessenich
Created using: OpenOffice.org 2.0, Writer</pre>
<p>Espero que a alguien le sirva! Happy Poppler-ing!</p>
]]></content:encoded>
			<wfw:commentRss>http://varrojo.algorithmia.net/2010/04/09/poppler-una-biblioteca-para-trabajar-con-pdfs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ceibal-Chess: mejora significativa de desempeño</title>
		<link>http://varrojo.algorithmia.net/2010/01/17/ceibal-chess-mejora-significativa-de-desempeno/</link>
		<comments>http://varrojo.algorithmia.net/2010/01/17/ceibal-chess-mejora-significativa-de-desempeno/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 14:30:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ceibal-chess]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://varrojo.algorithmia.net/?p=523</guid>
		<description><![CDATA[Realizando algunas pruebas básicas de profiling de Ceibal-Chess, noté que por algún extraño motivo el subproceso creado para ejecutar el motor de ajedrez (gnuchess) consumía una cantidad impresionante de CPU. Inmediatamente esto me llamó la atención, debido a que el &#8230; <a href="http://varrojo.algorithmia.net/2010/01/17/ceibal-chess-mejora-significativa-de-desempeno/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Realizando algunas pruebas básicas de profiling de Ceibal-Chess, noté que por algún extraño motivo el subproceso creado para ejecutar el motor de ajedrez (<em>gnuchess</em>) consumía una cantidad impresionante de CPU.</p>
<p>Inmediatamente esto me llamó la atención, debido a que el proceso estaba siendo configurado en modo &#8220;easy&#8221;, que deshabilita que se planifiquen jugadas durante el turno del usuario. Para peor, invocando <em>gnuchess</em> manualmente desde la terminal no provocaba este efecto.</p>
<p>Definitivamente se trataba de un tema a investigar en detalle.</p>
<p>Tras probar distintas invocaciones y parámetros, pude determinar que el problema resultó ser en la forma en que se creaba el subproceso.</p>
<p>Nuestra invocación era realizada aproximadamente de la siguiente forma:</p>
<pre class="brush:python">from subprocess import Popen, PIPE
...
#Mal!!:
proc = Popen(args=["-e", "-x"], executable="/ruta/absoluta/a/gnuchess-linux", stdin=PIPE, stdout=PIPE, close_fds=True)</pre>
<p>Resulta ser una sutileza, pero no se está brindando la ruta al ejecutable como primer argumento y si bien la llamada funciona de todos modos y el proceso es creado, tras comenzar a escribirle en su entrada estándar (stdin), éste comienza a utilizar el 100% del procesador.</p>
<p>Cambiar la llamada a <strong>Popen</strong> de forma tal que incluya el ejecutable como primer elemento de la lista <em>args</em> misteriosamente resuelve este problema.</p>
<p>Al probar el cambio sobre la XO, no solo se nota que el desempeño de la aplicación es mucho mejor (la interfaz de usuario tiene ahora más tiempo de CPU disponible), <del datetime="2010-01-17T15:00:16+00:00">sino que además se solucionó un problema con un molesto icono que quedaba trancado en la vista <em>home</em> de Sugar</del>.</p>
<p>Los cambios ya se encuentran commitieados al repositorio y próximamente estaremos actualizando las versiones disponibles en Algorithmia y el sitio oficial del <a href="http://www.ceibaljam.org">CeibalJam</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://varrojo.algorithmia.net/2010/01/17/ceibal-chess-mejora-significativa-de-desempeno/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trabajando con PyOpenGL y VBOs</title>
		<link>http://varrojo.algorithmia.net/2010/01/15/trabajando-con-pyopengl-y-vbos/</link>
		<comments>http://varrojo.algorithmia.net/2010/01/15/trabajando-con-pyopengl-y-vbos/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 17:36:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computación Gráfica]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://varrojo.algorithmia.net/?p=511</guid>
		<description><![CDATA[En estos últimos días he estado trabajando sobre un renderer para un artículo que estoy produciendo para una importante revista de Linux. El renderer debía dibujar un campo de vectores discretizado, con dimensiones variables de 16&#215;16, 32&#215;32, 64&#215;64 y hasta &#8230; <a href="http://varrojo.algorithmia.net/2010/01/15/trabajando-con-pyopengl-y-vbos/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En estos últimos días he estado trabajando sobre un renderer para un artículo que estoy produciendo para una importante revista de Linux. El renderer debía dibujar un campo de vectores discretizado, con dimensiones variables de 16&#215;16, 32&#215;32, 64&#215;64 y hasta 96&#215;96 (o más, dependiendo de la cantidad de memoria de video disponible).</p>
<p>Cada elemento en el campo de vectores es representado visualmente por un cuadrado (piensa en una baldoza) y una flecha (que representa la dirección). Cada cuadrado se forma con dos triángulos y cada flecha con tres, por lo cual para un campo de vectores de tan solo 16&#215;16 estaríamos dibujando 1.280 triángulos, mientras que para un campo más grande de 64&#215;64 estaríamos trabajando con un total de 20.480 triángulos.<br />
<center><br />
<div id="attachment_513" class="wp-caption aligncenter" style="width: 108px"><a href=" http://pyopengl.sourceforge.net"><img class="size-full wp-image-513" title="PyOpenGL" src="http://varrojo.algorithmia.net/wp-content/uploads/2010/01/pyopengl.gif" alt="PyOpenGL Logo" width="98" height="128" /></a><p class="wp-caption-text">Logo de PyOpenGL</p></div><br />
</center><br />
Desarrollando en Python y utilizando PyOpenGL 3.0 en Modo Inmediato, rápidamente se podía notar como la API literalmente se ahogaba con el grán volumen de triángulos a dibujar. Es por esto por lo cual decidí reimplementar el código de rendering usando Vertex Buffer Objects (VBO&#8217;s) de OpenGL.</p>
<p>La diferencia en desempeño fue increible. Con un mediano trabajo de refactoring logré obtener una aceleración que permitía redibujar la escena mucho más rápido, tanto más que no me alcanza el refresh rate del monitor para dibujar todos los cuadros que son generados por segundo.</p>
<p>Convertir el código de rendering de Modo Inmediato de OpenGL a VBO&#8217;s no fue tarea sencilla sin embargo. El problema fundamental consistió en que para trabajar con VBO&#8217;s se deben realizar transferencias de porciones de memoria RAM a buffers en memoria de video, por lo cual es necesario realizar un manejo bastante importante de punteros. Manejar punteros no es problema desde un lenguaje como C o C++, pero se puede llegar a complicar cuando se está trabajando en Python.</p>
<p>El primer problema consistía en convertir las listas de vertices y colores de listas Python a arrays contínuos en memoria. Para esto (y mucho a mi pesar) debí utilizar <em>NumPy.array</em>, lo cual solucionó el problema, pero al costo de agregar una nueva dependencia al código: numpy. Lo bueno es que teniendo un NumPy array, resulta sencillo generar los tipos adecuados para que los datos lleguen correctamente a la memoria de video. El siguiente snippet muestra la llamada a la función de copia de memoria:</p>
<pre class="brush:python">from OpenGL.GL import *
from OpenGL.arrays import ArrayDatatype as ADT
import numpy
...
array = numpy.array(vertices_and_colors, dtype=numpy.float32)
glBufferData(GL_ARRAY_BUFFER, ADT.arrayByteCount(array), ADT.voidDataPointer(array), GL_STATIC_DRAW)</pre>
<p>El segundo problema que tuve consitió en cómo indicarle a PyOpenGL los offsets dentro del buffer. El buffer de memoria que estoy utilizando está cargado tanto con datos de vértices como de colores, por lo cual debía poder especificar dónde empiezan los vértices y dónde empiezan los colores (en offset de bytes) a la API. Si bien esto parecía sencillo utilizando ctypes, se complicó bastante debido a un bug en PyOpenGL 3.0. La solución fué descargar el código de la Beta de PyOpenGL 3.0.1, compilarlo y hacer uso de ésta biblioteca en vez de la versión disponible en los repositorios de Ubuntu y Macports (actualmente ambas presentan este bug).</p>
<p>Una vez actualizada la biblioteca, crear un puntero genérico (void *) resultó trivial, como se muestra a continuación.</p>
<pre class="brush:python">from ctypes import c_void_p
...
glColorPointer(3, GL_FLOAT, 0, c_void_p(colors_offset))</pre>
<p>Quiero mencionar que cuando escribí en la lista de usuarios de PyOpenGL preguntando por este último problema, quien me respondió que en realidad se trataba de un bug en la biblioteca no fué ni más ni menos que el autor de la misma (!)</p>
]]></content:encoded>
			<wfw:commentRss>http://varrojo.algorithmia.net/2010/01/15/trabajando-con-pyopengl-y-vbos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Herramientas y Técnicas para el Desarrollo de Aplicaciones Libres</title>
		<link>http://varrojo.algorithmia.net/2009/04/27/herramientas-y-tecnicas-para-el-desarrollo-de-aplicaciones-libres/</link>
		<comments>http://varrojo.algorithmia.net/2009/04/27/herramientas-y-tecnicas-para-el-desarrollo-de-aplicaciones-libres/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 01:55:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Computación Gráfica]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Free & Open]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tutoriales]]></category>

		<guid isPermaLink="false">http://varrojo.linuxuruguay.org/?p=230</guid>
		<description><![CDATA[El pasado Sábado 26 de Abril se llevó acabo el Festival Latinoamericano de Instalación de Software Libre (FLISoL) donde realizamos la presentación titulada &#8220;Herramientas y Técnicas para el Desarrollo de Aplicaciones Libres&#8221; en el Auditorio de la Torre de las &#8230; <a href="http://varrojo.algorithmia.net/2009/04/27/herramientas-y-tecnicas-para-el-desarrollo-de-aplicaciones-libres/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>El pasado Sábado 26 de Abril se llevó acabo el <a href="http://www.flisol.info/FLISOL2009/Uruguay/Montevideo" target="_blank">Festival Latinoamericano de Instalación de Software Libre</a> (FLISoL) donde realizamos la presentación titulada &#8220;Herramientas y Técnicas para el Desarrollo de Aplicaciones Libres&#8221; en el Auditorio de la Torre de las Telecomuncaciones de Antel. Esta tuvo por objetivo presentar conceptos y herramientas que un desarrollador puede aprovechar para el desarrollo de un proyecto de Software Libre.</p>
<p>La presentación comenzó con una introducción al por qué iniciar un nuevo proyecto, las ventajas desde el punto de vista del desarrollador de hacer que este sea Software Libre u Open Source, y luego continuamos presentando distintas herramientas para el desarrollo. Dentro de este marco se habló de wikis, Software de gestión de la configuración (svn, hg), Issue Trackers y lenguajes de programación, en particular se realizó una pequeña introducción a Python (aunque nada cerca de la gran presentación de <a href="http://www.marcelor.com/" target="_blank">Marcelo Ramos</a> en el Anfiteatro).</p>
<p>Durante la parte interactiva de la presentación se desarrollaron varios scripts que pueden resultar de utilidad a alguien que recién esté comenzando en python y le interese la parte de gráficos 2D con PyGame y 3D con OpenGL.</p>
<p>Los ejemplos, junto con las trasparencias de la presentación pueden descargarse del siguiente enlace:</p>
<p><a href="http://www.algorithmia.net/software/download.py?dl=flisol09.zip">http://www.algorithmia.net/software/download.py?dl=flisol09.zip</a></p>
<p>Dentro del archivo se incluyen los siguientes ejemplos:</p>
<ul>
<li><strong>penguin.py</strong> &#8211; ejemplo sencillo que muestra como crear una ventana con PyGame y dibujar un png sobre ella.</li>
<li><strong>demo.py</strong> &#8211; ejemplo sencillo 2D de animación basada en el tiempo (gracias a Gabriel Eirea).</li>
<li><strong>holamundo.py</strong> &#8211; ejemplo intermedio que muestra como dibujar texto con PyGame.</li>
<li><strong>gl.py</strong> &#8211; ejemplo avanzado que muestra como integrar OpenGL con PyGame para dibujar una priámide 3D y animarla.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://varrojo.algorithmia.net/2009/04/27/herramientas-y-tecnicas-para-el-desarrollo-de-aplicaciones-libres/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

