Angel Guzman Maeso | 9 Oct 19:32 2010
Picon

Acceder a constantes de bibliotecas C con Python usando ctypes

Hola lista,

Estoy trasteando un poco con la biblioteca ctypes para usar bibliotecas compartidas escritas en C desde Python.

No he tenido problemas hasta ahora para usarla, salvo cuando necesito acceder a constantes que posea la biblioteca.

Por ejemplo, usando la biblioteca de MPI en C (ya se que existen implementaciones en python, pero quiero utilizarla nativamente) necesito acceder a
una constanet llamada MPI_COMM_WORLD

En la documentación oficial: http://docs.python.org/library/ctypes.html#accessing-values-exported-from-dlls
solo se muestra un pequeño ejemplo para acceder a una constante, pero es de la propia python C api y no he sabido trasladar el ejemplo o como usarlo para otra biblioteca.

Este es mi código de ejemplo (tambien en pastebin: http://pastebin.com/zcmtQ4G6 ):
#!/usr/bin/python

import sys

try:
    from ctypes import CDLL, pythonapi, c_int, POINTER, c_char_p, byref, RTLD_GLOBAL
    from ctypes.util import find_library
except ImportError:
    print 'ERROR! La libreria *ctypes* para Python no esta disponible!'
    sys.exit(-1)

libc = CDLL('libc.so.6')

print libc._handle, libc._name

f = pythonapi.Py_GetArgcArgv
argc = c_int()
argv = POINTER(c_char_p)()
f(byref(argc), byref(argv))

mpi = CDLL(find_library('mpi'), RTLD_GLOBAL)
print mpi._handle, mpi._name

myrank = c_int();
nprocs = c_int();

opt_flag = c_int.in_dll(pythonapi, "MPI_COMM_WORLD") # Aqui falla al acceder a MPI_COMM_WORLD

#mpi.MPI_Comm_size(mpi.MPI_COMM_WORLD, byref(nprocs)); # Lo necesito aqui, pero no funciona MPI_COMM_WORLD

libc.printf("Hello from processor %d of %d\n", myrank, nprocs);

mpi.MPI_Finalize()

--------

En teoria se accede con el método in_dll() pero no consigo extraer el valor y me falla con un:
Traceback (most recent call last):
  File "memory.py", line 36, in <module>
    opt_flag = c_int.in_dll(pythonapi, "MPI_COMM_WORLD")
ValueError: python: undefined symbol: MPI_COMM_WORLD

Espero vuestra ayuda.

Saludos

--
Blog: www.shakaran.net
Tivion: un simple reproductor de canales streaming de TV www.shakaran.net/blog/tivion
Mi juego de rol online: www.apogeus.es & www.apogeus.es/ao
Hosting económico y profesional: www.quijost.com

<div><p>Hola lista,<br><br>Estoy trasteando un poco con la biblioteca ctypes para usar bibliotecas compartidas escritas en C desde Python.<br><br>No he tenido problemas hasta ahora para usarla, salvo cuando necesito acceder a constantes que posea la biblioteca.<br><br>Por ejemplo, usando la biblioteca de MPI en C (ya se que existen implementaciones en python, pero quiero utilizarla nativamente) necesito acceder a<br>una constanet llamada MPI_COMM_WORLD<br><br>En la documentaci&oacute;n oficial: <a href="http://docs.python.org/library/ctypes.html#accessing-values-exported-from-dlls">http://docs.python.org/library/ctypes.html#accessing-values-exported-from-dlls</a><br>

solo se muestra un peque&ntilde;o ejemplo para acceder a una constante, pero es de la propia python C api y no he sabido trasladar el ejemplo o como usarlo para otra biblioteca.<br><br>Este es mi c&oacute;digo de ejemplo (tambien en pastebin: <a href="http://pastebin.com/zcmtQ4G6">http://pastebin.com/zcmtQ4G6</a> ):<br>

#!/usr/bin/python<br><br>import sys<br><br>try:<br>&nbsp;&nbsp;&nbsp; from ctypes import CDLL, pythonapi, c_int, POINTER, c_char_p, byref, RTLD_GLOBAL<br>&nbsp;&nbsp;&nbsp; from ctypes.util import find_library<br>except ImportError:<br>&nbsp;&nbsp;&nbsp; print 'ERROR! La libreria *ctypes* para Python no esta disponible!'<br>

&nbsp;&nbsp;&nbsp; sys.exit(-1)<br><br>libc = CDLL('libc.so.6')<br><br>print libc._handle, libc._name<br><br>f = pythonapi.Py_GetArgcArgv<br>argc = c_int()<br>argv = POINTER(c_char_p)()<br>f(byref(argc), byref(argv))<br><br>mpi = CDLL(find_library('mpi'), RTLD_GLOBAL)<br>

print mpi._handle, mpi._name<br><br>myrank = c_int();<br>nprocs = c_int();<br><br>opt_flag = c_int.in_dll(pythonapi, "MPI_COMM_WORLD") # Aqui falla al acceder a MPI_COMM_WORLD<br><br>#mpi.MPI_Comm_size(mpi.MPI_COMM_WORLD, byref(nprocs)); # Lo necesito aqui, pero no funciona MPI_COMM_WORLD<br><br>libc.printf("Hello from processor %d of %d\n", myrank, nprocs);<br><br>mpi.MPI_Finalize() <br clear="all"><br>--------<br><br>En teoria se accede con el m&eacute;todo in_dll() pero no consigo extraer el valor y me falla con un:<br>

Traceback (most recent call last):<br>&nbsp; File "memory.py", line 36, in &lt;module&gt;<br>&nbsp;&nbsp;&nbsp; opt_flag = c_int.in_dll(pythonapi, "MPI_COMM_WORLD")<br>ValueError: python: undefined symbol: MPI_COMM_WORLD<br><br>Espero vuestra ayuda.<br><br>Saludos<br><br>-- <br>Blog: <a href="http://www.shakaran.net" target="_blank">www.shakaran.net</a><br>Tivion: un simple reproductor de canales streaming de TV <a href="http://www.shakaran.net/blog/tivion" target="_blank">www.shakaran.net/blog/tivion</a><br>Mi juego de rol online: <a href="http://www.apogeus.es" target="_blank">www.apogeus.es</a> &amp; <a href="http://www.apogeus.es/ao" target="_blank">www.apogeus.es/ao</a><br>Hosting econ&oacute;mico y profesional: <a href="http://www.quijost.com" target="_blank">www.quijost.com</a><br></p></div>
Ignacio Díez | 11 Oct 23:12 2010
Picon

Libros de programación 3D

Hola, crysoles.

Acudo a vosotros en busca de consejo. Quiero volver a iniciarme en el
mundo de la programación 3D, y me gustaría que me nombrárais o
nombráseis libros o recursos sobre programación con OpenGL y/o otras
librerías. Puedo buscar en Google nombres de libros, pero os lo pido
para que me digáis aquellos que vosotros consideráis buenos, útiles o
especiales de alguna forma.
Angel Guzman Maeso | 11 Oct 23:33 2010
Picon

Re: Libros de programación 3D

Hola Ignacio,

Te recomendaría "el libro rojo" de OpenGL, en concreto:

The Red Book: The OpenGL Programmer's guide. ISBN 0-321-33573-2

Es el libro de referencia y tutorial. Considerado libro de cabecera para programadores de OpenGL.

También te recomiendo las GPU Gems:

http://developer.nvidia.com/object/gpu_gems_home.html

El primero lo tienes en la biblioteca ;)

Que aprendas mucho y te lo pases bien con OpenGL, es un mundo fascinante.

El 11 de octubre de 2010 23:12, Ignacio Díez <ignacio.diez.arias <at> gmail.com> escribió:
usca de consejo. Quiero volver a iniciarme en el
mundo de la programación 3D, y me gustaría que me nombrárais o
nombráseis libros o re



--
Blog: www.shakaran.net
Tivion: un simple reproductor de canales streaming de TV www.shakaran.net/blog/tivion
Mi juego de rol online: www.apogeus.es & www.apogeus.es/ao
Hosting económico y profesional: www.quijost.com
<div>
<p>Hola Ignacio,<br><br>Te recomendar&iacute;a "el libro rojo" de OpenGL, en concreto:<br><br>The Red Book: The OpenGL Programmer's guide. ISBN 0-321-33573-2<br><br>Es el libro de referencia y tutorial. Considerado libro de cabecera para programadores de OpenGL.<br><br>Tambi&eacute;n te recomiendo las GPU Gems:<br><br><a href="http://developer.nvidia.com/object/gpu_gems_home.html">http://developer.nvidia.com/object/gpu_gems_home.html</a><br><br>El primero lo tienes en la biblioteca ;) <br><br>Que aprendas mucho y te lo pases bien con OpenGL, es un mundo fascinante.<br><br></p>
<div class="gmail_quote">El 11 de octubre de 2010 23:12, Ignacio D&iacute;ez <span dir="ltr">&lt;<a href="mailto:ignacio.diez.arias <at> gmail.com">ignacio.diez.arias <at> gmail.com</a>&gt;</span> escribi&oacute;:<br><blockquote class="gmail_quote"><div>usca de consejo. Quiero volver a iniciarme en el<br>
mundo de la programaci&oacute;n 3D, y me gustar&iacute;a que me nombr&aacute;rais o<br>
nombr&aacute;seis libros o re</div></blockquote>
</div>
<br><br clear="all"><br>-- <br>Blog: <a href="http://www.shakaran.net" target="_blank">www.shakaran.net</a><br>Tivion: un simple reproductor de canales streaming de TV <a href="http://www.shakaran.net/blog/tivion" target="_blank">www.shakaran.net/blog/tivion</a><br>Mi juego de rol online: <a href="http://www.apogeus.es" target="_blank">www.apogeus.es</a> &amp; <a href="http://www.apogeus.es/ao" target="_blank">www.apogeus.es/ao</a><br>Hosting econ&oacute;mico y profesional: <a href="http://www.quijost.com" target="_blank">www.quijost.com</a><br>
</div>
Sergio Pérez Camacho | 12 Oct 02:11 2010
Picon

Re: Libros de programación 3D

¿El gpu gems para iniciarse? :D

El libro rojo es un coñazo y está bien como referencia, pero no creo que sea lo mejor para aprender OpenGL.

Mis recomendaciones:

---

"El Libro", si te tienes que comprar uno de teoría, que es necesaria:

http://www.amazon.co.uk/Real-time-Rendering-Tomas-Akenine-Moller/dp/1568814240/ref=pd_sim_b_6

---

  • OpenGL (tiene de todo, bien explicado):

http://www.amazon.co.uk/OpenGL-SuperBible-Comprehensive-Tutorial-Reference/dp/0321712617/ref=sr_1_4?ie=UTF8&s=books&qid=1286841309&sr=8-4

---

  • C++ (introducción pero con patrones y técnicas específicas para la programación gráfica - pero nada de 3D, más general)

http://www.amazon.co.uk/Programmers-Charles-River-Media-Development/dp/1584504528/ref=pd_sim_b_4

---

Para empezar, suficiente, imho. Para SDL con OpenGL hay varios tutoriales decentes en la red.


¿En qué lenguaje quieres programar?



Un saludo,
Sergio.

--
Sergio Pérez Camacho :[ ID-PGP: 564B7D7F ]:






El 11 de octubre de 2010 23:33, Angel Guzman Maeso <shakaran <at> gmail.com> escribió:
Hola Ignacio,

Te recomendaría "el libro rojo" de OpenGL, en concreto:

The Red Book: The OpenGL Programmer's guide. ISBN 0-321-33573-2

Es el libro de referencia y tutorial. Considerado libro de cabecera para programadores de OpenGL.

También te recomiendo las GPU Gems:

http://developer.nvidia.com/object/gpu_gems_home.html

El primero lo tienes en la biblioteca ;)

Que aprendas mucho y te lo pases bien con OpenGL, es un mundo fascinante.

El 11 de octubre de 2010 23:12, Ignacio Díez <ignacio.diez.arias <at> gmail.com> escribió:

usca de consejo. Quiero volver a iniciarme en el
mundo de la programación 3D, y me gustaría que me nombrárais o
nombráseis libros o re



--
Blog: www.shakaran.net
Tivion: un simple reproductor de canales streaming de TV www.shakaran.net/blog/tivion
Mi juego de rol online: www.apogeus.es & www.apogeus.es/ao
Hosting económico y profesional: www.quijost.com

_______________________________________________
CRySoL mailing list
http://crysol.inf-cr.uclm.es/
https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol


<div>
<p>&iquest;El gpu gems para iniciarse? :D<br><br>El libro rojo es un co&ntilde;azo y est&aacute; bien como referencia, pero no creo que sea lo mejor para aprender OpenGL.<br><br>Mis recomendaciones:<br><br>---<br><br>"El Libro", si te tienes que comprar uno de teor&iacute;a, que es necesaria:<br><br><a href="http://www.amazon.co.uk/Real-time-Rendering-Tomas-Akenine-Moller/dp/1568814240/ref=pd_sim_b_6">http://www.amazon.co.uk/Real-time-Rendering-Tomas-Akenine-Moller/dp/1568814240/ref=pd_sim_b_6</a><br><br>---<br><br></p>
<ul><li>OpenGL (tiene de todo, bien explicado):<br>
</li></ul>
<br><a href="http://www.amazon.co.uk/OpenGL-SuperBible-Comprehensive-Tutorial-Reference/dp/0321712617/ref=sr_1_4?ie=UTF8&amp;s=books&amp;qid=1286841309&amp;sr=8-4">http://www.amazon.co.uk/OpenGL-SuperBible-Comprehensive-Tutorial-Reference/dp/0321712617/ref=sr_1_4?ie=UTF8&amp;s=books&amp;qid=1286841309&amp;sr=8-4</a><br><br>---<br><br><ul><li>C++ (introducci&oacute;n pero con patrones y t&eacute;cnicas espec&iacute;ficas para la programaci&oacute;n gr&aacute;fica - pero nada de 3D, m&aacute;s general)</li></ul>
<br><a href="http://www.amazon.co.uk/Programmers-Charles-River-Media-Development/dp/1584504528/ref=pd_sim_b_4">http://www.amazon.co.uk/Programmers-Charles-River-Media-Development/dp/1584504528/ref=pd_sim_b_4</a><br><br>---<br><br>Para empezar, suficiente, imho. Para SDL con OpenGL hay varios tutoriales decentes en la red.<br><br><br>&iquest;En qu&eacute; lenguaje quieres programar?<br><br><br><br clear="all">Un saludo,<br>Sergio.<br><br>--<br>Sergio P&eacute;rez Camacho :[ ID-PGP: 564B7D7F ]:<br><br><br><br><br><br><br><div class="gmail_quote">El 11 de octubre de 2010 23:33, Angel Guzman Maeso <span dir="ltr">&lt;<a href="mailto:shakaran <at> gmail.com">shakaran <at> gmail.com</a>&gt;</span> escribi&oacute;:<br><blockquote class="gmail_quote">
Hola Ignacio,<br><br>Te recomendar&iacute;a "el libro rojo" de OpenGL, en concreto:<br><br>The Red Book: The OpenGL Programmer's guide. ISBN 0-321-33573-2<br><br>Es el libro de referencia y tutorial. Considerado libro de cabecera para programadores de OpenGL.<br><br>Tambi&eacute;n te recomiendo las GPU Gems:<br><br><a href="http://developer.nvidia.com/object/gpu_gems_home.html" target="_blank">http://developer.nvidia.com/object/gpu_gems_home.html</a><br><br>El primero lo tienes en la biblioteca ;) <br><br>Que aprendas mucho y te lo pases bien con OpenGL, es un mundo fascinante.<br><br><div class="gmail_quote">El 11 de octubre de 2010 23:12, Ignacio D&iacute;ez <span dir="ltr">&lt;<a href="mailto:ignacio.diez.arias <at> gmail.com" target="_blank">ignacio.diez.arias <at> gmail.com</a>&gt;</span> escribi&oacute;:<div class="im">
<br><blockquote class="gmail_quote"><div>usca de consejo. Quiero volver a iniciarme en el<br>
mundo de la programaci&oacute;n 3D, y me gustar&iacute;a que me nombr&aacute;rais o<br>
nombr&aacute;seis libros o re</div></blockquote>
</div>
</div>
<br><br clear="all"><br>-- <br>Blog: <a href="http://www.shakaran.net" target="_blank">www.shakaran.net</a><br>Tivion: un simple reproductor de canales streaming de TV <a href="http://www.shakaran.net/blog/tivion" target="_blank">www.shakaran.net/blog/tivion</a><br>Mi juego de rol online: <a href="http://www.apogeus.es" target="_blank">www.apogeus.es</a> &amp; <a href="http://www.apogeus.es/ao" target="_blank">www.apogeus.es/ao</a><br>Hosting econ&oacute;mico y profesional: <a href="http://www.quijost.com" target="_blank">www.quijost.com</a><br><br>_______________________________________________<br>
CRySoL mailing list<br><a href="http://crysol.inf-cr.uclm.es/" target="_blank">http://crysol.inf-cr.uclm.es/</a><br><a href="https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol" target="_blank">https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol</a><br><br>
</blockquote>
</div>
<br>
</div>
Ignacio Díez | 25 Oct 09:32 2010
Picon

Cómo usar git

En barrapunto (http://barrapunto.com/article.pl?sid=10/10/24/221923)
han recomendado este tutorial/manual de GIT:

http://nvie.com/posts/a-successful-git-branching-model/

No es un manual al uso, en plan "si quieres hacer un merge, usa este
comando con estas opciones". En este tutorial explican qué es un
merge, cuándo debe hacerse, para qué, etc. Es decir, no es un listado
de las órdenes y opciones de git, sino un tutorial sobre cómo usarlo
(correctamente, según el autor).
Espero que sea útil.
Angel Guzman Maeso | 25 Oct 11:52 2010
Picon

Re: Cómo usar git

Muy buen formato de presentación y contenido bastante interesante, aunque se me ha hecho corto (quizás sea el primero de una serie de artículos relacionados) pero si que explica muy buenas prácticas a tener en cuenta y que yo por lo menos no conocía o usaba así.


Gracias y saludos

El 25 de octubre de 2010 09:32, Ignacio Díez <ignacio.diez.arias <at> gmail.com> escribió:
o, en plan "si quieres hacer un merge, usa este
comando con estas opciones". En este tutorial explican qué es un
merge, cuándo debe hacerse, para qué, etc. Es decir, no es un listado
de las órdenes y opcione



--
Blog: www.shakaran.net
Tivion: un simple reproductor de canales streaming de TV www.shakaran.net/blog/tivion
Mi juego de rol online: www.apogeus.es & www.apogeus.es/ao
Hosting económico y profesional: www.quijost.com
<div>
<p>Muy buen formato de presentaci&oacute;n y contenido bastante interesante, aunque se me ha hecho corto (quiz&aacute;s&nbsp;sea el primero de una serie de art&iacute;culos relacionados) pero si que explica muy buenas pr&aacute;cticas a tener en cuenta y que yo por lo menos no conoc&iacute;a o usaba as&iacute;.</p>
<div>

<br>
</div>
<div>Gracias y saludos<br><br><div class="gmail_quote">El 25 de octubre de 2010 09:32, Ignacio D&iacute;ez <span dir="ltr">&lt;<a href="mailto:ignacio.diez.arias <at> gmail.com">ignacio.diez.arias <at> gmail.com</a>&gt;</span> escribi&oacute;:<br><blockquote class="gmail_quote"><div>o, en plan "si quieres hacer un merge, usa este<br>
comando con estas opciones". En este tutorial explican qu&eacute; es un<br>
merge, cu&aacute;ndo debe hacerse, para qu&eacute;, etc. Es decir, no es un listado<br>
de las &oacute;rdenes y opcione</div></blockquote>
</div>
<br><br clear="all"><br>-- <br>Blog: <a href="http://www.shakaran.net" target="_blank">www.shakaran.net</a><br>Tivion: un simple reproductor de canales streaming de TV <a href="http://www.shakaran.net/blog/tivion" target="_blank">www.shakaran.net/blog/tivion</a><br>Mi juego de rol online: <a href="http://www.apogeus.es" target="_blank">www.apogeus.es</a> &amp; <a href="http://www.apogeus.es/ao" target="_blank">www.apogeus.es/ao</a><br>Hosting econ&oacute;mico y profesional: <a href="http://www.quijost.com" target="_blank">www.quijost.com</a><br>
</div>
</div>

Gmane