ctypes

El otro día me encontré con un módulo interesante de python que no conocía: ctypes. Sirve para comunicarse con librerías en C: permite cargar librerías dinámicas y llamar a sus funciones, definir tipos equivalentes a los de C para pasarlos de un lado a otro e incluso especificar funciones python como callbacks de C. Vamos, que se pueden crear bindings a librerías externas escribiendo únicamente código python.

Ahi va un ejemplillo tonto usando la libavformat:

#!/usr/bin/python
import sys
from ctypes import *
import ctypes.util

av = CDLL(ctypes.util.find_library("avformat"))
filename = sys.argv[1]
# pFormatCtx deberia ser un puntero a AVFormatContext,
# pero esto es solo un ejemplo simple :)
pFormatCtx = c_void_p() 

av.av_register_all()
av.av_open_input_file(byref(pFormatCtx), filename, None, 0, None)
av.dump_format(pFormatCtx, 0, filename, 0)

Por supuesto para hacer algo más serio habría que declarar en python las estructuras como AVFormatContext que se definen en las cabeceras correspondientes y cosas así, pero entonces el programa de ejemplo sería demasiado engorroso como para leerlo en un blog ;). El ejemplo muestra una salida como esta:

$ ./av.py test.avi
Input #0, avi, from 'test.avi':
  Duration: N/A, bitrate: N/A
  Stream #0.0: Video: mpeg4, 512x420,   inf fps(c)
  Stream #0.1: Audio: vorbis, 22050 Hz, stereo, 24 kb/s

Referencias:

Querido diario…

Querido diario:

(advertencia: casi todo es improvisado, y hay muchos fallos).

blah

Queridos seres humanos que pobláis este mundo, si alguna vez queréis algo de mi hasta el punto de estar dispuestos a echármelo en cara después si no llego a hacerlo, DECÍDMELO ANTES, cuando no sea demasiado tarde para que yo haga algo.

Muy a mi pesar no dispongo de la capacidad de leer la mente de los demás, ni siquiera se me da demasiado bien eso de la empatía. Por lo tanto, en ausencia de solicitudes externas haré lo que a MI me parezca oportuno en cada momento y, si se me pide algo y fallo, aceptaré las críticas como cualquier persona razonable pero, por el amor del monstruo de spaghetti volador, nada de broncas a traición de esas en las que te enteras de que deberías haber hecho algo en el mismo momento de la bronca.

Bastante tengo con las que me gano yo.

slack

P.D.: Esto no va por nadie de los que supongo que leerán el post. Simplemente necesitaba desahogarme :P

No estamos solos…

A veces en la inmensidad de Internet te encuentras algo que te produce la reconfortante sensación de que ahí afuera, en alguna parte, hay alguien que comparte tus inquietudes. Ayer me pasó al ver esta viñeta de Randall Munroe:

Even the identity matrix doesn't work normally

(URL original: http://xkcd.com/c55.html)

El resto de las tiras que hay en el site son muy recomendables también, si tienes gustos parecidos a los mios en lo que al humor se refiere, claro :)