Lo he hecho. Termina el domingo y he conseguido sacar, este fin de semana, algunos ratos para conformar algo más de dos horas de programación, y logrado llevar adelante, contra el reloj, una versión perfectamente funcional de mi última creación: el modificador de calendarios de la basura.
Escrito en python, y de utilidad limitada, el programa, de unas 60 líneas, toma el fichero icalendar en formato .ics, modifica los eventos convenientemente y genera otro fichero del mismo tipo con eventos que tienen lugar a las ocho de la tarde del día previo a la recogida de la basura para avisarme de que es el momento de sacar el contenedor o las bolsas amarillas o lo que sea que toque en esa ocasión. Me lo he pasado pipa y estoy súper orgulloso del resultado. Me he quedado intentando subirlo a GitHub, pero no me ha dado tiempo a configurar el Visual Studio Code. Por lo menos he podido instalar el famoso homebrew, que parece un gestor de paquetes para MacOS. A ver si me da tiempo en esta entrada para compartir aquí el código de mi creación.
Al margen de eso, fin de semana de mucho dolor de Big Crunch, crisis, que ya está dando paso al siguiente nivel de bienestar.
Mencionar también que me he currado una actualización del CV con una flamante carta de presentación en LaTeX para mi última solicitud de empleo en una empresa cercana en la que buscan a alguien que hable español para vender productos técnicos. Solicitud enviada, a la espera de una respuesta.
Gran premio de Brasil de Fórmula uno. Menudo recital de Hamilton que, con 25 posiciones de penalización, ha conseguido ganar la carrera. Qué pedazo de piloto. No se resiste a soltar el octavo campeonato. Quedan tres carreras, creo. La próxima en el nuevo gran premio de Catar.
Mencionar también que tuve la oportunidad de conversar telefónicamente con Manuel, comentarista actual de ESDLV y lector desde los albores, lo que fue algo muy grato. Es un enorme placer conocer a alguien que lleva, durante casi dos décadas, leyendo lo que publico. De alguna manera sentí que se cerraba un círculo muy grande. Seguimos en contacto. Gracias Manuel.
Y poco más. Media horita hoy de meditación muy agradable. Piernas cruzadas, sentado sobre el suelo. Acostumbrado a sentarme a sentir dolor, sintiendo ahora tan poco, meditar se está convirtiendo en un pasatiempo realmente placentero.
Última semana antes de regresar a España para seguir procesando asuntos relacionados con la muerte de mi padre. El martes dentista para la carnicería final, que no sé si aplazar porque… ¿con qué voy a masticar? En fin, veremos cómo me levanto mañana.
¿Qué se cuece por ahí? ¿A qué retos os enfrentáis? ¿Qué tal el fin de semana? ¿Alguien más ha vibrado con la carrera?
# Takes the Abfuhr ical calendar as input and rewrites the events so
# they are reminders, the day before, to take the specific trash type out.
# A new rewritten ical calendar is output.
from icalendar import Calendar, Event, vDatetime
from datetime import datetime, timedelta
# Open and read original calendar
g = open('original.ics','rb')
gcal = Calendar.from_ical(g.read())
# Set up new calendar object
new_cal = Calendar()
new_cal.add('prodid', '-//Modified Abfuhrkalender//')
new_cal.add('version', '1.0')
new_cal.add('X-WR-CALNAME', 'Abfuhraufgaben Javier')
# Main loop
for component in gcal.walk():
if component.name == "VEVENT":
# Print event details for debugging purposes
print('Nombre evento:')
print(component.get('summary'))
print('Comienzo: ')
print(component.get('dtstart').dt)
print('Fin: ')
print(component.get('dtend'))
print('Fecha: ')
print(component.get('dtstamp').dt)
print('---')
# Process event
print('Comienzo procesado:')
start = component.get('dtstart').dt
# Set to the day before
new_start = start - timedelta(hours=24)
# Convert to string
new_start = new_start.strftime('%Y-%m-%d')
# Set time to 8PM that day before
new_start_obj = datetime.strptime(new_start, '%Y-%m-%d')
hour_obj = datetime.strptime('20', '%H')
new_start = new_start_obj + timedelta(hours=hour_obj.hour)
print(new_start)
# Duration of task is 30 minutes. Set end time.
new_end = new_start + timedelta(minutes=30)
print(new_end)
# Set new event summary
event_summary = component.get('summary')
new_event_summary = event_summary.replace('Abfuhr:', 'Sacar')
print(new_event_summary)
print('\n')
# Add new event to new calendar
event = Event()
event.add('summary', new_event_summary)
event.add('dtstart', new_start)
event.add('dtend', new_end)
event.add('dtstamp', new_start)
new_cal.add_component(event)
print('Event added: ')
print(event)
g.close()
# Save new calendar
f = open('new_trash_calendar.ics', 'wb')
f.write(new_cal.to_ical())
f.close()
Edito: Por cierto, me he encontrado el problema de que Google Calendar importa todos los eventos a mi calendario principal. Lo que yo quisiera, en lugar de eso, es que importara el calendario entero, de manera que pudiera elegir mostrarlo o no, e incluso darle un color determinado. Esto es lo que hago, por ejemplo, con un calendario que contiene los horarios de las carreras de la F1 ¿Alguien sabe cómo conseguir eso? Pensaba que podría bastar con darle un nombre al calendario pero no. Gracias.
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.