Semana 8
Primera aproximación para las estadísticas:
Saludos.
mov eax,ollydbg; Int 13h
Ctrl+Alt+Supr, blog de Ollydbg
Otro sitio más de Gamefilia
El portal raptr se está convirtiendo en una de las comunidades ‘de facto’ sobre el tema de la "reputación" y "logros" de los videojuegos.
Es habitual estar en Twitter y ver constantes tweets que te muestran una "card" con algún logro o evento conseguido en el juego "X".
Intentando automatizar de alguna forma esos logros para meterlos en el catalogador de juegos, me he encontrado que no disponen de una API como puede ser la de Steam y de la que ya hablamos en el anterior post.
Sin embargo, alguien dijo: "Si se puede leer, se puede copiar" (anónimo). Por lo tanto, en la propia Web de raptr.com están los datos que necesitaba.
Y para muestra, este vídeo:
Es interesante ver que ahora también podría incluir "el tiempo jugado" a un determinado juego. Todo ello de forma automágica.
Por cierto, no estoy recibiedo mucho feedback sobre el catalogador 🙁
¿No interesa el proyecto?…Lástima.
Bueno, yo sigo abierto a cualquier sugerencia por parte de la comunidad.
Si tenéis alguna, dejad un comentario o enviar un MD a @MeriDeluxe
Saludos.
mov eax,ollydbg; Int 13h
Hoy probando cosillas para Gamerz he encontrado una ‘feature’ que podría ser interesante.
Lo primero que hay que hacer es obtener una API Key. La podéis conseguir desde este enlace
Y ya de paso, desde aquí podéis mirar los términos de uso. Os resumo lo ‘interesante’: 100.000 llamadas / día, cosa que no está nada mal 🙂
Como se puede ver, hay disponibles 4 APIs:
ISteamNews
ISteamUserStats
ISteamUser
ITFItems_440
La API que me interesa es precisamente la ISteamUserStats y más concretamente la función GetPlayerAchievements.
Con dicha función, podremos ver cuantos logros hemos completado de un determinado juego.
La llamada a la API es simple y solo necesita 3 parámetros:
http://api.steampowered.com/ISteamUserStats/GetPlayerAchievements/v0001/?appid={0}&key={1}&steamid={2}&format=xml
¿Qué es la appid?
Pues el el id del juego en cuestión. En Steam, cada juego tiene un id, así por ejemplo si en Steam entramos en la página del Skyrim vemos que la dirección es esta:
http://store.steampowered.com/app/72850
Pues en este caso, el id del Skyrim es el 72850. ¿Fácil, no?
¿Qué es la key?
Pues la API key que hemos conseguido en el primer paso. Creo que no tiene duda.
¿Qué es el steamid?
Cada usuario en Steam, también tiene un id. Ojo, no confundir el steamid con nuestro nombre dentro de steam (tanto nombre como nombre de la cuenta), ya que no tiene nada que ver.
Para averiguar nuestro steamid, lo más sencillo es dentro de la página de Steam, acceder a nuestro perfil y mirar la dirección en nuestro navegador web, en mi caso es algo como esto:
http://steamcommunity.com/profiles/7656119xxxxxxxxxxxx/
Bien, pues en este caso, el steamid es 7656119xxxxxxxxxxxx
Con estos tres datos, lo único que tenemos que hacer es una llamada a esta dirección:
http://api.steampowered.com/ISteamUserStats/GetPlayerAchievements/v0001/?appid=72850&key=tu_key_aqui&steamid=tu_steamid_aqui&format=xml
Esto nos devuelve un XML con el siguiente formato:
Si el valor de achieved es 1, es que el logro está completado, si es 0 es que no lo está.
Bien, pues con está información, me he creado una pequeña clase en C# que precisamente me proporciona la información que busco. El código fuente lo podéis ver aquí. (vía pastebin)
El uso de la clase es bastante trivial:
Básicamente hay un método GetStats(appid, steamid) y un evento llamado GetStatsCompleted()
Si la descarga / información es correcta, el argumento value del evento será distinto de null y podremos ver lo siguiente:
Como véis , simple, rápido y para todos los públicos.
Ahora queda ver si merece la pena implementar esta "feature" en el catalogador de juegos.
Actualización
Al final no he podido "resistirme" y lo he integrado en el programa 🙂
Saludos.
mov eax,ollydbg; Int 13h
Semana 7
Primero os dejo este vídeo y luego comentamos un par de cosillas:
En esta semana he estado trabajando en el "treeview" y en el panel de la lista y carátulas.
En la lista se muestra el detalle del "grupo" seleccionado:
Y en las carátulas, pues eso, las carátulas del "grupo" seleccionado:
Aquí podéis ver que al seleccionar un juego dentro del grupo "FPS", se muestran las carátulas de dicho grupo. Además de "selecciona" la carátula del juego seleccionado:
EL cuadro de búsqueda
La búsqueda es bastante "peculiar", me explico:
Si tenemos por ejemplo, seleccionado el grupo "Generos", y buscamos "FNAC", el programa nos muestra todos los juegos, agrupados por generos, donde alguno de sus campos contenga el texto "FNAC" (presumiblemente, solo en el campo "tienda", en este caso):
De esta forma, podremos ver rápidamente que "tipo de juegos" hemos comprado en el FNAC.
(Sí, ya sé que el ejemplo es un poco absurdo, pero bueno, es lo que hay xD)
Otro ejemplo.
Si tenemos activo el grupo "Idioma", y buscamos "FNAC" veremos todos los juegos, agrupados por idiomas, donde cualquier campo de los juegos sea "FNAC":
Con este sistema de "búsqueda" podremos sacar estadísticas interesantes.
Splash Screen
Durante esta semana también se ha trabajado en la "Splash Screen" (pantalla de carga) del programa:
Teniendo en cuenta mi nulo manejo con programas de dibujo, el resultado es bastante digno, en mi humilde opinión.
Tenía claro que quería hacer algo "irregular".
Como segundo paso se ha conseguido aplicar un efecto de "blending" que da un aspecto bastante chulo.
Al final he incluido una animación del "disco de tron" que proporciona "movimiento" al Splash Screen.
He podído comprobar una cosa:
Las comprobaciones en el Splash Screen se realizan en un hilo independiente. Si se usa Control.CheckForIllegalCrossThreadCalls = false; el refresco de los datos es muchisimo más lento (pero por mucho) que si se usan delegados e invokes.
Por lo tanto, consejo de amigo, pasa olímpicamente del CheckForIllegalCrossThreadCalls y usa delegates e invokes 🙂
Objetivos para las próximas semanas
Empezar a dar "forma" a la ficha del juego seleccionado en la pantalla principal del programa.
PD: Se buscan colaboradores con el proyecto. Interesandos enviar un MP o dejar un comentario.
Saludos.
mov eax,ollydbg; Int 13h
Resumen 2013. Off Topic: Link
Resumen 2013. MeriConsolas: Link
Off Topic 2014. Enero:
Total Hilos nuevos —> http://i.imgur.com/EO3A7lt.png
Temas —> http://i.imgur.com/CSp4lIb.jpg
Hilos/Hora —> http://i.imgur.com/AmCDMg5.png
Hilos/Día —> http://i.imgur.com/et51s6g.png
Foreros —> http://i.imgur.com/DLWQu3I.png
MeriConsolas 2014. Enero:
Total Hilos nuevos —> http://i.imgur.com/d6BpjcK.jpg
Temas —> http://i.imgur.com/zNvhgJ8.png
Foreros —> http://i.imgur.com/GIN86oS.png
Meristation. Usuarios Online 2014. Enero:
Registrados —> http://i.imgur.com/vmC2Xlr.png
Ocultos —> http://i.imgur.com/uDqfbhA.png
Invitados —> http://i.imgur.com/sBehsO9.png
Total —> http://i.imgur.com/yVIZPhb.png
Saludos.
mov eax,ollydbg; Int 13h
En estas dos últimas semanas he podido darle un poco más de brío al proyecto.
La vista para la gestión de un juego está practicamente operativa al 100%. Solo falta una cosa: Que el botón "Aceptar" haga lo que se supone que tiene que hacer.
Esta vista se encargará de dar da alta un juego de forma "manual" o editar un juego que ya existía en nuestra base de datos.
Solo son obligatorios dos campos: El título del juego y la plataforma.
Nota: El diseño de la vista es completamente ‘temporal’ y puede sufrir cambios a lo largo del desarrollo. Si tenéis alguna sugerencia, sera bienvenida.
Esta vista se compone de 3 pestañas:
– Juego
– Personal
– Carátulas y links
Pestaña Juego.
Aquí básicamente se podrá establecer la información del juego:
Pestaña Personal.
Los datos personales serán los siguientes:
Carátulas y links
Carátulas:
Desde aquí se podrá establecer o cambiar la carátula del juego
Trailer:
Se podrá establecer un trailer para verlo desde la ficha principal del programa. Actualmente se admiten trailers de Youtube y Vimeo.
Links:
Se puede establecer un número ilimitado de enlaces para verlos desde la ficha principal del programa.
Otros aspectos ‘técnicos’
Si establecemos la opción de "Logros" y tenemos completos todos los logros del juego, se mostrará este trofeo en la ficha del juego:
Todas las entradas de datos se realizan con desplegables con "auto-completado". Esto facilita muchísimo la entrada de datos.
Por ejemplo si queremos establecer la saga "The Elder Scrolls". Tenemos dos opciones.
Podemos desplegar la lista y buscar y seleccionar "The Elder Scrolls":
… o bien, escribir una t
… luego una h
y listo.
Si queremos dar de alta "un nuevo concepto", simplemente lo escribiremos y al completar la edición de la ficha el programa creará el registro correspondiente. Fácil, rápido y para todos los públicos.
La vista no permitirá modificar los datos si falta algún campo obligatorio (siempre marcado en ‘rosa’):
Por último indicar que el programa tiene una serie de datos "pre-cargados", que son los siguientes:
Bien, como véis, la cosa avanza despacio pero con paso firme.
La vista en la que he estado trabajando estas dos semanas es la base del programa.
Internamente hay aspectos más técnicos en los que también se ha trabajado, como son el motor de datos, que es capaz, con solo cambiar 1 línea de código, trabajar con SQL CE, SQL Server, Access, MySQL, Oracle, etc…pero vamos, no me extenderé nada en ese aspecto 🙂
Objetivos para la semana 5, 6 y 7
Para las tres siguientes semanas los objetivos son dos:
1) Coger el código de "test" de la semana 3 e integrarlo en el programa.
2) Completar lo realizado hasta ahora y guardar en base de datos un juego (tanto nuevo, como editado)
Repito y no me cansaré que si tenéis alguna duda o mejor aún, alguna sugerencia, me la indiquéis en los comentarios.
Saludos.
mov eax,ollydbg; Int 13h
Ya tenemos algo de código (hurra!)
En esta tercera semana he implementado el servicio WCF.
De momento solo tengo dos métodos, uno nos devuelve una lista de juegos y otro nos devuelve toda la información de un determinado juego.
Una vez alojado el servicio WCF en mi servidor he realizado un pequeño test para ver como se comporta.
Básicamente tendremos una caja de texto donde escribiremos el título que deseamos añadir a nuestra colección, para que plataforma y un botón para iniciar la búsqueda.
Para que os hagáis una idea:
En este pequeño vídeo se puede comprobar como funciona:
Un par de apuntes:
El servicio va bastante rápido, tendiendo en cuenta que el servidor se encuentra en California y yo estoy en España.
Las carátulas se cargan directamente desde mi cuenta de Dropbox que subí la semana pasada.
Objetivos para la semana 4 y 5:
Para las próximas dos semanas tengo pesando diseñar la base de datos y poder dar de alta un juego.
Apenas dispongo de dos horas a la semana para dedicar a este proyecto, así que iremos despacio pero con buena letra.
Dudas, comentarios, sugerencias…en el botón de abajo
Saludos.
mov eax,ollydbg; Int 13h
Esta segunda semana no ha sido ‘muy interesante’.
Básicamente he subido todas las carátulas descargadas la semana anterior a mi cuenta de Dropbox, después de conseguir algo más de espacio.
Semana 2. Subir las carátulas de los juegos a Dropbox…
Como no tengo el programa de Dropbox instalado en mi PC (ni pienso instalarlo de momento) la subida de las carátulas las he realizado desde el propio navegador web.
Como dato curioso, desde el navegador web, Dropbox no permite subir más de 3000 archivos a la vez. Por lo que he tenido que ir subiendo los archivos poco a poco.
Objetivos para la semana 3:
Bien, para esta nueva semana tengo pensado en empezar a desarrollar el servicio WCF.
Para empezar básicamente necesito dos métodos:
– Un método que me devuelva una lista de juegos en función del título especificado.
– Un método que me devuelva la información de un juego en concreto.
Cualquier duda, o sugerencia, por aquí andamos.
Saludos.
mov eax,ollydbg; Int 13h
Nota: el título es provisional
Nuevo año, nuevos proyectos!.
¿Qué pretende ser Gamerz?
– Un programa para catalogar todos los juegos que tienes.
Objetivos:
– De fácil manejo.
– Dar de alta un juego en tu catálogo con un simple click, recuperando la carátula, título, año de lanzamiento, desarrollador, publicador, plataforma, etc.
– Llevar un control de a quién y cuando le has prestado un juego.
– Gráficas e informes del total de juegos completados, dinero gastado, juegos que tienes por géneros, desarrollador, etc.
– Generación de plantillas en HTML/otros formatos para poder consultar tu catálogo desde un móvil/tablet.
– G R A T U I T O
– Cualquier otra característica que vaya surgiendo durante el desarrollo.
Semana 1. Datos, datos, necesito datos…
Lo primero que se ha desarrollado es la base de datos principal (SQL Server) que estará alojada en un servidor desde donde se recuperará la información vía servicio WCF / SOAP.
Esta información ha sido "parseada" de distintas fuentes de internet. Las categorías ("plataformas") seleccionadas han sido las siguientes:
Una vez diseñada la base de datos y la aplicación de "parsing", se procedió al llenado de la base de datos. Este proceso recuperaba la información de varias fuentes y portales de internet. El proceso duró más de 6 horas:
La herramienta de "parsing" no solo rellenaba la base de datos, sino que también descargó las carátulas de los juegos que iba analizado. En total se descargaron más de 1.6 GB en carátulas:
Aquí se puede ver un fragmento de los datos insertados en la tabla principal:
Se puede observar que se "parsearon" mas de 48.000 juegos.
La cantidad de juegos por plataforma han sido los siguientes:
El tamaño de la tabla tampoco es excesivo, ya que apenas llega a los 10 MB:
Bien, objeto 1 complido, ya tenemos datos para empezar a trabajar.
Objetivos para la semana 2:
– Revisar la base de datos para detectar posibles errores.
– Subir los 1.6 GB de las carátulas a mi cuenta de Dropbox, para lo cual necesito ampliarla. Actualmente tengo 1.6 / 2 GB ocupados.
Para ello tengo que hacer lo siguiente:
– Activar la subida de fotos desde mi móvil y subir 1 foto (creo que te dan 500 MB por eso)
– Completar el asistente de primer bienvenida (125 MB)
– Enviar 1 o dos invitaciones para que alguien use Dropbox (osea, a mi mismo a cuentas "bot") con lo que conseguiría 500 MB / 1 GB más
– Borrar toda la "purria" que tengo actualmente y que no me sirve para nada de mi carpeta de Dropbox
Con todo eso creo que conseguiré los 1.6 GB libres para poder alojar las carátulas en la "nube" y que puedan ser transferidas via WCF / SOAP por Gamerz.
Por cierto, da la suerte que dispongo de una cuenta de Dropbox "de las antiguas", donde el link es fijo.
Cualquier duda, o sugerencia, por aquí andamos.
Saludos.
mov eax,ollydbg; Int 13h