31 de diciembre de 2017

4° Congreso Internacional de Innovación Educativa

Del 11 al 13 de diciembre de 2017 se llevó a cabo en la ciudad de Monterrey, Nuevo León, México, el 4° Congreso Internacional de Innovación Educativa (CIIE). Este congreso tiene como objetivo principal que los participantes conozcan las tendencias y prácticas que están revolucionando la educación en el mundo. Esta edición del congreso logró juntar a más de tres mil profesores de 17 países.

Fuente: observatorio.itesm.mx

En el marco de este congreso tuve la oportunidad de fungir como coordinador de un panel titulado “Enseñando a programar usando el lenguaje Python”. Este es su resumen:
El lenguaje de programación Python se ha popularizado en el ámbito educativo en años recientes. Guo (2014) reportó que 8 de las 10 universidades más importantes en el área de ciencia de la computación en los Estados Unidos están actualmente utilizando Python en sus cursos de introducción a la programación. Algunos profesores del Tecnológico de Monterrey también están usando este lenguaje para enseñar a programar a sus estudiantes de diversas carreras profesionales, desde aquellas en el área de TI e ingeniería hasta las de arte y medios digitales. Este panel tiene como intención permitir a varios de estos profesores compartir sus experiencias y reflexiones en el uso de Python en los cursos de Fundamentos de programación (Tc1014) y Solución de problemas con programación (Tc1017). Python provee muchas ventajas como primer lenguaje de programación: tiene una sintaxis y semántica sencilla y consistente, viene con “baterías incluidas” (extensa biblioteca estándar), su naturaleza interactiva lo hace ideal para llevar a cabo experimentación y desarrollo rápido, es software libre y corre en múltiples plataformas (Windows, macOS y Linux). Sin embargo, Python no es un lenguaje perfecto, por lo que también abordaremos en este panel algunas de sus fallas y limitaciones.
El panel estuvo conformado, además de mí, por los siguientes cuatro destacados profesores del Tecnológico de Monterrey:
  • Alma Patricia Chávez Cervantes (Campus Estado de México)
  • Irma María García Barranco (Campus Estado de México)
  • Kenneth William Bauer (Campus Guadalajara)
  • Eduardo Daniel Juárez Pineda (Campus Querétaro)

Los integrantes del panel “Enseñando a programar usando el
lenguaje Python”. Atrás: Patricia Chávez y Ken Bauer. En frente:
Irma García, Ariel Ortiz y Eduardo Juárez.

En el panel se discutieron las ventajas y desventajas que tiene Python como primer lenguaje para enseñar a programar y cómo se compara con otros lenguajes (por ejemplo C, C++ o Java). Así mismo, se presentaron ejemplos de cómo se puede utilizar Python y bibliotecas de terceros para resolver problemas de dominios variados, como son: cómputo científico e ingenieril, procesamiento de medios y programación de microcontroladores. Finalmente, se compartieron experiencias, sugerencias, prácticas y recursos que seguramente resultarán útiles a otros maestros interesados en adoptar Python en sus clases.

Fuente: www.ezlearning.co.uk

El panel fue recibido de manera bastante favorable por el público asistente, compuesto por más de una veintena de personas. En particular, varios profesores de nivel preparatoria se mostraron muy interesados en los temas tratados.


Se pueden consultar las siguientes ligas para encontrar más información sobre este panel y el CIIE 2017 en general:

31 de julio de 2017

pyboard: Python en un microchip

A finales del año 2013, el físico y programador australiano Damien George arrancó desde el Reino Unido una campaña en Kickstarter para recaudar fondos con el fin de desarrollar una plataforma de hardware libre basada en una placa con un microcontrolador que soportara directamente el lenguaje Python. Esencialmente quería diseñar algo parecido a un Arduino, pero que pudiera programarse de manera eficiente en Python en lugar de los lenguajes comúnmente disponibles para programar microcontroladores (C/C++ y ensamblador). La meta inicial de George era recaudar 15,000 GBP (aproximadamente equivalente a 25,000 USD de aquel entonces) para elaborar su proyecto, pero al finalizar la campaña había recaudado 97,803 GBP (más de 160,000 USD). Y así fue como surgió el pyboard.

Damien P. George, creador del pyboard.
Fuente: dpgeorge.net

El software

Central en el proyecto del pyboard fue el desarrollo de MicroPython, un subconjunto de Python 3 elaborado también por Damien George. Al re-escribir este intérprete desde cero, George logró que fuera suficientemente pequeño para poder caber y correr en un microcontrolador.


MicroPython utiliza muy poca memoria RAM e incluye una pequeña fracción de la biblioteca estándar de Python. Aún así, MicroPython soporta características avanzadas como son: enteros de tamaño arbitrario, cerraduras léxicas (closures), listas por comprensión, generadores, manejo de excepciones e incluseo un shell interactivo. Al correr directamente sobre los fierros, MicroPython funge efectivamente como el sistema operativo del pyboard.

Teóricamente, los requisitos mínimos de memoria para que un sistema pueda soportar MicroPython son: 128 kibibytes de ROM y 8 kibibytes de RAM. Gracias a eso ha sido migrado exitosamente a otras plataformas. Además del pyboard, el sitio oficial ofrece el firmware requerido para correr MicroPython en los microchips WiPy, ESP8266, ESP32, Espruino Pico, STM32F4, NUCLEO-L476RG y micro:bit.

El hardware

La placa del pyboard contiene un microcontrolador STM32F405RG de STMicroelectronics con las siguientes características:
  • Procesador RISC de 32 bits ARM Cortex-M4F.
  • Una velocidad de reloj de 168 MHz.
  • Registros de 32 bits: 
    • 16 para valores enteros.
    • 32 para valores de punto flotante de precisión sencilla.
  • 192 kibibytes de memoria RAM para almacenar datos volátiles.
  • 1024 kibibytes de memoria flash ROM para almacenar el código del programa.
  • 13 temporizadores independientes.
  • Soporte de protocolos UART, I2C, SPI y CAN para comunicación con periféricos.
  • Hardware generador de números aleatorios (TRNG, true random number generator).

El pyboard v1.1.
Fuente: MicroPython Store

La placa del pyboard tiene un tamaño de 4.1 cm × 3.2 cm × 0.2 cm y cuenta adicionalmente con los siguientes elementos:
  • Conector micro-USB: sirve como fuente de alimentación y también permite establecer comunicación serial con una computadora anfitriona.
  • Ranura para tarjeta microSD de capacidad estándar (SDSC) y alta capacidad (SDHC).
  • Acelerómetro de tres ejes.
  • Reloj en tiempo real (oscilador de cristal) a 32 kHz.
  • Dos botones: RST (hard reset) y USR (funcionalidad definida por el usuario).
  • Cuatro ledes (colores: rojo, verde, amarillo y azul).
  • 30 pines GPIO (general-purpose input/output).  

Comparando pyboard con Arduino

La principal ventaja de un pyboard sobre un Arduino tiene que ver con la forma en que soportan Python. En diversas entradas de este blog hemos programado el Arduino usando Python, pero no debemos perder de vista que el Arduino debe estar siempre conectado a una computadora anfitriona a través de un cable USB. Esto es así porque el programa de Python corre en el sistema anfitrión y no en el Arduino. El Arduino funge como esclavo que corre un ejecutable (típicamente escrito en C/C++) que implementa el protocolo de Firmata y que le permite establecer una comunicación serial en dos sentidos con el programa que lo controla y que corre en la PC anfitriona. El pyboard, por otro lado, puede correr programas en Python sin necesidad de estar conectado en todo momento a una computadora anfitriona. El pyboard tiene instalado localmente el intérprete de MicroPython y solo basta transferir (vía la conexión USB) a su memoria flash el programa *.py que deseamos correr. Una vez hecho esto, podemos desconectar el pyboard del sistema anfitrión y solo requerimos proveerle a la placa un suministro eléctrico alternativo, por ejemplo un banco de energía (como los que se usan para recargar las pilas de los teléfonos celulares). A partir de ese momento nuestro programa en Python se ejecuta automáticamente al encender o reiniciar el pyboard.

Un pyboard (en su estuche protector)
conectado a un banco de energía.

Cuando el pyboard está conectado a la computadora anfitriona podemos llevar a cabo una sesión interactiva con el shell de MicroPython corriendo directamente sobre la placa. Para lograr lo anterior tenemos que abrir una ventana de línea de comando en el sistema anfitrión y luego correr algún emulador de terminal tonta (por ejemplo screen o picocom) que permita conectarse al pyboard. Cuando corremos el shell podemos jugar y experimentar directamente con todas las facilidades provistas por la placa. El shell también puede ser bastante útil durante el proceso de depuración de nuestros programas. No existe una funcionalidad similar a ésta cuando se programa el Arduino usando C/C++.

El shell de MicroPython corriendo sobre el
pyboard y siendo visualizado en una
ventana de línea de comando en la
computadora anfitriona.

Otra diferencia entre el Arduino y el pyboard son las herramientas de desarrollo que se utilizan. Arduino necesita su propio IDE (ambiente de desarrollo integrado) para editar archivos, compilarlos y transferir los ejecutables a la placa. Para usar el pyboard no necesitamos ningún software especial, salvo el editor de nuestra preferencia. Resulta trivial la transferencia de archivos gracias a que la placa se comporta como una memoria USB al momento de conectarla a la máquina anfitriona, la cual puede estar corriendo Windows, macOS o Linux.

El pyboard tiene otra ventaja sobre Arduino que puede ser benéfica particularmente para principiantes. Al incorporar de fábrica cuatro ledes, un botón y un acelerómetro, es posible elaborar diversos proyectos interesantes en el pyboard sin requerir hardware adicional. Es posible empezar a hacer experimentos sencillos de computación física sin tener la necesidad de conseguir y conectar actuadores, sensores, resistencias y cables a un protoboard.

Caos resultado de un exceso de componentes electrónicos.
Fuente:
Harvard Business Review

Dado que el hardware del pyboard es de mayor capacidad y más sofisticado que la mayoría de los modelos existentes de Arduino, resulta también ser un tanto más costoso. Irónicamente, puede resultar que un programa escrito en C/C++ para Arduino se ejecute más rápido que su equivalente en Python para el pyboard. Esto se debe a que en estas plataformas el código de C/C++ se compila mientras que el de Python se interpreta. Como es bien sabido, los programas interpretados son usualmente más lentos y requieren más memoria que los compilados debido a la necesidad de traducir el código fuente mientras se corre. En la práctica, el impacto en los tiempos de ejecución normalmente no repercute de forma significativa en la mayoría de los programas escritos para el pyboard. Y si esto llegara a ser un problema, existe la opción de escribir porciones limitadas de código en C/C++/ensamblador que pueden ser invocadas desde el código de MicroPython para optimizar los cuellos de botella y obtener así un mejor desempeño pero sin reducir sustancialmente la productividad que se consigue al programar primordialmente en Python.

Comparando pyboard con Raspberry Pi

La Raspberry Pi (RPi) y el pyboard pertenecen a dos categorías diferentes de placas electrónicas. La RPi es una computadora monoplaca (single-board computer) que para fines prácticos es casi una computadora completa. Tiene su propio sistema operativo (usualmente alguna distribución de Linux) y para usarla necesitamos (generalmente) conectarle mouse, teclado y monitor. El modelo 3 de la RPi ya cuenta incluso con Bluetooth y Wi-Fi. Por otro lado, el pyboard (al igual que el Arduino) es un microcontrolador monoplaca (single-board microcontroller). Esto significa que un pyboard es más sencillo y tiene típicamente un propósito más restringido que una RPi. Conviene mencionar que una RPi puede servir de sistema anfitrión para programar a un pyboard.

Por sus características de hardware, una RPi modelo 3 resulta una buena opción para realizar proyectos de IoT (internet de las cosas). En contraste, el pyboard no cuenta con un esquema de comunicación inalámbrica, por lo que no resulta adecuado para este fin.

Al igual que el pyboard y el Arduino (y a diferencia de una PC común y corriente), la RPi cuenta con múltiples pines GPIO (entrada/salida de propósito general) que podemos usar para conectar y controlar diversos componentes, tales como actuadores y sensores. Al momento de programar la RPi podemos usar cualquier lenguaje soportado por su sistema operativo, por ejemplo C, C++, Java, Ruby, Python, Perl, JavaScript, etc. Como ya lo hemos mencionado varias veces, el pyboard está diseñado para programarse en Python.

Fuente: Day Break Tecnologies

Comentarios finales

El pyboard es una opción interesante en el mundo de la computación física. En primera instancia se parece al Arduino pero con el atractivo de que se programa directamente en Python. Lamentablemente es aún poco conocido, y por lo mismo existe menos documentación disponible (comparado con otras plataformas) y resulta complicado adquirirlo en países como México. En Estados Unidos se puede conseguir a través de Amazon.com o Adafruit. La empresa Adafruit realiza envíos de componentes electrónicos a México, pero hay que considerar los impuestos aduanales que se deben pagar al momento en que un producto de este tipo llega al país. En Europa y otras partes del mundo los interesados pueden comprar el pyboard en la tienda oficial de MicroPython. El costo de un pyboard v1.1 varía bastante según el proveedor, pero usualmente comienza en los 35 USD.

31 de mayo de 2017

PyCon 2017

Del 19 al 22 de mayo tuve la oportunidad de asistir a PyCon 2017 en la ciudad de Portland, Oregon, en los Estados Unidos. PyCon es una conferencia anual organizada por la Python Software Foundation con el fin de reunir a la comunidad de desarrolladores, usuarios y entusiastas del lenguaje Python y su correspondiente ecosistema.


Actualmente existen muchas ediciones de PyCon en todo el mundo. Argentina, Colombia, España, Uruguay y Venezuela son algunos de los países hispano parlantes que han tenido una o más conferencias nacionales sobre Python. Sin embargo, PyCon en los Estados Unidos es el encuentro de Python con el mayor número de participantes. Este año tuvo una cifra record de más de 3,300 asistentes.

Centenares de pitonistas esperando que comience una
de las conferencia magistral en PyCon 2017.

En esta entrada del blog de EduPython comentaré sobre mi experiencia e impresiones de PyCon 2017.

La agenda

PyCon 2017 se efectuó en un espacio de nueve días (del 17 al 25 de mayo) con los siguientes cinco eventos centrales:
  • Tutoriales. Sesiones de tres horas para aprender temas nuevos y relevantes.
  • Cumbres. 
    • Cumbre de lenguaje Python: Reunión de los desarrolladores de las diferentes implementaciones de Python (CPython, Cython, Jython, MicroPython, PyPy, etc.) para discutir sobre tecnología y estrategias.
    • Cumbre de educación: Reunión de maestros y educadores enfocados a enseñar programación, usando Python, a públicos amplios y diversos.
  • Conferencias.
    • Pláticas programadas: conferencias magistrales y pláticas en sesiones paralelas.
    • Espacios abiertos (Open Spaces): también conocido como la desconferencia, en la que los propios asistentes toman un papel más participativo y activo en presentaciones y discusiones informales.
    • Charlas relámpago (Lightning Talk): pláticas de cinco minutos de casi cualquier tema.
    • Sala de exposiciones: conformado por stands (puestos) de diversas compañías que usan y respaldan Python o que contratan gente que sabe programar en Python.
    • Sesión de pósteres: académicos, aficionados y miembros de la comunidad muestran su trabajo en forma de póster y responden a preguntas.
  • Feria de empleo. Para personas interesadas en conseguir trabajo en compañías que están utilizando Python y tecnologías relacionadas. Algunas de las empresas que estuvieron presentes fueron: Google, Intel, Microsoft, Linkedin, Red Hat, SurveyMonkey, Heroku, Continuum Analytics, JetBrains, Docker, Yelp, Lyft, Instragram, Facebook, JPMorgan Chase, BuzzFeed, Double Negative y Walt Disney Animation Studios.
  • Esprints de desarrollo. Sesiones de trabajo en las que los interesados pueden trabajar en diversos proyectos de código abierto (Open Source), incluyendo el lenguaje Python.

Arriba: el stand de Walt Disney Animation
Studios en la feria de empleo.

Abajo: mesa de trabajo del proyecto mypy
durante el primer día de esprints.

La comunidad

Lo mejor de PyCon, sin lugar a duda, es su comunidad. Brandon Rhodes, presidente de la mesa directiva de PyCon 2016-17, mencionó en su mensaje inaugural lo orgulloso que él se siente de pertenecer a una comunidad centrada en una herramienta abierta que puede ser usada libremente por todos, desde un estudiante de nuevo ingreso hasta un profesionista, un académico con presupuesto limitado, o incluso una gran empresa. Enfatizó que la comunidad de Python no busca sacarle ventaja al software para hacer que las cosas sean más costosas, sino que, al contrario, busca apoyar y facilitar cualquier tipo de actividad humana y no solo aquellas que cuentan con los medios para desembolsar una cuota.

Brandon Rhodes, presidente de PyCon 2017.

La comunidad de PyCon destaca por su carácter amistoso e incluyente. Un objetivo fundamental de la conferencia consiste en propiciar una experiencia libre de cualquier tipo de acoso, sin importar género, preferencia sexual, discapacidad, apariencia física, tamaño corporal, raza o religión. 

En PyCon no se discrimina a ningún tipo de persona.

El BDFL

Uno de los momentos más memorables que tuve en PyCon fue cuando conocí en persona al mismísimo Guido van Rossum, computólogo neerlandés y autor del lenguaje Python, usualmente conocido (de manera humorística) como el dictador benevolente de por vida (BDFL por sus siglas en inglés). Tuve la oportunidad de platicar con él por un espacio de quince minutos sobre algunos aspectos de su vida personal y laboral. Quedé admirado por su trato sencillo y accesible. Es claro para muchos que su personalidad ha sido un factor clave en la conformación y proceder de la notable comunidad de Python.

Conociendo a Guido van Rossum, el creador de Python.

Un mosaico de ideas e intereses

¿A qué se dedican las personas que asisten a PyCon? Hay una amplia variedad de profesiones representadas: programadores/desarrolladores de software, testers, ingenieros, científicos, investigadores, estudiantes, maestros, directores de tecnología (CTO por sus siglas en inglés) y aficionados que solo programan como hobby. Relacionado a esto, en la conferencia magistral titulada “La efectividad inesperada de Python en la ciencia” el Dr. Jake Venderplas hizo la siguiente observación:
Hay muchos otros congresos relacionados con Python: DjangoCon, la conferencia de SciPy, PyData, AnacondaCON, JupyterCon, etc. Los grupos de personas que asisten a estos congresos son tan solo una delgada “rebanada” de toda la comunidad de Python. Cada uno de estos grupos tiene sus propias herramientas y enfoques para resolver problemas. Pero durante PyCon, todos estamos aquí reunidos. Por esta razón considero que PyCon es de cierta manera como un gran mosaico.

Venderplas posteriormente introdujo a la audiencia a su muy particular “rebanada”: la astronomía. Él se dedica a aplicar estadística, minería de datos y aprendizaje automático para procesar grandes volúmenes de datos generados por telescopios y otros instrumentos de medición astronómica. Resulta que Python es una herramienta central para todo lo que hace de forma habitual en su trabajo.

Jake Venderplas, astrónomo y
científico de datos.

En su plática, Venderplas presentó la siguiente filmina que muestra cómo las menciones de Python se han incrementado en los últimos años en las publicaciones de astronomía, comparado con otras herramientas de software como Fortran, Matlab e IDL (Interactive Data Language):

Menciones de software en publicaciones de astronomía.
El lenguaje Python (línea roja) ha tenido un crecimiento exponencial.

Pero, ¿por qué se ha popularizado tanto el uso Python en la astronomía y en otras áreas de la ciencia? Vanderplas considera que hay cuatro razones para explicar este fenómeno:
  1. Interoperabilidad con otros lenguajes. Python sirve como un “pegamento” para juntar toda la mezcolanza de software científico que hay disponible. Su sintaxis de alto nivel sirve como una envoltura para las bibliotecas escritas en C y Fortran, donde realmente ocurren las operaciones de cómputo intensivo.
  2. Baterías incluidas. La biblioteca estándar de Python permite hacer casi cualquier cosa, y para todo lo demás existe una cantidad inmensa de bibliotecas desarrolladas por terceros. Si tienes algún problema particular, hay una alta probabilidad de que alguien ya haya escrito un paquete en Python para resolverlo.
  3. Simplicidad y dinamismo. Por su naturaleza, el cómputo científico es exploratorio y no lineal. En este contexto, la velocidad para desarrollar un programa suele ser más importante que la velocidad de ejecución.
  4. Apertura. El carácter distintivamente abierto de Python encaja muy bien con la esencia misma de la investigación científica. Actualmente la ciencia pasa por una crisis de replicabilidad. Esto quiere decir que existen muchos estudios publicados los cuales no pueden ser repetidos de manera exitosa. Para que la ciencia pueda progresar se debe seguir un modelo de ciencia abierta (Open Science), el cual toma muchas ideas del movimiento de código abierto (Open Source). Una investigación científica que involucre software debe dar a conocer el código y los datos que produjeron los resultados obtenidos. El código abierto en general, y Python en particular, han servido como ejemplo e inspiración para mejorar las prácticas de la comunidad científica mundial.

Conclusión

El haber participado en PyCon fue una gran experiencia personal. Convivir con una comunidad tan diversa y entusiasta me resultó revigorizante. Me falta tiempo para poder escribir en este espacio sobre todos aquellos temas sumamente interesantes que desconocía o que no me había dado el tiempo de examinar a más detalle. Algunas cosas que descubrí (o redescubrí) en PyCon y que espero poder estudiar más profundamente son: manejo de tipos estáticos con mypy, programación de microcontroladores con MicroPython, escritura y experimentación con notebooks de Jupyter, y uso de pdb para depurar programas de manera interactiva. Ya estaré documentando en este blog lo que vaya aprendiendo.

Pioneer Courthouse Square,
centro de Portland.

Por último, conviene mencionar que los videos de todas las conferencias están disponibles en inglés en el canal de YouTube de PyCon 2017.