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

Streaming de datos en Django

En PHP uno pude ir mandando datos al cliente (navegador) a medida que los va procesando en el servidor. En Django siempre creé el texto de la respuesta para luego pasársela al objeto HttpResponse. A pesar de que había preguntado varias veces en el canal de chat de Django si podía hacer algo así y me habían respondido que no, tenía la intuición de que algo se podría hacer y pensé en iteradores.

Por suerte este fin de semana tuvimos un gran evento de Python y alojé en mi casa a John, quien me explicó en 5 minutos cómo hacerlo. Aquí una recreación de su ejemplo (views.py):




from django.http import HttpResponse

from time import sleep



def gen():

    for x in range(80):

        sleep(1)

        yield '*' * x + '<br/>'



def test(request):

    return HttpResponse(gen(), mimetype='text/html')



Queda para el lector ver la salida en su navegador. gen es una función que al llamarla devuelve un generador. El primer parámetro de HttpResponse puede ser un generador o cualquier objeto con el método __iter__.

En la misma jornada Nubis, estuvo explorando esto mismo desde distintos ángulos.


Terminando Python en Santa Fe 2008

Auditorio de la UTN FRSF, Lighting Talks desarrollándose (5 minutos por disertante para explicar ALGO).

Tuvismos:

    <li>Haciendo plata con Software Libre - John Lenton</li>
    
    <li>Python LEX &amp; YACC - Yo</li>
    
    <li>KSS -  Silvestre Huens</li>
    
    <li>svn +Track en USLA - David Casco</li>
    
    <li>Decoradores en Python -  Facundo Batista</li>
    
    <li>Fabián Ezequiel Gallina - Python-mode para Emacs</li>
    
    <li>Procesando Imágenes con Python - Esteban Peiro</li>
    
    <li>Reply (aprendizaje por refuerzo) - Lucio Torre y Ricardo Kirkner</li>
    
    <li>Defendiendo al Software Libre - Calos Miranda Bonina</li>
    
    <li>Creación colaborativa de empresas -  Leandro Monk</li>
    
    <li>PyWars - <span style="text-decoration: line-through;">Arturo Díaz Santor</span> Arturo Elias Antón</li>
    
    <li>Historia de conferencias de Python / PyCON Ar - Facundo Batista</li>
    

(Si le escribí mal el nombre a alguno, avise!)

Fin del post, el resto del día incluye: sorteos, entega de certificados y luego un sprint gastronómico.

Saludos!

Bonus Track: Una fotito del mediodía


Cosas y humanos

"La desvalorización del mundo humano crece en razón directa de la valorización del mundo de las cosas."

MARX, Karl (Filósofo alemán.)


Goodreads review: The Boy in the Striped Pajamas (John Boyne)

Hace un par de meses ya leí una novela muy interesante que se titula El niño con el pijama a rayas. Lo interesante de esta obra, más allá de la historia que cuenta, es la forma de contarla. Es el tipo de libro que uno va leyendo y los datos se van revelando lentamente a medida que avanzan los capítulos. Tal es así que esto está escrito en su sinopsis:

Aunque el uso habitual de un texto como éste es describir las características de la obra, por una vez nos tomaremos la libertad de hacer una excepción a la norma establecida. No sólo porque el libro que tienes en tus manos es muy difícil de definir, sino porque estamos convencidos de que explicar su contenido estropearía la experiencia de la lectura. Creemos que es importante empezar esta novela sin saber de qué trata. No obstante, si decides embarcarte en la aventura, debes saber que acompañarás a Bruno, un niño de nueve años, cuando se muda con su familia a una casa junto a una cerca. Cercas como ésa existen en muchos sitios del mundo, sólo deseamos que no te encuentres nunca con una. Por último, cabe aclarar que este libro no es sólo para adultos; también lo pueden leer, y sería recomendable que lo hicieran, niños a partir de los trece años de edad.

Ahora me enteré que hicieron una película con el libro. No me lo imagino! Cuando leemos un libro utilizamos nuestra imaginación para ir dibujando las escenas y a medida que vamos descubriendo nuevos elementos, la pintura se va completando. En una película todos los elementos están a la vista desde el principio. Ya veremos…

Rating: 4/5

Original: https://www.goodreads.com/review/show/822879095


Acomodar imágenes con GQView

Algunas cámaras de fotos tienen un dispositivo que detecta su posición, entonces si sacamos una foto con la cámara posicionada verticalmente, la imagen resultante es más alta que ancha. Lo mismo sucede en el caso contrario, si se saca una foto con la cámara en forma horizontal, la imagen resultante será más ancha que alta.

Esto parece bastante bueno. Lamentablemente muchos dispositivos (cómo los celulares) no vienen equipados con este dispositivo y todas las fotos terminan siendo, por ejemplo, más altas que anchas. Otra cosa a tener en cuenta es que la mencionada funcionalidad no funciona del todo bien en todas las cámaras. Si bien en el siguiente caso es algo apropiado:

En este no lo es:

Y nos interesa convertirla en:

El problema crece cuando sacamos muchas fotos[0]. Ya sea para compartirlas en Internet o para guardarlas en nuestra computadora queremos que estén posicionadas correctamente. En GNU/Linux es fácil rotar una imagen, el comando convert de ImageMagic, por ejemplo, lo hace en un instante. Si tenemos muchas imágenes a retocar, podemos hacer un script que recorra una lista de archivos y sobre todos realice el proceso. Pero en la mayoría de los casos no será tan simple. Querremos modificar algunas imágenes, pero querremos que otras se mantengan en su posición original. Lo ideal es utilizar un visualizador de imágenes y cada vez que encontramos una cuya posición queremos rotar, indicarle esto a visualizador para que la imagen sea rotada definitivamente.

GQview viene preparado para hacer esto, utilizando el comando jpegtrans. No tenía instalado este programa en mi computadora, pero pude editar la configuración del software para que ejecute mis comandos personalizados.

En Editar/Preferencias... solapa Editores podemos especificar una secuencia de comandos para ser ejecutados al elegir una opción del menú:

Completé las filas 7 y 8 con los siguientes valores:

Rotar imagen (sentido horario) - convert -rotate 270 %p %p

Rotar imagen (antihorario) - convert -rotate 90 %p %p

Ahora cuando estoy visualizando imágenes y encuentro alguna mal orientada, simplemente tengo que apretar Ctrl-7 u Ctrl-8 para ajustarla.

[0] en mi caso unas 1000, en mi viaje a Brasil.


El juego más votado de PyWeek 7!

Así como lo leyeron, mi humilde participación (de diez horas de código) en esta competencia fue el juego más votado (incluyendo a los juegos presentados por equipos). No me subí al podio, ni estuve en el top ten como me hubiese gustado, pero tengo el agrado de que 48 de mis pares se hayan tomado el trabajo de bajar mi juego, probarlo y votarlo.

En PyWeek solo aquellos que presentan juegos pueden votar. Básicamente se votan 3 características: Diversión, Producción e Innovación. Adicionalmente, al votar se puede dejar un comentario. Dejo aquí alguno de los comentarios que recibí:

Fun: 3 Prod: 3 Inno: 4

That was quite fun. It was a nice touch to put photographs of writings in paper and photos from your trip (probably took less time, even :)). The idea is fairly simple, but it is fun and it is a nice way to use the theme. The number of levels was just right to enjoy the concept well and the challenge was good for a person who doesn't have a music-oriented ear. The photos are nice to look at, too. Well done.

Fun: 2 Prod: 3 Inno: 4

Found it quite difficult and a little boring, although a novel idea, I liked the hand drawn(on paper) stuff... and it's particularly impressive for 10 hours :)

Fun: 3 Prod: 5 Inno: 4

Hilarious game -- the menus were hard to read, but the way you did them was fantastic. Comprehensive help, I never really got lost trying to play the game. It was a lot of fun to play around with, and I was able to beat the whole thing. Nice job on the game -- especially for one done so quickly! You set a small scope and did fantastically with what you had -- well done!

Fun: 3 Prod: 3 Inno: 4

For such a simple game it works pretty well. Randomly generating some tunes could have created some replayability. As it is, it does challenge the brain!

Gracias!


Preguntas y respuestas

Contesto cualquier pregunta siempre y cuando 'no lo sé' sea una respuesta válida.

Isaac Asimov


4 de Octubre - 3ra Jornada Python en Santa Fe

El próximo 4 de Octubre se llevará a cabo en instalaciones de la Universidad Tecnológica Nacional, Facultad Regional Santa Fe, la 3ra Jornada Python en Santa Fe [1]. Orientadas a programadores y profesionales de sistemas, estudiantes y público en general interesado en la programación, los invitamos a participar registrándose en nuestra web [2]. La asistencia es libre y gratuita.

Esta jornada consiste en una serie de charlas relacionadas con el lenguaje de programación Python. Ya está disponible el programa del evento [3].

¿Qué es Python?

Python es un lenguaje de programación interpretado, dinámico y orientado a objetos que puede ser utilizado en diferentes desarrollos de software y en múltiples plataformas. La característica de ser multiplataforma es algo muy interesante para los desarrolladores. El lenguaje se encuentra soportado en Unix, GNU/Linux, Widows/DOS, Macintosh… y la lista sigue. Desde grandes mainframes a pequeñas Palm. En la web oficial [4] del lenguaje encontrará mayor información y mucha documentación.

Y en el país existe una comunidad de desarrolladores muy fuerte, agrupada en PyAR, Python Argentina [5].

¿Quién utiliza Python?

La NASA, Google, Yahoo, Walt Disney y Red Hat son algunas de las grandes organizaciones que trabajan con este lenguaje. Google contrató a su creador, Guido van Rossum. En la mayoría de las distribuciones GNU/Linux encontramos Python ya instalado (se usa mucho como lenguaje de script para automatizar tareas). Y en el país también hay numerosas empresas que trabajan con Python: Lunix, Except, Lambda Sistemas, etc.

Recuerden registrarse [2] y los esperamos el 4 de Octubre!

[1] Web de la jornada: www.pythonsantafe.com.ar

[2] Registración: www.pythonsantafe.com.ar/registracion

[3] Programa: www.pythonsantafe.com.ar/programacion

[4] Web del lenguaje: www.python.org

[5] PyAR: www.python.com.ar



AIMA en Python

Inteligencia Artificial -un enfoque moderno-, el libro del que estoy estudiando tiene muchos de los algorítmos que explica en pseudo código implementados en Python.

Uno de los autores cuenta que originalmente estaban escritos en Lisp, pero muchos estudiantes tenían problemas con este lenguaje. En especial, saltar del pseudo código del libro a una implementación que corra en sus computadoras. El primer intento fue usar Java, pero no tuvieron éxito:

However, one attempt at getting Java code up and running was largely unsuccesful. Then I discovered Python and Jython, and thought this might be a better way to go than Java.

cita