Tuesday, March 5, 2013

Data Gathering & iOS Platform

Vandaag heb ik eindelijk die meeting weten te regelen met iemand van SPIL Games die bezig is met datagathering. Ze zijn bezig met een uitgebreid framework om bepaalde features te implementeren in alle iOS games die hier worden ontwikkeld. Onder andere aan bod gekomen zijn gameplay recordings, heatmaps van statische menu's en in-game advertenties. Op dit moment is het framework ontwikkeld voor Xcode: de onderliggende code voor Mac, iPhone en iPad applicaties. Unity projecten die gecompileerd worden voor Apple platforms worden uiteindelijk ook Xcode.

Ik heb hem mijn eigen prototypes laten zien en hij heeft me verwezen naar de SPIL Games wiki waar alle documentatie op terecht komt. Ik heb al een hoop geleerd over hun gebruikte technieken. Mijn heatmaps worden bijvoorbeeld lokaal gerendered op basis van alle remark records die zijn binnen gehaald.

Hun heatmaps hebben voor elke pixel van het scherm een record, en daar wordt direct naar toe geschreven. De hele heatmap bestaat dus op de server en er is dus überhaupt geen sprake van renderen.

Verder hebben we het nog gehad over de schaalbaarheid van mijn prototypes en optimalisatie mogelijkheden van mijn databases. Hij weet veel over data gathering en heeft me een hoop blogs en links gegeven over artikelen waarvan ik de basisprincipes en jargon van datagathering (en Business Intelligence) kan leren.

Monday, March 4, 2013

HTML5 Grafiek vervolg

Grafieken tekenen is ingewikkelder dan ik dacht. Voornamelijk het tekenen van een grid op de achtergrond.  Als je de dichtheid van de lijnen niet goed berekent worden de waardes onoverzichtelijk en de tekst onleesbaar. Als je geen logische intervallen kiest begrijp je de context van de data niet.

Het is al helemaal een nachtmerrie als de oorsprong niet linksonder in het scherm zit omdat het hele grid dan verschoven is en de tussenlijnen niet op fijne plaatsen terecht komen.



Een grafiek waar de oorsprong off-center is.


Verder heb ik ondersteuning voor meerdere datasets ingebouwd zodat je data kan vergelijken. Je hoeft alleen meer data in te voeren. In het kader van alles automatisch doen zijn er al een aantal kleuren ingesteld en alle benodigde berekeningen om alle data goed in beeld te krijgen wordt voor je gedaan tenzij je expliciet aan geeft welk venster je wilt zien.



Grafiek die meerdere datasets toont

Als er lange waarden op de horizontale as verwacht worden kan de tekst verticaal worden gezet zodat het beter naast elkaar past. Dit is onder andere handig wanneer de x-as tijd moet voorstellen. Ik ben op dit moment bezig om grafieken te kunnen tekenen die tijd weer geven. In dat geval worden waardes op de X-as gezien als een 'epoch', ofwel het aantal seconden sinds 1 januari 1970, een veelgebruikte aanduiding van tijd als een getal. Het weergeven van waarden langs de as is nog brein-brekender dan normaal omdat er zo veel formaten van tijd zijn en dat ze allemaal voor andere situaties geschikt zijn.


Grafiek met tijd op de x-as.

Het weergeven van grafieken met tijd werkt nog niet 100%, voornamelijk het weergeven van waardes langs de as afhankelijk van de schaal. Daar ga ik nog mee verder. De afspraak die ik zou moeten hebben gehad met een collega is verschoven, dus die komt iets later.

Friday, March 1, 2013

HTML5 Grafiek & Javascript


Ik ben verder gegaan met HTML5 en het visualiseren van game event data. Om verandering weer te geven zijn grafieken een stuk handiger dan pie charts. Daarom ben ik begonnen aan een robuuste HTML5 script die grafieken tekent. Het idee is dat je er X en Y co-ordinaten in gooit en dat de boundaries, kleuren en afmetingen automatisch worden berekend.

Javascript vind ik verreweg de meest vieze lelijke programmeertaal die er bestaat, met PHP kort op de hielen, dus alles enigzins netjes aan de praat krijgen is lastig. Je kan zien dat het hele object oriented idee een nagedachte was bij JavaScript en PHP. Het declareren van variabelen en functies is ook vreemd. De scope is anders dan de meeste programmeertalen en variabelen hebben blijkbaar geen type.


Screenshot van mijn grafiekscript in actie


Na wat gevloek heb ik een script gemaakt die bijna precies doet wat ik wil. De dichtheid en plaatsing van het grid klopt bijvoorbeeld nog niet als de oorsprong niet linksonder in het scherm zit. Ik heb ook nog een bijeenkomst met SPIL collega's die met datagathering werken (ik weet dat ze met heat maps bezig waren, daarom was ik zelf ook met heatmaps begonnen). Verder heeft Voodoo Runner een tussentijdse demo maandag, dus ik moet stand-by staan om te helpen met het maken van assets. Waar mogelijk ga ik morgen verder om de script te verbeteren en te koppelen aan event data.

Thursday, February 28, 2013

Heat map optimalisatie & HTML5


Ik heb wat meer opties toegevoegd voor het renderen van heatmaps zoals de individuele radius en hitte van remarks en de brightness van de achtergrond en de hitte. Verder heb ik het renderen van de achtergrond wat geoptimaliseerd.

Ik heb een hekel aan Javascript en weinig ervaring met HTML5, maar na wat geworstel heb ik een systeem gemaakt om dynamische pie charts te renderen. Dit heb ik gebruikt om bepaalde event data weer te geven.

Het visualiseren van geregistreerde game events is best lastig, omdat de betekenis van een event compleet van de developer af hangt. Zo is het opzoeken van hoe veel procent van de userbase een game event heeft (heb ik occurrence genoemd) handig voor events die bijvoorbeeld worden afgevuurd wanneer je een level haalt.

Userbase occurrence. Hier wordt bekeken hoeveel spelers voorover zijn gevallen.
Je kan ook het argument weg laten om te kijken hoeveel spelers überhaupt zijn omgevallen.


Als je aan het einde van een level een event afvuurt die registreert hoeveel coins je hebt opgepakt betekent het vrij weinig om te kijken welke users allemaal die event hebben, daar gaat het voornamelijk om het meegestuurde argument. Daar moet je dus op een heel andere manier kijken naar dezelfde data.

Event types. Hier wordt gekeken welke varianten er bestaan van een event en hoe vaak ze voorkomen.
Dit zou je kunnen gebruiken om bijvoorbeeld te zien welke levels het meest worden gespeeld.


Ik probeer nu een aantal algemene manieren te bedenken hoe je game events nuttig kunt gebruiken, en om functies te bouwen die de meest gebruikte manieren om data te verzamelen ondersteunt.

Pie charts zijn handig om verhoudingen weer te geven, maar er bestaan nog een hoop andere soorten diagrammen. Ik ga nu verder met HTML5 en met na te denken over wat voor data je kan verzamelen met events en hoe die het beste weer te geven is.

Wednesday, February 27, 2013

Heat Maps II

Heat maps zijn nu volledig functioneel. Je kan een Unity script toevoegen aan de camera om na het laden van alle remarks de data te renderen naar een heatmap. De rendertijd neemt exponentieel toe naarmate je de resolutie vergroot, dus om zicht te geven op hoever het renderproces is heb ik een progress bar toegevoegd samen met de verwachtte rendertijd.


Het 'level' in beeld, met alle ratings geladen. De voortgang van het renderproces wordt weergegeven.


Je kan verschillende maps renderen. Op dit moment wordt data kwalitatief en kwantitatief weergegeven afhankelijk van welk type remark je selecteert. Sowieso wordt er altijd eerst een achtergrond gerendered zodat je begrijpt over welke locaties het gaat. Daarna wordt er een heatmap gegenereerd om de kwantiteit van remarks weer te geven, zoals de hoeveelheid bugs, of een map die kwaliteit van remarks in beeld brengt, zoals de score die spelers opgeven bij 'Rating' remarks. Zo kan je op verschillende manieren probleemgebieden vaststellen: gebieden waar veel bugs worden gereport en gebieden die niet worden gewaardeerd door de spelers. Een kwantitatieve heat map kan ook worden gerendered voor locaties waar spelers niet wisten hoe ze verder moeten.



Van links naar rechts: de achtergrondmap, heatmap en ratingmap.


Hierna ga ik het heatmap algoritme verbeteren en optimaliseren, alsmede experimenteren met manieren om de zogeheten game-event data op een gelijksoortige manier weer te geven.

Monday, February 25, 2013

Heat maps

Ik heb de eerste draft van het Project Initiation Document opgestuurd ter bevestiging, en ik wacht nu op feedback van mijn docentbegeleider. Ondertussen ben ik kort aan het uitproberen of ik heatmaps kan renderen van de data die op dit moment verzameld wordt (bijv. buggebieden of slechte flow of player waardering).

Ik maak een Unity script die voor een instelbare resolutie per pixel naar het level traced om terreindata te vergaren. Zo wordt eerst het level als achtergrond gerendered zodat je de context van de heatmap kan begrijpen. Daarna wordt de 'hitte' van remarks bepaald en over de achtergrond heen gerendered.

Het is nog niet helemaal af. Ik wil het nog uitbundig testen en allerlei variabelen in het algoritme verwerken.

Donderdag & Vrijdag

Ik was een beetje bang dat ik achter ging lopen, daarom was ik woensdag meteen weer naar werk gegaan terwijl ik eigenlijk nog niet genezen was. Dat merkte ik donderdagmiddag toen ik vroeg naar huis moest omdat ik hoestbuien had. Ik ben vrijdag thuis gebleven om een lang weekend te rusten. Dat heeft geholpen, en inmiddels voel ik me een stuk beter. De volgende dingen moet ik nog maken voor mijn PID:

Project Quality Plan

Initial Business Case

Initial Risk Log


De rest is al gemaakt. Als ik deze week goed door werk denk ik dat ik prima op schema blijf.


Daarnaast heb ik aanstaande vrijdag een afspraak met een groepje mensen van SPIL Games. Blijkbaar is er een groep hard aan het werk om een systeem te maken dat data verzamelt en weergeeft (met heat maps! Ik wil graag ook heat maps maar het lijkt me een hoop werk om te ontwikkelen.).

Aanstaande vrijdag heb ik een afspraak met hun om te kijken waar overlap zit in onze projecten en om te kijken hoe we elkaar kunnen helpen.