Buscar este blog

lunes, 25 de marzo de 2013

Simulación de Monte Carlo aplicada al Fútbol

Simulación de Monte Carlo aplicada al Fútbol

Ahora que está de moda el tema de las “Clasificatorias” al mundial Brasil 2014, pues me anime a simular lo que queda del torneo.
Como mencione en un post anterior, puede usarse la simulación de Monte Carlo para estos fines. Pero veamos como lo lograremos.
En primer lugar, ¿Cuál es el objetivo del juego? Pues el GOL, entonces lo que simularemos será justo eso. Pero como vimos es necesario tener las frecuencias de los eventos. Y pues me di el afán de analizar esta situación.
Veamos, tenemos que ver cuán frecuente es que un equipo puede hacer en un partido 0, 1, 2, 3 … n goles, además de eso está el hecho de que un equipo es Local y el rival es visitante, o ambos están en terreno neutral.
Busque en la página de la FIFA información de los procesos de eliminatorias desde 1964 y obtuve las siguientes estadísticas:

Frecuencia de Goles por partido

Mundial Goles anotados por partido por Equipo
0 1 2 3 4 5 6 7 8 Total
1966 10 10 10 4 1 1 1 1 38
1970 17 14 9 4 1 1 2 48
1974 9 12 5 1 3 30
1978 15 16 5 2 1 1 1 1 42
1982 13 12 5 5 1 36
1986 16 18 17 6 2 1 60
1990 10 10 11 2 1 1 1 36
1994 23 20 10 2 3 3 1 2 64
1998 40 60 25 8 7 2 2 144
2002 60 58 32 18 5 6 1 180
2006 57 63 28 18 8 6 180
2010 65 56 34 14 8 5 2 184
2014 21 36 16 6 8 1 88
Total 356 385 207 90 48 28 12 3 1 1130
Como vemos, desde 1966 se han anotado 1130 Goles en procesos de Clasificatorias para los mundiales, y la frecuencia partidos en los que no se han anotado goles es de 356, mientras que en los que se ha anotado 1 Gol es de 385, incluso hay 1 solo caso (1978) en el que se anotaron 8 Goles!!!, con esta información podríamos armar la tabla de frecuencias para un estado “Neutral”, sin embargo, es sabido que los equipos se hacen más fuertes cuando juegan en sus estadios, y esto lo vamos a ver en las siguiente tabla:
Mundial Goles anotados por partido por Equipo Total general
Local Total Visitante Total
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7
1966 3 3 7 3 1 1 1 19 7 7 3 1 1 19 38
1970 7 7 4 3 1 2 24 10 7 5 1 1 24 48
1974 3 5 3 1 3 15 6 7 2 15 30
1978 5 7 4 1 1 1 1 1 21 10 9 1 1 21 42
1982 4 6 2 5 1 18 9 6 3 18 36
1986 6 8 9 4 2 1 30 10 10 8 2 30 60
1990 3 3 9 1 1 1 18 7 7 2 1 1 18 36
1994 9 7 9 1 3 1 1 1 32 14 13 1 1 2 1 32 64
1998 13 25 18 6 7 1 2 72 27 35 7 2 1 72 144
2002 22 26 18 16 3 5 90 38 32 14 2 2 1 1 90 180
2006 21 27 16 13 8 5 90 36 36 12 5 1 90 180
2010 24 28 21 7 5 5 2 92 41 28 13 7 3 92 184
2014 4 19 7 5 8 1 44 17 17 9 1 44 88
Total general 124 171 127 66 42 22 10 2 1 565 232 214 80 24 6 6 2 1 565 1130
Aquí vemos una comparación de goles de Local y Visitante, como se aprecia, la frecuencia de 0 goles anotados para los locales ha bajado drásticamente, mientras que para los visitantes ha subido bastante. Esto demuestra el hecho de que el local en su estadio se hace “Más Fuerte”, entonces podríamos armar las tablas de frecuencia para los estados de “Local” y “Visitante”
Entonces tenemos la siguiente tabla de frecuencias:
Goles Frecuencias
Local Visitante Neutral
0 124 232 356
1 171 214 385
2 127 80 207
3 66 24 90
4 42 6 48
5 22 6 28
6 10 2 12
7 2 1 3
8 1 1
Total general 565 565 1130
¿Entonces ya está?, pues parece que sí, con esto sería suficiente para poder simular los resultados del resto del torneo, sin embargo, podríamos añadir un “Modificador” de posibilidades, basadas en por ejemplo:
  • Plantel
    • Arqueros
    • Defensas
    • Medio Campo
    • Delanteros
  • Moral del Equipo
  • Fatiga del Equipo
  • Entrenador
  • Apoyo de la Afición
Esto debido a que por ejemplo un encuentro entre Argentina contra Bolivia (disculpen amigos Bolivianos), Argentina, tiene un mejor plantel, y si nos basamos solo en las frecuencias descritas anteriormente, pues no sería del todo “Justo”.
Entonces comparemos planteles, “Arqueros + Defensas” contra “Delanteros +Medio Campo”, de cada equipo, afectados por supuesto por las otras variables
Entonces el modelo que planteo es el siguiente:
El plantel tendrá un acumulado de máximo 100 puntos, distribuido de la siguiente manera:
  • Arqueros 15%
  • Defensas 35%
  • Medio Campo 25%
  • Delanteros 25%
El resto de variables afectarían al acumulado de plantel, con la siguiente configuración:
  • Moral del Equipo +/- 15%
  • Fatiga del Equipo +/- 5%
  • Entrenador +/- 3%
  • Apoyo de la Afición +/- 10%
Claro que esta distribución debería ser configurable
Entonces definamos variables:
  • Plantel PLA
    • Arqueros ARQ
    • Defensas DEF
    • Medio Campo MED
    • Delanteros DEL
  • Moral del Equipo ME
  • Fatiga del Equipo FE
  • Entrenador ENT
  • Apoyo de la Afición AF
Entonces la fórmula para el “Peso” de un equipo seria:
PESO=(ARQ+DEF+MED+DEL)*(1+ME)*(1+FE)*(1+ENT)*(1+AF)
Entonces, por ejemplo, supongamos la siguiente configuración para Argentina

  • Plantel 95
    • Arqueros 15
    • Defensas 30
    • Medio Campo 25
    • Delanteros 25
  • Moral del Equipo 0.10
  • Fatiga del Equipo 0
  • Entrenador 0.03
  • Apoyo de la Afición -0.02

Esto quiere decir que tiene los valores más altos en el plantel, en apoyo de la afición tiene una merma, y fatiga del equipo está en 0, porque suponemos que empiezan en un estado neutral de fatiga. Por lo tanto su “Peso” seria:
PESO=(15+30+25+25)*(1+0.10)*(1+0)*(1+0.03)*(1-0.02)=105.48
Ahora hagamos una para Bolivia:

  • Plantel 59
    • Arqueros 5
    • Defensas 20
    • Medio Campo 15
    • Delanteros 19
  • Moral del Equipo 0.05
  • Fatiga del Equipo -0.01
  • Entrenador 0
  • Apoyo de la Afición 0.09

Esto quiere decir que por ejemplo, el entrenador no aporta “nada”, tiene un plantel inferior al de Argentina, pero su afición lo apoya bastante; entonces su peso seria:
PESO=(5+20+15+19)*(1+0.05)*(1-0.01)*(1+0)*(1+0.09)=66.85
Como vemos, Argentina tiene un mayor “peso” que Bolivia, y debería tener mayor oportunidad de anotar goles
Ahora, esto parece estar listo, sin embargo, no es lo mismo enfrentar a Bolivia contra Argentina, que a Bolivia contra Paraguay; ya que supongamos, que tienen los mismos pesos, pero uno tiene mejor delantera que defensas del otro equipo, entonces nos falta aún analizar este aspecto.
Hagamos una merma más entonces. Comparamos (Defensas + Arqueros) de uno, contra (Medio Campo + Delanteros) del otro
Nace una nueva variable: Peso en el Encuentro=PEN
Las formulas serían las siguientes:
PEN1=PESO1*((ARQ1+DEF1)/(MED2+DEL2))=105.48*((15+30)/(15+19))=139.61
PEN2=PESO2*((ARQ2+DEF2)/(MED1+DEL1))=66.85*((5+20)/(25+25))=33.425
Ahora que tenemos los pesos para encuentro de cada uno, calculamos con que modificadores simularemos usando el método de Monte Carlo
M1=PEN1/Max(PEN1,PEN2)=139.61/139.61=1
M2=PEN2/Max(PEN1,PEN2)=33.425/139.61=0.2394
Listo, ahora tengo el modificador calculado para ambos equipos, y este actuara de la siguiente manera:
Suponemos que:

  • Argentina es Local, y obtengo un aleatorio de 0.425
  • Bolivia es Visita, y obtengo un aleatorio de 0.862

Aplicamos modificadores:

  • Aleatorio para Argentina: 0.425*M1=0.425*1=0.425
  • Aleatorio para Bolivia: 0.862*M2=0.862*0.2394=0.2064

Ahora veamos las frecuencias:

Frecuencias para Local

Goles Frec Frec Rel Frec Acum Inicio Final
1 171 0.30265 0.3027 0.0000 0.3027
2 127 0.22478 0.5274 0.3027 0.5274
0 124 0.21947 0.7469 0.5274 0.7469
3 66 0.11681 0.8637 0.7469 0.8637
4 42 0.07434 0.9381 0.8637 0.9381
5 22 0.03894 0.9770 0.9381 0.9770
6 10 0.01770 0.9947 0.9770 0.9947
7 2 0.00354 0.9982 0.9947 0.9982
8 1 0.00177 1.0000 0.9982 1.0000
Total 565 1.00000
Como suponemos que el local es Argentina, su aleatorio, al ser el mayor no le afecta el modificador, y caería en la zona de 2 Goles
Ahora para Bolivia:

Frecuencias para Visita

Goles Frec Frec Rel Frec Acum Inicio Final
0 232 0.41062 0.4106 0.0000 0.4106
1 214 0.37876 0.7894 0.4106 0.7894
2 80 0.14159 0.9310 0.7894 0.9310
3 24 0.04248 0.9735 0.9310 0.9735
4 6 0.01062 0.9841 0.9735 0.9841
5 6 0.01062 0.9947 0.9841 0.9947
6 2 0.00354 0.9982 0.9947 0.9982
7 1 0.00177 1.0000 0.9982 1.0000
8 0 0.00000 ----- ----- -----
Total 565 1.00000
Bolivia al ser visitante, usa esta tabla de frecuencias, y como vemos, con su aleatorio modificado caería en 0 Goles, mientras que si no hubiéramos aplicado el modificador caería en la zona de 2 Goles
Por lo tanto, el resultado sería:

  • Si se aplica modificadores: Argentina (2) – (0) Bolivia
  • Si no se aplica modificadores: Argentina (2) – (2) Bolivia

Como vemos, la aplicación de los modificadores brindan “justicia” al resultado, pero como sabemos, los números aleatorios, nos pueden dar cualquier resultado, pero creo que el modelo propuesto describe un poco mejor la realidad
Ahora supongamos que Argentina es la Visita, y tenemos los mismos modificadores y números aleatorios, el resultado seria:

Frecuencias para Local

Goles Frec Frec Rel Frec Acum Inicio Final
1 171 0.30265 0.3027 0.0000 0.3027
2 127 0.22478 0.5274 0.3027 0.5274
0 124 0.21947 0.7469 0.5274 0.7469
3 66 0.11681 0.8637 0.7469 0.8637
4 42 0.07434 0.9381 0.8637 0.9381
5 22 0.03894 0.9770 0.9381 0.9770
6 10 0.01770 0.9947 0.9770 0.9947
7 2 0.00354 0.9982 0.9947 0.9982
8 1 0.00177 1.0000 0.9982 1.0000
Total 565 1.00000

Frecuencias para Visita

Goles Frec Frec Rel Frec Acum Inicio Final
0 232 0.41062 0.4106 0.0000 0.4106
1 214 0.37876 0.7894 0.4106 0.7894
2 80 0.14159 0.9310 0.7894 0.9310
3 24 0.04248 0.9735 0.9310 0.9735
4 6 0.01062 0.9841 0.9735 0.9841
5 6 0.01062 0.9947 0.9841 0.9947
6 2 0.00354 0.9982 0.9947 0.9982
7 1 0.00177 1.0000 0.9982 1.0000
8 0 0.00000 1.0000 1.0000 1.0000
Total 565 1.00000

  • Si se aplican modificadores: Bolivia (1) – (1) Argentina
  • Si no se aplican modificadores: Bolivia (3) – (1) Argentina

Conclusiones

El método de Montecarlo si es aplicable para este tipo de problemas
Es necesario señalar que el uso de los modificadores planteados, proporcionan un sentido de “Justicia” a la simulación

Finalizando

Bueno eso es todo por esta vez, en un próximo post, implementaremos una aplicación para hacer esta simulación

Simulación de Monte Carlo en Visual Basic

Simulación de Monte Carlo

Un poco de Teoria

La simulación de Monte Carlo es una técnica cuantitativa que hace uso de la estadística y los ordenadores para imitar, mediante modelos matemáticos, el comportamiento aleatorio de sistemas reales no dinámicos (por lo general, cuando se trata de sistemas cuyo estado va cambiando con el paso del tiempo, se recurre bien a la simulación de eventos discretos o bien a la simulación de sistemas continuos).
La clave de la simulación MC consiste en crear un modelo matemático del sistema, proceso o actividad que se quiere analizar, identificando aquellas variables (inputs del modelo) cuyo comportamiento aleatorio determina el comportamiento global del sistema. Una vez identificados dichos inputs o variables aleatorias, se lleva a cabo un experimento consistente en:
  1. Generar –con ayuda del ordenador- muestras aleatorias (valores concretos) para dichos inputs, y
  2. Analizar el comportamiento del sistema ante los valores generados. 
Tras repetir n veces este experimento, dispondremos de n observaciones sobre el comportamiento del sistema, lo cual nos será de utilidad para entender el funcionamiento del mismo –obviamente, nuestro análisis será tanto más preciso cuanto mayor sea el número n de experimentos que llevemos a cabo.
Veamos un ejemplo sencillo:
En la tabla inferior se muestra un análisis histórico de 200 días sobre el número de consultas diarias realizadas a un sistema de información empresarial (EIS) residente en un servidor central.
La tabla incluye el número de consultas diarias (0 a 5) junto con las frecuencias absolutas (número de días que se producen 0, 1, ..., 5 consultas), las frecuencias relativas (10/200 = 0,05, ...), y las frecuencias relativas acumuladas.
Consultas EIS Frecuencias Absolutas (dias) Frecuencia Relativa Frecuencia Relativa Acumulada
0 10 0.05 0.05
1 20 0.10 0.15
2 40 0.20 0.35
3 60 0.30 0.65
4 40 0.20 0.85
5 30 0.15 1.00
Total 200 1.00
Podemos interpretar la frecuencia relativa como la probabilidad de que ocurra el suceso asociado, en este caso, la probabilidad de un determinado número de consultas (así, p.e., la probabilidad de que se den 3 consultas en un día sería de 0,30), por lo que la tabla anterior nos proporciona la distribución de probabilidad asociada a una variable aleatoria discreta (la variable aleatoria es el número de consultas al EIS, que sólo puede tomar valores enteros entre 0 y 5).
Supongamos que queremos conocer el número esperado (o medio) de consultas por día.
La respuesta a esta pregunta es fácil si recurrimos a la teoría de la probabilidad: Denotando por X a la variable aleatoria que representa el número diario de consultas al EIS,sabemos que: E[X]=0*0.05+1*0.10+...+5*0,15=2,95
Por otra parte, también podemos usar simulación de Monte Carlo para estimar el número esperado de consultas diarias (en este caso se ha podido obtener el valor exacto usando teoría de probabilidad, pero ello no siempre será factible). Veamos cómo:
Cuando se conozca la distribución de probabilidad asociada a una variable aleatoria discreta, será posible usar la columna de frecuencias relativas acumuladas para obtener los llamados intervalos de números aleatorios asociados a cada suceso. En este caso, los intervalos obtenidos son:
  • [0.00,0.05) para el suceso 0 
  • [0.05,0.15) para el suceso 1 
  • [0.15,0.35) para el suceso 2 
  • [0.35,0.65) para el suceso 3 
  • [0.65,0.85) para el suceso 4 
  • [0.85,1.00) para el suceso 5 
El gráfico siguiente nos muestra cada una de las probabilidades sobre el número de consultas. En él, se aprecia claramente la relación existente entre probabilidad de cada suceso y el área que éste ocupa.
Esto significa que, al generar un número pseudo-aleatorio con el ordenador (proveniente de una distribución uniforme entre 0 y 1), estaremos llevando a cabo un experimento cuyo resultado, obtenido de forma aleatoria y según la distribución de probabilidad anterior, estará asociado a un suceso. Así por ejemplo, si el ordenador nos proporciona el número pseudo-aleatorio 0.2567, podremos suponer que ese día se han producido 2 consultas al EIS. A continuación simularemos una serie de numeros pseudo-aleatorios y veremos cual es el resultado:
Aleatorio Clase
0.74594 4
0.02769 0
0.41357 3
0.08281 1
0.92104 5
0.45407 3
0.79709 4
0.07949 1
0.48303 3
0.38276 3
0.99765 5
Promedio 2.909
En este caso, hemos obtenido un valor estimado que se acerca bastante con el valor real anteriormente calculado vía la definición teórica de la media. Sin embargo, debido a la componente aleatoria intrínseca al modelo, normalmente obtendremos valores “cercanos” al valor real, siendo dichos valores diferentes unos de otros (cada simulación proporcionará sus propios resultados). 
Si usamos pocas observaciones, los valores que obtendríamos no serían estimaciones tan buenas al valor real. Por el contrario, es de esperar que si hubiésemos usado 1000 (o mejor aún 10000) observaciones, los valores que obtendríamos en estarían todos muy cercanos al valor real.

Ahora implementemos esta Simulación

Primero veamos que necesitamos para implementar esta simulación:
  1. Definir las "FRECUENCIAS" para cada "CLASE"
  2. Generar los "RANGOS" en base a las "FRECUENCIAS ACUMULADAS" de las "CLASES"
  3. En base a un "VALOR ALEATORIO" necesitamos evaluar en que "RANGO" cae, para así saber que "CLASE" le corresponde
  4. Retornar como resultado la "CLASE" a la que le corresponde este "VALOR ALEATORIO"
  5. Obtener el "VALOR ESPERADO" en base a una serie de "OBSERVACIONES"
Ahora, se han resaltado algunos puntos, y pasaremos a ver uno de ellos, el Rango. para eso definiremos la siguiente clase:

Public Class Rango
    Sub New(i As Nullable(Of Double), f As Nullable(Of Double))
        If i.HasValue Then Inicio = i
        If f.HasValue Then Final = f
    End Sub
    Property Inicio As Nullable(Of Double) = Double.NegativeInfinity
    Property Final As Nullable(Of Double) = Double.PositiveInfinity
    Public Function Dentro(v As Double) As Boolean
        Return Inicio <= v And v < Final
    End Function
    Public Overrides Function ToString() As String
        Return String.Format("De {0,6:N10} a {1,6:N10}", Inicio, Final)
    End Function
End Class
Si nos fijamos, en el constructor, pasamos el inicio y el final para el rango, pero usamos Nullable(Of Double) esto para permitir rangos orientados hacia el infinito positivo o negativo, según sea el caso.
Esto se comprueba en la definición de las propiedades
La función Dentro es la que evalúa si un valor esta dentro de este rango.
Por ultimo se ha sobreescrito la función ToString, con el fin de facilitar la depuración y ver el rango sin necesidad de expandir el la depuración

Ahora vamos a ver la Clase MonteCarlo:
Public Class Montercarlo
    Public Shared Property TamañoMuestra As Integer = 1000
    Private Shared _aleatorio As New Random
    Private _rangos As Dictionary(Of Integer, Rango)
    Private _frecuencias As Dictionary(Of Integer, Double)

    Public Sub New()
        _frecuencias = New Dictionary(Of Integer, Double)
    End Sub

    Public Sub AddFrecuencia(clase As Integer, frecuencia As Double)
        _frecuencias.Add(clase, frecuencia)
        CalcularRangos()
    End Sub

    Private Sub CalcularRangos()
        Dim _frecOrd = (From f In _frecuencias Order By f.Value Descending).ToList
        Dim _frecSum = _frecOrd.Sum(Function(k) k.Value)
        _rangos = New Dictionary(Of Integer, Rango)
        Dim v1 As Decimal = 0
        Dim v2 As Decimal = 0
        For Each f In _frecOrd
            v1 = v2
            v2 += f.Value / _frecSum
            _rangos.Add(f.Key, New Rango(v1, v2))
        Next
    End Sub

    Public Function GetUno() As Integer
        Return GetId(GetAleatorio())
    End Function

    Private Function GetId(v As Double) As Integer
        Return (From r In _rangos Where r.Value.Dentro(v)).FirstOrDefault.Key
    End Function

    Public Function GetEsperado() As Integer
        Dim muestra As New List(Of Double)
        For i = 1 To TamañoMuestra
            muestra.Add(GetUno())
        Next
        Return Aggregate a In muestra Into Average(a)
    End Function

    Private Function GetAleatorio() As Double
        Return _aleatorio.NextDouble)
    End Function
End Class
Ahora, tenemos varias cosas que resaltar:
Private _rangos As Dictionary(Of Integer, Rango)
Private _frecuencias As Dictionary(Of Integer, Double)
Aqui tenemos dos diccionarios privados, uno para los Rangos y otro para las Frecuencias. Y por que diccionarios? pues porque facilita la busqueda por Clave. La idea es que conforme vamos ingresando Frecuencias, recalcularemos los rangos, ya que no se sabe a priori los rangos. Por eso se implemento la funcion AddFrecuncia:
Public Sub AddFrecuencia(clase As Integer, frecuencia As Double)
    _frecuencias.Add(clave, frecuencia)
    CalcularRangos()
End Sub
Como se aprecia, pasamos la clase y la frecuencia, y la clase actua como Key en el diccionario y la frecuencia como Value. Inmediatamante añadida la frecuencia recalculamos los rangos

    Private Sub CalcularRangos()
        Dim _frecOrd = (From f In _frecuencias Order By f.Value Descending).ToList
        Dim _frecSum = _frecOrd.Sum(Function(k) k.Value)
        _rangos = New Dictionary(Of Integer, Rango)
        Dim v1 As Decimal = 0
        Dim v2 As Decimal = 0
        For Each f In _frecOrd
            v1 = v2
            v2 += f.Value / _frecSum
            _rangos.Add(f.Key, New Rango(v1, v2))
        Next
    End Sub
Aqui calculamos los rangos. si se fijan hay una variable _frecord, que contendra las frecuncias ordendas; en base a una consulta "LinQ to Objects". Ordenamos las frecuencias como una optimización del Metodo Monte Carlo para algunas aplicaciones (veremos para que en un post futuro). Tambien Hay una variable _frecsum, que calcula, en base a una consulta LinQ la sumatoria de las frecuencias, para poder calcular luego las frecuencias acumuladas, requisito indispensable para calcular los rangos. La sumatoria se esta haciendo con una función Lambda Bueno, luego hay un simple bucle donde vamos agregando objetos "Rango" con un Key igual a la clase. El resultado es el siguiente:
Como vemos, ya estan generados los rangos, pero cabe destacar que estos mismos estan reordenados en forma descendente en base a su frecuencia, esto ayuda en casos en que se necesita aplicar un modificador a la variable aleatoria y asi dar prioridad a los mas frecuentes, como dije, esto lo veremos en otro post.

Ahora veamos como generar numeros aleatorios:
Private Shared _aleatorio As New Random
Private Function GetAleatorio() As Double
    Return _aleatorio.NextDouble)
End Function
Primero definimos una variable estatica del tipo Random, y nos valemos de su método NextDouble, que nos devuelve un aleatorio entre 0 y 1 Y ahora veremos como obtener una "Observacion":
    Public Function GetUno() As Integer
        Return GetId(GetAleatorio())
    End Function

    Private Function GetId(v As Double) As Integer
        Return (From r In _rangos Where r.Value.Dentro(v)).FirstOrDefault.Key
    End Function
La funcion "GetUno" llama a la funcion "GetId" pasandole un aleatorio.
La funcion "GetId" busca en el diccionario de rangos, usando una consulta LinQ, uno donde el valor aleatorio se encuentre "dentro" y no devuelve el "key" del primer resultado
Ahora ya sabemos como obtener una observación, solo nos faltaria obtener el "valor esperado", y esto se hace con:
    Public Shared Property TamañoMuestra As Integer = 1000
    Public Function GetEsperado() As Integer
        Dim muestra As New List(Of Double)
        For i = 1 To TamañoMuestra
            muestra.Add(GetUno())
        Next
        Return Aggregate a In muestra Into Average(a)
    End Function
Como vemos, hemos presupuesto un tamaño demuestra de 1000 observaciones, y simplemente con un bucle vamos añadiendo muestras a una lista, para luego, mediante una consulta LinQ de agregación calculamos la media y retornamos este valor.
Ahora simulemos el caso que vimos en la parte teorica:
Imports GaSKSoft.Predictor.Montecarlo
Module Module1

    Sub Main()
        Dim m As New Montercarlo
        m = New Montercarlo
        m.AddFrecuencia(0, 10)
        m.AddFrecuencia(1, 20)
        m.AddFrecuencia(2, 40)
        m.AddFrecuencia(3, 60)
        m.AddFrecuencia(4, 40)
        m.AddFrecuencia(5, 30)
        Console.WriteLine("Frecuencias:")
        Console.WriteLine("0: 10")
        Console.WriteLine("1: 20")
        Console.WriteLine("2: 40")
        Console.WriteLine("3: 60")
        Console.WriteLine("4: 40")
        Console.WriteLine("5: 30")
        Console.WriteLine(
            "El valor esperado para una muestra de {0} observaciones es:{1}",
            Montercarlo.TamañoMuestra,
            m.GetEsperado())
        Console.ReadKey()
    End Sub

End Module
Y el resultado es:
Como vemos, con una muestra de 1000 observaciones, el resultado es mas preciso.

Concluciones

El metodo de Monte Carlo nos ayuda a simular situaciones en las que las probabilidades de varios eventos son conocidos, y se requiere obtener, en base a estas, un valor esperado, tomando como base una "nube" de observaciones.
En este post tambien se ha utilizado Consultas LinQ to Objects, y demuestra que reduce significativamente el proceso de consultar listas, incluso se le pueden calcular agregados del tipo suma, promedio, producto, cuenta, etc. en una sola linea!!!!!

Finalizando

Espero que el post les guste y les sirva para alguna implementación futura.

jueves, 21 de marzo de 2013

Desarrollo en Microsoft Visual Studio / Módulo 33 - Windows Services

Microsoft Virtual Academy

Desarrollo en Microsoft Visual Studio

Módulo 33 - Windows Services

Documentos

Preguntas

  1. De las siguientes afirmaciones sobre servicios windows, cuáles son verdaderas?
    1. Los servicios Windows no tienen interface gráfica.
    2. Tiene el mismo comportamiento de un servicio web.
    3. Los Servicios de Windows son aplicaciones que funcionan con la interacción del usuario.
    4. Los servicios windows pueden iniciarse automáticamente cuando se inicia el equipo.
  2. El método OnShutDown, se ejecuta cuando el sistema se está cerrando y especifica lo que tiene que suceder inmediatamente antes de que se cierre el sistema.
    1. Verdadero
    2. FALSO
  3. Cuáles son los posibles valores de la propiedad StartType?
    1. Enabled, Disabled, Automatic
    2. Automatic, Disabled, Manual
    3. Disabled, Manual, Automatic
    4. Enabled, Disabled, Manual
  4. En que edición de Visual Studio 2010 no esta disponible la plantilla de Servicios Windows y la funcionalidad asociada?
    1. Ultime
    2. Professional
    3. Standard
  5. Cuál es el comando que se utiliza para la desinstalación de un servicio Windows?
    1. installutil / s yourproject.exe
    2. installutil / u yourproject.exe
    3. installutil / i yourproject.exe
    4. installutil yourproject.exe
  6. Propiedad que obtiene o establece el código de salida para el servicio?
    1. CanStop
    2.  AutoLog
    3.  ExitCode
  7. La clase ServiceController permite conectarse a un servicio en ejecución o detenido, manipularlo u obtener información al respecto
    1. Verdadero
    2. FALSO

Desarrollo en Microsoft Visual Studio / Módulo 32 - Hilos (parte 2)

Microsoft Virtual Academy

Desarrollo en Microsoft Visual Studio

Módulo 32 - Hilos (parte 2)

Documentos

Preguntas

  1. Un ThreadId del sistema operativo no tiene relación fija con un Thread administrado
    1. TRUE
    2. FALSE
    3. NO APLICA
  2. De los temporizadores existentes en el .Net Framework este es el más ligero
    1. System.Windows.Forms.Timer
    2. System.Timers.Timer
    3. System.Timers.ReverseClock 
    4. System.Threading.FastClock 
    5. System.Threading.Timer 
  3. La instrucción de la API de Windows ExitThread equivale a este método del .Net Framework
    1. Thread.ForceExit
    2. Ningún equivalente
    3. Thread.Abort 
    4. Thread.Suspend 
    5. Thread.Close 
  4. Son delegados usados para la inicialización de threads
    1. ThreadStart
    2. UnParameterizedThreadStart
    3. StartThreadObject 
    4. StartParametrizedThreadObject 
    5. ParameterizedThreadStart
  5. ________ es un primitiva de sincronización definida por el usuario que permite que varios subprocesos (denominados participantes) trabajar simultáneamente en un algoritmo en fases
    1. Barrier
    2. SpinLock
    3. SpinWait
    4. InterLocked 
    5. SemaphoreSlim 
  6. El modelo asincrónico basado en eventos es un conjunto de
    1. APIS
    2. Interfaces
    3. Buenas Prácticas
    4. a y c
    5. b y c
  7. Solo se debe utilizar _____________ si medienta el perfilado de código se ha determinado que el uso de __________ esta causando problemas de velocidad
    1. SpinLock, SpinWait
    2. SpinLock, Monitor
    3. Monitor, SpinLock
    4. SpinLock, Mutex 
    5. Mutex, SpinLock
  8. "La clase _______________ habilita a varios subprocesos para leer un recurso de forma simultánea, aunque para escribir en el recurso, el subproceso debe esperar a un bloqueo exclusivo."
    1. Interlocked
    2. Mutex 
    3. Monitor
    4. ReaderWriterLockSlim
    5. ReaderAndWriterLockSlim
  9. El multithreading resuelve problemas de rendimiento y de capacidad de respuesta, pero al hacerlo también crea nuevos problemas, como _______________ y ______________
    1. Consumo de memoria
    2. Interbloqueos
    3. Recalentamiento de la CPU
    4. Condiciones de carrera 
    5. Costo de hardware
  10. Existen en el Framework
    1. ReaderWriterLockSlim
    2. ReaderWriterLock
    3. ReaderWriterSlimLock 
    4. ReaderSlimWriterLock
    5. ReaderAnyWriterOnlyLock 
  11. Un interbloqueo tiene lugar cuando
    1. el número de CPUs (o cores) es excedido por el número de threads en ejecución
    2. cuando un recurso queda bloqueado por un thread que ya no existe pues la aplicación se ha cerrado abruptamente 
    3. dos threads intentan bloquear un recurso que ya ha bloqueado uno de estos threads
    4. dos threads han bloqueado un recursos que ya ha sido bloqueado por uno de estos threads 
    5. dos recursos son accedidos por el mismo thread en el mismo instante 

Desarrollo en Microsoft Visual Studio / Módulo 31 - Hilos (parte 1)

Microsoft Virtual Academy

Desarrollo en Microsoft Visual Studio

Módulo 31 - Hilos (parte 1)

Documentos

Preguntas

  1. Los threads creados por medio del Threadpool
    1. Son creados como threads en segundo plano
    2. Son creados como threads en primer plano
    3. La propiedad IsBackground debe ser establecida por el desarrollador 
    4. La propiedad IsBackground es eliminado de los threads 
    5. En el contexto del ThreadPool la propiedad IsBackground es irrelevante 
  2. En un BackgroundWorker Si la operación en segundo plano requiere parametros se debe hacer uso de
    1. Run
    2. RunWorkerAsync(object)
    3. DoWork
    4. RunWorkerAsync
    5. Run(object) 
  3. Para crear un thread por medio del ThreadPool se debe usar el método
    1. AddUserWorkItem
    2. PopUserWorkItem 
    3. QueueUserWorkItem
    4. QueueUserThread 
    5. EnQueueUserThread
  4. Un proceso es
    1. Una tarea del sistema operativo
    2. Un conjunto de instrucciones agrupadas con un(os) objetivo(s)  especifico(s). 
    3. Un Programa
    4. Un conjunto de instrucciones
    5. Los procesos no existen, existen los hilos
  5. Cada hilo tiene su propio ________, así que cada vez que que se suspende un hilo para permitir la ejecución de otro, su________ es guardado y restablecido nuevamente solo cuando es su turno de ejecución
    1. contexto
    2. programa
    3. proceso 
    4. usuario 
    5. servicio
  6. El .Net Framework utiliza threads en modo
    1. kernel
    2. usuario 
    3. no usa threads 
    4. híbrido 
    5. crea un nuevo tipo de thread 
  7. Se puede hacer multitarea en un solo procesador?
    1. Verdadero
    2. Falso
  8. Desde la clase BackgroundWorker se pueden manipular elementos de la UI desde los controladores de eventos
    1. DoWork
    2. ProgressChanged
    3. OnUIPipeChannelUpdated
    4. RunWorkerCompleted
    5. Disposed
  9. Un hilo (thread) es:
    1. Una funcionalidad que permite ejecuciones en paralelo
    2. La unidad de procesamiento más pequeña que puede ser agendada por un sistema operativo 
    3. Es un programa embebido dentro de un programa principal 
    4. Una función especial para hacer cosas en paralelo 
    5. Es un sinónimo de proceso
  10. Hay tres maneras en que un proceso puede suspender su ejecución
    1. Auto suspensión del proceso o finalización del proceso
    2. Fallo de corriente
    3. Interrupción por el reloj del procesador (Quantum de tiempo)
    4. Error del sistema
    5. Interrupción por dispositivos de E/S
  11. Qué sucede si estamos utilizando varios threads en una aplicación que se ejecuta en una  maquina con una sola CPU?
    1. Los thread se ejecutan en paralelo
    2. Los thread se ejecutan dando la ilusión de paralelismo gracias a la alternancia de periodos de ejecución
    3. Un thread se ejecuta solo cuando el otro ha finalizado
    4. No puden existir threads en ese escenario
    5. Se simula automaticamente otro core por cada thread
  12. Qué sucede si estamos utilizando varios threads en una aplicación que se ejecuta en una  maquina con múltiples CPU?
    1. Se pueden ejecutar en paralelo máximo el mismo número de threads que de CPUS o cores disponibles
    2. Los thread se ejecutan dando la ilusión de paralelismo gracias a la alternancia de periodos de ejecución
    3. Un thread se ejecuta solo cuando el otro ha finalizado 
    4. No puden existir threads en ese escenario 
    5. Si no hay CPUS disponibles los thread compartiran tiempo de CPU en un mismo core
  13. La clase ___________ permite ejecutar una operación en un subproceso dedicado e independiente
    1. RunWorkerAsync
    2. ThreadPool
    3. Thread
    4. BackgroundWorker
    5. AsyncCallback

Desarrollo en Microsoft Visual Studio / Módulo 30 - Serialización

Microsoft Virtual Academy

Desarrollo en Microsoft Visual Studio

Módulo 30 - Serialización

Documentos

Preguntas

  1. Cual de las siguientes no es una clase o espacio de nombre para la serialización
    1. SerializableAttribute
    2. NonSerializedAttribute
    3. Serializable.InteropServices
  2. la clase SerializableAttribute
    1. Indica que una clase puede serializarse.
    2. Se puede utilizar para impedir que se serialicen determinados campos de un objeto
    3. Indica que una clase debe recibir una notificación cuando ha finalizado la deserialización de todo el gráfico de objetos
    4. Describe el origen y destino de una secuencia de serialización determinada y proporciona un contexto definido por el llamador adicional
  3. la clase SerializationInfo
    1. Almacena todos los datos necesarios para serializar o deserializar un objeto. No se puede heredar esta clase.
    2. Administra en tiempo de ejecución los procesos de serialización
    3. Realiza el seguimiento de los objetos a medida que se deserializan
    4. Proporciona funcionalidad básica para los formateadores de serialización de Common Language Runtime
  4. Para serializar un objeto en formato XML se debe importa la clase:
    1. System.Serializers
    2. System.Xml.Serialization
    3. System.Xml.Serializers
    4. System.Serialization
  5. La interfaz Iserializable
    1. Establece una propiedad Normalized para ser utilizada por la infraestructura de .NET Framework
    2. Contiene campos que se pueden utilizar para pasar los delegados de eventos a un método Deserialize seguro para la ejecución de subprocesos de XmlSerializer
    3. Permite que un objeto controle su propia serialización y deserialización
    4. Indica a XmlSerializer que el miembro debe tratarse como texto XML cuando se serializa o se deserializa la clase contenedora
  6. La interfaz IXmlSerializable
    1. Establece una propiedad Normalized para ser utilizada por la infraestructura de .NET Framework
    2. Contiene campos que se pueden utilizar para pasar los delegados de eventos a un método Deserialize seguro para la ejecución de subprocesos de XmlSerializer
    3. Proporciona formato personalizado para la serialización y deserialización XML
    4. Indica a XmlSerializer que el miembro debe tratarse como texto XML cuando se serializa o se deserializa la clase contenedora
  7. Para serializar y deserializar elementos o atributos que no se encuentren en el esquema original se debe:
    1. Utilizar los atributos XmlAnyElementAttribute y XmlAnyAttributeAttribute
    2. Implementar la interfaz IXmlSerializable para controlar el resultado XML
    3. utilizar System.ComponentModel.DefaultValueAttribute para especificar el valor predeterminado
    4. Agregar espacios de nombres XML a un documento XML,

Desarrollo en Microsoft Visual Studio / Módulo 29 - Globalización


Microsoft Virtual Academy

Desarrollo en Microsoft Visual Studio

Módulo 29 - Globalización

Documentos

Preguntas

  1. System.Resources hace referencia a:
    1. Las herramientas de implementación de Visual Studio que permiten distribuir varias versiones de la aplicación para distintas configuraciones regionales.
    2. Las clases que definen información relativa a la referencia cultural, incluido el idioma, el país o región, los calendarios utilizados, los modelos de formato para las fechas, la moneda y los números y el criterio de ordenación de las cadenas.
    3. Las clases e interfaces que permiten a los programadores crear, almacenar y administrar diversos recursos específicos de la referencia cultural que se utilizan en una aplicación.
    4. Las clases, interfaces y tipos de valor que agilizan y optimizan el proceso de desarrollo y ofrecen acceso a las funciones del sistema.
  2. Es recomendable como práctica de globalización para aplicaciones de ASP.NET:
    1. Establezca explícitamente las propiedades CurrentUICulture y CurrentCulture en su aplicación.
    2. Basarse en valores predeterminados y evitar explícitamente las propiedades CurrentUICulture y CurrentCulture en su aplicación.
    3. Teniendo en cuenta que las aplicaciones de ASP.NET son administradas y, por lo tanto, no deben utilizar las mismas clases que otras aplicaciones administradas para recuperar, mostrar y tratar información basada en la referencia cultural.
    4. Tenga en cuenta que el valor de uiCulture debe específicarlo en la apicación ya que no dependen del idioma aceptado por el explorador.
  3. System.Globalization hace referencia a:
    1. Las clases e interfaces que permiten a los programadores crear, almacenar y administrar diversos recursos específicos de la referencia cultural que se utilizan en una aplicación.
    2. Las clases que definen información relativa a la referencia cultural, incluido el idioma, el país o región, los calendarios utilizados, los modelos de formato para las fechas, la moneda y los números y el criterio de ordenación de las cadenas.
    3. Las clases, interfaces y tipos de valor que agilizan y optimizan el proceso de desarrollo y ofrecen acceso a las funciones del sistema.
    4. Las herramientas de implementación de Visual Studio que permiten distribuir varias versiones de la aplicación para distintas configuraciones regionales.
  4. Cúal de las siguientes no es una clase de System.Globalization?
    1. Calendar
    2. CultureNotFoundException
    3. GregorianCalendar
    4. CultureTypes
    5. TextInfo
  5. Visual Studio incluye compatibilidad con características bidireccionales, esto significa que:
    1. Permite establecer un canal de dos vías para reconocer la referencia cultural.
    2. Admiten idiomas que se escriben de derecha a izquierda.
    3. Regula la información cultural para que sea accesible por el usuario final dependiendo del explorador.
    4. Permite modificación del registro de datos para que cualquier usuario pueda corregir un error de referencia idiomática.
    5. Ninguna de las respuestas es correcta.
  6. Es una práctica recomendada de localización.
    1. Trasladar todos los recursos localizables a archivos DLL independientes que sean sólo de recursos.
    2. No incluya en el código no modificable las cadenas o recursos de la interfaz de usuario.
    3. Evite utilizar en la aplicación imágenes e iconos que contengan texto.
    4. Utilice la clase System.Resources.ResourceManager para recuperar recursos en función de la referencia cultural.
    5. Todas las respuestas son correctas.
  7. En el marco de desarrollo .NET a qué se le llama globalización?
    1. Al diseño de una aplicación a la que puedan tener acceso todos los usuarios independientemente de su condición física.
    2. Al proceso mediante el cual se diseñan y desarrollan productos de software que pueden funcionar para varias referencias culturales.
    3. A cualquier aplicación ASP.NET implementada en internet.
    4. A las aplicaciones que se conectan a traves de servicios.
    5. Todas las respuestas son correctas.

Desarrollo en Microsoft Visual Studio / Módulo 28 - Reflection

Microsoft Virtual Academy

Desarrollo en Microsoft Visual Studio

Módulo 28 - Reflection

Documentos

Preguntas

  1. En la serialización, el permiso ______________ con el marcador SecurityPermissionAttribute.SerializationFormatter proporciona la capacidad de obtener y establecer miembros de tipos serializables, sin tener en cuenta la accesibilidad
    1. SecuritySerialized
    2. SerializedPermission
    3. SerializedDemand
    4. SecurityPermission
  2. Las aplicaciones denominadas exploradores de tipos son:
    1. Cargar tipos para ser reutilizados
    2. Seleccionar y ver información de tipos
    3. Ver tipos de datos del framework
    4. a y c
  3. Que es metadata?
    1. Datos muy grandes
    2. Información meta
    3. A y B
    4. Descripción de datos
  4. Es posible determinar si un tipo es génerico o no?
    1. SI
    2. NO
  5. Para determinar si un tipo es genérico o no se utiliza?
    1. IsGeneric
    2. IsGenericType
    3. GetGeneric
    4. No es posible.
  6. Las clases del espacio de nombres System.Reflection.Emit proporcionan una forma especializada de reflexión que permite:
    1. Ejecutar métodos en tiempo de ejecución
    2. Ejecutar tipos en tiempo de ejecución
    3. Compilar tipos en tiempo de ejecución
    4. Cargar clases en tiempo de ejecución
  7. Que tareas permite realizar la reflexión (seleccione las que apliquen):
    1. Enumerar tipos y miembros y examinar sus metadatos.
    2. Enumerar los procesos del sistema
    3. Enumerar y examinar ensamblados y módulos.
    4. Todas

Desarrollo en Microsoft Visual Studio / Módulo 27 - Profundización depuración de aplicaciones

Microsoft Virtual Academy

Desarrollo en Microsoft Visual Studio

Módulo 27 - Profundización depuración de aplicaciones

Documentos

Preguntas

  1. Una aplicación en modo mixto es cualquier aplicación que
    1. Sea hecha con java y uno de los lenguajes .Net excluyendo C++
    2. Combine código nativo (C++) y código administrado (como Visual Basic, Visual C# )
    3. Sea C++ administrado que se ejecute en Common Language Runtime
    4. Sea hecha con más de un lenguaje de programación
    5. Sea hecha con java y uno de los lenguajes .Net incluyendo C++
  2. Los archivos de volcado no pueden ser generados para los siguientes lenguajes en las versiones Express
    1. C#
    2. F#
    3. C++
    4. ASP.NET
    5. Visual Basic
  3. Son metodos de creacion de un archivo de volcado de memoria
    1. Mientras depura un proceso en Visual Studio 2010, puede utilizar la opción Guardar volcado como del menú Depurar para guardar un archivo de volcado de memoria. Para obtener más información
    2. Si la depuración Just-In-Time está habilitada, puede asociar el depurador a un proceso bloqueado que se ejecuta fuera del depurador, interrumpir el proceso y, a continuación, guardar un archivo de volcado de memoria
    3. Puede guardar un archivo de volcado de memoria creado mediante la utilidad UserDump, que forma parte del paquete Herramientas de soporte de OEM
    4. Por medio de la instrucción Windbg /PID [pid] /bulk:[complete | | mini] /path:[file Path}
    5. Puede guardar un archivo de volcado de memoria creado mediante la utilidad Autodump+, que forma parte del paquete de Herramientas de depuración de Microsoft para Windows
  4. La depuración colaborativa se logra haciendo uso de
    1. Intellitrace
    2. Exportación e importación de datos de depuración
    3. IntelliDebug
    4. Papel
    5. Depuración remota
  5. Cuando se produce un bloqueo, puede guardar un archivo de volcado de memoria para depurarlo más adelante
    1. En el equipo de compilación
    2. En otro equipo que contenga los archivos de origen y los símbolos de depuración
    3. En el equipo donde se produjo el volcado
    4. a y b
    5. Ninguna de las anteriores
  6. Un archivo PDB sirve para
    1. Generar alli la información de depuración de manera incremental
    2. No sirve para nada
    3. Solo le sirve al entorno de desarrollo de Visual Studio
    4. Abrir la DB desde SQL Server y ver detalles del código fuente de un programa
    5. Solo se usa como compatibilidad con depuradores de C++
  7. Mover el código del predicado de una consulta LINQ a un método aparte puede facilitar las tareas de depuración de código LINQ?
    1. Verdadero
    2. FALSO
  8. El riesgo al depurar apliacaciones es latente para
    1. El equipo depurado
    2. El equipo del depurador
    3. En el servidor de dominio
    4. En a y b
    5. En ninguno
  9. Se puede hacer depuración remota en las siguientes versiones de Visual Studio
    1. Professional
    2. Express
    3. Ultimate
    4. Premium
    5. Enterprise
  10. En las aplicaciones en modo mixto, la evaluación de propiedades por parte del depurador es una operación
    1. delicada
    2. mixta
    3. costosa
    4. transparente
    5. nueva

miércoles, 20 de marzo de 2013

Desarrollo en Microsoft Visual Studio / Módulo 26 - Firmado de ensamblados

Microsoft Virtual Academy

Desarrollo en Microsoft Visual Studio

Módulo 26 - Firmado de ensamblados

Documentos

Preguntas

  1. La firma de código garantiza que:
    1. El usuario puede saber de donde proviene el código ejecutable
    2. El código ejecutable no puede ser ejecutado sino por un usuario capaz de decifrar la firma digital
    3. EL usuario posee una firma sobre un contrato de software
    4. El código tiene embebido un mapa de bits que representa la rubrica del emisor
    5. El código ejecutable no ha sido alterado luego de su publicación
  2. La firma de codigo es usada para
    1. Determinar si un un troyano u otro tipo de programas maliciosos no esta haciendo uso del nombre o imagen de un programa conocido
    2. Determinar si un programa ha sido modificado o alterado por ejemplo por un virus
    3. Determinar si el software es malicioso
    4. Saltarse las validaciones de UAC
    5. Eliminar la necesidad de un usuario administrador para ejecutar un programa
  3. _________ es una tecnología desarrollada por Microsoft para permititr a los computadores verificar el origen de los programas, documentos y otros archivos de computador
    1. Digital Certificates
    2. AuthentiSign
    3. Code Signing
    4. Authenticode
    5. Autenticode
  4. El software sin firmar es peligroso?
    1. Verdadero
    2. Falso
  5. Si se firma un ejecutable y no se incluye la URL del servidor de timestamp puede pasar que:
    1. Nada, el parámetro es opcional tan solo para enriquecer la metadata
    2. Si el certificado no ha expirado no pasa nada
    3. Si el certificado ya expiro saldrá una advertencia indicando que el ejecutable firmado ya no es confiable
    4. El cliente sera notificado del certificado vencido por falta de pago haciendo pasar una vergüenza al emisor
    5. EL timestamp es utilizado como parte del hash del proceso de cifrado, asi que sino se incluye la validación siempre dara certificado inválido
  6. Athenticode fue reemplazado por Strong Name Assemblies en .Net Framework
    1. Verdadero
    2. Falso
  7. La firma de codigo NO es usada para
    1. Determinar si un un troyano u otro tipo de programas maliciosos no esta haciendo uso del nombre o imagen de un programa conocido
    2. Determinar si un programa ha sido modificado o alterado por ejemplo por un virus
    3. Determinar si el software es malicioso
    4. Saltarse las validaciones de UAC
    5. Eliminar la necesidad de un usuario administrador para ejecutar un programa

Desarrollo en Microsoft Visual Studio / Módulo 25 - Strong Name assemblies

Microsoft Virtual Academy

Desarrollo en Microsoft Visual Studio

Módulo 25 - Strong Name assemblies

Documentos

Preguntas

  1. Los nombres seguros (Strong Names) cumplen los siguientes requisitos:
    1. Garantizan la exclusividad del nombre al basarse en pares de claves únicas.
    2. Garantizan la integración con otras referencias de ensamblado.
    3. Protegen la procedencia de la versión de un ensamblado.
    4. Proporcionan una comprobación de regulación de información.
    5. Proporcionan una estructuración adecuada al código de una aplicación.
  2. Cuál de las siguientes es una manera de firmar el ensamblado que proporciona el Kit de desarrollo de software de Windows (SDK)
    1. Usando atributos de ensamblado para insertar la información de nombre seguro en el código
    2. Con la herramienta LinkerId.exe
    3. Utilizar las opciones del compilador como keydelaysign en C#, Visual Basic o J#.
    4. Ninguna opción es correcta.
    5. Todas las opciones son correctas.
  3. Los ensamblados con el mismo nombre seguro (Strong Name):
    1. Solo necesitan compartir la firma digital.
    2. Pueden compartir la clave pública.
    3. Tienen que ser idénticos.
    4. Deben tener la misma firma digital, pero una diferente clave pública.
  4. Acerca del caché de ensamblados global no es correcto decir que
    1. Cada equipo donde se instala Common Language Runtime tiene una memoria caché de código denominada caché global de ensamblados
    2. La caché global de ensamblados almacena los ensamblados designados específicamente para ser compartidos por varias aplicaciones del equipo.
    3. Es necesario instalar los ensamblados en la caché global de ensamblados para que obtenga acceso a ellos el código de interoperabilidad COM o el código no administrado.
    4. Los ensamblados implementados en la caché global de ensamblados deben tener nombres seguros.
  5. Cuales son las maneras de implementar un ensamblado en la caché global de ensamblados (Seleccione todas las respuestas correctas)
    1. No hay forma de realizar esta operación.
    2. Usando un instalador diseñado para funcionar con la caché global de ensamblados.
    3. Usando la herramienta de terceros Al.exe
    4. Utilizando la herramienta de desarrollador Caché global de ensamblados (Gacutil.exe)
    5. Solo puede hacerse desde la versión 4.0 del FrameWork.
  6. Con la clase AssemblyKeyNameAttribute
    1. se retrasa la firma de un ensamblado en el momento de la compilación.
    2. Se epecifica el nombre de un archivo que contiene el par de claves utilizado para generar un nombre seguro.
    3. Se especifica el nombre de un contenedor de claves dentro del CSP que contiene el par de claves utilizado para generar un nombre seguro.
    4. Se genera un archivo con un manifiesto de ensamblado a partir de uno o más archivos que son módulos o archivos de recursos
  7. Cual de las siguientes es una practica recomendable en el manejo de directorio systemroot y la Access Control List:
    1. Evitar que los usuarios tengan acceso, y todo manejarlo programáticamente.
    2. Permitir privilegios de modificación y actualización a todos los usuarios.
    3. Que sólo puedan eliminar archivos de la caché global de ensamblados los usuarios que tengan privilegios de administrador.
    4. Que solo tengan acceso los usuarios asociados a un directorio activo.
    5. Ninguna opción es correcta.

Desarrollo en Microsoft Visual Studio / Módulo 24 - Archivos de manifiesto

Microsoft Virtual Academy

Desarrollo en Microsoft Visual Studio

Módulo 24 - Archivos de manifiesto

Documentos

Preguntas

  1. El manifiesto de un ensamblado privado se debe incluir en ?
    1. Un archivo EXE
    2. Un archivo XML
    3. Un archivo DLL
  2. El manifiesto de un ensamblado simultaneo se instala en la carpeta?
    1. WinSxS\Manifests
    2. WinPxP\Manifests
    3. Win\Manifests
  3. La herramienta mt.exe que genera los archivos de manifiesto se encuentra disponible en ?
    1. .Net Framework 4.0
    2. Windows SDK
    3. Silverlight SDK
    4. Windows Phone SDK
  4. Uno de los procesos que utiliza Visual studio 2010 para incrustar un manifiesto es ?
    1. Una vez finaliza el manifiesto intermedio, se ejecuta la herramienta del Manifiesto para combinar un manifiesto final y guardarlo como archivo externo.
    2. El manifiesto se incrusta dentro del archivo ejecutable final como recurso.
    3. Si el archivo binario contiene un manifiesto incrustado, Visual Studio llamará al vinculador una vez más para incrustar el archivo de manifiesto externo dentro del archivo binario como recurso.
  5. El sistema operativo primero busca los ensamblados compartidos en una carpeta de la estructura de directorios de la aplicación?
    1. Verdadero
    2. Falso
  6. Cuál es la línea de comando correcta para incrustar un archivo de manifiesto?
    1. "mt.exe –manifest MyApp.exe.manifest -validate_manifest:MyApp.exe;1
      mt.exe –manifest MyLibrary.dll.manifest -validate_manifest:MyLibrary.dll;2"
    2. "mt.exe –manifest MyApp.exe.manifest -outputresource:MyApp.exe;1
      mt.exe –manifest MyLibrary.dll.manifest -outputresource:MyLibrary.dll;2"
    3. "mt.exe –manifest MyApp.exe.manifest -managedassemblyname:MyApp.exe;1
      mt.exe –manifest MyLibrary.dll.manifest -managedassemblyname:MyLibrary.dll;2"
    4. "mt.exe –manifest MyApp.exe.manifest -updateresource:MyApp.exe;1
      mt.exe –manifest MyLibrary.dll.manifest -updateresource:MyLibrary.dll;2"
  7. Cuáles de los siguientes comandos utiliza la herramienta mt.exe para la generación de archivos de manifiesto?
    1. manifest
    2. in
    3. out
    4. updateresource
    5. insertresource