jueves, 4 de octubre de 2012

Los versos dorados (o áureos) de Pitágoras

Atribuido a Lisis, un alumno de Pitágoras, parece ser un resumen de la forma de vida que profesaban los pitagóricos.

Hay muchas versiones en Internet pero me quedo con esta. El original está escrito en hexámetro dactílico que es un tipo de verso de la poesía griega. La traducción está sacada del libro Les Vers Dorés de Pythagore de Fabre-d’Olivet, Éditions L’Age d’Homme, Collection Delphica, 1991. Traducción del francés por M.A.Aguirre.

PREPARACIÓN. 


RINDE a los Dioses inmortales el culto consagrado;
Guarda después tu fe (2): Reverencia la memoria De los Héroes bienhechores, de los Espíritus semi-Dioses (3).

PURIFICACIÓN. 

Sé buen hijo, hermano justo, esposo cariñoso y buen padre (4).
Escoge por amigo, al amigo de la virtud;
Cede a sus suaves consejos, instrúyete por su vida,
Y por un daño ligero no le dejes nunca (5);
Si lo puedes al menos: pues una ley severa Sujeta la Potestad a la Necesidad (6).
Se te ha dado sin embargo combatir y vencer
Tus locas pasiones: aprende a dominarlas (7).
Sé sobrio, activo y casto; evita la cólera.
En público, en secreto no te permitas nunca
Nada malo; y sobretodo respétate a ti mismo (8).
No hables ni hagas nada sin haber reflexionado.
Sé justo (9).
Acuérdate que un poder invencible
Ordena morir (10);  que los bienes, los honores
Fácilmente adquiridos, son fáciles de perder (11).
En cuanto a los males que arrastra consigo el Destino,
Júzgalos tal cual son: sopórtalos; y trata,
En lo que puedas, de dulcificar sus rasgos:
Los Dioses, a los más crueles, no han entregado a los sabios (12).
Como la Verdad, el Error tiene sus amantes:
El filósofo aprueba, o reprueba con prudencia;
Y si el Error triunfa, se aleja; espera (13).
Escucha, y grava en tu corazón mis palabras:
Cierra el ojo y el oído a la prevención;
Recela del ejemplo ajeno; piensa por ti mismo (14):
Consulta, delibera, y escoge libremente (15).
Deja los locos quehaceres sin fin, sin causa.
Debes, en el presente, contemplar el porvenir (16).
Lo que no sepas, no pretendas hacerlo.
Instrúyete: todo se concede a la constancia, al tiempo (17).
Vigila tu salud (18): dispensa con medida,
Al cuerpo los alimentos, al espíritu el reposo (19).
Hay que evitar demasiados o demasiados pocos cuidados; ya que la envidia,
A uno y otro exceso, se ata igualmente (20).
El lujo y la avaricia tienen consecuencias semejantes.
Es necesario escoger en todo, un medio justo y bueno (21).

PERFECCION. 


Que nunca el sueño cierre tus párpados,
Sin haberte preguntado: ¿Qué he omitido? ¿Qué he hecho? (22)
Si está mal, abstente: si está bien, persevera (23).
Medita mis consejos; ámalos; síguelos todos:
A las divinas virtudes podrán conducirte (24).
Lo juro por aquel que gravó en nuestros corazones,
La Tétrada sagrada, inmenso y puro símbolo,
Fuente de la Naturaleza, y modelo de los Dioses (25).
Pero que ante todo, tu alma, fiel a su deber,
Invoque con fervor a estos Dioses, cuyos socorros
Pueden únicamente acabar tus obras comenzadas (26).
Instrúyete por ellos, entonces nada te engañará:
De los diferentes seres sondearás la esencia;
Conocerás de Todo el principio y el fin (27).
Sabrás, si el Cielo lo quiere, que la Naturaleza,
Semejante en todo, es la misma en todo lugar (28).
De manera que iluminado sobre tus derechos verdaderos,
Tu corazón no se alimentará de vanos deseos (29).
Verás que los males que devoran a los hombres,
Son fruto de su elección (30); y que estos desdichados
Buscan lejos de ellos los bienes de los que llevan la fuente (31).
Pocos saben ser dichosos: juguetes de las pasiones,
zarandeados por el vaivén de las olas,
En una mar sin orilla, dan vueltas, cegados,
Sin poder resistir ni ceder a la tempestad (32).
¡Dios! los salvarías abriéndoles los ojos... (33).
Pero no: corresponde a los humanos, cuya raza es divina,
Discernir el Error, ver la Verdad (34).
La Naturaleza les sirve (35). Tú que la has penetrado,
Hombre sabio, hombre dichoso, respira en el puerto.
Pero observa mis leyes, absteniéndote de las cosas
Que tu alma debe temer, distinguiéndolas bien;
Dejando en el cuerpo reinar a la inteligencia (36):
A fin de que, elevándote en el Éter radiante,
Al seno de los Inmortales, ¡seas tú mismo un Dios! (37)


Filtrar entre fechas con django

Siempre se me olvida la sintaxis de range que selecciona entre dos valores inclusives:


self.modelo.objects.filter(fecha__range=(desde, hasta))

viernes, 31 de agosto de 2012

MSL Curiosity NavCams: Anaglyph Panorama of Bradbury Landing Site/ Panorama anaglifo del sitio de aterrizaje Bradbury

Bradbury Landing Site anaglyph panorama
Click para ampliar / Click to zoom

Este es mi segundo trabajo con las imágenes de las cámaras de navegación (NavCams) del MSL tomadas el Sol22. Se trata del sitio de aterrizaje del Curiosity bautizado como Bradbury Landing Site en honor al escritor de ciencia ficción Ray Bradbury, recientemente fallecido. El monte Aeolis queda a la derecha.

La panorámica se ha realizado uniendo 4 fotografias y generando una proyección esteroscópica. El campo de visión es de unos 136 grados horizontales. He usado el pedrusco central como foco.

Algunos datos de las NavCams (Cámaras de navegación)

El sistema de cámaras de navegación del Curiosity tienen las siguientes características:
  1. Determinar el contexto del terreno para planificar la travesía y ayudar al apuntado de las cámaras Mastcam y Chemcam.
  2. Generar una vista de 360 grados con una resolución angular menor que 1 mrad/pixel.
  3. Generar vistas estéreo hasta unos 100 m.
  4. Uso de un filtro en visible.
Las NavCams están montadas en el mástil, en la misma pletina que las cámaras MastCam/ChemCam y están sincronizadas para tomar fotos en estéreo siendo su línea de base de 42cm y quedando a 1.9 m del suelo de Marte.

Posición de las NavCams en el mástil



Como sistema fundamental del Curiosity, las NavCam están duplicadas para redundancia (pares A y B) estando conectadas a placas electrónicas diferentes. Sólo un par está activo al mismo tiempo.

Las CCD provienen de material sobrante del programa MER y tienen 1024x1024 píxeles cuadrados de 12 micrones. Debido a la calidad de los detectores y a las condiciones de operación (-55 grados C) el ratio de señal-ruido es >200:1. Las lecturas son de 12 bits por pixel y tarda 5.4 s en leer una imagen.

Con la óptica que montan, queda un sistema a f/12 sin relación de aumento y con un campo de 45x45 grados que es casi equivalente a un objetivo de 40 mm en una cámara de 35 mm. La resolución angular en el centro es de 0.82 mrad/pixel. La profundidad de campo va de los 0.5 m a infinito con la distancia hiperfocal a 1 m. Con esta configuración, el tiempo de exposición a medio día es de 0.25 s. El sistema usa un sistema de filtros centrado en los 650 nm (que vendría a ser entre el anaranjado y el rojo).


Fuente: THE MARS SCIENCE LABORATORY (MSL) NAVIGATION CAMERAS (NAVCAMS). J. N. Maki1, D. Thiessen1, A.Pourangi1, P. Kobzeff1, L. Scherr1, T. Elliott1, A. Dingizian1, Beverly St. Ange1, 1Jet Propulsion Laboratory/California Institute of Technology, 4800 Oak Grove Drive, Pasadena, CA 91109. Fecha de consulta: 31/08/2012.



sábado, 25 de agosto de 2012

MSL Navcams: my first anaglyph (3D image) / mi primer anaglifo con las imagenes de las navcams

Here is my first attempt to make an anaglyph from the navcams images. I have taken them from the Front Hazcams on (sol 16)


mars anaglypt MSL navcams sol 16
Anaglyph MSL navcams on sol 16


Comments welcome. I have been inspired by Un geólogo en apuros.

jueves, 2 de agosto de 2012

Aún otro ejemplo de try, except, else, finally / Yet another try, except, else, finally example

Estaba pasando datos de una DB mysql a otra en django y me ha salido este "snippet" que ejemplifica el uso de try-except-else-finally.

try contiene el código que queremos proteger
except captura la excepción (usar la clase genérica exception para capturarlas todas)
else código que se ejecutará si no salta ninguna excepción
finally código que se ejecutará en todo caso tanto si hay como si no hay excepción

Las únicas obligatorias son try y except. Si queremos capturar más de una excepción, las ponemos una detrás de otra:

from django.core.exceptions import ObjectDoesNotExist
try:
    cl=Cliente.objects.get(clave=id)
except ObjectDoesNotExist, ex:
    print "el cliente no existe"
except Exception, ex:
    print "se ha producido un error", str(ex)

Ejemplo:


try:  
   try:  
     c=db_marcajes.cursor(MySQLdb.cursors.DictCursor)  
     c.execute("select id, fecha, event, door, user from logs where fecha>%s", (last_marcaje,))  
     rows=c.fetchall()     
   except Exception, e:  
     print "Impossible efectuar consulta"  
     exit(1)  
   else:  
     elapsed = (time.clock() - start)  
     print "Consulta realitzada en", elapsed, "msegs"  
     num_rows=len(rows)  
     print "Numero de filas ", num_rows  
     i=0    
     while i<num_rows:  
       row=rows[i]     
       print "procesando fila ", repr(row)  
       try:  
         em=Empleado.objects.get(pin=row['user'])  
         pt=Puerta.objects.get(pk=row['door'])  
         print ("guardando acceso %s de %s" % (row['user'],em.descripcion,))  
       except Exception, ex:  
         print ("Error de busqueda empleado %s puerta %s: %s", ( row['user'], row['door'], ex, ))  
       else:  
         try:  
           acc=Acceso(  
             empleado=em,  
             es=row['event'],  
             fecha=row['fecha'],  
             puerta=pt,  
             )  
           #acc.save()  
           print "Guardado"  
         except Exception, ex:  
           print ("Error grabando acceso: %s" % (ex,))  
       finally:  
         i+=1  
         last_marcaje=row['fecha']  
   finally:  
     c.close()           
 finally:  
   # guardam darrer marcatje  
   conv=Convenio.objects.get(pk=1)  
   conv.last_marcaje=last_marcaje  
   conv.save()  

viernes, 27 de julio de 2012

Prevenir el borrado de objetos via clave foránea / Prevent object deletion via foreign key

Una de los comportamientos por defecto más problemáticos de django es el de emular el DELETE CASCADE  cuando borramos una clave foránea. Desde luego, hay que ser animalito. Ya me veo a decenas de usuarios noveles preguntándose adonde han ido a parar sus datos después de efectuar un borrado de una clave foránea que tenía objetos relacionados.

La forma de "proteger" los objetos relacionados es via la definición del ForeignKey.on_delete que puede tomar los siguientes valores

CASCADE: Borrado en cascada, comportamiento por defecto.
PROTECT: Protege al objeto relacionado del borrado haciendo saltar la excepción django.db.models.ProtectedError.
SET_NULL: Asigna el valor null a la clave, sólo posible si null es True.
SET_DEFAULT: Pone la clave foránea a su valor por defecto (debe estar definido).
SET(): Asigna a la clave foránea el valor pasado en el set.
DO_NOTHING: No hace nada y deja el comportamiento por defecto de la db. (Si la hemos creado con syncdb, no hará nada)


Una práctica aconsejable en un entorno de usuario sería capturar la excepción via PROTECT y devolver un mensaje de error con la información para el usuario.Por ejemplo:

Si en la definición del modelo Factura usamos

cliente=models.ForeignKey(Cliente, on_delete=models.PROTECT)

Y ahora queremos borrar un cliente que tiene una factura asociada

try:
  cliente.delete()
except django.db.models.ProtectedError, ex:
  return HttpResponse( ('El cliente %s tiene al menos una factura y no puede borrarse.' % (cliente.descripcion,)), 'text/html')

jueves, 5 de julio de 2012

subversion: volver a una versión anterior

Si estás modificando la versión 189 de tu código y quieres volver a la anterior, sólo tienes que hacer:


svn update
svn merge -r 189:188 .
svn commit -m "Volviendo a la version r188"