Tuesday 24 April 2012

Taitajuutta

Raportti!

Eilen bongasin Jyväskylän asemalta ankan:


Saavuimme Scandic-hotellillemme joskus yhden maissa. Hotelli on pienen kävelymatkan päässä ratapihalta. Myös kisapaikka on pienen kävelymatkan päässä ratapihalta sen toisella puolen. Hotellilta kisapaikalle on siis 2 pientä kävelymatkaa!

Eiliseen kuului tervetulorituaaleja, jänniä musiikkiesityksiä ja lippiksen unohtaminen ravintolaan. Näiden rituaalien jälkeen kävin tutkimassa ratapihaa ja nappasin kuveja mm. tuosta ankasta, virallisemmalta tunnisteeltaan Vr2 961, eli VaihtotyöRaskasveturi2 961. Hieno yksilö.

Eilinen ruokailu oli vähän jännempi. Päädyimme odottamaan tunniksi Amarilloon ruokaa.

Aamulla herätys oli seiskalta. Siitä kuljimme aamupalan kautta Jyväskylän Paviljonkiin yhdeksäksi. Sitten alkoi joulukalenterin työstö :S

Sanon suoraan sen, että minun olisi pitänyt keskittyä ennakkoon julkaistuun tehtävänantoon niin paljon, että olisin toteuttanut sen kertaalleen. Sanon suoraan myös sen että tehtävänanto oli kirjoitettuna niin hemmetin epäselvä, että sen ymmärtämiseen meni puolitoista kuukautta ja kymmenen lukemiskertaa. Tämä siis vastauksena siihen, että miksi en toteuttanut tehtävää etukäteen, jos joku kysyy. Muistaakseni Kattainen laittoi meidät, taitajiksi valitut, yhdelle kurssille syksyllä. Sille kurssille ei koskaan keräännytty, ja sillä piti tehdä jotain vanhoja taitajatehtäviä. Kritisoin, että siitä ei ollut oikeastaan mitään hyötyä. Hyödyllisempi se olisi ollut, jos se olisi pidetty helmikuun lopussa, ja siltä läpi pääsemiseksi olisi pitänyt toteuttaa omat näkemykset julkaistujen tehtävien PHP-osista.

Tai sitten olen vain perfektionismia lähentelevä itsekriittinen "noulaiffi" :P Tuotokseni kuitenkin täytti vaatimuksista suurimman osan. HTML-videoita en saanut toimimaan (tukeeko Firefox tai edes IE WMV-videoita edes?), ja tiedostojen uploadaus ei sujunut laisinkaan. Jälkimmäisen voinee korjata toteuttamalla Pröngiin yksinkertaisen kuvanjakosovelluksen. Tämä opettaisi tiedostojen uppausta, ja toisi minulle samalla vorgihtavan seisake-kloonin kunhan kyllästyn refaktoroimaan.

Jaha, pisteet tulivat. Kuudentena olen. Saanko nyt angstitrollata tämän illan, ja vetää huomenna pisteet kotiin? :P

Huomenna pitäisi kirjoittaa tuoterekisteri silkkisiivelle. Tuon pitäisi olla helppo homma. Pröngin ja Työkkärikannan kanssa olen harrastanut erilaisia rekisterejä. Se mitä huomisesta odotan innolla, on ulkoasun laittaminen silkkisiiven sivun kaltaiseksi. Lisäksi odotan innolla mitä yllätyksiä PHP (ja Javascript? Teoriassahan rekisteri keskittyy PHP:n puolelle, eikä pitäisi tarvita client-logiikkaa muuhun kuin syötetyn datan esivalidointiin) tuo minulle. Lisäksi sellaiset, kuten "Haluamme tallentaa kuvat... KANTAAN!" - aivopierut, voivat yllättää. Pröngissä käyttäjätaulussa on linkit avatareihin, ja jos pröng tukisi nyt avatareja, niille olisi pyhitetty tiedostojärjestelmästä oma kansio, ja taulu toimisi täysin samoin kuin nyt. MySQL+PDO - duo tukee binääriolioiden sarjallistusta tietokantaan, ja parhaassa tapauksessa niiden käyttö ei eroa kuin PDO::PARAM_X - parametrin verran normaaleista tietotyypeistä, mutta silti olen ennakkoluuloinen.

Nyt pitäis harrastaa taas vähän C#:tä Torstaita varten.

Saturday 21 April 2012

Pröng ottaa osumaa taitaja-jutuista

Nyt on kevät: jo toinen blogiposti tulossa tänään!

Tarkoitukseni oli siis kerrata viime postissa mainitsemastani PHP-raamatusta enterprise- ja tietokanta-patterneja. Eihän siitä mitään tullut! Olin läpikäynyt pari ekaa patternia näistä luvuista, ja olin tajunnut mikä Pröngissä minua nykyään häiritsee: se alkaa taas muistuttaa hallitsematonta sekametelisoppaa. Tämän syy on helppo jäljittää: liian lepsu arkkitehtuuri. Miksi dataolioiden pitäisi hakea tietonsa erilliseltä tietokantakerrokselta, kun tietokantaan pääsee käsiksi suoraan perimällä DB - luokan? Noh, olisiko yksi syy se, että oikeassa elämässä ei ole dataolioiden tehtävä tehdä muuta kuin pitää dataa sisällään!? Lisäksi esim. Luonnos - luokan määritelmä (class Luonnos extends DB{}) kuulostaa äärimmäisen typerältä! Luonnos is-a DB? Mikä pälli pitää ihmisen olla päästääkseen tällaistä laadunvalvontansa läpi!?

Ylemmät on kuitenkin helppo refaktoroida, mitä hittoa se onkaan suomeksi. Tämä onnistuu tekemällä Tehdas-luokka, joka sylkee ulos dataoliota samanlaisella rajapinnalla kuin vanhat dataluokat ovat luoneet itseään. Samalla voisi selkeyttää vanhaa tietokantarajapintaa joko tarjoamalla suoraan puolisuojattua PDO-liittymää tai toteuttamalla joku datamapperi (select()->from() - pattern) joko suoraan tekstipohjaisena (jolloin tämä olisi käytännössä puolityyppiturvallista SQL:ää) tai jollain jännemmällä tyypityksellä, jossa tietokantaan menevään SQL-lauseeseen ei ulkopuolelta pääse suoraan käsiksi, vaan se muodostetaan parametrina tulevien olioiden pohjalta.

Pröngissä minua häiritsee myös useat sisääntulopaikat. Jos oikein innostun, refaktoroin kaiken liikenteen kulkemaan index.php:n kautta, näin luoden hyvän Front Controllerin käyttöömme. Tämä ratkaisu vaatisi Command - patternin hyödyntämistä, jonka jälkeen komennot ja näkymät eivät enää olisi riippuvaisia URLin osoittamasta tiedostosta ja $_GETiä sekä $_POSTia sörkkivistä ehtopuista, vaan rakentaisin seuraavanlaisen systeemin:
  • Request-luokan abstraktoimaan suoran $_GETin ja $_POSTin nätin rajapinnan taa
  • CommandResolverin, joka palauttaa parametrina saamastaan Request - oliosta päätellyn läjän Command - olioita, jotka Front Controllerimme sitten ajaa
  • Lopulta Controller päättelee Command - olioiden käsittelemästä Requestista ( tai jos loogisia halutaan olla, pitäisi varmaan muodostaa Response - olio) mikä näkymä ladataan
Näkymät ovat myös yksi päänvaiva. Nämä ovat yhä melko sottaisia. Nämä pitäisi rakentaa niin, että näkymä on silkkaa HTML:ää. Tässä HTML:ssä sitten on linkit tyylisivuihin (joita voisi sovittaa näkymiin, sen sijaan että iskee kaikki tyylit samaan tiedostoon), sekä javascript-tiedostoihin (tällä hetkellä kaikki näkymälogiikka päivystää <head> - osan sisällä, document.ready():ssä). Javascript sitten hakisi palvelimelta XML:n ja populoisi staattisen html:n sen pohjalta. Lisäksi näkymistä pitäisi kaikki legacy-koodi portata jQuerylle.

XML:ää sylkevät sisällöntuottajatkin vaatinevat vähän refaktorointia. Niille pitäisi tehdä oma kontrolleri, joka päättelee Requestin, eli URL-parametrien, perusteella A) mitä tuottajaa haetaan B) Mitä parametreja sille annetaan. Tällaisen rakennelman jälkeen pitäisi olla suhteellisen helppoa tuoda luonnostuottajan rinnalle esim. lautatuottaja, joka sylkee XML:nä dataa liittyen keskusteluihin, tai mahdollinen kalendaarituottaja tai profiilituottaja, jos tarve vaatii.

Tämän jälkeen pitäisi taas Pröngin koodailun olla kivempaa. Ties vaikka laudan uudelleenkirjoittaisi niin että se jopa toimii :)

Taitajahahmotelmaa

Maanantaina olisi allekirjoittaneen tarkoitus lähteä Jyväskylään Taitaja-kisoihin puolustamaan koulumme, Suomen Liikemiesten Kauppaopiston, kunniaa verkkosivujen sarjassa... Täysin koulun ulkopuolella opiskelluilla PHP-taidoilla :D

Joku opettaja joskus lausui, että minun kannattaisi hahmotella jo julkaistuja tehtäviä etukäteen. Toivottavasti viimeinen viikonloppu ennen kisoja ei ole liian aikaisin! Noista tehtävistä tuoterekisterin pitäisi olla läpihuutojuttu: tietokantoja, tietokannan kanssa interaktointia ja käyttöliittymien suunnittelua on tullut viimeisten vuosien aikana harjoiteltua vaikka kuinka, välillä jopa koulussa. Siinä ei kuitenkaan ole paljoa hahmoteltavaa ja suunniteltavaa ennen kuin saan saan selville mitä yksityiskohtia tuoterekisterin tuotteista pitäisi tallentaa. Voisin valmistautua tuohon tehtävään kertaamalla PHP-patternraamatustani Enterprise- ja tietokantapatternit.

Tuota Windows Phone - tehtävää en uskalla paljoa kommentoida, sillä se tulee kuulemma muuttumaan ja runsaalti. Voisin vinkkien perusteella kuitenkin kerrata XML-LINQin ja XAML-perustaisten käyttöliittymien toiminnan. Koska en ole .NET - maailmassa paljoa seikkaillut sitten viime kesän, voi näiden kertaamiselle olla oikeaakin tarvetta. Väittäisin että nämä tulee kerratuksi lukemalla muutaman viikon vanhan Phone-raamatun ja jouluna hankkimani .NET - raamatun loppuun, ja jos eivät tule, on minulla koko sunnuntai aikaa harjoitella.

Joulukalenteri on sitten tehtävistä jännin. Mietin, että jos laittaisi keskisuomalaisen sivupalkkiin divin, johon tulostuisi tietokantaa hallinnoivalta luokalta saatu päivän tarjous, eli tarjousten syöttökäyttöliittymän muotoilemaa html:ää. Syöttöliittymä taas päättää merkitäkkö päivän tarjous videomatskuksi, kuva(sarjaksi), tekstiksi vai grafiikaksi. Noita pitänee vielä paikanpäällä hieman avata, tai ainakin pohtia että voiko yhteen tarjoukseen tulla kaikkia näitä, vai voidaanko olettaa että jos tarjouksessa on video, siihen ei tule staattista kuvaa, tai jos tarjouksessa on kuvasarja, siihen ei tule tekstiä, jne. Kuvasarjankin tekemisestä voi tulla hassua. Täytynee varautua myös HTML5-raamatu(i)llani ja kerrata <canvas> in käyttöä.

Toinen mietittävä on itse kalenterin käyttöliittymä. Keskisuomalaisen sivulle tulostuisi vähän muotoiltuna päivän luukku tarjouksineen (pitäisikö siihen rakentaa jokin luukku-animaatio?), ja tämän luukkuwidgetin kautta pitäisi ilmeisesti päästä myös kalenterisivulle, jossa on näkyvissä kaiki joulukuun aikana nähdyt luukut (avattuina? suljettuina?). Pitäisikö tästä kalenterista rakentaa yksinkertainen lista? Pitäisikö luukut sijoitella ympäri sivua satunnaisgeneraattoriin pohjautuen? Pitäisikö tähän rakentaa joku perinteistä joulukalenteria muistuttava näkymä?

Pohdinpa näitä. Kirjoitan lisää, jos innostun, kun jaksan :P

Monday 16 April 2012

Hyvää uutta... tai jotain

Lienee aika ampua tässäkin blogissa uudenvuodenraketit. Pam! Kiitos

Kuten ainakin naamakirjan puolelta on saanut lukea, allekirjoittanut sai tammikuussa idean. Tähän ideaan liittyy tämä koulu. Tarkemmin sanoen ideani liittyy tuon pdf-dokun sivulle 44.

Siltä varalta että joku ei tästä ymmärtänyt, olen siis pohtinut kolmivuotista yliopistoreissua tuonne britteinmaalle. Tämän suunnitelman tiellä on käytännössä enää rahoitus. Kävin tänään keskustelemassa kv-tädin kanssa koululla, ja ilmeisesti hakemisella ei vielä ole kiire, vaikka tahtoisikin syyskuussa opiskelemaan. En siis rynni ihan vielä pankkiin tekemään mitään seksikästä rahoitussopimusta, joka paremmissa piireissä tunnettaisiin hiton isona lainana, vaan tutkiskelen vielä jos joku säätiö tai firma (Äiti? :) Isi? :) Jussi? :)) voisi rahoittaa edes osan tästä projektista. Jos joku haluaa investoida tulevaisuuden tekijään, minuun, rahasummia otetaan vastaan 10€-50 000€ - väliltä. Laitelkaa sähköpostia feuer.smith ät gmail.comiin aiheesta :)

Nyt kun johdanto on alta, voinen siirtyä varsinaiseen asiaan. Minulta on kyselty viime aikoina, että miksi oikein haluan englantiin. Kysymys on väärin. Tässä projektissa, kuten elämässä, ei ole kyse haluamisesta. Jos elämässä olisi kyse haluamisesta, heräisin arkiaamuisin kympiltä. Aamurituaaleihin kuuluisi myös parin tunnin pyöräily- ja pleikkarisessiot (missä pleikkari on synonyymi kaikille joukon {psX (missä X kuuluu joukkoon {2, 3, Vita}), Wii, PC}  jäsenille), hieman ehkä vuodenajasta riippuen. Tämän jälkeen olisi sopiva hetki avata joku MERPGiin liittyvistä projekteista. Tätä voisi sitten työstää parista kuuteen tuntia. Sen jälkeen voisi olla sopiva hetki jätskille ja uudelle pyörä- tai pleikkarisessiolle. Sitten ruokaa! Riippuen siitä onko oikeassa maailmassa jotain ohjelmaa, voisi ruoan jälkeen joko lähteä kaupungille jonkun seurassa, tai jäädä katsomaan telkkaria. Seittemän tai kahdeksan maissa voisi sitten tulla koneelle, avata jonkin projektin taas, ja alkaa iltaisen innovointikierroksen.

Viikonloput seuraisivat samaa kaavaa... Tosin aamu-päivä - akselille sijoittuisi harrastamista ja ilta-yö - akselille koodailua. MERPG vaatii säännöllisen epäsäännöllisesti Tässin kanssa Öiden hyödyntämistä. Nämä sijoittuisivat kuten nykyäänkin, ehkä vähän pienemmällä intervallilla.

Kuten sanottua, englantiprojektinkaan kanssa kyse ei ole haluamisesta. Kyse on siitä tunteesta, joka ajaa lapsen rautatien ääreen, joka laittaa lapsen opiskelemaan uusia ohjelmointikieliä ja -tapoja, joka ostaa lapselle lippuja mitä kummallisimpiin paikkoihin. Tämä tunne, kiinnostus, on kiinnostava! Minua kiinnosti alunperin, 11-vuotiaana, tietää miten pelejä ja nettisivuja tehdään. Sitä kysymystä tutkin ja analysoin vieläkin. Rautatie-innostukseni lähti siitä liikkeelle, kun koulumatkoilla, Leppävaaran ja Pasilan välillä, etsin virikkeitä. Jostain syystä kiskoilla kulkevat yksityiskohdat tarjosivat niitä ja paljon. Oikeastaan niin paljon, että olen vasta vähän aikaa ymmärtänyt kuinka laajan alueen "rautatieharrastus" käsittää. Matkailu taas on ihan oma lukunsa.... :D Siihen sisältyy kiinnostavia paikkoja, jännää historiaa ja inspiroivaa matkaseuraa.

Niin, toimintani todennäköisesti-väliaikainen siirtäminen saarivaltioon todennäköisesti tarjoaisi kiinnostukseen ja innostukseen perustuvia elämyksiä... toivottavasti. Toki tämä toisi mukanaan myös huonoja puolia, taakse jäisi iso-kone laskentatehoineen (en todellakaan ottaisi mukaan muuta kuin max 2 päpää, toinen muistiinpanokoneeksi (nykyinen pienpäpä pärjäisi tässä todennäköisesti hyvin), ja ~15 tuumaisen läppärin, jossa akku kestää ohjelmointia vähintään viisi tuntia ja rauta kestää Dragon Age IIa ja Assassin's Creed Revelationsia täysillä asetuksilla), Yöt siedettävillä intervalleilla, ja naamatuskommunikointi nykyisten porukoiden kanssa. Puhumattakaan Suomen kiehtovasta rataverkosta!

Joku voisi loukkaantua siitä että isokone mainittiin ennen ihmisosaa, mutta ihmisosaa varten on olemassa mese, skype, naamakirja, sekä ainakin kolme blogia. Koneesta taas ole mitään hyötyä, jos sen jättää kotiin happanemaan :P

Kiitos taas siitä, jos joku jaksoi tuon lukea loppuun. Nyt voin loputalkin vastata kysymykseen "Miksi englantiin?" käskemällä lukemaan blogista :)

Friday 13 April 2012

Miltä kartta näyttää

Hahmottelenpa tänne hieman edellisen viestin karttasuunnitelmia, koska en jaksa avata Netbeansia.

Ylimmällä tasolla meillä on lista MEMAP-olioita. Tiedän että tämä saattaa tehdä latausajoista melko seksikkäitä, mutta väittäisin että ainakin suunnitelmien protoiluasteella karttatiedostot ovat serialisoituja tällaisia listoja. Jos latausajat ovat pahoja, voi tiedostoformaattia muuttaa serialisoidusta listasta, joka tallennetaan ja ladataan yhdellä käskyllä, headeriksi, joka kuvaa tiedoston rakennetta (monesko kartta on mikäkin kartta), ja jonoksi kartta-olioita, joiden lataus rinnakkaistetaan tai johon kirjoitetaan joku luovuutta uhkuva algoritmi.

Varsinaista MEMAP-luokkaa taas muutetaan niin, että siihen lisätään lista vektoreita. Nämä vektorit kuvaavat tilejä, joilta pääsee liikkumaan seuraavalle kartalle. Tämä vektoriluokka on tietysti peritty perinteisestä Vector2-luokasta, jonka "lainasin" droidipeliraamatustani, Tähän perittyyn luokkaan pitäisi laittaa myös viite karttaan, johon vektorin kuvaamasta tilestä pääsee. Tämä viite on todennäköisesti kohdekartan hashcode sarjallistaessa ja editorissa suora viite kohdekarttaan... Tai toisaalta voisihan pelkkä viitekin toimia. Täytyy tutkia miten oliot käyttäytyvät tiedostoon tallentaessa.

Lisäksi vektoreihin pitäisi myös merkitä kohdekartan saapumistile. Tiivistettynä nämä siirretilet kuvaavat siis:
  • Lähtökartan tileä, josta siirtymä tapahtuu
  • Kohdekarttaa, jolle siirtymä tapahtuu
  • Kohdekartan tileä, jolle siirtymä tapahtuu
Ei pitäisi olla mikään paha toteutettava, edes käyttöliittymällisesti. Kiitos jollekin suunnittelijaparalle, tämä kevät eletään ilmeisesti ilman viimekeväisen kaltaista rakennehärösuunnitelmaa, joka sotki asiat kuukausiksi.