Vieraskynä: Tanssiseura Hurmio ry:n verkkosivujen uudistus Drupalin päälle

Vieraskyna

Tanssiseura Hurmio ry on vuoden 2004 lopussa perustettu tamperelainen lavatanssiseura. Seuran toiminta on kasvanut nopeasti, ja perustamisvaiheessa pikaisesti pystytettyjen alkeellisten kotisivujen ja tietojärjestelmien rajoituksiin törmättiin jatkuvasti. Tässä artikkelissa kerrotaan, kuinka täysin talkootöinä suoritettiin sangen mittava uudistushanke.

Kipupisteet: Staattiset HTML-sivut ja manuaalisen työn määrä

Vanhat kotisivut koostuivat staattisista HTML-sivuista, joiden päivittäminen tekstieditorilla oli keskitetty parille henkilölle. Jäsenrekisteriä säilytettiin Excelissä. Sähköpostiohjaukset ja postituslistat luotiin manuaalisesti. Hurmion tärkein toimintamuoto on kymmenien viikottaisten tanssiharjoitusryhmien järjestäminen. Aina ryhmässä käydessään jäsenen on pitänyt tehdä osallistumismerkintä ns. ruksilistaan.

Yhdessä ryhmässä on parhaimmillaan käynyt pitkälti toista sataa jäsentä, joten oikean kohdan löytyminen listasta on voinut olla hidasta. Listat ruuhkautuivatkin usein, ja toimihenkilöiltä kului kymmeniä tunteja listojen puhtaaksikirjoittamiseen harjoituskauden lopussa.

Myös jäsenkortit teettivät työtä. Yli 700 jäsenkortin painaminen ja jakelu kahdesti vuodessa on melkoinen urakka. Lisäksi jäsenmaksujen seuranta tehtiin täysin manuaalisesti Excelillä.

Valokuvagalleriat toteutettiin Windowsissa JAlbumilla, ja valmiit albumit siirrettiin FTP:llä sivustolle. Gallerioiden ulkoasu ei noudattanut muuta sivustoa, ja muokkaus jälkikäteen oli todella hankalaa, koska koko galleria piti luoda uusiksi. Tilanvaraukset tehtiin Google Calendaria käyttäen, ja sitä ei oltu mitenkään integroitu sivuille. Sähköpostiohjaukset ja postituslistat määriteltiin käsin web-hotellin palveluntarjoajan alkeellista työkalua käyttäen.

Kuva vanhasta sivustosta:

Projektin alustaksi valittiin Drupal

Vuoden 2009 lopulla tehtiin päätös kotisivujen ja muiden tietojärjestelmien täydellisestä uudistamisesta. Tavoitteena oli automatisoida mahdollisimman monia asioita, parantaa palvelua jäsenistölle sekä helpottaa toimihenkilöiden urakkaa.

Toteutusalustaksi valittiin avoimen lähdekoodin julkaisualusta Drupal 6 – osin siksi, että Drupal on ollut muutaman projektiin osallistuneen ”opeltavia asioita” listalla.

Drupalin monipuoliset ominaisuudet ja laajennettavuus vaikuttivat tarpeisiin sopivalta. Jälkikäteen voi todeta, että olemme Drupalia käyttäen saaneet toteutettua kaiken havittelevamme – mutta työmäärä on ylittänyt huomattavasti alkuperäisen arvion. Yhteenlaskettu tuntimäärä nousi varmasti useisiin satoihin tunteihin.

Ulkoasu toteutettiin edullisen kaupallisen teeman avulla

Laajan käyttäjäpohjan ansiosta Drupalille löytyy todella runsaasti ilmaisia ja kaupallisia teemoja. Valitsimme käyttöön noin 60 dollaria maksaneen teeman, jonka grafiikat muokattiin Hurmion ilmeen mukaiseksi. Kuva uudistuneen sivuston etusivusta:

Käyttäjäryhmät havaittiin monipuolisiksi ja monimutkaisiksi

Sivuille haluttiin luoda useita käyttäjärooleja, joilla voidaan kontrolloida pääsyä sivun osioihin. Esimerkiksi ohjaajien pitää voida muokata harjoitusryhmien kuvauksia ja rahastonhoitajalla täytyy olla pääsy maksutietoihin ja jäsenrekisteriin. Valokuvaajien taas pitää voida tallentaa kuvia arkistointia varten.

Yksi Drupalin suurimpia vahvuuksia on erittäin kehittynyt käyttäjäroolien hallinta. Toisaalta käyttöoikeuksien hallinta on aika monimutkaista, ja oikeuksia joutuu säätämään useasta eri näytöstä.

Ilmoittautuminen jäseneksi toteutettiin verkkosivujen kautta

Seuran jäseneksi haluava henkilö ilmoittautuu jäseneksi kotisivujen kautta. Jäsenen täytettyä lomakkeelle tietonsa luo järjestelmä uuden jäsennumeron, joka toimii samalla pankin viitenumerona maksamista varten. Lisäksi ilmoittautumisvahvistukseen tulostuu viivakoodi, joka sisältää saman jäsennumeron. Jäsenen tulee pitää mukanaan ryhmään saapuessaan tulostettu viivakoodi tai ainakin muistaa jäsennumero.

Hurmonaattori-automaatit mahdollistavat ilmoittautumisen tunneille

Seuran tarpeisiin kehitettiin C#-kieltä käyttäen automaatti jota kutsutaan Hurmonaattoriksi. Hurmonaattori koostuu kosketusnäytöllä varustetusta Asus Eee Top PC:stä, viivakoodinlukijasta sekä numeronäppäimistöstä. Hurmonaattoreita on tällä hetkellä kaksi kappaletta.

image

Saapuessaan harjoituksiin jäsen näyttää viivakoodia lukijalle tai näpyttelee jäsennumeronsa. Hurmonaattori hakee jäsenen tiedot Drupalin MySQL-kannasta ja näyttää näytöllä jäsenen nimen sekä tiedon, onko jäsenmaksu suoritettu. Lisäksi näyttöön tulee listaus päivän harjoitusryhmistä, joista jäsen sormella koskettamalla valitsee ne joihin päivän aikana tulee osallistumaan. Valintoja voi käydä myöhemmin muuttamassa poikkeamalla uudestaan Hurmonaattorilla. Myös ei-jäsenet voivat käyttää automaattia koskettamalla aluksi kertamaksu-painiketta.
image
Hurmonaattori on saavuttanut suuren suosion, koska se on helpottanut ja nopeuttanut merkittävästi toimintaa ruksilistoihin verrattuna. Lisäksi listojen puhtaaksikirjoitusta ei tarvitse enää tehdä, koska valmiit ruksilistat saa siirrettyä Drupalista suoraan Exceliin.

Jäsenkorttien tulostus automatisoitiin myös

Toiseen Hurmonaattoriin on kytketty Magicard Enduro –muovikorttitulostin. Kun jäsenmaksu on kirjautunut, tulostuu jäsenkortti automaattisesti henkilön kirjautuessa automaatille. Esipainetulle korttipohjalle tulostetaan jäsenen nimen ja jäsennumeron lisäksi kortin voimassaoloaika sekä jäsenen viivakoodi. Kuva jäsenkortista:

Tulostimessa on sadan kortin säiliö, ja Hurmonaattori laskee tulostettujen korttien määrän. 90 kortin tulostamisen jälkeen näytölle tulee kehotus pyytää toimihenkilöä täyttämään säiliön. Täyttämisen jälkeen Hurmonaattorille vilautetaan taikanumeron sisältävää viivakoodia, joka nollaa tulostuslaskurin.

Infotaulut kertovat reaaliaikaisesti ilmoittautumisten tilanteen

Kotisivuille rakennettiin myös sivu josta näkee, kuinka monta henkilöä kyseisen päivän ryhmiin on ilmoittautunut. Yksi PC on pyhitetty näyttämään tätä sivua, ja VGA-splitterin avulla se on jaettu harjoitussalien näyttöihin.
image

Valmiit ominaisuudet vs. itse toteutetut

Suurin osa Drupalissa tarvittavista ominaisuuksista saatiin toteutettua ilman ohjelmointia. Muutamaan toimintoon tarvittiin lyhyitä koodipätkiä, ja lisäksi parissa osa-alueessa luotiin enemmänkin koodia.

Keskeisimmät projektissa hyödynnetyt lisäosat ovat:

  • Advanced Forum
    • Drupalin peruskeskustelualuetta kehittyneempi moduli.
  • CCK
    • Content Creation Kit, yksi Drupalin eniten käytetyistä moduleista. Mahdollistaa omien sisältötyyppien määrittelyn. Esimerkiksi ’Henkilö’ tyyppinen sisältö voi koostua etunimestä, sukunimestä, puhelinnumerosta, osoitteesta, valokuvasta jne.
  • Date Repeat API
    • Mahdollistaa toisteiset tapahtumat; esimerkiksi ”joka maanantai 30.8. – 12.12. klo 20:15-21:30 lukuunottamatta 6.12.”. Valitettavasti modulin käyttöliittymä ei ole kovin intuitiivinen, mutta pienellä lisäohjeistuksella tapahtumien määrittely on onnistunut muiltakin kuin ylläpitäjiltä. Kuva Date Repeat -näkymästä:

  • Private Upload
    • Ladattujen tiedostojen suojaus käyttöoikeuksien mukaan. On yllättävää että tällainen perustoiminto ei ole mukana Drupalin ydintoiminnallisuudessa.
  • Taxonomy Access Control
    • Sisällön pääsyn rajaaminen sanastoja käyttäen. Esimerkiksi tyyppiä ’Sivu’ olevalle sisällölle olemme määritelleet ’Yksityisyys’ nimisen sanaston. Jos tästä sanastosta on valittu sivulle termi ’Vain hallitus’, vain käyttäjät joiden rooli on ’hallitus’ saavat avata sivun. Modulin dokumentointi on surkea ja sen oppiminen vaati melkoisen määrän kokeiluja. Tämä on myös ainoa moduli, jossa törmäsimme vakavaan bugiin: tietyillä asetuksilla moduli korruptoi sisällön tallennuksen yhteydessä pääsysääntöjä, minkä jälkeen ko. sisältö oli näkyvissä kaikille vierailijoille.
  • Trigger
    • Modulin avulla voidaan määritellä toimintoja, jotka käynnistyvät halutuissa tilanteissa. Esimerkiksi valokuvien arkistointisivun muuttuessa lähetetään valokuvien käsittelijälle automaattisesti sähköpostia. Triggerien avulla myös hoidetaan automaattinen liittäminen postituslistoille toimihenkilöiden tietojen luomisen yhteydessä.
  • Views
    • Yksi Drupalin parhaita lisäosia. Viewsin avulla voidaan tehdä erittäin monipuolisia näkymiä Drupalin tiedoista. Moduli on ikäänkuin graafinen työkalu tietokantakyselyiden muodostamiseen. Ensisilmäyksellä Views vaikutti käsittämättömältä helvetinkoneelta, mutta hetken ihmettelyn jälkeen sen käyttö alkoi sujua. Viewsin avulla toteutettiin lukuisia listauksia, esimerkkeinä ohjaajien, toimihenkilöiden, tulevien tapahtumien sekä harjoitusryhmien tiedot. Kuva views-modulin toiminnasta (ylläpitovalikoissa on käytössä eri teema kuin varsinaisella sivustolla):

  • Views Gallery
    • Mahdollistaa kuvagallerioiden luonnin Views-modulia hyödyntäen.
  • Whizzywig
    • WYSIWYG editori. Kokeilimme useita editoreita, ja Whizzywig oli niistä paras. Valitettavasti sekään ei ole ongelmaton, ja sekoilee joskus muotoilujen kanssa.

Jälkikäteen katsoen käytössä olevien moduleiden runsas määrä on tehnyt sivuston ylläpidosta aika työlästä, koska moduleista julkaistaan jatkuvasti uusia versioita ja niiden päivittäminen vaatii manuaalista työtä.

Sivuston toteutuksessa on pyritty automatisoimaan kaikki mahdollinen. Lisäksi periaatteena on ollut että tieto tarvitsee syöttää vain yhden kerran yhteen paikkaan. Laajan automatisoinnin avulla toimihenkilöille toteutettiin runsaasti toiminnallisuuksia:

  • Sisällön luonti ja muokkaus toimihenkilöille
  • Tilanvarausjärjestelmä
  • Wikin kaltainen sivu hallituksen käyttöön
  • Toinen Wiki-sivu ohjaajille
  • Osallistumisseurannat
  • Jäsenrekisterin käsittely
  • Kausimaksujen hallinta
  • Valokuvien siirtosivu
  • Kalustorekisteri

Esimerkiksi toimihenkilön luonti on toteutettu siten, että luodaan uusi sisältötietue joka on tyypiltään henkilö. Lomakkeella kerrotaan henkilön nimi, puhelinnumero, lyhyt kuvaus, sähköpostiosoite sekä haluttu hurmio.fi-osoite. Lisäksi palvelimelle ladataan henkilön kuva ja valitaan henkilöryhmä (esimerkiksi ohjaaja tai hallituksen jäsen).

Jos henkilöryhmäksi valitaan ohjaaja, sivun tallennuksen jälkeen annetut tiedot ilmestyvät ohjaajien listaan, henkilölle luodaan hurmio.fi-osoite joka ohjataan annettuun sähköpostiosoitteeseen ja henkilö liitetään ohjaajien postituslistalle. Nimi myös ilmestyy listalle, josta uutta harjoitusryhmää luodessa valitaan sen ohjaajat.

Vastaavasti harjoitusryhmää luodessa annetaan ryhmälle nimi, valitaan tanssilaji, tasoryhmä, alku- ja loppupäivä, toisteisuus (yleensä kerran viikossa), poikkeukset (päivät jolloin ryhmä ei kokoonnu), tila, lyhyt kuvaus ja ryhmän ohjaajat, kuten yllä mainittiin. Harjoitusryhmä ilmestyy välittömästi tallennuksen jälkeen lukujärjestykseen. Aiemmin lukujärjestyksen päivitys oli työlästä, koska se edellytti monimutkaisen HTML-taulukon käsinmuokkausta.
Lukujärjestyksen luontiin tarvittiin runsaasti omaa koodia, koska taulukosta haluttiin mahdollisimman luettava. Myös ilmoittautumislomaketta varten tarvittiin paljon kehitystä.

Kolmas työläs alue oli maksutapahtumien käsittely. Järjestelmälle voi syöttää CSV-muodossa verkkopankista saatavan tiliotteen. Koodi käy läpi tiliotteen rivi riviltä, vertaa panojen viitenumeroita jäsennumeroihin ja automaattisesti kohdistaa tilille tulleet maksut oikeille jäsenille.

Projektin toteutus edellytti yhteisiä kokoontumisia ja tiivistä viestintää

Projekti toteutettiin täysin talkootöinä, ja osallistuneet olivat yhtä lukuunottamatta Hurmion jäseniä. Yhteensä työhön osallistui yhdeksän henkilöä.

Heti Drupalin asentamisen jälkeen luotiin sivu, johon listattiin tehtäviä (siis eräänlainen product backlog scrum-terminologiaa käyttäen). Suurin osa töistä toteutettiin itsenäisesti ja postituslistoja käytettiin ahkerasti hyväksi. Muutaman kerran järjestettiin pizzan voimalla työriihiä, jotka kestivät usein pikkutunneille asti.

Drupalin havaittiin vaativan varsin paljon rautaa pyöriäkseen jouhevasti

Alkuvaiheessa Drupalia ja MySQL kantaa ajettiin 256 megan muistilla varustetussa virtuaalikoneessa, mutta pian huomattiin ettei muistimäärä riittänyt etanaksi muuttuneelle Drupalille. Drupaliin oltiin asennettu kymmenittäin valmiita moduleita, ja jokainen moduli lisäsi muistinkulutusta. Niinpä hankittiin uusi palvelin, jossa muistia on kaksi gigaa. Muistia ei vieläkään ole liikaa, mutta palvelimen kapasiteetti riittää hyvin nykyisillä käyttäjämäärillä (200 – 500 eri vierailijaa päivässä). Nyt palvelu pyörii Kimsufi C-250G palvelimella, joka maksaa kuukaudessa 18,50 euroa. Ohjelmoistoihin ei rahaa ole kulunut lainkaan (pl. se Drupalin teema 60 dollaria).

Nopeaksi Drupalia ei kuitenkaan uudellakaan palvelimella voi kutsua. Suurta kapasiteettia vaativaa palvelua toeutettaessa kannattaa etukäteen varmistua, että Drupalin skaalaaminen onnistuu.

Yleensä ottaen Drupalin ja sen modulien laatu on ollut yllättävänkin korkea, mutta miinuspuolelle pitää laskea monimutkaisuus ja ohjeiden hajanaisuus. Joskus alunperin yksinkertaiseksi ajatellun toiminnallisuuden toteuttamiseen on kulunut useita tunteja.

Uudistettu www.hurmio.fi sivusto aukesi suunnitelman mukaisesti 30.7.2010, ja suuria ongelmia ei ole kohdattu. Jäsenistö ja toimihenkilöt ovat olleet uudistettuun palveluun tyytyväisiä, ja erityisesti Hurmonaattori on kerännyt kovasti kiitoksia helppokäyttöisyytensä ansiosta.

Pasi Kovanen / Tanssiseura Hurmio ry

  1. Emil Virkki says:

    Vaikuttaisi siltä, että teillä ei ole sivuvälimuisti päällä. Se nimittäin pienentää resurssien – varsinkin muistin – kulutusta huomattavasti ja nopeuttaa sivujen latautumista. Lisäksi CSS- ja JavaScript-tiedostojen aggregointi eli yhdistely kannattaa olla päällä, jotta sivujen lataukset nopeutuvat entisestään.

    Toisaalta, jos sivuilla on yli 90% kirjautuneita käyttäjiä, niin välimuisti ei juurikaan auta – sitä ei käytetä kuin anonyymeille vierailijoille. Lisäksi on periaatteessa mahdollista – tosin todella harvinaista – että joku ominaisuus ei pelaa yhteen välimuistin kanssa. Itse en ole sellaiseen ikinä törmännyt.

    Toinen tapa tehostaa Drupal-sivuston toimintaa on kiihdyttimen, esim. APC:n käyttö. APC silyttää muistissa PHP-koodin esikäsitellyn version (opcode), jolloin koodi luetaan välimuistista eikä levyltä ja valmiiksi parsittuna. Keskiverto Drupal-sivustolla APC käyttää alle 50Mt muistia, mutta vähentää lukua levyltä todella paljon.

    Yllämainituilla pikkusäädöillä http://www.kilke.fi pyöri kohtuullisen hyvin vajaan 10.000 käyttäjän / yli 100.000 sivunlatauksen päivärasituksella, kun alustana oli 2 Gt muistilla varustettu virtuaalipalvelin.

  2. Pasi Kovanen says:

    Kiitos kommentista!

    Jos katsot http://www.hurmio.fi sivua niin ei se mielestäni valtavan hidas ole, mutta yksi Apache instanssi vie satoja megoja. Käytössä on kyllä APC. Sivuvälimuisti taas ei ole käytössä, koska sivupalkissa näytetään satunnainen valokuva jokaisella sivulatauksella. En tosin huomannut mitään eroa nopeudessa oliko välimuisti päällä vai ei.

  3. “Vuoden web-aiheinen blogi”. Kiitos Tietoviikko. – Vierityspalkki.fi says:

    […] Erityistunnustuksen Tietoviikko myönsi allekirjoittaneelle runsaasta juttutuotannosta. Totta onkin, että lukumääräisesti iso osa blogin jutuista on lähtöisin allekirjoittaneen kynästä. Kolminumeroisiin julkaisulukuihin tosin yltävät myös Tuija Aalto (mukana 2006-2010) ja Asmo Halinen (mukana jo vuodesta 2006, blogin perustaja). Useita artikkeleita vuonna 2010 ovat tuottaneet myös Jaakko Alajoki, Aki Björklund ja Tommi Pelkonen. Myös vieraskynäilijöitä oli useita vuonna 2010. Suosituimman vieraskynän kirjoitti Pasi Kovanen ja aiheena oli projektitarina laajasta Drupal-verkkopalveluprojektista. […]

  4. tom says:

    ”Sivuvälimuisti taas ei ole käytössä, koska sivupalkissa näytetään satunnainen valokuva jokaisella sivulatauksella.”

    Jokaiselle blokillehan saa määritettyä erikseen, onko välmuisti käytössä vai ei. Näin ollen välimuistin voi heittää päälle ja määrittää dynaamisemmat blokit vain ohittamaan sen.