Automágica: durante 2017 estoy trabajando bastante en Automágica, mi software para editar libros: Más información - Posts relacionados

La historia de Python: Módulos cargados dinámicamente

El siguiente texto es una traducción del artículo Dynamically Loaded Modules de Guido van Rossum publicado en http://python-history.blogspot.com/.

Módulos cargados dinámicamente

La arquitectura de Python permitió, desde un principio, escribir módulos de extensión escritos en C de una forma sencilla. Sin embargo, en los primeros días, la tecnología de carga dinámica era tan oscura que las extensiones tenían que ser enlazadas estáticamente en el interprete de Python, en tiempo de compilación. Para hacer esto, lo módulos de extensión tenían que ser agregados a un script de shell que era usado para generar el Makefile para Python y todos su módulos de extensión.

Aunque este enfoque funcionaba para pequeños proyectos, la comunidad de Python comenzó a producir nuevos módulos de extensión a un ritmo no esperado, y demandaban que los módulos pudiesen ser compilados y cargados en forma separada. Poco después, las interfaces a las APIs de enlace dinámico, propias de cada plataforma, permitieron que la declaración import busque una biblioteca compartida en disco, de forma similar que un archivo ".py". La primera mención de la carga dinámica en los logs del CVS, data de enero de 1992 y el soporte para la mayoría de las plataformas llego a fines de 1994.

El soporte de enlace dinámico probó ser muy útil, pero fue una pesadilla de mantener. Cada plataforma usaba una API diferente y algunas plataformas tenían adicionales. En enero de 1995, el soporte para enlace dinámico fue reestructurado, de forma tal que todo el código fue concentrado en un solo archivo fuente. Sin embargo, este enfoque resulto en un largo archivo abarrotado de directivas condicionales de compilación (#ifdef). En diciembre de 1999, fue reestructurado de nuevo, con la ayuda de Greg Stein, para que el código correspondiente a cada plataforma quede ubicado en un archivo específico para cada una (o familia de estas).

Aunque Python soportaba la carga dinámica de módulos, el procedimiento para construirlos, a menudo seguía siendo un misterio para muchos usuarios. Un número cada vez más grande de usuarios fueron construyendo módulos, especialmente con la introducción de herramientas como SWIG. No obstante, un usuario deseoso de distribuir un modulo de extensión enfrentaba grandes obstáculos para lograr que el modulo compile en todas las combinaciones de plataformas, compiladores y linkers. En el peor escenario posible, un usuario tenía que escribir su propio Makefile y script de configuración para establecer los flags correctos para el compilador y el linker. Además, requería que los usuarios finales tuviesen una distribución de Python con el código fuente.

Finalmente, se creo una herramienta para construir las extensiones, llamada distutils, que permitió construir e instalar los módulos de extensión en cualquier plataforma. Las opciones necesarias para el linker y el compilador están escritas desde el makefile de Python a un archivo de datos, que es consultado por distutils cuando construye módulos de extensión. Escrito en gran parte por Greg Ward, las primeras versiones de distutils fueron distribuidas en forma separada, para dar soporte a versiones viejas de Python. Desde Python 1.6 está integrado en las distribuciones, como un modulo de la biblioteca estándar.

Cabe destacar que distutils hace mucho mas que simplemente construir módulos de extensión desde código fuente en C. Puede también instalar módulos y paquetes de Python puro, crear instaladores ejecutables para Windows y correr herramientas de terceros como SWIG. Desgraciadamente, su complejidad ha causado que sea maldecida por mucha gente y no reciba la atención que se merece a la hora de mantenerla. Como resultado, recientemente, las alternativas de terceros ( especialmente ez_install, también llamada "eggs") se hicieron mas populares, desgraciadamente causando fragmentación en la comunidad de desarrolladores, así como quejas cuando no funcionan. Parece que el problema en toda su generalidad es inherentemente difícil.

Traducido por Joaquín Sorianello.

Revisado por Juan José Conti.

Si encontrás errores en esta traducción, por favor reportalos en un comentario y los corregiremos a la brevedad.

Todas las traducciones de esta serie pueden encontrarse en La historia de Python.


os.path en el settings.py de Django para mayor comodidad

En el archivo de configuración settings.py de un proyecto Django, por lo general tenemos que setear variables como MEDIA_ROOT o STATIC_DOC_ROOT. Su contenido en una instalación Windows suele ser algo como: 'C:\Windows\camino\hasta\mi\projecto'. Y en Linux: '/home/usuario/camino/a/mi/proyecto'. El problema surge cuando el proyecto es desarrollado en varias máquinas a la vez, y con distintos sistemas operativos. Más aún, si hacemos lo anterior, seguramente versionaremos el proyecto y con él, al archivo de configuración. No sería raro que tras una actualización, el archivo se actualice con los valores que puso algún compañero de trabajo.

Mi solución es definir primero una variable para el proyecto:

PROJECT_PATH = os.path.abspath(os.path.dirname(file))

Luego podemos usarla para definir el path absoluto a la carpeta con archivos de media:

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')

nuestros templates:

TEMPLATE_DIRS = (

# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".

# Always use forward slashes, even on Windows.

# Don't forget to use absolute paths, not relative paths.

os.path.join(PROJECT_PATH, 'templates')

)

o cualquier otra variable de configuración que requiere una ruta de directorios.

Con esta solución podemos cambiar el proyecto de carpeta, disco o computadora y seguirá funcionando.


Los 6 magníficos: divertimentos matemáticos

Cuando estaba en los primeros años de ingeniería, en la sala de consultas de Materias Básicas (el departamento que reúne las matemáticas, las físicas, las químicas, etc...) vi una calcamonía que me llamó la atención. Planteaba una igualdad entre cinco números: pi, i, e, 0 y 1.

Ayer, durante una reunión en la misma sala, volví a encontrarla. Seguía en el mismo rincón de un pizarrón, con una punta ajada. No resistí la tentación de fotografiarla y quedármela para siempre. Se las comparto:

Imagen778

Una versión, más desprolija, pero en dónde se lee mejor:

Imagen779

Una primera pregunta es: ¿Es verdad esa igualdad? Resulta que sí. Lo que me llamó la atención por años es conocido como Identidad de Euler.

Pero lo que realmente desvela es que la calcamonía se titulaba "Los seis magníficos" y remata "¿y el que falta?".¿ Alguien tiene la respuesta?


Aplicar un decorador a todas las funciones de un módulo en Python

En la lista de PyAr preguntaron si había alguna forma de aplicar un decorador a todos las funciones de un módulo. Envié una solución sin probarla, que al verla unos días más tarde parece bastante buena :)

La comento aquí con un ejemplo. modulo.py contiene definiciones de funciones:

def a():
pass

def b():

print 42

def c():

a()

b()</pre>

y decoradores.py un decorador que imprime el nombre de la función llamada:

def nombrador(f):

    def inner(*a, **kw):

        print "Ejecutando %s" % f.__name__

        return f(*a, **kw)

    return inner

(Si no sabés lo que es un decorador, podés leer mi post Decoradores en Python I: Introducción)

En lugar de modificar las definiciones de funciones en modulo.py para aplicar el decorador a cada una de las funciones, ya sea usando el azúcar sintáctica de Python:

@nombrador

def a():

    ...

o mediante una llamada a la función:

a = nombrador(a)

podemos agregar el siguiente código al final de modulo.py:

for n,v in locals().items():

   if inspect.isfunction(v) and n != 'nombrador':

       locals()[n] = nombrador(v)

Vamos a explicarlo:

la llamada a la función built-in locals retorna un diccionario representando el espacio de nombres local: cada clave es un string representando el nombre de un objeto y cada valor es el objeto en si. Iteramos sobre la lista de pares (key, value) del mencionado dict y por cada uno verificamos si:

a) es una función (inspect.isfunction es apropiado para esto)

b) el nombre no es el del decorador que queremos aplicar (para no aplicar el decorador sobre si mismo!)

Si las condiciones a y b se cumplen, podemos guardar en el diccionario del espacio de nombres, bajo el nombre de la función que cumplió las condiciones, una versión decorada de la misma.

Agregamos algo más de código a modulo.py para que se llame a las funciones cuando lo ejecutemos:

if __name__ == '__main__':

    a()

    b()

    c()

Esta es la salida obtenida:

juanjo@fenix:~/python/muchosdecos$ python modulo.py

Ejecutando a

Ejecutando b

42

Ejecutando c

Ejecutando a

Ejecutando b

42

¿Querés probarlo? Bajá muchos.zip

Nota: para acceder a locals() no se puede utilizar iteritems por que el diccionario cambia durante la ejecución.


Novelas que leí en Enero/2010

Durante el año realmente siento que me falta tiempo para leer. No para leer el diario o material de estudio, sino para leer por el placer de hacerlo. Leer literatura. A parte de algunos cuentos de Asimov, este enero pude leer 4 novelas. Las 4 muy distintas entre si, pero igualmente entretenidas. Se las paso a comentar, por si alguno tiene ganas de leer y sacó sus vacaciones en febrero (enero ya se fue). Si a alguien le interesa leer alguno, los tengo para prestar:

El enigma de Copérnico

el-enigma-de-coopernicoAutor: Juan-Pierre Luminet

Género: Novela histórica

Páginas: 365 (incluyendo notas del autor)

Editorial: Ediciones B/Zeta

ISBN: 978-84-9872-040-2

El primer libro que leí me lo regaló mi tía Lupe para Navidad. Es una versión novelada de la vida de Nicolás Copérnico (si, el que dijo que los planetas se movían al rededor del son y no TODO al rededor de la tierra como se venía creyendo) escrita por un científico francés y es la primera de una serie de 4 entregas titulada Los constructores del cielo.

Me gustó mucho, los capítulos son un poco largos (me gustan más cortos, así uno puede dejar el libro en cualquier momento) pero la trama es atrapante. Desconocía los detalles de la vida de Copérnico, por lo que no se cuanto hay de verdad y cuanto de ficción. Pero sin duda es una buena aproximación para conocer un poco más sobre la historia del mundo.

Los otros libros de la serie son sobre Brahe, Kepler y Newton (el último aún no ha sido escrito).

En la arena estelar

en-la-arena-estelarAutor: Isaac asimov

Género: Ciencia ficción

Páginas: 200

Editorial: Ediciones Martinez Roca

ISBN: 84-270-0516-4

La segunda novela la leí durante mis vacaciones y la compré en una casa de usados en Pinamar. Es una entrega más de Asimov, una especia de aventura de Cowboys por el espacio. En este caso se intenta encontrar un misterioso documento perdido hace muchos años a la vez que el último planeta conquistado por los humanos intenta conquistarlos a los demás para formar un Imperio Galáctico. Por supuesto, la resistencia se levanta para evitar que esto suceda. Aventura, romance (del pícaro que hace Asimov), conspiraciones y un final bien Asimoviano (era MUY norteamericano el tipo... para ser ruso).

Las grietas de Jara

las-grietas-de-jaraAutor: Claudia Piñeiro

Género: Policial

Páginas: 250

Editorial: Alfaguara

ISBN: 978-987-04-1296-0

La tercer novela la compré para leer a la vuelta (16 horas en colectivo no se digieren fácil). Compré una edición "económica" 15 pesos más barata que en todas las otras librerías. La verdad, no pude notar la diferencia.

Las grietas de Jara está escrita con esa forma característica de Claudia Piñeiro, un policial urbano, con personajes bien humanos, donde mucha parte de la historia pasa dentro de sus cabezas.

Me gustó más que Las viudas de los jueves, pero menos que Tuya.

El principe de la nieble

el-principe-de-la-nieblaAutor: Carlos Ruiz Zafón

Género: Fantasía/Juvenil

Páginas: 230

Editorial: Booket

ISBN: 978-987-580-321-3

El escritor, Carlos Ruiz Zafón, se hizo famoso hace unos años con su novela La sombra del viento, y a continuación El juego del angel (que transcurre una generación antes que La sombra del viento). Sin embargo, estas no son sus primeras novelas. Zafón cuenta también con una trilogía del género que algunos denominan "Novela juvenil"; personajes sub 18, más fantasía que en sus novelas para "adultos", pero como aclara el autor en el prologo, pueden disfrutarla tanto jovenes como lectores con más años


Cabañas Cayastá

El fin de semana mi familia estuvo de paseo en las Cabañas Cayastá. Yo iba a unirme desde el viernes, pero como estuve un poco enfermo solo pude pasar en las cabañas una sola una noche. Ya conocíamos el lugar, puesto que habíamos pasado un fin de semana allí hace dos años. Es un predio parquizado muy grande (5 hectareas) con 26 cabañas, salida al río y mucha infraestructura.

Las cabañas tiene hasta 6 camas, baño, aire acondicionado, 2 pisos, una cocina equipada con todos los cubiertos y trastos, heladera, mesa y sillas, parrillas y tele (alguien lo necesita?). Se puede cocinar en la cabaña, pedir comida a la habitación o comer en el comedor del lugar (los sábados a la noche suele haber Cena Show). A la tardecita te dejan en la puerta de la cabaña una canasta con el desayuno para el otro día.

El lugar está muy bueno para descansar, tiene muchas comodidades y se puede hacer de todo:

    <li> Pescar</li>
    
    <li> Cabalgar</li>
    
    <li> Andar en bicicleta</li>
    
    <li> Pileta</li>
    
    <li> Juegos (muy buenos para chicos, desde los típicos de plaza a otros como una casa en el árbol o un laberinto)</li>
    
    <li> Hacer asado</li>
    

    Está a unos minutos del pueblo (Cayastá), por lo que podés comprar ahí lo que te olvides, y a menos de 100 km de Santa Fe, por lo que llegás en una hora.

    También tengo entendido que se suele utilizar para organizar convenciones (tiene un salón para 300 personas).

    Dejo algunas fotos del lugar para entusiasmar:

    [gallery link="file" orderby="title"]


    Celular - cuento

    Siendo un ávido lector, hace un par de años me llegó el momento, como a todo lector, de creer que también puedo ser un escritor. Fue así que me entregué con furia a la escritura de cuentos, uno tras otros, solo para darme cuenta de que el siguiente era peor que el anterior :(

    De todas formas, como soy cabeza dura, y tengo ganas de volver a intentarlo, les dejo el primero que escribí, y como los subsiguientes fueron cada vez peores, el mejor que tengo.

    Se titula Celular, y lo escribí una noche en el verano 2007-2008 en mi pieza, en Carlos Pellegrini. La idea del cuento me había llegado como un rayo, al mirar por la ventanilla cuando me tomaba el 16 en la esquina de mi departamento, bolso en mano, camino a la terminal de ómnibus de la ciudad de Santa Fe.

    Celular_jjconti

    Como ya les dije, tengo ganas de retomar, así que sean alentadores en sus comentarios ;-)


    Alarmas en GNOME

    Nunca había usado esta aplicación hasta hoy. Estoy muy concentrado trabajando en la computadora, mensaje por IM: "llamame en 15 minutos". "Mmmm", pienso. "Me voy a olvidar". Debe haber alguna herramienta en mi escritorio que me permita resolver esto, es algo realmente sencillo. Busco: GNOME + alarma, encuentro: Gnome Alarm (el paquete se llama alarm-clock).

    Pantallazo-Alarma

    Cargo una alamar para dentro de 14 minutos. Si, la búsqueda llevo solo 1. ¡Genial! No solo por la herramienta (es sencilla pero extremadamente útil) sino por el ecosistema de software que es el Software Libre; no creo que en otro ámbito puedas tener una necesidad, pensar en un programar y que exista para solucionar tu problema solo por que antes ya alguien tuvo el problema y lo solucionó. Allí estaba la herramienta, lista para usar.

    Llevo media hora, y ya la usé dos veces :)


    Vacaciones en Villa Gesell

    los4_

    La semana pasada estuvimos de vacaciones en Villa Gesell Ceci, Meli, Barby y yo. Fuimos en cole (largo) y paramos en el hotel CityMar (nos gustó que estaba a 1.5 cuadras de la playa, la comida y la pileta). Mientras volvía, medio dormido y contento, se me había ocurrido la idea de escribir un relato detallado de todo el viaje. Ya no se si voy a hacerlo, pero hay algunas cosas que quiero comentar:

    Pinar del Norte

    Uno de los mejores lugares para visitar, no-playa, es el Pinar del Norte: al norte de la ciudad, junto al mar, se levanta una enorme arbolera de, en su mayoría, pinos. En el interior está:

    • la sede del Museo y Archivo Histórico Municipal de Villa Gesell (en el edificio de lo que fue la primer casa de su fundador).
    • otros museos, como el de los Pioneros, en honor a los primeros habitantes y otros edificios con historia.
    • el vivero municipal.
    • un viejo tinglado convertido en cafetería.
    • caminos para recorrer y sombra para descansar (muy lindo para pasar la tarde tomando mates o jugando a las cartas).
    • un centro cultural dónde se puede encontrar a un maestro tocando el piano en vivo (en el edificio de la segunda casa del fundador).

    Por el simbólico valor de 3 pesos[0] se puede realizar una visita guiada a los distintos edificios que se encuetran en el lugar. Si van de vacaciones a Gesell, no dejen de realizar esta visita por que es de verdad muy buena. La guía le ponía tanta pasión a su trabajo que la historia realmente te atrabapa.

    100_6038

    100_6041

    Don Carlos Idaho Gesell

    El fundador de Villa Gesell se llamó Carlos Idaho Gesell y nació en Buenos Aires en 1891, aunque sus padres eran alemanes. Su padre, Silvio Gesell, quién luego fuera conocido por sus trabajos en economía, era un comerciante que vino desde Europa, primero vendiendo herramientas para odontólogos y más tarde elementos para bebés; Casa Gesell fue el nombre de la empresa familiar en la que Carlos también trabajo.

    El hijo heredó de su padre el hobby por los inventos. Carlos Gesell registró más de 200 patentes en Argentina y en Estados Unidos, dónde pasó 10 años estudiando en las grandes bibliotecas; pasaba allí horas, desde que abrían hasta que cerraban.

    100_5968

    De regreso en Argentina, se dedicaba al diseño y rediseño de productos en Casa Gesell, como cochecitos todo terreno para bebes y muebles. En sus vacaciones de 1931, en Mar del Plata, conoce a Hector Manuel Guerrero, dueño de campos en la zona de General Maradiaga, quien le informa de un terreno lleno de dunas que se vende. Llegar al lugar, requiere un largo viaje en tren hasta la Estación Juancho, atravesar campos haciendo uso del permiso de servidumbre, y atravezar extensiones de arena en sulky. Luego de hacer algunas pruebas y encontrar que el agua es potable, don Carlos, como se lo empieza a llamar a partir de cierta edad, decide comprar las tierras para sembrar pinos que sirvan para suministrar madera a su empresa.

    Muchos miembros de su familia le recriminan haber gastado tanto dinero en un montón de arena, se termina separando y volviendo a casar para en ese mismo año construir la primer casa en su nueva propiedad. Algo particular del lugar es la presencia de dunas, masas vivas de arena que por acción del viento pueden cambiar de lugar de un día para el otro. Usando su ingenio, diseñó su casa con 4 puertas, una por cada punto cardinal y así poder salir si durante la noche se acumulaba arena en alguna de las entradas. Al principio viajaba los fines de semana y la casa servía de veraneo para el resto de la familia.

    Pasó 10 años intentando sembrar pinos y otras especies que conseguía en viveros de Buenos Aires y otros lugares del mundo; incluso invitó a un ingeniero agrónomo alemán a instalarse a trabajar junto a él. Luego de dos años, se fue enojado, diciéndole a don Carlos que nada crecería en ese lugar. Finalmente, a fuerza de perseverancia e ingenio logro su objetivo.

    100_5984

    Como una idea para obtener recursos para continuar su labor, se le ocurre construir una casa en la que personas de Capital Federal puedan pasar sus vacaciones, la llama La Golondria, por el caracter pasajeron que tendrían sus visitantes. Rápidamente tiene éxito y el boca a boca hace que cada año sean más las personas que llegan a pasar sus vacaciones en aquel lugar, algunos les compran tierras a Don Carlos y construyen sus propias casas. Don Carlos, hasta su muerte, ayuda en la construcción de la ciudad: siendo benefactor de instituciones, estableciendo caminos y construyéndolos, sembrando más árboles; y así un pinar productor de madera, terminó convertido en uno de los balneareos más visitados de Argentina.

    100_5985

    Libros

    Como sabrás, si seguís este blog, me gustan bastante los libros: comprar, oler, descubrir, recomendar, leer. En Villa Gesell hay muchas librerías, sobre todo en el centro. De usados hay dos o tres sobre la avenida 3[1] pero no encontré nada de valor allí. De todas las que visité, la que realmente es un hayazgo digno de compartir es una que se encuentra en la parte baja del Paseo España, casi al fondo (el Paseo España es una calle peatonal que corta la avenida 3): venden libros muy baratos (casi un 50% menos que en las otras librerías). Según la vendedora, los precios se deben a que son ediciones económicas y a que los impuestos son distintos por estar en una feria. No dejen de visitarlo; yo compré 3 libros por 70 $ que en una librería tradicional me hubiesen costado 130 $.

    Otro hallazgo literario lo hice en Pinamar. No fuimos en excursión o algo por el estilo (no se cuando te pueden cobrar); por 11 pesos una persona puede ir y volver en colectivo (pasan cada media hora) y pasear por le centro y la playa. No me gustó mucho la ciudad, y es cara (una bochita de helado por 13 $ no es negocio). Pero en una especie de peatonal en el centro hay una casa de usados con muy buen material. Allí compre En la arena estelar, el siguiente libro de libro de Isaac Asimov en mi lista de libros a leer para completar La Saga de la fundación.

    100_1500

    Seguir navegando

    Cree un album en mi galería con fotos del Pinar del Norte y los museos y otro con fotos de las playas.

    Empecé la entrada en Wikipedia en Español para Carlos Idaho Gesell.

    [0] De verdad, es muy poco para pagar una recorrida guiada de tan buena calidad y los lugares a los que se tiene acceso. El dinero se utiliza par el mantenimiento del lugar, así que si visitás el parque y querés hacer una contribución mayor, podés comprar alguna de las publicaciones que tiene el museo.

    [1] En Villa Gesell las calles paralelas a la costa se numeran: 1, 2, 3, 4... y las perpendiculares con números mayores a 100.


    Generación espontanea de código

    Software does not make itself. Code does not spontaneously come from the ether of the universe.

    800px-Big_bang

    El párrafo completo:

    Software does not make itself. Code does not spontaneously come from the ether of the universe. Python is no exception to this rule. Since Python made its public debut back in 1991 many people beyond the BDFL (Benevolent Dictator For Life, Guido van Rossum) have helped contribute time and energy to making Python what it is today; a powerful, simple programming language available to all.

    Fuente: http://python.org/dev/intro/