http://jung.sourceforge.net/
Yleistä
"JUNG is a Java-based open-source software library designed to support the modeling, analysis, and visualization of data that can be represented as graphs. Its focus is on mathematical and algorithmic graph applications pertaining to the fields of social network analysis, information visualization, knowledge discovery and data mining. However, it is not specific to these fields and can be used for many other applications pertaining to graphs and networks."
Lisenssi
- Itse softalla BSD-lisenssi. Epäselvää onko GPL-yhteensopiva: modified BSD license on, original BSD license ei eikä sivuilla näytetä sanovan kumpi on kyseessä.
- Riippuvuudet Colt, Xerces ja Jakarta commons-collections Apache-lisenssillä, epäselvyyksiä yhteensopivuudessa (http://www.apache.org/foundation/licence-FAQ.html#GPL)
- Ongelmat ilmeisesti enemmän FSF:n tulkintaa kuin laillisia esteitä
Sopivuus projektiin
- Pikaisen tutustumisen perusteella monipuolinen ja kohtuullisen helppokäyttöinen verkkojen visualisointiin ja mallintamiseen tarkoitettu kirjasto, käyttökelpoisuus riippuu siitä mitä oikeasti tarvitaan
- Skaalautuvuus tärkeää testata kun tiedetään kuinka isoja tulosverkkoja joudutaan käsittelemään mm. koska selattavat verkot pidetään kokonaan muistissa
Verkkojen muokkausmahdollisuudet
Tämän osion asioiden käytännön toimivuutta ei ole vielä testattu, mutta JavaDocia ja manuaalia selailemalla tuli tämänkaltaisia ideoita:
- Jos käytetään oliokantaa niin (DB4O, Hibernate, ym.) niin voidaan tallettaa integraatiovaiheen jälkeen data vaikka suoraan Jungin olioformaatissa tarvittaessa
- Jos käytetään tavallista kantaa niin pitää tehdä jonkinlainen muunnos Jungin ymmärtämäksi dataksi kun aletaan selaamaan (ja tallettaa muutokset kantaan erikseen)
- Solmu voi olla vain yhdessä verkossa kerrallaan (samoin kaari) joten jos halutaan useampi merkitysverkko samalle datalle niin joudutaan rakentamaan kokonaan uusi verkko jokaiselle
- Omaa dataa voi liittää verkkoihin joko laajentamalla luokkia (solmut / kaaret) suoraan tai annotoimalla niitä UserData-luokan avulla (http://jung.sourceforge.net/doc/manual.html#data)
- Verkon solmuille voidaan myös antaa yksikäsitteiset indeksit (Indexer-luokka) ja esim. mapata "tyhmät" solmut taulukossa oleviin sisältöolioihin tarvittaessa
- StringLabeller / GlobalStringLabeller-luokan avulla voidaan lisätä solmuihin ja kaariin Stringit jotka näytetään graafisessa esityksessä ja joita käyttäjä ei voi editoida
- Yksi mahdollinen verkon / kaarien datan editointi-idea:
- Visualisoinnin yhteydessä on valmiina PickedState-luokka jossa on tieto siitä, mikä / mitkä solmut ja kaaret on valittu graafisessa esityksessä
- PickedStateen voi lisätä tapahtumakuuntelijoita jotka saavat tiedon kun solmu tai kaari valitaan tai poistetaan valinnasta
- Voitaisiin liittää GUIhin erilliset kentät datan editoinnille joiden sisältö vaihtuisi kun solmu tai kaari valitaan (ja niitä editoitaessa synkronisoitaisiin data myös tietovaraston datan kanssa lennossa?)
- Solmujen / kaarien graafinen lisääminen ja poistaminen näyttäisi vaativan enemmän lisäkoodia ja miettimistä:
- Solmun lisääminen näytettyyn verkkoon ja visualisaation päivittäminen ei näytä olevan kovin vaikeaa koodin kannalta, mutta esimerkiksi graafinen kaarien vetäminen tai uusien solmujen lisäily voi vaatia miettimistä, virittelyä ja testailua koska ihan valmiita työkaluja siihen ei Jungista löydy
- Voitaisiinko kaarien vetämisessä käyttää hyväksi PickedState-luokkaa? Esim. jos valittuna tasan kaksi solmua (PickedState palauttaa kahden kokoisen setin solmuja) niin annetaan käyttäjän lisätä yhteys niiden välille erillisten kenttien avulla
- Uusien solmujen lisääminen näyttäisi onnistuvan kohtuullisen vähällä vaivalla ei-graafisesti (pyydetään käyttäjältä solmun tiedot, lisätään verkkoon sekä tietovarastoon ja päivitetään visualisaatio) - ongelmana ainakin se, että tällä tavalla uusi solmu ilmestyy luultavasti visualisaatioon johonkin enemmän tai vähemmän satunnaiseen kohtaan
- Graafisen esityksen lisäksi varsinaiseen verkko-tietorakenteeseen (Graph-luokka) on mahdollisuus liittää kuuntelijoita jotka saavat viestin kun solmu tai kaari muuttuu tai poistetaan - voitaisiinko tätä käyttää hyväksi jotenkin esimerkiksi verkkoesitys <-> tietovarasto -synkronoinnissa?
Muita huomioita
- JUnit-yksikkötestit löytyy, laajuus ja tarkkuus ei vielä tarkistettu
- Käyttää Swingiä vakiona visualisointien piirtämiseen, layout-algoritmi erillinen piirtopuolesta joten voi käyttää muutakin tarvittaessa
- Lukee ja kirjoittaa ainakin yksinkertaisia PAJEK-formaatin tiedostoja (ja GraphML:ää)
- Skaalautuvuudesta lainaus FAQ:sta "The only limit to the size graphs JUNG can support is the hardware you are using to run the Java Virtual Machine. We have on many occasions used JUNG to analyze sparse graphs with more than 10,000 nodes." - ei testattu käytännössä