Hernan Lozano Cima - @hernantz
Uno de los mayores problemas que se suele tener con cualquier lenguaje de programación es manejar fechas. Esto no necesariamente es un problema del lenguaje (aunque a veces sí, como en JS hasta que salió moment).
¿Por qué no estandarizar el calendario? Sencillamente porque hay factores económicos y sociales que hacen que no pueda existir un calendario. Un intento de hacerlo fue el International Fixed Calendar.
- El tiempo no es continuo, dado que en ocasiones las regiones cambian de hora por regulaciones gubernamentales o motivos económicos (ej. horario de verano)
- Los países no siempre tienen las mismas horas.
Los timezones definen una zona y un offset respecto a un punto de origen, que se conoce como UTC=+00:00, que sería el timezone por default.
Existen bases de datos de timezones (zoneinfo) que cada uno maneja en función de sus necesidades y la criticidad de mantenerlas actualizadas.
En python, la herramienta "maestra" para manejar timezones es pytz
Para poder usarla, es necesario tener en claro que hay dos tipos de fechas en python:
- naive: sin datos de timezone
- aware: con datos de timezone
Siempre se recomienda trabajar con fechas aware (nunca se sabe cuándo podemos necesitar esa información).
Para poder trabajar con fechas que pueden estar en distintas timezones, es necesario saber que hay dos operaciones básicas:
- localize: definir el timezone de una fecha.
- normalize: pasar fechas de disintos timezones a un único timezone (en general UTC)
- ¿Qué pasa si trabajamos con horarios de verano y caemos en un horario que se repite? (Ej, a las 21 se retrasa una hora el reloj, entonces tenemos la hora 21 de antes de cambiar el horario y la hora 21 posterior a cambiar el horario). Para eso , podemos decirle a una fecha si es o no perteneciente a un período en el que se ahorra la luz (
is_dst
) - Para no llegar a fechas inexistentes (ej, se adelanta una hora y caemos en el horario que se adelantó), usamos normalize sobre todas las fechas
- No usar
replace
para cambiar tz
- Calendarios
- Aerolíneas
- Scheduling, fechas recurrentes
- dateutil: rrule (abstracción del manejo de fechas)
- Consultar por "el día de hoy": como "hoy" varía según el tz del usuario, es necesario estandarizar. No es lo mismo el "hoy" de Holanda que el de Argentina, por ejemplo, para saber los estrenos del día en Netflix
- Uso de datetime.combine para no poner máximos y mínimos hardcodeados
- Filtros del tipo "antes/después de"
- Alertas, reminders, eventos recurrentes (próxima ocurrencia)
Matías Bordese - @mbordese github
Material
Distribución de código python
-
libs (esto es lo que nos interesa en esta charla)
-
apps
-
servicios
-
PyPI.org: nueva interfaz de PyPI
- source (.tar.gz), archivos y metadata para generar un paquete built
- built (.whl), todo lo necesario para poder ejecutar el paquete (con dependencias incluidas)
- pip
- setuptools
- wheel
- twine (para subir un paquete por https, no usar el upload de setup.py que lo hace por http)
El archivo setup.py
de cualquier paquete llama al setup
de setuptools, que es el que genera un paquete. Para saber qué parámetros se necesitan, consultar la doc de setuptools.
- Entrypoints: ejecutables disponibles en el paquete en base a una función del mismo.
alias=modulo:funcion
- El archivo
MANIFEST.in
agrega archivos extra al paquete, que no son de python (documentación, etc). Sólo afecta a sdist (para el built, incluir en package_data del setup.py)
- No freezar dependencias del paquete. Definir versiones mínimas
- Excluir los tests
- Mantener un versionado definido
- Licenciar
- Incluir README
- Classifiers: categorias que catalogan el paquete (status de desarrollo, licencia, versiones soportadas de python, etc)
- Evaluar si conviene tener los parámetros del setup en un archivo aparte (no es muy adoptado)
- Probar localmente
- Testear en staging de PyPI (ojo que no tiene todos los paquetes de PyPI prod)
- Release
Hay templates de la PyPA que sirven para mejorar el proceso de empaquetado de nuestro código
Gustavo Angulo - @woakas
MicroPython es una distribución de python para microprocesadores. Es un subset de CPython, no tiene todo el core ni libs que no sirven.
Ventaja: conexión por puerto serial. Acceso a REPL, consola de python que permite ejecutar código directamente en el micro.
- Se puede actualizar programas remotamente, sin flashear a mano.
- Hay threads
_thread
boot
: setup de cosas ajenas al programamain.py
: archivo que tiene el programa que se ejecuta en nuestro micro.- Soporta interrupciones aunque hay un poco de overhead.
- Maneja excepciones (!!)
- Soporta webservers, pero es poco usual que se use un micro para ello.
- Tiene un gestor de paquetes:
upip
- Tener en cuenta storage: nuestro programa no puede ser muy grande.
- Tener cuidado con loops infinitos
Equipos para iniciar: Groove + MSU