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

Generar diagramas de clases a partir de modelos de Django

La siguiente es la mejor forma que encontré de tomar todos los archivos models.py de las aplicaciones que componen un proyecto Django y generar un diagrama de clases completo, listo para exportar cómo imagen. Utilizo un comando incluido en django-command-extensions.

Obtener e instalar django-extensions

Para Django 1.0 hay que bajar la última versión del svn:

svn checkout http://django-command-extensions.googlecode.com/svn/trunk/ django-command-extensions

E instalarlo ejecutando el script de instalación:

cd django-command-extensions

sudo python setup.py install

Podemos probar si se instaló correctamente abriendo una consola Python y ejecutando:

>>> import django_extensions

Para que este disponible en nuestro proyecto debemos agregar la aplicación a settings.py:

INSTALLED_APPS = (

...

'django_extensions'

)

Cuando ejecutemos:

python manage.py help

veremos una lista de los nuevos comandos disponibles.

Generar archivo .dot

Uno de ellos es graph_models el cual nos permitirá generar un archivo en formato .dot:

python manage.py graph_models -a > mi_proyecto.dot

Generar archivo .png

O una imagen png:

python manage.py graph_models -a -g -o mi_proyecto.png

Para que el anterior comando funcione, necesitamos tener instalado pygraphviz. En mi Ubuntu no tenía el paquete python-pygraphviz por lo que tuve que bajarlo desde su página web. Para instalarlo requiere tener instalados los paquetes graphviz y graphviz-dev.

Ejemplo

El siguiente comando genera el diagrama de clases para auth, la popular aplicación que viene con Django y sirve como ejemplo de cómo generar el diagrama para solo una aplicación del proyecto:

python manage.py graph_models auth -g -o mi_proyecto_auth.png

Nota

Les recomiendo bajar la versión de pygraphviz empaquetada de Cheeseshop en lugar de la del svn, ya que con esta el comando de django-extensions lanza una excepción. Correguí el programa, abrí un ticket y envié un parche. Para cuando leas esto probablemente ya se haya incorporado a trunk.


Enamorarse de un libro

"Un libro de cabecera no se escoge, se enamora uno de él."

VILALLONGA, José Luis de (Aristócrata, escritor y actor español.)

¿Uds. tienen un libro de cabecera? ¿Cuál?


Torta de banana y chocolate

Anoche preparamos con mi mamá 2 tortas de banana y chocolate, un postre tradicional en mi casa. Les dejo la receta para los que quieran probar hacerla (incluye pasos detallados y fotos calidad celular):

Ingredientes

  • 250 gramos de crema (un pote chico)
  • 4 huevos
  • 2 tazas de azúcar
  • 3 tazas de harina
  • cacao para espolvorear
  • 2 bananas

Instrucciones

En un recipiente como el de la foto, colocar la crema y el azúcar:

En el mismo recipiente poner los 4 huevos:

Y esencia de vainilla (el siempre bien ponderado vainillín), un chorrito:

Y empezamos a batir hasta que quede de un color uniforme; luego vamos agregando las tazas de harina mientras seguimos batiendo:

Luego de batir por 10 minutos se obtendrá una mezcla espesa:

Si notamos que la mezcla esta muy espesa, tanto que no se puede batir, podemos ablandarla echándolo un chorrito de soda:

Luego hay que tomar un molde para torta y untarlo con manteca o con aceite:

Volcar la mitad de la mezcla en el molde:

Y esparcir para ocupar todo el fondo:

Luego espolvorear cacao:

Yo utilizo cacao El Quillá, el mejor cacao de Santa Fe:

Luego cortar las bananas en rodajas y cubrir la superficie:

Y volver a espolvorear cacao:

Volvemos al recipiente con la mezcla. Le agregamos media taza de soda para ablandarla y volvemos a batir:

El objetivo es que quede más blanda para poder esparcirla sobre las bananas con cacao sin desparramarlas:

Y emparejamos nuevamente con el tenedor:

Por último, espolvoreamos azúcar:

Y al horno hasta que el azúcar se dore:

El resultado final, para motivar a que preparen esta torta:

Eso fue todo, una receta fácil para convidar a familiares y amigos. Anoche hicimos dos, una la mandamos para Brasil y la otra la comimos hoy a la tarde con mate. Tengo en casa algunas porciones que sobraron, por si pasa alguien de vista esta semana :D

Y para el navegante anónimo que encuentre esta receta: ¿Seguiste estos pasos? ¿Cómo te salió la torta? Me gustaría mucho saberlo.


A* vs Avara

Extendí mi ejercicio de A* para que además busque la solución utilizando Avara y las compare gráficamente.

Avara es otro algoritmo de búsqueda, pero a diferencia de A* no es ni óptimo ni completo. Ambos utilizan una heurística para estimar el costo de un estado n al estado objetivo y por esto se dice que son métodos informados.

La diferencia radica en cómo seleccionan nodos para su expansión: mientras que A* siempre elije el nodo que minimice la función camino recorrido + estimación al objetivo, Avara simplemente elije el nodo con menor estimación al objetivo (no tiene en cuenta el camino previo).

Hay escenarios en los que ambas estrategias encontrarán el mismo camino:

Pero hay otros en los que no:

Instalación y uso

Similar al ejemplo anterior. Teniendo Python y PyGame instalados, obtener el código fuente:

svn co http://svn.juanjoconti.com.ar/astar/tags/astar-vs-avara/ astar-vs-avara

y dentro de la carpeta astar-vs-avara ejecutar gui.py:

cd astar-vs-avara

python gui.py


Sentados bajo la lluvia

Luego de muchos, muchos días sin que llueva en muchos lugares de la provincia, el fin de semana se desató con todo. 



Listado de herramientas de seguridad

El sábado terminé un curso de seguridad en redes en la facultad. Desde la web de Mauro, quien dictó el curso, se puede acceder a un listado de herramientas de seguridad. Todas están probadas y clasificadas según su licencia. Además hay enlaces a listas de correo, sitios web y referencias a libros.

Foto del último día de curso:


Filósofos y lunas

"Cuando el filósofo señala la Luna, el tonto mira el dedo."

Anónimo

La cita de esta semana se la dedicamos a mi amigo Joel qué está cumpliendo años.


Controles de acceso biométricos

Hoy, mientras estudiaba para rendir el curso de Seguridad en Redes que estoy haciendo, se me ocurrió este chiste:


Un ejemplo de búsqueda A*

El ejemplo consiste en un plano de 800x600 puntos con el punto (0,0) en la esquina superior izquierda. En el plano hay puntos y figuras (formadas por puntos). Uno de los puntos es el origen y otro el destino. El problema a resolver es encontrar el camino más corto desde el origen al destino moviéndose de punto a punto y sin pasar sobre una figura.

La heurística utilizada es la distancia en línea recta desde la posición actual a la posición del objetivo.

Instalación y uso

Teniendo Python y PyGame instalados, obtener el código fuente:

svn co http://svn.juanjoconti.com.ar/astar/tags/astar-only/ astar

y dentro de la carpeta astar ejecutar gui.py:

cd astar

python gui.py

El primer click que se haga marcará el punto origen (verde) y el segundo el punto destino (rojo).

Luego se pueden agregar tantos puntos sueltos o figuras como se quieran. Si se hace uno o dos clicks y luego se aprieta la barra espaciado, uno o dos puntos son añadidos al planto. Si se hacen más de dos clicks antes de apretar la barra espaciadora, entonces una figura formada por los puntos marcados es añadida.

Se siguen cargando tantos puntos y figuras como se quiera. Finalmente, al aprender Enter se ejecuta el algoritmo de búsqueda y si se encuentra un camino-solución, este es graficado.

Otros casos de prueba:

Teoría relacionada