Tuesday, 22 May 2012

Testaan blogger-javakirjastoa

Moi maailma

Tämä teksti on lähetetty Javalla. Tämä on kokeiluni, joka liittyy erääseen projektisuunnitelmaani, josta saattaa joku lähitulevaisuudessa kuulla!

Sunday, 6 May 2012

MERPG-moottori

Väsäsin moottorin tukemaan uusia karttoja. Jos innostutte leikkimään, MERPGin ja MEMAPPERin uusimmilla versioilla, voitte tutkia lopullista karttamoottoria. Toivoisin että leikitte! Sekä raportoitte bugeista!

Saturday, 5 May 2012

Tulevaisuus, menneisyys ja muutama muu ajan yksikkö

Kun perjantain kunniaksi opettajani totesi minun kirjoittavan loistavasti, (ja viestivän suullisesti huonosti :D,) Jyväskylässä Laurikin haukkui minun olevan loistava kirjoittaja, ja kolmiokin muistaa hokea kirjoitustaitojani (vaikka Tässiä ottaa sydämestä osa kieliopillisista ratkaisuistani :D), voisin kirjallisesti pohtia otsikon ajanmääreitä.

Aloittakaamme tulevaisuudesta. Se on vaikea tapaus: minulla on pieni aavistus siitä mitä voisi olla kiva tehdä kesäkuussa, mutta minulla ei ole minkäänlaista tietoa siitä missä olen syyskuussa. Blogissa analysoin jo opiskelua englannissa. Toinen vaihtoehto on suomen koulutus: joko Helsinkiin yliopistoon (tai jos pääsen ja keksin hyvän syyn valita yli Helsingin, Turkuun ja Tampereelle on myös haettu), tai Espoon Leppävaaraan ammattikorkeaan. Yliopistot tarkoittaisivat joko melkoista koulumatkaa, tai lähemmäksi muuttamista. Helsingin tapauksessa (bussi/auto) -> juna -> metro -> spora - ketju kuulostaa hauskalta, mutta epäilen etten jaksa sitä pitkään. Asunnon uudelleensijoittelu houkuttelisi, mutta se pakottaisi sekä oikeasti ajattelemaan talouttaan että sovittamaan tämän kaiken materialistisia kiksejä antavan materian jotenkin fiksusti. Noh, jos muutama tuhat lukiolaista ja amista onnistuu tässä joka vuosi, kai minäkin pystyn. Etenkin talouden suhteen olisi pakko pärjätä, oli tulevaisuudessa sitten englanti tai muutto lähemmäs tulevaa koulu!

 Syksyllä voin olla myös työssä. Tällä hetkellä työskentelyn suhteen on muutama rauta tulessa. Parhaiten käydessä syksyllä teen etänä ohjelmointiprojekteja koulun ohessa englannista, samalla käyden koulua ja kehittäen sekä MERPGiä että Pröngiä. Keskikivassa tapauksessa teen töitä välillä toimistolla, välillä etänä, käyden koulua jossain, missä puhutaan suomea. En tiedä kuinka kivassa tapauksessa olen syksyllä täysipalkkainen, 2000€/kk ?, ammattilaiskoodari, joka pohtii että voisi varmaan kouluttautua. Viimeinen vaihtoehto, jonka kivuudesta en myöskään tiedä, olisi käydä kotoa leppävaarassa koulussa, ja ehkä tehdä jotain ansiokoodaustakin siinä sivussa.

Näistä skenaarioista pitäisi yhden tapahtua. Jännättää mikä tapahtuu, toivoisin englantiopiskelujen, mutten vastustaisi ansiotöitä ja kouluttautumista kotonakaan.

Koska olen ilkeä, jätän muut otsikon ajanmääreet muihin teksteihin :)

MEMAPPER-uutisia

Sainpa valmiiksi näitä speksejä noudattavan MEMAPPER-version. Sekä sorsat että binäärit ovat haettavissa Sourceforgesta. Käytännössä ero vanhaan on se, että kartan sijasta editorissa käsitellään karttajoukkoa. Näiden karttojen välille voi sitten laittaa "siirtymävektoreita", jotka siis kontrolloivat miten pelihahmo liikkuu kartalta toiselle. Jos olette kilttejä ja kokeilette, voisitteko raportoida kommentteihin? :) Iloksenne pastean tähän blogipostiin myös Mercurialin lokin:

date:        Sat May 05 21:23:02 2012 +0300
summary:     IO on lähes kunnossa, tallennus bugaa jättämällä temppitiedostoja jälkeensä

date:        Sat May 05 20:47:31 2012 +0300
summary:     Nyt siirtovektoreita voi jopa käyttää. Seuraavaksi IO

date:        Sat May 05 20:00:28 2012 +0300
summary:     Siirrevektoreille on tool ja ui olemassa

date:        Fri May 04 22:03:10 2012 +0300
summary:     Karttoja voi nyt nimetä

date:        Fri May 04 21:19:42 2012 +0300
summary:     Olemassaoleva käyttöliittymä ymmärtää multikartallista universumia

date:        Fri Apr 13 22:18:35 2012 +0300
summary:     Käyttöliittymä työn alla, seuraavaksi pitäisi saada tileset-lista tajuamaan kartan muuttuminen

date:        Fri Apr 13 21:05:37 2012 +0300
summary:     Datamallin pitäisi olla kuten yoolblogin Miltä kartta näyttää @ 13042012 - tekstissä selitetään. Seuraavaksi pitäisi väsätä käyttöliittymää

date:        Thu Mar 29 10:23:58 2012 +0300
summary:     MERPG-moottorin aloituksen tuomia muutoksia

date:        Fri Feb 24 21:26:39 2012 +0200
summary:     Nyt pitäisi pystyä pushaamaan sourceforgeen




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