Blog

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.

Opetuksia kuvin osa 1

Symfoniaa

Symfonylla on yksi hilpeä erityispiirre. Se on välillä aivan kammottavan omituinen ja takaperoinen dokumentaatio.

Version 1.2 uusimman betan uusien ominaisuuksien innostamana lähdin nimittäin sitä nyt päivittämään projektiin.

To upgrade a project:

  * If you don't use a SCM tool, please make a backup of your project.

  * Upgrade symfony to 1.2

  * Launch the `project:upgrade1.2` task from your project directory
    to perform an automatic upgrade:

        $ php symfony project:upgrade1.2

Tästähän voisi laiskempi päätellä, että homma hoituu antamalla tuo yllä mainittu komento. Vaan sepäs tuottaa ilmoituksen "task not defined" hienolla kirkkaan punaisella pohjalla. 

Pienen äimistelyn ja googlauksen jälkeen selviää, että itseasiassa ylläoleva koskee toimintaa siinä vaiheessa kun Symfony on jo päivitetty versioon 1.2. Toiselta sivulta löytyykin informaatiota, että komennolla: pear install symfony/symfony-1.2.0BETA2 pitäisi uuden version asentua. Vaan eipäs menekään niin, PEAR toteaa, että sullahan on jo, että mitäs siinä asentelet. Myöskään upgrade-komento ei tuota tuloksia (varmaankin siksi, että kyseessä on beta).

 Lopulta lottonumerot selviävät: pear uninstall symfony/symfony -> pear install symfony/symfony-1.2.0BETA2.

Osa hupailusta mene toki varmasti PEARinkin piikkiin, mutta ehkä tästä kaikesta olisi silti jotenkin voinut mainita myös Symfonyn omissa asennusohjeissa (smile)

Nyt sitten päästäänkin itse asiaan, eli tuon sovellusprojektin päivittämiseen 1.2 kelpoiseksi. Tätä prosessia kuvaileva .txt on 765 linea pitkä, joista toivottavasti ihan jokaisella ei ole mitään huipputärkeää asiaa. Mutta rämmitään eteenpäin, toisella puolella odottavat helpommat form-embeddaukset ja muutakin kivaa. 

Suuri ja mahtava Metropolia

Viikonlopun saldoon kuului mm. demosaitin rakentaminen ykkösille, että olisi jonkunlainen teknologia referenssi olemassa.

Se on tosi hieno ja täällä.

Ykkösillä tuntui tuo Flash olevan pinnassa toteutustekniikkana, joten yritin muiluttaa ajatusta siitä, että itseasiassa varsin vähäisillä määrillä XHMTL:ää ja CSS:ää saa hyvää jälkeä jos mukaan koplaa jonkun kätevän javascript-kirjaston kuten jQueryn.

Lähtötaso lienee kuitenkin varsin kirjava, sillä ensimmäinen yhden ryhmän divien tapaaminen koostui peruskäsitteiden selostuksesta ja siitä, että saisivat edes yhden HTML-sivun nettiin. 

Muutenkaan vielä en ole hirveästi minkäänlaista "ohjausta" suorittanut, koska ryhmillä ei saiteista ollut juuri mitään käsitystä vielä.
Huikealla opiskelija-assistentin auktoriteetilla kuitenkin suosittelen jonkinlaisten rautalankojen tekemistä sen perusteella mitä lopputulokseen nyt ainakin on varmasti tulossa.

 
Homma itsessään on tosin osoittautunut varsin mukavaksi. Mielenkiintoinen haaste on analysoida omaa kokemusta www-juttujen oppimisesta, sekä nykyisestä tavasta työskennellä ja kääntää sitä joksikin mistä olisi hyötyä myös ykkösille(se on kai sitä jotain opettamista?).
 

Testipostaus

Testipostaus.

Tästä se lähtee

Eli jos yrittäisi tähän kronikoida hieman, että mitä erilaisille projekteille kuuluu ja tapahtuu.

microjournal.org (tuonnempana mcrjrnl) on tällä hetkellä siinä vaiheessa, että perusformit ja systeemit toimii ja nyt voidaan aloittaa viimeinkin se feature-koodaus.

Recaptcha-moduuli tosin aiheuttaa vielä mystisiä ongelmia, mutta ajattelin että jos koodaisi vaikka harjoituksena jonkun oman captcha-widgetin tyyliin "onko kissa koira" (value:ei -> validator pass).

Muuten sitten tuntuukin hyvältä koska ymmärsin viimein miten Symfonyssa toimii formien ketjutus, ja se on ihan mahtava juttu.

Aiemmin minun mielestäni kaikkein viheliäisin osa perus www-kamasta on viimeinkin abstraktoitu joksikin mitä voi ja haluaa käyttää, hyvä ranskalaiset.