Nuevos sistemas de puntuación del Fútbol con python

Hace tiempo que me surge la duda de si el sistema de puntuación actual del fútbol en el que el que si ganas recibes 3 puntos, si empatas 1 y si pierdes 0 es el más adecuado.

Para comprobar como podría afectar un cambio en el sistema de puntuación sobre una liga ya jugada me he puesto manos a la obra y he realizado una pequeña aplicación en python.

Vamos a comparar 5 sistemas de puntuación para ver cómo afectarían a la clasificación final.

Primer sistema (actual): 3 puntos al ganador, 0 puntos al perdedor, en caso de empate 1 para cada uno

Segundo sistema (nuevo): 3 puntos al ganador si gana por más de 1 gol de diferencia, 2 puntos al ganador si solo gana por 1 gol de diferencia, 0 puntos al perdedor, en caso de empate 1 para cada uno

Tercer sistema (antiguo): 2 puntos al ganador, 0 puntos al perdedor, en caso de empate 1 para cada uno

Cuarto sistema (experimental): 4 puntos al ganador si gana por más de 2 goles de diferencia, 3 puntos al ganador si gana por 2 goles de diferencia, 2 puntos al ganador si solo gana por 1 gol de diferencia, 0 puntos al perdedor, en caso de empate 1 para cada uno

Quinto sistema (revolucionario): 2 puntos al ganador, -1 punto al perdedor, en caso de empate 1 para cada uno

Para realizar la tarea, lo primero que necesitamos son los datos en algún formato procesable mediante programación. Después de buscar en internet, he dado con una web que permite la descarga de los resultados en formato json para diferentes temporadas e incluso ligas. Todos ellos respetando el mismo formato, de modo que podemos utilizar la misma aplicación para otras temporadas y ligas. Después he desarrollado la aplicación que además de presentar los resultados en pantalla, genera un fichero csv con ellos para tratar los datos de forma más cómoda.

import json
import operator
import csv

data = {}
modos = ['actual', 'nuevo', 'antiguo', 'experimental', 'revolucionario']

with open('2016_2017.json') as json_file:
    try:
        futbolBD = json.load(json_file)
        jornadas = futbolBD['rounds']
        for jornada in jornadas:
            partidos = jornada['matches']
            for partido in partidos:
                equipo1 = partido['team1']['key']
                equipo2 = partido['team2']['key']
                goles1 = partido['score1']
                goles2 = partido['score2']
                puntos1, puntos2 = 0, 0

                for modo in modos:
                    dif = goles1 - goles2
                    if modo == "actual":
                        if dif > 0:
                            puntos1 = 3
                            puntos2 = 0
                        if dif < 0:
                            puntos1 = 0
                            puntos2 = 3
                        if dif == 0:
                            puntos1 = 1
                            puntos2 = 1
                    elif modo == "nuevo":
                        if dif == 1:
                            puntos1 = 2
                            puntos2 = 0
                        if dif == -1:
                            puntos1 = 0
                            puntos2 = 2
                        if dif >= 2:
                            puntos1 = 3
                            puntos2 = 0
                        if dif <= -2:
                            puntos1 = 0
                            puntos2 = 3
                        if dif == 0:
                            puntos1 = 1
                            puntos2 = 1
                    elif modo == "antiguo":
                        if dif > 0:
                            puntos1 = 2
                            puntos2 = 0
                        if dif < 0:
                            puntos1 = 0
                            puntos2 = 2
                        if dif == 0:
                            puntos1 = 1
                            puntos2 = 1
                    elif modo == "experimental":
                        if dif == 1:
                            puntos1 = 2
                            puntos2 = 0
                        if dif == -1:
                            puntos1 = 0
                            puntos2 = 2
                        if dif == 2:
                            puntos1 = 3
                            puntos2 = 0
                        if dif == -2:
                            puntos1 = 0
                            puntos2 = 3
                        if dif > 2:
                            puntos1 = 4
                            puntos2 = 0
                        if dif < -2:
                            puntos1 = 0
                            puntos2 = 4
                        if dif == 0:
                            puntos1 = 1
                            puntos2 = 1
                    elif modo == "revolucionario":
                        if dif > 0:
                            puntos1 = 2
                            puntos2 = -1
                        if dif < 0:
                            puntos1 = -1
                            puntos2 = 2
                        if dif == 0:
                            puntos1 = 1
                            puntos2 = 1
                    else:
                        print("modo no valido")

                    existeEquipo1 = data.get(equipo1, None)
                    if existeEquipo1 is None:
                        data[equipo1] = {}

                    if modo in data[equipo1].keys():
                        anterior = data[equipo1][modo]
                        data[equipo1][modo] = anterior + puntos1
                    else:
                        data[equipo1][modo] = puntos1

                    existeEquipo2 = data.get(equipo2, None)
                    if existeEquipo2 is None:
                        data[equipo2] = {}

                    if modo in data[equipo2].keys():
                        anterior = data[equipo2][modo]
                        data[equipo2][modo] = anterior + puntos2
                    else:
                        data[equipo2][modo] = puntos2

    except ValueError:
        print("error")

# CSV FILE
csv_file = "futbol.csv"
csv_columns = ['Nombre','Puntos ACT','Puntos NUE','Puntos ANT','Puntos EXP','Puntos REV']
try:
    with open(csv_file, 'w') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
        writer.writeheader()
        for item in data.keys():
            row = {'Nombre': item, 'Puntos ACT': data[item]['actual'], 'Puntos NUE': data[item]['nuevo'],
                   'Puntos ANT': data[item]['antiguo'], 'Puntos EXP': data[item]['experimental'],
                   'Puntos REV': data[item]['revolucionario']}
            writer.writerow(row)
except IOError:
    print("I/O error")

# CLASIFICACION
dataActual, dataNuevo, dataAntiguo, dataExperimental, dataRevolucionario = {}, {}, {}, {}, {}

for item in data:
    equipo = data[item]
    dataActual[item] = equipo['actual']
    dataNuevo[item] = equipo['nuevo']
    dataAntiguo[item] = equipo['antiguo']
    dataExperimental[item] = equipo['experimental']
    dataRevolucionario[item] = equipo['revolucionario']

print("Modo ACT " + str(sorted(dataActual.items(), key=operator.itemgetter(1), reverse=True)))
print("Modo NUE " + str(sorted(dataNuevo.items(), key=operator.itemgetter(1), reverse=True)))
print("Modo ANT " + str(sorted(dataAntiguo.items(), key=operator.itemgetter(1), reverse=True)))
print("Modo EXP " + str(sorted(dataExperimental.items(), key=operator.itemgetter(1), reverse=True)))
print("Modo REV " + str(sorted(dataRevolucionario.items(), key=operator.itemgetter(1), reverse=True)))

Los resultados son curiosos, básicamente, da casi igual el sistema de puntuación utilizado, la clasificación varía muy poco, aunque evidentemente, si los equipos son conscientes del tipo de puntuación utilizado, también cambian sus estrategias para obtener el mayor número de puntos.

Solo el Barcelona estaría interesado en el sistema de puntuación “Experimental” donde se recompensa el marcar muchos goles por partido.

¿Y si pierdes el móvil o tienes un accidente con el móvil bloqueado?

Hace tiempo hubo una campaña en Televisión donde nos decían que creáramos un contacto con el nombre A.A y el número de teléfono del contacto al que llamar en caso de accidente, pero ¿y si el móvil está bloqueado por aquello de la privacidad?

Otro caso es que perdamos el móvil y que alguien nos lo quiera devolver, ¿como sabrían a donde llamar para su devolución?

Aquí viene la utilidad de la pantalla de bloqueo y la información del propietario. Debemos hacer que se muestre la información del propietario en la pantalla de bloqueo, pero no con nuestro número de teléfono, sino con el número de teléfono a donde queremos que llamen en caso de que se produzca alguna de las circunstancias anteriores.

A.A. 6xxxxxxxx

Por ejemplo el teléfono de tu mujer o marido sería lo adecuado.

En un Samsung Android estos son los pasos:

Compártelo con tus amistades, les podría venir bien en un futuro.

OwnMdm, tu gestor de dispositivo remoto, ahora Open Source

 

Ahora ownmdm, ha pasado a ser completamente open source. Os recuerdo que está dividido en un apartado web y una App para Android y que tiene muchísimas funciones.

 

Mäs datos del proyecto en esta entrada.

 

Ahora en el dominio http://ownmdm.pacosal.com tenéis acceso a toda la información y también al código fuente.

 

Ya no hay excusa para utilizarlo en vuestros dispositivos y estar asegurados contra robos.

Análisis breve Wiko StairWay

Ha pasado por nuestras manos la joya de Wiko, que no es otra que su Wiko StairWay. Un teléfono con las siguientes características hardware:

– Pantalla IPS de 5 pulgadas

– Resolución de 1.280 x 720

– Protección de pantalla Gorilla Glass

– CPU de 4 nucleos a 1,2 GHz.

– 1 GB de Ram

– Cámara trasera de 13 Mpx

– Cámara frontal de 5 Mpx

– Capacidad para manejar 2 tarjetas sim de tamaño normal

– Capacidad para tarjetas de memoria micro-sd

– Batería de 2000 mAh

– 16 GB de almacenamiento interno

– Bluetooth 4.0

 

Además viene con Android 4.2.1 instalado y poco personalizado.

 

En cuanto a su uso, sufre de cierto lag en diferentes ocasiones, especialmente utilizando la cámara, que, por otra parte, dispone de buena calidad.

Destacar también que tiene una gran pantalla, pero con solo 2000 mAh, va a ser duro llegar al final del día con una sola carga.

Tampoco destaca especialmente por su cantidad de Ram de 1 GB cuando los más modernos móviles estan comenzando a aparecer ya con 3 GB.

 

Por otra parte, es un móvil grande y muy completo que puede satisfacer a numerosos usuarios, especialmente por su precio desde 269€.

 

Unas fotos a continuación:

Seguir leyendo “Análisis breve Wiko StairWay”

ownmdm.com tu propio administrador de dispositivos gratuito

En la entrada anterior os hablaba del proyecto ownmdm con el que os podéis montar vuestro propio gestor de dispositivos utilizando vuestro propio servidor. Ahora hay muchos más comandos disponibles.

Pero ahora además podéis utilizar nuestros servidores con tráfico seguro en lugar de instalar el vuestro.

Recordar que hay 2 tipos de usuarios:

Standard: Gratuito con casi todas las opciones

Premium: Con todas las opciones

* Por un tiempo limitado, todas las altas en el portal serán usuarios Premium para siempre.

En la web https://www.ownmdm.com tenéis toda la información.

Recordaros que debéis utilizar la última versión de la App para que funcione correctamente.

 

ownMdm – Tu propio administrador de dispositivos para Android

Mi último proyecto para usuarios Android es un administrador de dispositivos similar a Cerberus e incluso al de Google, pero con la peculiaridad de que es gratuito y solo tú controlas toda la información. No cedes tus datos a nadie.

 

Necesitarás disponer de un Servidor propio, que bien puede ser una Raspberry PI o cualquier servidor que pueda ejecutar php y mysql, y una vez configurado solo tendrás que descargar la App Gratuita de Google Play y configurarla para que se conecte a tu servidor, repitiendo estos pasos para cada dispositivo que quieras controlar.

 

 

Una vez instalado en el dispositivo y configurado, podrás ponerlo en modo invisible y la App parecerá que no está instalada ya que no aparecerá en el lanzador de aplicaciones.

 

Los comandos que puedes enviar desde la consola son:

Seguir leyendo “ownMdm – Tu propio administrador de dispositivos para Android”

Aplicación Trivia Time para Firefox OS publicada

 

Ya está desarrollada la primera versión de Trivia Time para Firefox OS.

 

Basado en html5 siendo una conjunción de html, css y javascript. Es una versión sencilla desarrollada solo en ingles y con 3 niveles. En el futuro quizás le añada más.

 

El envío al MarketPlace y su publicación ha sido de minutos, ya que la webapp no solicita permisos.

 

La he desarrollado utilizando el emulador de Firefox y el dispositivo Keon que Mozilla me proporcionó.

 

Si la queréis probar aquí tenéis su url en el market https://marketplace.firefox.com/app/trivia-time/

Guardar todas las notificaciones de tu móvil en una hoja excel automáticamente

La última versión de Voice for Notifications nos permite reenviar todas las notificaciones que hemos permitido a una cuenta de correo de forma sencilla y transparente. Solo tenemos que activar la opción de Ajustes en el  apartado ENVIAR A del correo e introducir la cuenta de correo destinataria y nuestro usuario y clave de Gmail.

Para no perdernos ninguna, cuando no queramos que la App nos lea el mensaje por voz, en lugar de desactivar la App mediante el widget, podemos activar la opción de que no nos lea los mensajes en voz alta, pero que haga todo lo demás, incluyendo el envío.

 

Una vez configurado y comprobado que recibimos los correos, veremos que todos comienzan por V4N. En la cuenta podemos crear una etiqueta que los englobe, pero eso es a gusto de usuario. Pero lo que queremos es reunir todas las notificaciones en una hoja excel de Google Drive y esto lo hará la web www.ifttt.com por nosotros.

Seguir leyendo “Guardar todas las notificaciones de tu móvil en una hoja excel automáticamente”

Geeksphone Keon y Mozilla Firefox OS

 

Ya dispongo de mi terminal Geeksphone Keon para comenzar a desarrollar mi primera App para Firefox OS.

 

Este terminal es una developer preview, lo que quiere decir que está dirigido a desarrolladores para que vayan implementando aplicaciones y ayuden en la solución de bugs y rendimiento.

 

El teléfono todavía sufre lags, aunque se puede utilizar perfectamente. La versión de Firefox OS es una pre-release, de modo que se irá mejorando poco a poco.

 

En cuanto a características técnicas el Keon es un dispositivo similar a un HTC Wildfire S, un dispositivo de Gama Baja con 512 MB de memoria Ram.

 

Lo que le hace especial es que lleva el nuevo SO Firefox que está basado en un núcleo Linux muy similar a Android, pero con un interfaz basado completamente en HTML 5 lo que en principio es bueno, ya que muchos desarrolladores saben como trabajar con él.

 

En breve comenzaré a desarrollar mi primera App para él, lo que os haré saber en el momento que esté terminada.

 

A ver si tiene suerte y se convierte en el tercer S.O. para móviles…

Raspberry Pi como nas, cliente de torrent y mediaplayer

Hace varias semanas que adquirí (de nuevo) una raspberry pi con su caja incluida desde rs components, por un precio puesto en casa, de 45 €.

 

Después de varias pruebas con diferentes imágenes de linux, he dado con la mejor.

 

Raspbmc es la distribución preparada para que de una vez tengas un NAS (poder distribuir los contenidos almacenados en un disco duro externo con el resto de dispositivos de la red local) y un media player que funciona realmente bien.

 

Como sabéis, una raspberry arranca siempre desde una Sd, de modo que cambiar el S.O. es extremadamente sencillo. Solo hay que descargar la imagen adecuada, grabarla en una SD y ya está.

 

Luego hay que conectarse mediante SSH, por ejemplo con el cliente gratuito Putty con el usuario y clave por defecto (pi / raspberry) y empezar a funcionar.

 

Desconozco si funciona con todas las tv, pero si tienes una tv Samsung el mismo mando de la TV funcionará para manejar el mediaplayer, lo que es muy cómodo. Puedes tener la raspberry escondida y seguirá funcionando ya que los comandos que envies a la tv, la tv los enviará mediante hdmi a la raspberry y a xbmc que es el software multimedia.

 

Podrás ver películas directamente desde el disco duro e incluso instalar plugins para ver youtube y otros canales directamente desde xbmc.

 

Pero unas recomendaciones para que el sistema vaya holgado, es recomendable que la partición del disco duro externo esté en formato ext4, ya que en NTFS para escribir no van muy rápido.

 

Además en el título de esta entrada pone como cliente de torrent. Es muy sencillo instalar el cliente de torrent transmission que tiene un interfaz web al que podremos conectarnos para subir nuevos torrents y ver el estado de las descargas. De este modo la raspberry descargará las películas en el disco duro que podrás visualizar cuando te venga bien.

 

Pero aunque es bastante, todavía quiero que mi Raspberry Pi, trabaje algo más y quiero montar un sistema de domótica con ella, pero de eso hablaré en futuras entradas…