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

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


Hay un nuevo ingeniero en la ciudad

El viernes pasado Gonzalo Slaboch presentó su proyecto final de carrera y se convirtió en un Ingeniero en Sistemas de Información. Felicitaciones Gonza!

Gonza Ingeniero



Robos cerca de la facultad

replico esta nota de El Litoral por si sale de línea.

Estudiantes y personal de la casa de estudios son víctimas de robos

Preocupan los asaltos en la zona de la Universidad Tecnológica

Les arrebatan celulares y los intimidan -a veces a mano armada- para apropiarse de dinero, aparatos electrónicos y zapatillas. Los ladrones son jóvenes, en su mayoría menores. Algunos estudiantes y trabajadores de la facultad cambiaron su rutina y salen en grupo o se vuelven a sus casas en taxi.

Con armas blancas, revólveres o bajo intimidación son asaltados los alumnos, docentes y no docentes en las inmediaciones de la Facultad Regional Santa Fe de la Universidad Tecnológica Nacional.

Los hechos suceden principalmente de noche y son perpetrados por jóvenes, en su mayoría menores, a pocas cuadras de la casa de estudio. Los ladrones andan a pie o en bicicleta, merodean la zona y transitan por las calles que conducen a las paradas de colectivo. Exigen celulares, plata y zapatillas y no se amedrentan al toparse con grupos.

Las historias se comentan como pan caliente en las aulas y oficinas de la Universidad Tecnológica. Y aunque los asaltos en la vía pública los sufren desde febrero, los testigos sostienen que se incrementaron en los últimos meses.

"Desde que empezaron las clases no hay noche que no haya un alumno afectado. Incluso, al hijo de un empleado de la UTN le gatillaron el arma pero la bala no salió. El jueves o viernes pasado, a tres chicos que esperaban el colectivo juntos les robaron con armas", comenta Sonia, una docente de la casa de estudios, cuyo hijo, Eduardo, fue intimidado por ladrones hace tres semanas.

Sonia, al igual que otras personas, nota que a partir del asesinato de la vecina de Guadalupe hay más policías "de mañana y de tarde; pero de noche no hay".

Esta docente está "preocupada porque no ve presencia policial desde las 7 de la tarde y hasta las 12 de la noche que es cuando los estudiantes salen de la facultad". "Me preocupa como trabajadora de esta facultad, como mamá de un estudiante pero además como miembro de la sociedad porque estamos viendo que hay varios asaltos cometidos por rateritos, no son ladrones que se mueven en auto, son chicos de la calle. Se soluciona poniendo uno o dos patrulleros que se vayan moviendo desde la facultad a las paradas de colectivo".

Solos o en grupos

Eduardo tiene 22 años y estudia ingeniería civil. Le robaron hace tres semanas, cerca de las 11 de la noche, en el camino de la facultad a su casa. Dos chicos que parecían estar alcoholizados lo siguieron unas cuadras por Patricio Cullen. Eduardo simuló atarse los cordones para dejarlos pasar, pero no logró desviar de su objetivo a los malvivientes.

Uno lo frenó y le dijo que se quedara quieto."Pensé en pegarle porque lo vi solo pero apareció el otro por atrás. Cuando me dijo: `Dame todo porque si no te mato o algo así, porque ya no me acuerdo bien, le di el celular que tenía a mano. Pero cuando escucho que el que venía atrás monta una pistola, le di todo", relata Eduardo.

Sonia, su mamá, sostiene que cuando le robaron a su hijo le llamó la atención que la zona parecía "liberada". "Salieron con mi esposo a recorrer el barrio, desde La Lona hasta la Iglesia de San Cayetano, por la costanera y por Guadalupe, lo recorrieron durante dos horas y no encontraron un solo móvil de policía".

Silvina trabaja en la Dirección Académica de la UTN y fue otra víctima de los ladrones, en las inmediaciones de la facultad. El 10 de agosto, luego de pasar la plaza Chaplin, dos personas la interceptaron. "Una me amenazó con un cuchillo y me pidió la cartera. Le decía que no pero cuando me acercó más el cuchillo me asusté. Terminó de tironear la cartera, me rompió el saco que llevaba puesto y se la llevó", relató.

A Valeria, una joven de 19 años, y a sus cuatro amigas le salieron al cruce hace dos semanas, también a la altura de la plaza Chaplin. Terminaron de practicar fútbol en el estadio de la UTN y las sorprendieron para robarles. "Eran dos, tenían más o menos nuestra misma edad y estaban bien vestidos. Nos pidieron primero los celulares, cuando le dije que no tenía me pidieron lo que tuviera". Las chicas escaparon corriendo y a los gritos, y los rateros se fugaron por la ciclovía.

La UTN se ocupa

Las autoridades de la Facultad Regional Santa Fe de la Universidad Tecnológica Nacional (FRSF-UTN) están preocupadas por los robos que sufren alumnos, docentes y no docentes.

El Ing. Jorge Caminos, secretario General de la casa de estudios, dijo que cada vez son "más frecuentes" los asaltos y que "la inseguridad es bastante importante en la zona". "No es en la facultad misma sino cuando la gente termina sus actividades y se va a tomar un colectivo o a otro lado".

Si bien la situación se registra desde hace algún tiempo, Caminos sostiene que "en el último mes, pasó a ser extremadamente preocupante. Convivimos diariamente con gente que se está drogando con pegamento y continuamente hay muchachos dando vueltas por acá. Hemos hecho todas las denuncias correspondientes a todos los lugares posibles, pero vienen, se los llevan y al rato están nuevamente acá. Y esta gente también está causando algunos problemas", comentó Caminos.

"La mayor preocupación es que cuando uno hace la denuncia o habla con la gente te dicen que son menores, que los detienen pero al rato salen. Y con los drogadictos que hay dando vueltas pasa lo mismo. Y uno ve que es así. Viene un patrullero, los cargan y a las cuatro horas están instalados otra vez acá", sostiene el secretario de la facultad.

Los asaltos no son todos iguales. "Hay de todo un poco: manoteos, acciones con violencia; todo depende de cómo reaccione la gente que está siendo asaltada. Han agredido a algunos docentes y hay otros casos que los paran, les dan algo y no pasan a una agresión física", comentó Caminos, tras indicar que están preocupados de que la situación pase a mayores.

Para evitar eso, desde la UTN se comunicaron con autoridades de la comisaría 5°, con personal de gobierno y de la Jefatura de la Policía Provincial.

La respuesta que recibieron es que "toman acciones pero no lo vemos en los hechos", dice Caminos. "Hay un patrullero dando vueltas y por ahí algunos policías, pero nada más que eso. Los asaltos siguen sucediendo", remata la autoridad universitaria, quien dice que hablan en forma permanente "con todos los actores que puedan ayudar" a solucionar el tema.

Cambio de hábitos

Los que fueron protagonistas de robos ahora se cuidan u optan por cambiar la rutina. Quienes viven cerca de la facultad utilizan taxis y remises, los demás salen en grupo para tomar el colectivo o esperan que alguien los pase a buscar en auto. Pero más allá de las precauciones que toman, no se sienten seguros. Queda el miedo, la incertidumbre de que vuelva a pasar.

"Antes salías tranquila, ahora tenés que tomar todos los recaudos del caso: no andar con bolsos grandes, el celular te lo tenés que meter dentro del vaquero, no podés llevar billetera y tenés que andar con la plata justa porque corrés el riesgo de que te desvalijen", sostiene Gladys, una empleada de la Universidad que trabaja en el Departamento de Concursos de la Dirección de Recursos Humanos y que se salvó de ser asaltada gracias a que pidió auxilio a un vecino.

"Hace cuatro años que vivo en esta zona. Siempre alquilo por acá para ir caminando hasta la facultad. Ahora tengo que arreglar con mi novio para que me vaya a buscar o molestar a alguien en la facultad para que me traiga. No es como antes que vos salías tranquila y en 5 minutos estabas en tu casa", agregó Gladys.

Similares medidas toma Valeria, que a partir de las 20 horas vuelve en taxi hasta su casa. Eduardo comenzó a utilizar la bicicleta, porque así se siente más seguro y Sonia se compró un auto para unir el camino de su casa a la facultad, o si va sin móvil espera a que alguien la acerque o acompañe a su casa.


Hunt the Wumpus!

Mientras cursamos este cuatrimestre Intelegencia Artificial en la facu uno de los ejemplos que aparecía era el del Wumpus, un monstruo que vive en una cueva muy parecida a una grilla. El Wumpus ocupa una casilla de la grilla (dónde inicialmente está dormido) y en las otras puede haber pozos, viento de un pozo cercano, olor a Wumpus o un lingote de oro. Y por supuesto nosotros (el cazador).

Este escenario constituye un juego en el cual el cazador (que solo puede percibir lo que hay en las celdas adyacentes a las que ocupa) debe realizar movimientos (Arriba, Abajo, Derecha, Izquierda) o acciones como lanzar una flecha o tomar el lingote para cumplir su objetivo: salir de la cueva con el oro y sin ser comido por el Wumpus.

Hasta aquí nada nuevo para contarles. Lo curioso del asunto es que yo pensaba que el juego era solo una herramienta didáctica, que agradable sorpresa encontrarlo mientras navegaba la web: http://www.catb.org/~esr/wumpus/.

           WUMPUS and SUPERHACK



WUMPUS is a bit of retrocomputing nostalgia.  It is an *exact* clone, even

down to the godawful user interface, of an ancient classic game.  This version

fixes two minor bugs in my original 1992 USENET posting of the source.  An

article describing the history of the game is at



    http://www.atariarchives.org/bcc1/showpage.php?page=247



SUPERHACK is a satire, structurally quite similar to WUMPUS.



For updates and related resources, see <http://www.catb.org/~esr/wumpus/>

Intrigado bajé el código fuente y sin problemas lo compilé en mi computadora, cuando lo ejecuté esto fue lo que vi en la pantalla:

WELCOME TO 'HUNT THE WUMPUS'
THE WUMPUS LIVES IN A CAVE OF 20 ROOMS. EACH ROOM HAS 3 TUNNELS LEADING TO OTHER ROOMS. (LOOK AT A DODECAHEDRON TO SEE HOW THIS WORKS-IF YOU DON'T KNOW WHAT A DODECAHEDRON IS, ASK SOMEONE) HAZARDS: BOTTOMLESS PITS - TWO ROOMS HAVE BOTTOMLESS PITS IN THEM IF YOU GO THERE, YOU FALL INTO THE PIT (& LOSE!) SUPER BATS - TWO OTHER ROOMS HAVE SUPER BATS. IF YOU GO THERE, A BAT GRABS YOU AND TAKES YOU TO SOME OTHER ROOM AT RANDOM. (WHICH MAY BE TROUBLESOME) TYPE AN E THEN RETURN

Hay una versión en Python que funciona out-of-the-box (aka doble click for win slang) que nos permite disfrutar del juego sin siquiera la necesidad de compilarlo. Demasiado perezosos como para bajar un archivo? Ok, les dejo esta versión on-line (aunque la interfaz no es como la original).

Cómo para casi todos los temas importantes, más información en la Wikipedia.


FLISoL 2007 en Santa Fe

Este sábado se llevó a cabo enmás de 160 ciudades de 17 países el 3º Festival Latinoaméricano de Instalación de Software Libre. Lo que sigue es mi apreciación personal del evento, para información sobre el evento en Santa Fe visitar: FLISoL 2007 en la web del LUGLi.

El sábado 28 empezó temprano, a la 6:30 am sonó el despertador de mi celular y el hecho de haberme acostado solo unas 5 horas antes se sintió en mi cuerpo. Uno es siempre más valiente cuando pone el despertador que cuando este suena. Pero hoy tenía que levantarme, arriba.

Le había dicho a César que a las 7:00 am iba a estar en su casa para imprimir algunos carteles que ibamos a necesitar ese día (como un mapa para pegar en la entrada de la facu indicando como llegar al alboratorio donde ibamos a estar realizando las instalaciones). 7:01 golpeo las manos en la puerta de la casa amarilla. Luego de aplaudir recojo lo que había depositado en el suelo para liverar mis manos: u na bolsa con CDs de Ubuntu y un embace de capuccino instantaneo, ese día no desayunaba en casa.

Mientras algunas cosas se imprimían y tomaba mi desayuno me puse a navegar en Internet con la notebook que césar se había comprado un par de días antes. Desde la web del festival llegué a un sitio peruano con canciones muy divertidas. (Para saber de que les hablo no dejen de entrar a http://pero.flisol.net, esperen unos momentos y escucharán una canción, luego entren a la sección Audio para escuchar un spot publicitario).

La hora de encuentro era 8:00 am, como para acomodar el laboratorio. A eso de las 9:30 am eramos muchos los miembros del LUGLi listos para nuestro trabajo y a esa hora empezó a llegar gente. Algunos no sabían nisiquiera que se hacía ahí, habían llegado para escuchar, para ver e que se trataba. Otros, más aguerridos, llegaban con sus computadoras bajo el brazo, luego de subirla 3 pisos por que el asensor dejaba de funcionar por ráfagas.

En el pizarrón del laboratorio escribimos:

  • Instalaciones:
    • Exitosas: 0
    • Fallidas: 0

Y empezaron las instalciones! Mucha gente llegó por la mañana y contrariamente a lo que nos imaginábamos, otro tanto calló a la tarde. El final de nuestro tanteador fue:

  • Instalaciones:
    • Exitosas: 14
    • Fallidas: 2

Lamentablemente no pudimos cargar estos datos en el sistema oficial del festival, no se si luego podremos :(

Siguiendo un poco con el balance, nos pareció un día exitoso, lo pasamos bien y mucha gente se fué contenta a su casa son Software Libre en su computadora. Espero que los asistentes pienen lo mismo que nosotros.


1ª experiencia XP

Métodos Ágiles

Métodos Ágiles para el Desarrollo de Software es una materia electiva del segundo cuatrimestre de 4º año de Ingeniería en Sistemas de Información en la la facultad dónde estudio (UTN-FRSF). Yendo al grano: estudia los llamados Métodos Ágiles, en particular eXtreme Programming.

La idea de estas metodologías, a diferencia de las tradicionales es evitar la tortuosa y burocrática documentación, a la vez que se enfocan en las personas y en los resultados.

XP: Programación eXtrema

Dentro de este contexto, la Programación eXtrema (una de las metodologías más exitosas del rubro) se presenta como una diciplina de desarrollo de software basada en valores como simplicidad, comunicación, retroalimentación y valor. Trabaja poniendo a todo el equipo ante práctica simples, con suficiente retroalimentación para permitirle ver dónde está y cómo encarar un problema particular.

En XP, cada contribuidor al proyecto es una parte integral del Equipo. El equipo se forma al rededor de un representante del negocio, llamado El Cliente, el cual se sienta y trabaja con el equipo diariamente (cliente in-situ).

Nuestro trabajo práctico consistía en desarrollar la primer versión de un sistema de gestión de socios de un club en base a una lista de historias provistas por la prfesora. Las historias son la forma en la que XP define los requisitos para el sistema.

Para realizarlo llevamos a cabo algunas de las prácticas que XP propone (las escribo sin un orden específico), bold significa que aplicamos conscientemente la práctica:

  • Cliente in-situ
  • Juego de la planificación
  • Metáfora
  • 40 hs semanales
  • Diseño sencillo
  • Recodificación
  • Programación en parejas
  • Pruebas
  • Versiones cortas
  • Propiedad colectiva
  • Estándares de codificación
  • Integración continua

Puede ser que el listado de prácticas no sea novedoso para algunos, de hecho son todas prácticas existentes. XP lleva su nombre por llevar todas estas prácticas al extremo. Si hacer pruebas es bueno, se escribirán pruebas para todos los métodos que lo ameriten y luego se escribirá el código que pase esas pruebas. Si integrar es bueno, se integrará continuamente. Si la retroalimentación del cliente es buena, se sumará este al equipo de desarrollo.

Se puede leer más sobre XP en:

Programación en parejas

Una de las prácticas que conscientemente llevamos a cabo fue la de programar en parejas. En el grupo eramos 4 y tuvimos la suerte de trabajar siempre en una casa con dos computadoras, por lo que las parejas podían ir rotando y hacerse consultas entre ellas. A mi parecer es una de las prácticas más importantes de XP, y es un tema tan amplio que hasta tiene su propio sitio web:

pair programming

pair programmers

Pruebas (de unidad)

El lenguaje de programación utilizado fue Java. También usamos un framework para mapear objetos en memoria a una base de datos relacional (Hibernate) y uno para generar reportes (JasperReports). Elegimos estas herramientas por que ya las habíamos usado para un trabajo práctico previo, lo que nos permitió poner foco en la metodología y no en la herramienta.

Para trabajar con pruebas, también utilizamos un framework (JUnit), desarrollado originalmente por Erich Gamma y Kent Beck (creador de XP). Trabajar de esta forma nos gustó muchos a todos los miembros de grupo, saber que luego de ese cambio el software sigue pasando las pruebas es alentador y refuerza uno de los valores de XP, la valentía.

Básicamente lo que hacíamos era:

1) Pensar en un método que se necesitaba.

2) Crear una prueba para ese método.

3) Correr la prueba. Fallaba.

4) Escribir código que haga pasar la prueba.

5) Correr la prueba. Si fallaba volvíamos al punto 4.

JUnit te provee de métodos parecidos a:

assertEquals(valorEsperado, valorCalculado);

Esa última línea puede fallar o puede pasar. A la vez se crea un árbol de pruebas con todas las que hallamos escrito y cuando lo ejecutamos, a medida que las pruebas van pasando una barra verde se va completando. Si la barra se completa de color verde significa que todas las pruebas pasaron. Si alguna prueba falla, la barra se vuelve roja.

Una de las prácticas es la recodificación (esta nos ayuda a mantener un diseño simple), pero.. como recodificar y saber que no hemos cometidos errores? Luego de realizar un cambio corremos nuevamente las pruebas. Si obtenemos una barra verde estamos listos para el siguiente cambio. Rigurosamente la barra verde nos indica que el sistema sigue pasando las pruebas que antes pasaba, no que no tenga errores, pero en la práctica parece ser una buena aproximación.

JUnit

keep de bar green

Frog

ClubXP

Además, como refuerzo para la Integración continua utilizamos Subversion para mantener ordenas las revisiones que ibamos haciendo del código: clubxp en code.Google.

Saludo

Bueno, fue algo de lo que quería contar. En estas fechas de finalización de cursado no escribo casi nada en el blog, así que les dejo un saludo y Hasta la próxima!


Beta 1.1 de RadioFrecuencia

RadioFrecuencia es una herramienta que estoy haciendo para la cátedra de Comunicaciones la cual permite, dados los datos de una instalación de dos antenas calcular si existe línea de vista, si es factible la comunicación (sensibilidad de recepción) y realiza un diagrama de vano.

El 7 de septiembre le mandé un mail a avarios amigos con la dirección web de la primera versión beta que la prueben y me avisen de errores que encuentraban (muchas gracias a todos los que la probaron!). Estuve haciendo algunas correcciones y dejé en http://firebirds.com.ar/~juanjo/rf/ [UPDATE] http://comunicaciones.firebirds.com.ar/rf/ una versión un poco más refinada. Sin enbargo todavía faltan algunas cosas como permitir seleccionar un tipo de antena y a partir de este seleccionar alguna característica particular del tipo como diámetro o sectorización y a partir de estos datos la herramienta solo obtendría la ganacia de la antena. Actualmente la ganancia es introducida directamente por el usuario (alumno).

Qué falta?

  • Una mejor forma de selección del tipo de antena (lo que mencioné antes) [REQUERIRÁ SU TIEMPO]
  • Permitir poner obstáculos entre las antenas: esto ya es soportado por el módulo que se encarga de generar el diagrama de vano pero todavía tengo que hacer una buena interfaz que permite cargar fácilmente para cada obstáculo la distancia que lo separa de la primer antena y su alura. [REQUERIRÁ SU TIEMPO]
  • Permitir la carga manual de algunos valores. [MEDIO]
  • Brindar otros datos de interés en la salida. [TRIVIAL]

Ejemplos de salida

rf3

rf1

rf2

Una nota de color (gris)

Cuando lo probé desde Internet Explorer, el navegador de Microsoft me di cuenta de que no se veía tan bien como yo lo venía en mi máquina (con Firefox de la fundación Mozilla), el problema es que IE no soporta imagenes en formato PNG con transparencia. Abajo unos ejemplos de las imágenes con las que tuve problemas:

rf4

rf5

Querés leer maś sobre esto? Hay mucho allá afuera. Realmente este tema (y las diferencias entre los navegadores en general) es una molestia para las personas que desarrollan para la web. La mentablemente los navegadores que no se preocupan por cumplir con los estándares no ayudan a resolver el problema. Por mi parte.. me uno al grito: Spread FireFox!


Programación Temporal de Eventos con Python

Este artículo estuvo en mi lista de borradores (draft posts) por mucho tiempo ya. Evidente mente no cumplí con la consigna release early del desarrollo tipo bazar. Enough!

Este artículo va a hablar un poco de simulación de sistemas discretos, va a presentar un módulo que escribí como prueba de que se podía hacer y me va a servir para contarles algunas cosas uq e aprendí en el camino.

Sigo Aprendiendo Python y esta es una clase más.

Programación temporal de eventos

En el primer cuatrimestre de este año cursé una materia llamada Simulación. Estudiamos principalmente como simular sistemas discretos (como un grupo de pasajeros subiendo a un avión. Suben de a uno, en un momento hay 7 pasajeros a bordo y en otro momento hay 8, nunca hay 7.5) en contraposición a los sistemas continuos (como el tanque de nafta del avión dónde su nivel baja instante a instante cuando el avión está volando).

Básicamente existen dos tipos de técnicas que se pueden utilizar para simular sistemas discretos, las de orientación al intervalo y las de orientación al evento. En las del primer tipo, cada cierto tiempo t se verifica de alguna forma si ha ocurrido un evento y se realiza el procesamiento asociado a este. Esto lleva a impresiciones y en ocasiones a un gasto innecesesario de cpu. En las técnicas de orientación al evento estos problemas no existen.

Una de las técnicas más primitivas de orientación al intervalo (no se si se usa en la actualidad) es la de Programación Temporal de Eventos. Básicamente se tiene un reloj que cuenta el tiempo de simulación y una lista de eventos ordenada en el tiempo. Uno debe escribir una función o procedimiento por cada uno de los eventos principales del sistema (por ejemplo la llegada de una pieza a una máquina) y una función principal que contenga el main loop de la simulación. Esta irá tomando eventos de la lista, avanzará el tiempo de simulación según corresponda y los ejecutará. Siempre se toma el primero y se lo ejecuta, si no hay más elementos en la lista termina la siumulación.

Los eventos son agregados a la lista con una primitiva llamada por ejemplo PPE (programar próximo evento), dónde además de indicar cual será el próximo evento, se debe indicar dentro de cuanto tiempo a partir del actual se debe ejecutar.

Mientras cursaba, estudiaba y rendía pensaba que sería muy fácil implementar en Python un módulo que provea las primitivas necesarias para realizar una simulción por programación temporal de eventos. Poner y sacar funciones de una lista seguro sería sencillo en un lenguaje muy dinámico y donde todo (incluidas las funciones) son objetos. La semana siguiente a rendir estuve escribiendo un poco de código Python. El resultado es un módulo llamado pte que cubre las funcionalidades mínimas que yo pretendía.

Resultado

No pretendía realizar un imponente desarrollo ni pienso que alguien use esto alguna vez en serío. Es más bien una prueba de concepto (Proof of concept). Lo había avandonado y ni siquiera funcionaba sin tirar errores. Objetivo: que funcione.

Este es el módulo: pte.py (versión orginal)

Una versión con el consejo de Daniel: pte-d.py (gracias Daniel!)

Y este un ejemplo en el que lo uso: pte_ej2.py

Ejemplo de ejecución:


juanjo@sarge:~/python$ ./pte_ej2.py



500 piezas fueron aceptadas en 1247.55 unidades de tiempo.



Máximo tamaño de la cola para procesamiento 5.

Qué aprendí

Módulos

Más de lo que pueda decir sobre módulos: http://docs.python.org/tut/node8.html

reload(modulo)
Reload a previously imported module. The argument must be a module object, so it must have been successfully imported before. This is useful if you have edited the module source file using an external editor and want to try out the new version without leaving the Python interpreter. The return value is the module object (the same as the module argument).
Entonces lo que hay que hacer cuando se está trabajando en la consola de Python[1] es, primer importar el módulo que se quiere probar:

>>> import modulo

Hacer algunas pruebas:

>>> modulo.var1

1

>>> modulo.cuad(3)

9

Si luego editamos el texto de modulo y queremos probar la función que agregarmos:

>>> modulo = reload(modulo)

Funciones como objetos

En Python todo es un objeto, incluso las funciones. Sabiendo esto y teniendo en mente lo que quería hacer (en la definición de una función, explicitar que esta se llame en el futuro, es decir almacenarla en una lista de eventos) hice una pequeña prueba en el intérprete:

>>> l = []

>>> def f():

    l.append(f)





>>> l

[]

>>> f()

>>> l

[<function f at 0x418bce9c>]

>>> l[0]

<function f at 0x418bce9c>

>>> l

[<function f at 0x418bce9c>]

>>> l[0]()

>>> l

[<function f at 0x418bce9c>, <function f at 0x418bce9c>]

Esto es posible justamente gracias a que en Python las funciones son objetos. En ciencias de la computación esto se conoce como Funciones de Primera Clase, es decir que las funciones sean Objetos de Primera Clase, es decir que puedan ser creadas durante la ejecución de un programa, almacenadas en estructuras de datos, recuperadas más tarde para usarlas, pasadas como argumentos y retornadas en otras funciones. Más al respecto en wikipedia.

Ordenar según un criterio propio

Una lista puede ser ordenada según un criterio propio pasándole al método sort de una lista ese criterio en forma de función:

def _comparar_tiempos(a,b):

    """ Función auxiliar usada para ordenar los pares eventos,tiempos

    en la lista de eventos.

    """

    t1 = a[1]

    t2 = b[1]

    if (t1 > t2): return 1

    elif (t1 < t2): return -1

    else: return 0

y luego..

eventos.sort(_comparar_tiempos)

Espero les haya resultado interesante! [1] También conocida como REPL, algo muy piola cuando uno esta desarrollando.


Contribución recibida para la página de Paradigmas!

Mantengo esta página con ejercitación y otra documentación sobre la materia Paradigmas de Programación que se dicta en la Facultad Regional Santa Fe de la Universidad Tecnológica Nacional, la semana pasa recibí este mail:

Hola, acabo de rendir Paradigmas y para eso con un compañero hicimos

varios finales.

La verdad hubiese estado bueno si alguien los hubiese hecho y posteado

por ahí. Como ustedes hicieron una página con cosas de Paradigmas, se

nos ocurrió pasárselos y ver si los pueden subir para que le sirvan a

alguien más.

Salu2

Los archivos que recibí ya fueron subidos a la página, si cursaste Paradigmas, la estudiaste, la rediste y en el proceso creaste una biblioteca de funciones o resolviste problemas y querés compartirlos con otros estudiantes, mandáme un mail!