Archivo

Archivo para septiembre, 2011

Es el tiempo de recuperación, idiota

Jueves, 29 de septiembre de 2011

O algo así es como dice el articulo que apareció en la revista del mes de Octubre del 2011 ‘Running Times’, del atleta y escritor Peter Magil;. Allí el nos muestra como calcular cuanto descansar después de un entrenamiento usando las tablas creadas por el científico Tom Schwarts.

Mi implementación en Python a continuación:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env python
# Calculate days of recovery after a race. Based on the article appeared on the Running times magazine 
# "It's the Recovery Stupid" by Pete Magill, using Tom Schwartz tables
# author: josevnz@kodegeek.com
# http://kodegeek.com/blog
import sys
 
class Recovery:
 
        def __init__(self):
                self.__ages = { '20':0, '30':1, '40':2, '50':3, '60':4, '70':5, '80':6 }
                self.__fitnessLevel = { 'LOW':0, 'MEDIUM':1, 'HIGH':2 }
                self.__daysBetweenWorkouts = [
                        [ 4.0, 3.0, 2.5 ],
                        [ 5.0, 4.0, 3.0 ],
                        [ 6.0, 4.5, 3.5 ],
                        [ 7.0, 5.0, 4.0 ],
                        [ 7.5, 6.0, 4.5 ],
                        [ 8.0, 6.5, 5.0 ],
                        [ 9.0, 7.0, 5.5 ]
                ]
                self.__races = { '5K':0, '8K':1, '10K':2, '15K':3, '1/2 Mar':4, 'Mar':5 }
                self.__intensityWorkout = { 'EASY':0, 'MEDIUM':1, 'HARD':2 }
                self.__recoveryDaysAfterRace = [
                        [ 2, 3, 5 ],
                        [ 3, 5, 8 ],
                        [ 3.5, 6, 9 ],
                        [ 4, 7, 11 ],
                        [ 5.5, 9, 14 ],
                        [ 9, 17, 26 ]
                ]
                self.__adjustment = { '20':1.0, '30':1.1, '40':1.2 , '50':1.3, '60':1.4, '70':1.5, '80':1.6 }
 
        def getAgeBracket(self, age):
                try:
                        dAge = int(age)
                        if dAge < 0:
                                raise Exception("Invalid age value: %s" % age)
                        for bracket in [ 20, 30, 40, 40, 50, 70, 80 ]:
                                if dAge >= bracket and dAge < = (bracket + 9):
                                        return str(bracket)
                        # > 80 years
                        return 80
                except (Exception), exp:
                        raise Exception("Invalid age: %s" % age)
 
        def getDaysBetweenWorkouts(self, age, level):
                try:
                        bracket = self.getAgeBracket(age)
                        dBracket = self.__ages[bracket]
                        intensity = self.__fitnessLevel[level]
                        return self.__daysBetweenWorkouts[dBracket][intensity] * self.__adjustment[bracket]
                except (Exception), exp:
                        raise Exception("Invalid age or level: age=%s, level=%s" % (age, level))
 
        def getDaysAfterRace(self, age, race, level):
                try:
                        bracket = self.getAgeBracket(age)
                        dBracket = self.__races[race]
                        intensity = self.__intensityWorkout[level]
                        return self.__recoveryDaysAfterRace[dBracket][intensity] * self.__adjustment[bracket]
                except (Exception), exp:
                        raise Exception("Invalid age race type or level: age=%s, race=%s, level=%s" % (age, race, level))
 
if __name__ == "__main__":
        recovery = Recovery()
        arg = sys.argv[1:]
        days = 0
        if len(arg) == 2:
                days = recovery.getDaysBetweenWorkouts(arg[0], arg[1])
                print "Days: %2.2f, for age: '%s' and level: '%s'" % (days, arg[0], arg[1])
        elif len(arg) == 3:
                days = recovery.getDaysAfterRace(arg[0], arg[1], arg[2])
                print "Days: %2.2f, for age: '%s' and level: '%s', race=%s" % (days, arg[0], arg[2], arg[1])
        else:
                sys.exit(192)
 
# "com/kodegeek/fitness/recoveryrun.py" 76L, 2539C written

Así que por ejemplo, si corremos una carrera de 5K con todo y tenemos 35 años de edad:

1
2
3
Macintosh:python josevnz$ ./com/kodegeek/fitness/recoveryrun.py 35 5K HARD
Days: 5.50, for age: '35' and level: 'HARD', race=5K
Macintosh:python josevnz$

¿Y si no es una carrera, pero un entrenamiento fuerte y soy medianamente resistente?

1
2
3
Macintosh:python josevnz$ ./com/kodegeek/fitness/recoveryrun.py 35 MEDIUM
Days: 4.40, for age: '35' and level: 'MEDIUM'
Macintosh:python josevnz$

Por cierto, hoy es mi día de descanso entre entrenamientos. Así que es hora de ejercitar el lado Geek un poquito. Estoy pensando en abrir un nuevo proyecto de código abierto para ir dejando estos pedazos de código relacionados con correr y ejercicios de resistencia. ¿Les suena buena idea?

Bueno, hasta la próxima entrega.

–José

kodegeek, python, vida sana

Race for the cure Susan Komen Greater NYC: ¡Toda una sorpresa!

Domingo, 18 de septiembre de 2011

El comienzo

Race for the cure map
Hice el recorrido en 25:10

Después de ir al doctor y comenzar a recuperarme, decidí hacer esta carrera; La idea es celebrar el esfuerzo de las mujeres y hombres que han sobrevivido a un cáncer de seno, a la vez que se recaudan fondos para pelear contra esta variedad de la enfermedad.

Ya mi amigo Hengel (otro corredor Venezolano amigo mio) se habia inscrito, así que yo no tenia ninguna excusa para no correr. Además, después de eso el plan era hacer un almuerzo al aire libre en Central Park, al comienzo de Otoño cuando aún no es muy frío.

Nunca puedo dormir antes de una carrera; Esta no fué la excepción y después de comer mi desayuno (una buena mezcla de proteína y carbohidratos lentos) escribí lo siguiente en Facebook y Google+:

Race for the cure schedule so far:

- 5:00 AM: Breakfast and prepare race items
- 6:30 AM: Wake up Veronica and Sebastian
- Registration will open at 7:00 Am at 71 Street West in Central park. We will be there around 8:30 AM, no rush (I already got by BIB# 16539. How many people is in there?)
- 9:20 AM: Race starts for elite female runners and survivors only (yeah, males like me will have to suck it until 9:25 AM).
- 10:30 Runners award ceremony begins in Bandshell. Based on my previous two races I should not take more than 30 minutes to complete this one.

This year I’ll record some video (wait for the Flickr invite) and some photos as things develop. This race doesn’t have an official time, so unless I win (JAJAJA) I will have no way to know on which position I finish (so my new GPS time will have to be enough for my poor ego).

I’ll keep you guys posted!

Hengel Zambrano: I’ll call you to see where are we meeting before the race.

–José

Nada sabia yo que esta carrera iba a tener sorpresas preparadas.

Antes de la carrera

Llegamos a las 8:40 A.M. a Central Park, calle 71 oeste; Una ves entrados allí recordamos que había que estar a esa altura en el lado Este.

Había que atravesar un pedazo completo del parque para llegar allí.

¿Qué tan lejos puede ser? No es lo lejos sino lo complicado cuando tu hijo de 4 años está disfrutando del parque, jugando con los perros, recogiendo hojas; Después de hacer una parada obligatoria en el baño (más nervios que otra cosa) y de tomarnos un café caminamos a la salida.

Allí la realidad se encargo de recordarme lo descuidado que había sido, la salida de los corredores acababa de comenzar a las 9:20 A.M. y la mia era la siguiente en 5 minutos.

El problema era pasarle por encima a las 500 personas que tenia por delante de mi para llegar a la salida de la carrera, nunca habia visto tanta gente (vestida de rosado) en mi vida.

Inicio de la carrera

16539
Nunca subestime los imprevistos de una carrera

Comencé a trotar hacia la salida, luego a correr para luego detenerme abruptamente porque no se podía avanzar. Luego entro el pánico cuando el anunciador dijo lo siguiente:

Siento una lastima por los corredores que no salieron a tiempo ya que ahora ahora van a tener que lanzarse entre los que sólo vienen a caminar los 5 kilómetros

Coño, ¡Coño!, ¡están hablando de mi!.

Mi carrera anterior en el Yankee Stadium había sido un desastre y ahora esta estaba a punto de ser algo peor. Sin tiempo oficial y comenzando tarde con obstáculos, mi tiempo prometía ser el peor de todos.

Sin exagerar, me paralice por 5 segundos pensando que hacer después…

Mis piernas decidieron por mí; Comencé a correr lo más rápido que podía, empujando a quienes estaban adelante, rozándome de manera incomoda mientras trataba de buscar un espacio por donde pasar, pidiendo disculpas entre empujón y empujón mientras le rogaba a Dios que no me volaran la cara de un merecido golpe por no haber estado donde tenía que haber estado 10 minutos atrás.

Cuando ya llevaba apenas 0.80 millas (ni siquiera una milla) ya estaba jadeando del cansancio y mis cuádriceps me pedían a gritos que parara el abuso de correr – parar de golpe – correr. Estaba empapado de sudor y aún tenia un mar de gente por delante (viendo el gráfico en NikePlus se puede ver me mi ritmo era de 4:40 minutos por milla a la milla 0:84, muy rápido).

No estaba viendo el recorrido sino a quien tenia al frente, buscando huecos para poder pasar.

¿Como me las había arreglado para dañar mi carrera de ese modo?

La pelea sólo se hace peleando

No me detuve a descansar ni un momento; Ya sabía que la carrera iba a ser difícil por lo tarde de mi salida y la cantidad de gente en el recorrido tan estrecho, así que sólo me concentré en seguir pujando.

Después de la primera milla y media me dí cuenta que tenia que estabilizar el ritmo, de lo contrario no iba a llegar a la meta en buen estado; Mirando alrededor me conseguí con un muchachito de 25 años (o algo así) que tenia buen ritmo y pasaba a la gente cuando tenia una oportunidad.

Esa era nueva meta, pegarmele atrás y seguirlo. El me iba a abrir el paso por la siguiente milla o más.

El plan funcionó ya que cuando ibamos por la milla 2.60 me sentía con más energía que al principio y aún seguía pasando gente por delante; Cuando llegamos a la milla 2.80 llegó el momento de desprenderme e iniciar la carrera con todo.

Mira de nuevo mi reloj y me dí cuenta que mi tiempo no era fatal, por lo que aprete el pedal y corrí con todo, tan rápido que pase a muchos corredores que ya estaban en pleno ‘surge’. Cuando llegué a la meta, lo hice volando y estrellandome contra los corredores que ya habían bajado la velocidad al cruzar la meta antes que yo.

Mi tiempo ‘no oficial’: 25:20, Mejor que en el Yankee Stadium pero peor que la carrera de Yai.

Después de la tormenta viene la calma

IMG_9567
La pasamos muy bien durante y después de la carrera

La carrera fué interesante; En particular celebro el coraje de quienes nunca se rindieron cuando la enfermedad los atacó y lograron salir adelante.

Lo único negativo: Para mi fué decepcionante el hecho de que no se midan los tiempos oficiales, aunque los organizadores de la carrera son MUY claros diciendo que es una carrera por diversión no competitiva, no creo que tomar los tiempos afecte el espíritu de camaradería que caracterizo al evento.

De cualquier forma la pasé genial, en especial con la comida al aire libre con Verónica y Sebastian. Esta es una excelente excusa para hacer más carreras :-D

¿Queda alguna carrera interesante para el 2011? Hay un par que me llaman la atención, queda ver como me va adaptándome a correr en el frio de Noviembre / Diciembre.

NOTA: Hay fotos que me faltan por subir, en especial las del día de la carrera. Cuando salgan las pongo en este artículo.

–José

kodegeek, vida sana

2011 Komen Greater NYC Race for The Cure

Miércoles, 7 de septiembre de 2011

Bueno, ya dejando atrás la carrera del Yankee Stadium ahora me lanzo con quizas la última carrera de 5 kilómetros de este año para mi.

El recorrido está aquí, es una carrera sin tiempo oficial y por diversión. La idea es colaborar contra el cáncer de seno.

Me estoy recuperando aún de la lesión de la carrera anterior. Sin embargo las medicinas y el calzado han hecho una gran diferencia. No creo que mejore los tiempos (poco tiempo para entrenar, más recuperación), pero al menos espero mantener lo que hice la última carrera.

java