Blog

Mega Man 9 mietteitä (linkki)

Satuinpa joulun tienoilla hankkimaan wii:lle Mega Man 9 nimisen teoksen.

Kyseessä on nykymittapuulla sadistisen vaikea ja turhauttava retrohenkinen peli (eli aika normaalia meininkiä näin entiselle 7-vuotiaalle).

Siitä voi kuitenkin nähtävästi oppia paljonkin, sillä googlaillessani törmäsin tähän artikkeliin:

Opinion: How Mega Man 9 Resembles... Real Life?

Artikkelissa käsitellään aika nokkelasti nykyisten pelien, vanhojen (helvetin vaikeiden) pelien ja tosielämän oppimisen suhdetta.
Löydän välittömästi esimerkiksi yhteneväisyyksiä erilaisten koodaushommien yms. opettelun kanssa, ja sen millaisessa mindsetissä niitä täytyy tehdä.

Uutisia ja design ongelmia

"Pena kommentoi Kallen tekemisiä 4 tuntia sitten."

"Mauri postasi uuden jutun hetki sitten."

Tämäntyyppistä uutisfeediä koetin tässä rakentaa ja kyseessä on itseasiassa aika monimutkainen ja mielenkiintoinen design-haaste.
Noin äkkiseltään tulee mieleen 2 päävaihtoehtoa:

1) yksinkertaisesti logataan viestejä html-muodossa omaan tauluunsa, josta ne sitten nykäistään esille.

Jes helppoa, paitsi että sellaiset viestit eivät enää luomisensa jälkeen päivity, joten jos esim. linkkien rakenne tai  joku muu sisältöasia muuttuu, se ei päivity.

Myöskään ylläolevan kaltaista ajan esitystä ei voi tehdä, koska aikatiedot eivät päivity luotuihin viesteihin.

2) luodaan koko feedi dynaamisesti tietokannasta. Tässä tulee hieman arkkitehtuuriongelmia, koska symfony ei kovin notkeasti taivu hakemaan tietoja usemmasta taulusta ja lisäksi täytyisi renderöintivaiheessa ottaa aina selville, minkä tyyppistä tietoa ollaan näyttämässä ja mitä semanttisia lisälausahduksia siihen tulee lisätä. Myöskään kaikki mitä sovelluksessa voi mahdollisesti tapahtua ei näy suoraan tietokantatauluista ellei sitä erikseen logata omaan tauluunsa.

En tiedä miten facebook ja muut sen tekevät (saa kertoa jos tietää), mutta itselle tulee mieleen jonkinlainen puolittainen toteutus, missä viestien rungot haetaan jostain ja log-tiedoksi tallennetaan id-tietoja tietokannasta. Tyyliin kommenttipostaus näyttäisi logattuna tältä:

id:1, kommentoija_id:5, kommentti_id: 3, kommentoitava_id: 7, viestityyppi: kommentointi

Josta tietämällä yhteyden(viestityyppi) pystyy säveltämään asianmukaisen viestin uutisiin.

Mutta hiukan monimutkaisempaa kuin miltä se vaikuttaa(jostain syystä kaikki semantiikkaan ja ohjelmointiin liittyvä on).

Kesäviikko jotain - siistimistä

Profiilikuvien uploadauksen arvoitus on ratkaistu. Koodattu kaikenlaisia tukitoimintoja helpottamaan jatkokehitystä.
Myös käyttöliittymää siistitty. Mitään kauhean jännittäviä ulottuvuuksia ei näistä säädöistä irtoa, ehkä enemmän raportoivaa kun pääsen viimein tunkemaan vähän javascriptiä käyttikseen.

Kesäviikko 6(?) - versiointia

Versiointiplugari asennettu. Ei ongelmia.
Se toimii periaatteessa jo nyt, mutta nyt täytyy tehdä hieman design-valintoja niin ulkoasun kuin toiminnankin puolesta.

Lisäksi samassa yhteydessä havaitsin, että muille kirjoitusoikeuksien jakamisessa on vielä säädettävää. Todennäköisesti täytyy romukopata tuo symfonyn valmis lista-widgetti ja tehdä omia säätöjä sen sijaan (saa samalla sitten toivottavasti kivemman käyttöliittymän).

Tällä hetkellä ainoa mikä ärsyttää on se, että tietokannan versiointi ei onnistu bazaarissa olevan pikku bugin johdosta ja nykyinen työvaihe vaatii paljon tietokannan resettailua, joka hieman vaikeuttaa yhteistyötä leiskauspuolen kanssa.

Kesäviikko 5 - pieni varaslähtö

www.someka.fi

Ajattelin vaan testata, että ulkopuoliselle julkaisuserverille siirto onnistuu. Ja eihän se onnistunut, mutta pienellä kiroilulla ja ihmettelyllä saatiin tuonne nyt versio joka sisältää seuraavaa:

  • uusi logo!
  • rekisteröityminen
  • mikroartikkelien luonti/editointi
  • äänestäminen, favorointi
  • artikkelin järjestely nimen, pvm, kirjoittajan, äänien ja äänimäärän mukaan
  • kommentointi

Perjantaiksi saataneen koodattua myös "follow"-napit (pitää tehdä vielä vähän säätöä, että käyttäjä ei voi seurata itseään jne.).

Nyt hommaa voi kämmiä käsin "author/follow/id/1" jne. 

Tag-hakusysteemi myös hajosi jossain välissä vaihdettaessa tietokantasysteemejä, en keksinyt mitään järjellistä syytä sen toiminnan loppumiselle, mutta sain siitä ajatuksen, että kirjoitan siihen oman jatkeen niin, että tagit toimivat filttereinä tuossa artikkelien järjestelyssä. Niin ja urleissa pomppii tuo helvetin public_html joka vielä myrkytetään siitä pois.

Kesäviikko 3 - agilesti puuhun ja toimiva bazaari

Tänään saavutettiin se, että Mikaelillakin on nyt suht. toimiva versio sovelluksesta ja täten ulkoasun muokkaustyö voi nytkähtää kunnolla käyntiin.

Myös omalla tontilla näyttää poikkeuksellisen vahvalta: formeista on korjattu ja paranneltu lukuisia asioita, follow-systeemit toimivat ja käyttiskin alkaa heijastella näitä muutoksia. Hyvällä säkällä jonkinlainen ihan oikeasti käytttökelpoinen beta-versio saadaan pystyyn jo heinäkuun aluksi(jos näin ihan kolmannesta persoonasta arvioidaan omaa työtahtia).

Yhä useammin alkaa käydä niin, että ajattelen jonkin featuren miten se menisi, ja sitten se melko helposti loksahtaa kohdalleen. Alan myös nähdä, että projektin alussa tehty koodi on nykytietämyksen valossa välillä tarpeettoman mutkikasta ja kömpelöä.

Seuraavaksi pitäisi perehtyä symfonyn routing-systeemiin, koska sen kautta saisi yksinkertaisempaa koodia ja kierrätettävyyttä.
Myös jotain ajax-kikkailua voisi huvin ja urheilun vuoksi laittaa johonkin sopivaan kohtaan.

Kesäviikko 2 - asgsdgggdjhsh

Olen tiivistänyt tuntemukseni yrityksestäni viritellä symfonysta ja versionhallinnasta helppo paketti otsikkoon ja oheiseen kuvaan.



Nyt olen kuitenkin saanut mielestäni jotain ihan toimivaa aikaiseksi ja .bat tiedostojen siivittämänä setti saattaa olla jopa ihan ihmisekin käytettävissä.

Tämän lisäksi virittelin vähän tietokantaa ja yritin toteuttaa profiilikuvien uploadaus-toiminnon, joka on periaatteessa aivan umpihelppoa, mutta ei toimi symfonyn keinoilla jostain mystisestä syystä. Tapeltuani päivän asian kanssa otin aiheesta hieman tiliä ja totesin, että näin huipputärkeän 100x100 pikseliä kuvan-uppaus featuren ehtii tehdä joskus myöhemmin ja siirryin virittämään muita asioita.

Eikö se sitäpaitsi ole rasittavaa, että niitä kuvia joutuu uploadaamaan sinne ja tänne? Ehkä pitäisi sivukoodata profiilikuvan-hostaus palvelu, ja miksei siellä voisi samantien arvioida ja kommentoida toisten profiilikuvia ja esittää niitä nelikenttinä ja...siis jos se uploadaus toimisi. 

Kesäviikko 1 - bzaari

Bazaar (bzr) tuli nyt sitten valittua homman versiointiin. Se vaikuttaa kaikkinensa jonkin verran notkeammalta kuin svn, ja toisaalta yksinkertaiselta käyttää. Microjournalin setupista muodostui nyt siis sellainen, että linux-serverillä on aloitettu bzr-versiointi (joka johtaa automaagisesti siihen, että sftp:llä + bzr:n clienttiohjelmalla saa ulos versioita microjournalista varsin kätevästi). Samalla vaihdoin tietokannan mysql:sta sqliteen, koska sqlite-tietokannoista tulee tiedostoja joita voi myös versioida(muuten joutuisi hankalasti synccailemaan kahta mysql-settiä toisiinsa).

Projektiin kiinnitetyn leiskaajan näkökulmasta ideaalisti tapahtuu ainoastaan seuraavaa:

  1. bzr koneelle
  2. lighty2go portable serveripaketti koneelle, mihin asennettu tarpeelliset symfony-kilkkeet(tätä voi nyt periaatteessa levittää vaikka usb-tikulla)
  3. bzr checkout (lataa uusimman version kehitysserveriltä)
  4. tehdään töitä!
  5. bzr commit (lähettää muutokset kehitysserverille)
  6. viikonloppu, juodaan viinaa niin paljon kuin 9e/h lähtee
  7. bzr update lataa keskusserveriltä koodarin (allekirj.) uusimmat sekoilut paikalliseen kopioon

Hommassa on vielä ainakin mystinen cache-bugi ja se, että setti on kehitetty mysql:llä aiheuttaa välillä pieniä ongelmia sqliten suppeamman käskyvalikoiman kanssa.

Versioiden hallitsija

Muutaman päivän lukeminen yhdistettynä kompuroivaan toimintaa on johtanut jonkinlaiseen ymmärrykseen versionhallinnan periaatteista ja mahdollisista käytännön sovelluksista omiin projekteihin. Aivan täysin tyydyttäviä ratkaisuja ei ole vielä löytynyt, ainakaan sen osalta, että ei tarvitsisi viritellä useampaa eri versiota mysql-kannasta pystyyn. Tutkimassani svn:ssä on myös muutamia muita asioita (kuten uusien tiedostojen lisääminen versionhallintaan), jotka minun puolestani saisivat hoitua ilman käyttäjän tekemisiä.

Kokeiluissa käyttelin Google Coden svn-hostausta palvelua, joka toimii leppoisasti, tosin tässä miettiessä oman svn/jonkun muu repositoryn virittely oman palvelimen päätyyn omaa myös selkeitä plussapuolia. Yksi toimiva mahdollisuus olisi kuitenkin tuutata koodit googleen ja rakennella sitten siihen yhteensopiva sandbox-toteutus vaikkapa xampp:in päälle. Edelleen olisin tosin iloinen jos vastaan kävelisi jokin ratkaisu missä välttyisi ylimääräisten apache-serverien ja tietokantojen kanssa säätämiseltä(eli minun päässäni jotenkin niin, että keskuskopio olisi livenä kiinni kannassa ja sieltä otettais sit checkouttina vain se haluttu tiedosto -> muutokset -> commit -> revert jos tuli mokattua).

Jos vähän päivittelis

Microjournal etenee kivasti. Juhanan kanssa "kehitelty" fläppitauluformaatti speksissä on oikeastaan todella hyödyllinen, koska sen voi teipata seinälle, josta se vihaisesti tuijottaa takaisin ja kysyy, että eikö herran kannattaisi välillä tehdä muutakin kuin soittaa kitaraa ja juoda kaljaa. Ns. pystyminen on nyt myös korkealla, koska papereissa mainittu "satunnaisen kaverin 10 uusinta favorittia" onnistui varsin kivuttomasti, joskin huomasin että kaikenlaista dataa kuten luontipäivämääriä kannattaa kerätä aivan kaikesta.

Santerin kanssa käytiin Aurinkolahdessa juttelemassa kännykkävideokurssin nimellä kulkevasta hommasta, se meni oikein kivasti ensiviikolla käydään sitten espoon puolella lukiossa samoissa merkeissä. Mielenkiintoinen tehtävä on myös testata ja viritellä kamat, että saadaan videot kuvattua ja editoitua. Kurssiin tulee myös hieman teoriasisältöä, josta keskusteleminen on ollut varsin stimuloivaa ja toivottavasti myös kohdeyleisö kokee sen kiinnostavaksi.

Tagit ja asiatuntijuus

Viritellessäni tuossa taggaus-pluginia symfonyyn (koska docseista lukaistu searchin teko-ohje ei ainakaan vielä futaa ja tagit on muutenkin paljon siistimpiä ja web 2.0, google on hakemiseen ja vesi pesemistä varten, niin) törmäsin taas yhteen kirkkaanpunaiseen virheilmoitukseen, joka ei sisällöltään minua varsinaisesti älyllisellä taholla puhutellut. Tuolloin kuitenkin koin sellaisen tutun intuition, joka näyttäisi kehittyvän hommaan kuin hommaan kun sitä tarpeeksi kauan säätää. Minusta tuntui, että saattaisin tietää missä päin ongelma noin suurinpiirtein sijaitsee. Tämän vainun saattelemana kurkin hieman kansioihin joihin symfony luo itsekseen tavaraa ja poistelin muutamia tiedostoja ja kas kummaa setit alkoivat taas toimimaan.

Olen aiemminkin törmännyt symfonyn kanssa muutamaan ongelmaan jotka ratkesivat hieman samassa hengessä. Informaation kategoriana tälläinen voodoo on mielenkiintoista, sillä minulla ei ole hirveästi hajua siitä mikä oli vialla, mitä tein ja miksi parin tiedoston poistaminen auttoi siihen. Toisaalta en ole koskaan nähnyt tätä aihetta tai ongelmia käsiteltävän symfonyn irc-kanavalla tai foorumeilla.

On kyse siitä luokasta ongelmia joiden ratkaisuna on jotakin tyyliin "ja sit mä vaan kokeilin kaikkea ja sit rupes taas toimimaan".
Tälläistä dataa on varmasti eri hommissa (etenkin ohjelmointiteknisissä) paljon, tälläisiä vainuja on hyvin vaikea dokumentoida tai kirjoittaa ohjeistuiksi, mutta toisaalta ne usein merkitsevät eroa sen välillä eteneekö projekti vai ei.

PS kantsii myös lukea virheilmoituksia, tänäänkin pari erroria selvisi kun vaivautui ihan oikeasti lukemaan ajatuksella pari riviä siitä mitä debuggeri sylkäisi ulos virheestä. 

Löysin myös selkeästi oman ohjelmointiparadigmani: Cowboy Coding

Vieras avain ja töpselikkeet paikoilleen

Mysql ongelmat ratkesivat kun tajusi vakoilla symfonyn omista tiedostoista vähän asioita.

Pääsin myös taas toteamaan yhden symfonyn loistavista puolista, mikä on plugineiden korkea saatavuus ja käytettävyys.
Toisin kuin eräissä nimeltämainitsettomissa JOOMLISSA on töpselikkeiden laatu korkea, joten sain tietokantahommiin kaivattua avitusta DbFinder -plugista ja RSS-feedit hoituvat hyvin sutjakkaasti sfFeed2 palikalla.

Seuraavaksi ajattelin värkätä jonkinlaisen page view -mittarin, että saadaan artikkelit vielä järjesttyä katsantokertojen mukaan ja tulevaisuudessa ehkä muutakin käyttäjädataa. 

Kantapää oppimismetodina

Ei kannata paljon näköjään dumppailla dataa symfonyn omilla komennoilla. Vähänkään monimutkaisemmalla sisällöllä se ei nimittäin osaa parsia sitä enää takaisin tietokantaan. Hupaisammalla puolella toimenpide myös rikkoo kaikki salasanat systeemistä.

Käytetään siis mysql-dumppeja tästä lähtien. Tämmöiseen kivaan törmäsin kun rukkasin vähän modelia kun piti kokeilla yhtä ideaa tuon sorttaus-ongelman kiertämiseksi. En oikein tykkää Helvetin Typerät Ongelmat kilpasarjan kasvusta, mutta sitä ei ole vielä missään ohjelmoinnissa voinut välttää. 

Nyt 50% enemmän käyttöliittymää

mcrjrnl alkaa näyttää jo ihan oikealta web-härpäkkeeltä. Työn hedelmät näkyvät täällä.
Salasana ensimmäiseen lappuun on saato/salasana. Se on siinä sen takia, ettei turhaan mene kaikenlaiset botit yms. spämmäämään.

Oudot virheilmoitukset pomppivat tällä hetkellä osassa toiminnoista mikäli ei ole rekisteröitynyt käyttäjä.

Etusivunkin olisi saanut aika edustavaksi, paitsi että alkuviikon Helvetin Typerät Ongelmat kilpailusarjan avasi kyvyttömyys lajitella tietokannan tuloksia perustuen muuhun kuin tietokannassa varsinaisesti sijaitseviin columneihin (eli esimerkiksi äänimäärien totaalithan eivät sijaitse missään vaan ne lasketaan perustuen äänten tauluun, jonka symfony kylläkin osasi tehdä suoraan paketista).

Mutta sekin ratkeaa. Seuraavaksi ruvetaan vähän sofistikoimaan tiettyjä käyttäjähallintaan liittyviä juttuja ja tekemään kokeita rss-feedeillä.

Taas se alkoi

mcrjrnl.org on taas nytkähtänyt hieman eteenpäin. Symfonyn kanssa työskentely tuntuu pienen tauon jälkeen aika hyvältä.

Pientä huurretta on selkeästi vielä koodiapinassa, koska suurimpia ongelmia tähän asti oli unohtaa "echo" php-lauseesta. Muuten on lähinnä toteuttu kaikkea pientä sääntöä ja kääntöä, että käyttöliittymä rupeaisi hahmottumaan. Huomenna tehdään sitten etusivu.