keskiviikko 21. joulukuuta 2011

Ei-versionhallintadatan visualisointi Gource:lla

Gource on monipuolinen, lähinnä versionhallintatiedon, visualisointiväline. Gource:lle on mahdollista syöttää suoraan esimerkiksi Git- tai SubVersion-järjestelmien lokitietoa. Gource rakentaa versionhallinnan käyttäjistä ja tiedostoista hakemistorakenteisiin perustuvan (puu)rakenteen. Youtube:sta on löydettävissä useita Gourcella toteutettuja versionhallinan visualisointeja. Tässä esimerkiksi (Video 1) toteuttamani Statster-verkkopalvelun SubVersion-versionhallintadata visualisointuna Gourcella. Annotointi on tehty Youtube:ssa.
Gource on versionhallintatiedon visualisointiväline. (Video 1)
Gource:lla on kuitenkin mahdollista visualisoida myös muuta kuin versionhallintaohjelmiston tuottamaa dataa. Custom log format mahdollistaa minkä tahansa puurakenteen visualisoimisen Gource:lla. Datan ei tarvitse edes olla millään tavalla tiedostorakenteisiin liittyvää (vaikka Gource dataa sillä periaatteella käsitteleekin) vaan data voi semanttisesti pitää sisällään mitä tahansa tietoa. Ainoa rajoitus on, että datan täytyy olla verkostomaiselta rakenteeltaan puu. Gource:lla ei ainakaan tällä hetkellä (v.0.37) ole mahdollista visualisoida verkostoja, joissa solmujen väliset yhteydet eivät ole yksikäsitteisiä.

Esimerkkini koostuu eräästä sosiaalisen median verkkopalvelusta kerätystä tietosisällöstä. Data pitää sisällään blogikirjoituksia, tapahtumia, keskusteluita ja uutisia sekä näihin sisältöihin jätetyistä kommenteista. Eli rakenteeltaan kaikki tietosisällöt (blogikirjoitukset, tapahtumat, keskustelut ja uutiset) liittyvät suoraan juuri-solmuun. Kommenttien hierarkia rakentuu edellämainittujen sisältötyyppien alle. Rakenne on siis speudokoodina seuraavanlainen:
  1. {root} -> {content_1} -> {comment_1} -> {comment_2}
  2. {root} -> {content_1} -> {comment_1} -> {comment_3}
  3. {root} -> {content_2} -> {comment_4}
Esimerkissä on kaksi sisältöä (content_1 ja content_2) ja niihin on molempiin jätetty kommentteja. Nähdään, että ensimmäiseen sisältöön jätettyä kommenttia on edelleenkommentoitu kahdesti. Kommentit rakentuvat siis sisältöjen alle tai muiden kommenttien alle. Data on selkeästi rakenteeltaan puumainen. Ensimmäinen versio (Kuva 1), jonka toteutin tuotti seuraavanlaisen loppunäkymän:
Visualisoinnin ensimmäinen versio, jossa nähdään vain puurakenteen viimeisimmät lehdet. (Kuva 1)
Tässä (Kuva 1) todellinen datan rakenne ei tule selkeästi esiin, koska Gource:n kannalta syötetyn lokidatan formaatti ei ollut optimaalinen. Data syötettiin Gource:lle seuraavanlaisessa muodossa:
  1. /root/
  2. /root/content_1/
  3. /root/content_1/comment_1
Visualisoinnista ei näe selkeästi mikä kommentti kuuluu mihinkin sisältöön ja mikä on juurisolmu. Tämä johtuu siitä, että Gource piirtää kansiorakenteet oksina (edge) ja tiedostot lehtinä (node), joten Gource:lle ylläkuvatulla tavalla syötetty data ei piirrä sisältötyypeille lehteä. Gource:n näkökulmasta "content_1" on tyhjä kansio ja se piirretään pelkästään oksana. Gource siis käsittelee pitkät hakemistorakenteet, jotka eivät sisällä tiedostoja pitkinä oksina. Puurakenteen viimeinen lehti käsitellään Gource:ssa kuitenkin aina solmuna ja nämä ovat niitä, jotka visualisoinnissa (Kuva 1) nähdään.

Esimerkissä siis ainoastaan "comment_1" piirretään lehtenä kun tarkoituksenmukaista olisi hahmottamisen kannalta piirtää juurisolmu "root", sisältötyyppi "content_1" ja kommentti "comment_1" jokainen omana lehtenään. Yritin selvittää ongelmaa kysemällä ratkaisua Gource:n yhteisöltä ja sainkin tyydyttävän vastauksen. Tästä pisteet aktiiviselle yhteisölle.

Ratkaisu oli luoda hakemistorakenteen rinnalle, jokaiseen hakemistoon sitä kuvaava tiedosto. Gource mieltää, että tiedostoja ovat rakenteessa nimet, joilla on (pisteellä erotettu) tiedostopääte. Asetin tiedostopäätteet loogisesti niin, että eri sisältötyypit saivat oman tiedostopäätteen. Näin eri sisältötyyppeihin jätettyjen kommenttien lukumäärät oli mahdollista esittää selkeästi Gource:n "show legend" -toiminnolla. Selite on nähtävissä Kuvan 2 vasemmassa yläreunassa. Data muodostettiin siis ohjeiden mukaisesti seuraavalla tavalla:
  1. /root/
  2. /root/content_1/
  3. /root/content_1/content_1.forum
  4. /root/content_1/comment_1
  5. /root/content_1/comment_1/comment_1.forum
Datan rivien määrä siis ~kansinkertaistuu, mutta lopputuloksena saadaan todellista dataa paljon paremmin mukaileva ja helpommin luettava lopputulos. Esimerkiksi vasemmalla alhaalla nähtävissä oleva, kommenttien perusteella suosituimman, sisältötyypin avausviesti löytyy punaisen rykelmän keskeltä ja avausviestiin tulleet vastaukset ovat rakentuneet avausviestin ympärille hyvin selkeästi havaittavalla tavalla.
Visualisoinnin 2. versio, jossa kaikkiin hakemistoihin lisätty yksi tiedosto. (Kuva 2)
On hyvä huomioida, että todellisuudessahan Gource tuottaa datasta videomuotoisen visualisoinnin, josta on nähtävissä miten data rakentuu ja ketkä käyttäjän datan luomiseen osallistuvat, joten nämä aspektit jäävät näkemättä näistä staattisista esimerkeistä (Kuva 1 ja Kuva 2).

Gource on siis tehokas työkalu myös muiden datajoukkojen kuin versionhallintatietojen visualisointiin. Olen käyttänyt Gource:a mm. MediaWiki-alustan tietosisältöjen sekä muiden verkkopalvelujen tietosisältöjen visualisointiin, joiden toteuksia esittelen myöhemmin tässä blogissa.