Saturday 24 December 2011

Yool toivottaa loistavaa yulea!

Bugitonta joulua ja tyyppiturvallista uuttavuotta jokaiselle joka näitä satunnaisia tekstejä lukee :P

Friday 23 December 2011

Kertaus herramme vuodesta -11

Yearofourlord on haudantakainen ja tapettu konsepti, mutta silti melko eläväinen. Edellinen tämän postauksen kaavaa noudattava posti löytyy täältä.

Nyt on taas tullut aika kertailla mitä kuluvana vuotena on tapahtunut ja mitä siitä voi ajatella. Kuten muistamme, vuosi alkoi Kanariffan matkalla (LID175), jonne menin ostamaan Pokemon Mystery Dungeon - DS-pelin. Tuota peliä pelatessani sain ajatuksen: yksinkertainen on toimivaa. Tämä ajatus johti erääseen pieneen blogipostiin Fairandcruelin puolelle, moniin kommentteihin, kymmeniin yököttelyihin ja tämä kaikki on vielä alussa. MERPG on se, minkä vuoksi alunperin aloin ohjelmoimaan :P

Matkan jälkeen alkoi taas koulu, ja millainen kouluvuosi siitä tulikaan. Vaikka java ei _tämänhetkisten_ suunnitelmien mukaan esiinny rivinkään vertaa MERPGissä, oli Heliön (hieno opettaja, jos saan kehua) vuoden aikana pitämistä javakursseista paljon apua pelin suunnittelussa. Lisäksi koulussa oli jotain lukiokursseja, joihin kieltämättä olisin voinut keskittyä hieman enemmän.... :) Lukuunottamatta MAB4ää. Jos normaalin kulmakerrointa (kulmakertoimen käänteisvastalukua) ja vektoreiden+matriisien perusteita ei oteta huomioon, derivointi on jännimpiä asioita mitä matikankursseilta on opittu. Äikässäkin opimme.... jotain ja enkkuakin oli koko kevät.

Alkuvuodesta allekirjoittanut myös friikahti enemmän noihin kiskokulkuneuvoihin. Vorg oli vanha tuttu sivusto, joka pakotti minutkin yrittämään kauneimman ajankuvan vangitsemista digifilmille. Ostin siis kameran tammikuussa ja olen nyt vuoden ajan keräillyt kuvia vaihtelevalla laadulla. Osa kuvista on tekniseltä tasoltaan aivan naurettavia, osa (kuten tämä) on nättejä sekä teknisesti että ulkoasultaan, ja osa kuvista sisältää aiheita, joita ei normipäivänä näe. Kokeilenpa lisätä tänne sellaisesta kuvan.

Siinä meillä on sinistä päiväkalustoa turuust pasilassa.

Kevään kohokohta oli Sonata Arctican Live in Finland-keikan ohjelmanumeroita seurannut keikka Helsingin Nosturissa. En muista kirjoitinki siitä tänne mitään, mutta suosittelen sen pohjalta tutustumaan Live in Finland - levytykseen. Tällä hetkellä se tuntuu vähän nähdyltä, kun näin livenä samanlaisen shown, mutta parin vuoden päästä se on samanlaista kultaa kuin For the sake of revenge nyt.

Sitten tuli kesä ja joku ääliö päätti pitää lomaa merpgin koodailusta. Lopputulos oli se, ettei tämä kyseinen ääliö enää niinsanotusti ymmärtänyt vanhaa koodiaan elokuussa, ja korjaa virhettään yhä.Tällä hetkellä tarkoitus on toteuttaa peli SdlDotNetin päälle ja .NETin serializing - ominaisuuksien vuoksi (write-/readObject() > monimutkainen, virheherkkä käsintehty sarjallistus) lähdin porttaamaan karttasoftaakin swingiltä wpf:lle.

Kesän puolivälissä oli Tuska ja allekirjoittanut näki Epican livenä. Setti ei ollut mikään ihmeellinen, muistaakseni joku tunnin katsastus Design Your Universen ja Classical Conspiracyn kappaleisiin, mutta oli se silti hauska reissu. Tuskassa nähtiin myös Tarot, joka veti läpi Spell Of Iron - kiekon biisit 2011 -painoksen sovitusten mukaisina.

Heinäkuussa Tässi sai idean: mitä jos mentäis Kemiin VAIKKA Satamafestareilla ei olisikaan mitään kiinnostavaa. Sen päivän harmaa sää muistutti vuoden 2010 Keminreissun säätä niin, ettei minun mukaanpuhuminen ollut kovin haastavaa. Myös Sonja, jolle pitäisi kyllä keksiä joku luonteva nettilempinimi (kuten Rasmus => Tässi tai Ilpo => Feuer), tuli mukaan, ja mikäli minä muuta kolmiota lukea osaan, kaikilla oli hauskaa siellä. Minun PITI kirjoittaa reissusta blogiteksti, mutta ilmeisesti integroin tämän suunnitelman tähän tekstiin.

Moderneja höpöhöpönäyttöjä joista saa kuvia helposti
Matka alkoi sillä että isukki heitti meidät yhdeksäksi Helsinkiin. Siellä nousimme (K)olarin "yöpaikkuun", Pikuri 269iin, ja heräsimme seuraavana aamuna Oulusta.

Puuasema-arkkitehtuuri on kivaa
Oulusta kesti vielä joku reiluvajaa tunti sinne minne halusimme. Perillä muistin dokumentoida ensimmäisen "Isovaalee"-junani vetäjäksi 2808-veturin. Päivän aikana (ME-säilö/Kemi -11 resizoiduista luntaten) kiersimme torilla, leikkipuistossa, useammallakin rannalla (joista sai hemmetin hyviä kuvia joulukansioihin ;)), edellisen kerran festareiden pitopaikalla satamassa, puussa, hassulla kirkolla, rautatieasemalla ja S-raudalla. Kävimme myös naurattamassa paikallisia ravintolanpitäjiä kantakuppilassamme.

Auringonlasku oli hieno vaikka kameran patterit väittivätkin olevansa vähissä
Päivä oli pitkä ja Tässin pokewalkerin mukaan päivään kuului ~16 000 askelta. Sellaisen jälkeen oli sopivaa astua, ulkomuistista heitettyyn junanumeroon, eli Pikuri 270een. CEmtissä vietettiin taas hassu yö, jonka aikana syntyi monia luonnoksia, kuten Pehko joka sanoo hau, Hullugrammi sekä Kolmijohdevuoteinen riippuliidin (Pröngissä luonnokset väliltä 384-389). Aamulla herätys oli Riihimäellä, hieno paikka jos saan lausua, ja olimme kahdeksan aikoihin Tässin kanssa Espoon maalaiskunnassa. Siitä eteenpäin kroppa olikin hemmetin kipeä, minua ei ole luotu liikkumaan viisinumeroisia askelmääriä päivässä.

Ai mitenniin oltiin korkealla?
Seuraava hieno tapahtuma taisi sitten olla riksun reissu. Riihimäen asematapahtumassa kohtasin ukkopekan (Hr1 1021), Hurun (Dr12 2216), Alstikan (Dr13 2349), Vempun (Dv16 2026), sekä paljon uudempaa ja vanhempaa kalustoa Hyvinkään museossa, jonne Dr13 veti porukkaa riksusta. Reissusta on paljon kuva- ja videosatoa, jota voin esitellä jos joku on siitä kiinnostunut, mutta paljoa sanottavaa siitä ei ole.

Riihimäkipäivä oli syyskuussa, seuraavaa tapahtumaa pitikin sitten odottaa kuukausi. Lokakuun lopulla lähdin Kolmion kanssa tuonne rakkaaseen länsinaapuriimme vierailulle. Kävimme katsastamassa Within Temptationin keikan Tukholmassa..... koska helsingin keikkapäivänä oli muuta ohjelmaa. Aamulla oli aikainen herätys, koska eräät ällipällit eivät jostain syystä ottaneet edellisen illan helsingin lauttaa, joten piti nousta Espoosta 5:55 lähteneeseen Intercity tiesmihini, joka matkasi Turkuun. Turku Satamassa tein hassun havainnon: kyseinen juna oli ensimmäinen omin käsin näkemäni tuplamarsuvetoinen juna :P

Joka tapauksessa, laiva lähti joskus kympin maissa. Aamun ajan katselimme hytissämme Doctor Whon kutoskautta, jossain välissä kiersimme syömässä ja herkkukaupassa ja lopulta, noin viisitoista tuntia junaan astumisen jälkeen laivamme pääsi Tukholmaan. Siellä sitten olimme suomalaista kuvaa nostava seurue, kun etsimme hotelliamme sateisena syysiltana :) Keikka oli kiva, en osaa siitä sanoa enempää kuin olen tänne kirjoittanut

Marras- ja Joulukuu olivat tiukan opiskelun ja yököttelyn aikaa. Uutta Pröngiä olen työstänyt kesästä saakka, aina välillä heittäen suunnitelmat ja toteutukset romukoppaan, ja nyt se vaikuttaa vähitellen valmistuvan. Uusi Pröng on kommenttien loppuuntoteutusta ja laudan viilailua vaille julkaistu. Ikävä kyllä epäilen että ehtisin työstää Pröngiä huomenna (31. päivä), joten sen julkaisu venyy peruuttamattomasti ensi vuodelle.

Tämä vuosi oli, jos sitä ei vielä noista kaikista konserteista huomaa, musiikillisesti eritätin kiva. Alkuvuodesta tuli Sirenian uusi levy, loppuvuodesta Nightwish julkaisi Imaginaerumin. Väliin mahtui myös Sonataa ja Tarottia. Lisäksi ensi vuodelle on tulossa uutta Epicaa ja Sonataa, joten sisäinen musiikinkuluttajani riemuitsee näistä hienoista ajoista, joita elämme.

Ensi vuodesta tulee... mielenkiintoinen. Minun pitäisi tietää mitä tehdä koulun jälkeen, suorittaa työssäoppimisjakso (eli leikk... työskennellä PHP:n kanssa <3), kirjoittaa Pröng loppuun, pärjätä Taitaja-kisoissa ja saada jotain aikaiseksi MERPGin suhteen. Viimeksimainitun kanssa ei ole vielä kiire, kun kaikkien hahmojen ulkoasustakaan ei ole vielä käsitystä, mutta hänen Tässiytensä tekee konseparttia niin pelottavaa vauhtia, että minunkin pitäisi saada tuotantokuntoinen mediantuotto-ohjelmistoperhe vähitellen valmiiksi. Täältä näette hänen loistavia tuotoksiaan. Onneksi olen ulkoistanut animaatioiden tuottamisen Latexille ja SDLlle (Sdl.NET pienen dokumentaation silmäilyn perusteella tukee suoraan Coolbasicmaisesti frame framen viereen bittikarttaan lätkäistyjä animaatioita), mutta jos tuo Latexin tuotos edistyy yhtä hitaasti kuin omat projektini, saa nähdä joudunko itse rakentamaan oman animaattorin.

Ensi vuonna on suunnitelmissa lähteä pohjoiseen vaeltamaan. Allekirjoittaneelle tämä suunnitelma tarkoittaa sitä, että pitäisi välillä myös nousta tästä tietokoneen äärestä ja lähteä harjoittelemaan, sillä jos Kemin reissun jälkeen kroppa oli pahana, ei mettävaellus ole niitä fiksuimpia ideoita. Mietin että voisin kaivaa pyörän tosi aikaisin tallista (tammikuun puolessavälissä, kunhan kanarialta kotiin päästään, jos eteläsuomen lumitilanne ei tästä valkene :D), sekä mennä vähintään tässin kanssa nuuksioon pienemmälle "harjoitteluvaellukselle".

Eli, tämä vuosi on mennyt ohjelmoiden hienoja projekteja. Toivottavasti ensi vuosi menee samoin. Hyvää kesää sekä minulle että kaikille lukijoille (joita on toivottavasti enemmän kuin Tässi :P)!

Tuesday 13 December 2011

Kännykät

Tässä seuraa nyt hieman naapuribloginkin alueilla käyvä blogiteksti Androidin ja WP7:n subjektiivisesta vertailusta.

Kuten aiemmin hehkutin, hankin tosiaan tuollaisen android-puhelimen leikkikaluksi. Olen hieman tutustunut sen ohjelmointiin ja saanut jotain pieni toiminnallisuuksia aikaiseksi. Kiireellisemmät projektit ovat kuitenkin häirinneet hänen kanssaan leikkimistä, joten en ole näitä toiminnallisuuksia yhdistänyt vielä isommaksi kokonaisuudeksi, mutta se hetki on vielä tulossa. Hehkutan jommassakummassa blogissa kun saan jotain valmista julkaistuksi.

Tänään osallistuin Windows Phone 7 "kehittäjäseminaariin", jossa sain hyvän kuvan siitä-toisesta kännyalustasta. Allekirjoittaneen mielipide on, että C# on kuin Java, mutta se on toteutettu paremmin. Hieman samantyyppinen olo tuli kun vertasi WP7:n kehitystyökaluja Droidin vastaaviin (Netbeans + android-plugin). Tuolla Metropoliassa luennoitsija demonstroi paikannusta, joka on niitä toimintoja, joilla olen omalla puhelimellani leikkinyt. En tiedä johtuiko se Javan ihmeellisestä event-mallista, Droidikirjastojen hassusta suunnittelusta vai mistä, mutta yksinkertainen koordinaattien hakeminen, joka vaati droidilla 2 sottaista luokkaa ja xml-tiedoston joka kuvasi UI:ta, meni .NETillä muutamaan riviin (ja tietysti xaml-tiedostoon).

Alustoista tein sellaisia havaintoja, että jos WP7-kehitykseen jaksaa syytää rahaa (IDE non-studentille ei ole mikään halpa, mikäli VC# Express ei riitä, kehittäjälisenssi on non-studentille 100$ vuodessa, testivehkeet ovat niin kalliita että niitä ei osteta ihan leikkikaluiksi, toisin kuin 83€ Samsung Gioni), voi siitä tullakin jotain. WP7-kehitystä puolustavat ne faktat, että XNA on ehdottomasti parempi grafiikkaympäristö kuin mikään mitä olen droidille löytänyt (tässä kohtaa kyllä ongelmana on se, että kun pelit eivät ole se ensimmäinen mitä suunnittelin toteuttavani droidille, en ole kovin aktiivisesti opiskellut droidin grafiikka-apeja), mobiili Silverlight on melko helppo ja kiva asiaohjelmistoalusta jos on koskaan nähnytkään WPF:n käyttöä (Droidin UI-kirjasto on aivan erilainen otus kuin Swing tai AWT) ja C# on mieleeni paremman event-mallin (ja sen mahdollistavien ominaisuuksien, kuten anonyymien funktioiden :P) vuoksi. Lisäksi Visual Studio riitelee kanssani vähemmän kuin java-idet (NB ja Eclipse), jotka mm. sisentävät koodin aivan oman mielensä mukaan, ja ainakin Netbeansin code-completeristä on enemmän haittaa kuin hyötyä, toisinkuin Visual Studion intellisense, joka tehostaa koodin kirjoitusta.

Droidia puolustaa juuri kaiken ilmaisuus/halpuus. Hyvän puhelimen saa testialustaksi halvalla (Giosta taitaa olla juuri nyt Elisalla joululahjatarjous 99€), ja kehitystyökalut ovat täysin ilmaisia, riippumatta valitseeko Netbeansin vai Eclipsen. En ole varmistanut seuraavia, mutta tietääkseni Android Marketiin saa julkaistua tuotoksia täysin ilmaiseksi, julkaistavien ohjelmien määrää ei mitenkään ole rajoitettu (Windows Marketplacella julkaistavien ilmaisten ohjelmien määrä on rajoitettu) ja omat android-paketit saa käsinasentaa (kopioida .apk kännykälle ja asentaa se tiedostonhallinnassa) niin monelle kännykälle kuin haluaa, siinä missä WP7-paketit saa käsinasentaa kolmelle kännykälle (opiskelijat yhdelle).

Kun WP7:n metro-liittymää esiteltiin, ymmärsin, että kyseessä on kännykkätasolla nerokas konsepti. En ole varma miten se tulee Win8ssa toimimaan pöytäkoneella, mutta kännyllä abstraktiot (käyttäjä haluaa lähettää viestin toiselle käyttäjälle, käyttäjä ei halua lähettää tekstiviestiä/facebookchat-viestiä/meseviestiä toiselle käyttäjälle), tilet (pikakuvakkeiden ja widget-pikkuohjelmien toiminnallisuuksia yhdistelevät oliot) ja vain tärkeimmän tiedon esilläpitämisen periaate ovat toimivia. Tarkempaa tietoa metrosta löytyy vaikka täältä

Lopuksi täytyy vielä todeta, että jos aikoo kännykoodauksella tehdä rahaa, on WP7 paljon parempi kohde kuin Android. En muista miten tuotot jaetaan droidilla googlen ja ohjelmoijan välillä, mutta windowsilla tekijä saa 70% tuotoista. Lisäksi WP7 - ekosysteemi rohkaisee tekemään rahaa olemalla kallis valinta ohjelmoijalle ja rajoittamalla ilmaisten ohjelmien julkaisua. Androidista olen saanut sellaisen kuvan, että se suosisi ilmaisi ohjelmia, mainoksellisia ohjelmia, mikä on käyttäjille loistava juttu, mutta tuo suurimmat tulot Googlelle. Ilmeisesti ohjelmoijakin saa mainoksista jotain käteensä (miksi Angry Birds olisi droidilla ilmainen, jos ei saisi?), mutta WP7n uskoisin olevan tuottavampi alusta kuin Androidin.

Wednesday 30 November 2011

Lentokonematka bussiterminaalista

Alkuun tehtävä. Etsikää kuvasta nörtti.

Vinkkinä ruotsista peräisin oleva Within Temptation - huppari.

Oikein. Allekirjoittanut oli hyvässä seurassa eilen Kampin anttilan edustalla ~10 tuntia. Se ei ollut mitään verrattuna siihen 24 tuntiin, mitä eräs siellä istui. Onnea ja kunnioitusta vaan Lindalle, jos tätä luet ja nimesi yhä muistan. Ensimmäiset tunnit menivät lähinnä DS:ää näpräten, mutta illan edetessä ja jonon kasvaessa, yhteisöllisyys vähitellen heräili. Kun anttila sulkeutui ja henkilökunta alkoi levittelemään Imaginaerum - aiheisia julisteita ja krääsää myymälään, ei kukaan enää jaksanut keskittyä omiin kirjoihinsa tai peleihinsä, vaan suurta hupia tuotti vinyylien kuvioinnin ihastelu ja julisteiden perään kuolaaminen.

Olen usein kuullut kysymykseen "Mitäs teitte siellä [jonkin kivan tapahtuman nimi]ssa?" vastattavan "Oltiin hartaita ja laulettiin virsiä". Noh, en tiedä täyttääkö sinfoninen suomimetalli aivan virsien määritelmän, mutta kun anttilan ulkopuolella järjestäjät laittoivat radio rockin soimaan, oli jono hyvin mukana. Poet&Pendulumin aikana en huomannut kuin jonon etuosassa elämää, mutta illan pimetessä, puoli yhdentoista jälkeen, koko jono huusi samoja säkeitä joita radiostakin tuli. Kolmea vaille puolenyön porukkani karjaisi "Three minutes and counting!", aiheuttaen lähinnä järjestyksenvalvojissa "Miksi minä?" - ilmeitä. En ainakaan huomannut paljon hassutusta huudasta, mutta toisaalta moni muukin asia lensi ohi tajuntani.

Minulla olisi kamera täynnä kuvia, mutta kuvat ovat tosiaan kamerassa. Katson jos jossain vaiheessa saan ne koneelle ja edes ne tänne julkaistua. Minun on pitänyt tässä syksyn aikana julkaista jotain Kemistä, Riksusta ja ruottista, mutta projektit ovat hieman jääneet.

Hyvää joulua, kansa. Muistakaa joulun olevan parhaimmillaan marraskuussa.

Monday 14 November 2011

Droidista iltaa

Ostin  viikko sitten tälläisen Samsung Gion ja olen siitä saakka kokeillut mihin tämä taipuu. Bloggausominaisuuksia ei voi kehua, sillä typotaajuus on turhan huima.

Wednesday 2 November 2011

Siirtelyalgoritmi

Ai mitenniin olen hiljainen? En varmaan ole! :P

Tänään, kun tunnilla opettaja kertoi kuinka Javan Collections- ja Arrays - luokat osaavat järjestellä kokoelmia olioiden ominaisuuksien mukaan melko.... helposti..., allekirjoittanut tutki pitkästä aikaa MEMAPPERia. Korjailin muutamia käyttöliittymäbugeja, jotka ovat jo pitkään häirinneet minua, ja säädin hiiren tajuamaan scrollbarien toiminnan. Kun väsyin tähän, aloin tutkia ensimmäistä kertaa tosi pitkään aikaan uusien ominaisuuksien toteuttamista. Toteutin sitten selection toolin, jolla käytännössä valitaan tilejä siirtelyä tai leikepöytäoperaatioita varten.

Tämän toteutus ei ollut mikään haastava. Projektiin uusi luokka, jonka lupaan implementoivan Tool - rajapinnan, jonka jälkeen kopioin luokkaan rakenteet, jotka varmistavat ettei sama tile saa Use() - kutsun kuin kerran hiirenpainikkeen ollessa pohjassa. Siihen päälle vielä samantyyppinen bool-taulukko, joka hitdatatoolin taustalta löytyy, ja tämän taulukon pohjalta pienet piirtorutiinilisät Layerpanelin paintComponent()iin.

Haastavampi kysymys on sitten, että miten Move - työkalu pitäisi toteuttaa, ja toisiko tämä tarpeen tuoda Kumoa - toiminto ohjelmaan. Kumoamisen voisi toteuttaa luomalla pinon key-val - pareja, joihin tallennettaisiin aina Tool.Close()a kutsuttaessa kopiot kartan tilaa ylläpitävistä listoista. Kumoa:n kutsuminen sitten poppaisi tilaa ylläpitävät listat pinon ylimmän olion mukaisiin tiloihin. Tämä listojen syväkopiointi saattaa helpottua, jos laitan linkin tähän keskusteluun.

Siirtelyalgoritmi vaatii myös hieman pohdintaa. Yksi vaihtoehto olisi hakea ensisijaisesti vasemmaisin ja toissijaisesti ylin valittu tile. Kun MoveTool.Use()a sitten kutsutaan, asetetaan tämä tile hiiren osoittamiin koordinaatteihin ja muut valitut tilet suhteessa tähän tileen (pidetään tile, joka on sijoitustileen nähden koordinaateissa 3,4 samoissa koordinaateissa sijoitustilen uusiin koordinaatteihin nähden).

Wednesday 28 September 2011

Tämä bloggerin uusi ulkoasu vaatii vielä totuttelemista O.o

Pröng on edennyt siihen vaiheeseen, että meillä on API joka sylkee kannasta ulos satunnaisia luonnoksia xml:nä (jonka muoto ei ole vielä lyöty lukkoon. En siis kirjoita siitä speksejä, koska muoto saattaa vielä elää), ja sitten meillä on sivu, joka heittää luonnokset perinteiselle HTML-sivulle javascriptikikkailuilla.

Tämä satunnaissivu pyörii käyttäjän näkökulmasta lähinnä Javascriptin päällä. Kuten tietänette, JiiÄssä ei todellakaan ole yhtä toimintavarmaa eri selainten välillä, joten tämä versio Pröngistä vaatii paljon enemmän testausta kuin edelliset. Tästä testauksesta saamme palkkioksi paljon kivempia ominaisuuksia, olettaen että testit sujuvat hyvin. Allekirjoittanut pystyy testaamaan Pröngiä uusimmalla Firefoxilla, Chromella ja Safarinkin aion ladata testauskalustoksi. Koska käyttäjäkunnallamme on eksoottisempia selaimia, kuten erilaiset puhelimet, joilla en sattuneesta syystä pääse kokeilemaan sivustoa, tarvitsen käyttäjien apua. tämän sivun pitäisi toimia kuten nykyinenkin Satunnaiset - sivu. "Lisää luonnoksia" - napin pitäisi heittää sivulle 20 uutta, satunnaisesti valittua luonnosta, ja palauttaa selaimen sivun yläreunaan. Jos sivu ei käyttäydy näin, raportoikaa. Jos on jotain kommentteja tai ajatuksia, kommentoikaa.

Monday 19 September 2011

Hän on taas luonamme

Täällä taas, viime tekstistä onkin vierähtänyt hieman aikaa.

Ensi alkuun, Pröngin vanhat rakennesuunnitelmat on heitetty romukoppaan, joka on poltettu saunassa, ja jonka tuhkat on haudattu lyijykuutiossa viiden metrin syvyyteen maan alle. Aloitin Pröngin uudelleenluonnin samantyyppisellä ajatuksella, millä nykyinen Pröng toimii. Meillä on abstraktoitu palsta, johon sitten heitän sisältöä, ja tämä logiikka on paljon kivempi, kuin vanha ajatus siitä, että teen erikseen html-sivun, jonne laitan placeholdereita, jotka PHP sitten korvaa lennossa sivua luodessaan. Tietysti kivointa olisi ollut, jos olisin saanut tomcatista jotain irti, mutta kaikkea ei voi saada.

Toisekseen, memap3:a noudattavaan memapperiin on täten toteutettu kaikki perustoiminnot, mitä tiedostospeksi vaatii. Tilet kääntyvät, layereitä ja tilesettejä voi olla rajoittamaton määrä, läpinäkyvyyttä tuetaan, sekä tietysti vanhat ominaisuudet ovat pohjalla mukana. Tutkin miten ohjelmalle saisi kirjoitettua exe-launcherin (tätä tarvitaan, koska ainakin Windows-puolella on softia, joilla on tapana omia jar-tiedostot itselleen, jolloin javaohjelma ei käynnisty enää jaria tuplaklikkaamalla), sitten heitän testipaketin ME-säilöön, sekä muistutan fairandcruelissa tarvitsevani testikommentteja, ja siitä eteenpäin hion softaa testikokemusten pohjalta.

Memapperin ollessa kivassa kunnossa, on taas hetki aikaa tutkia MERPGin moottoria. Heitin joskus pari kuukautta sitten SDL:n siitä projektista roskikseen ja otin tilalle SFML:n, joka on vaikuttanut ihan kivalta. Tästä tullee vielä ehkä jotain tarkempaa tekstiä. Toista 1,5 kuukauden tekstitaukoa tuskin tulee, koska tämän syksyn hektisimmät vaiheet lienevät jo takanapäin.

Friday 19 August 2011

Loppukesäinen teoria maailmasta


Istun samalla terassilla kuin kirjoittaessani Miksi? – tekstiä. Erona siihen tilanteeseen on se, että kello on vielä niin vähän, että eteensä näkee, mutta näin ei välttämättä ole enää kahden viikon päästä. Mietin tätä maistellessani ja haistellessani ilmaa. Iholla tuntuu lähestyvän talven viileä hipaisu, mutta muuten tunnelma on möksähtävän kiva. Tätä tarkoitetaan sillä, kun sanotaan ilmassa olevan poroa.

Reuhdon leivästäni palasen ja esittelen tätä palasta makunystyröilleni kuunnellessani turuntien liikenteen kohinaa. Huokaisen loppukesän tunnelmalle ja painan tietokoneelta Sireniaa soimaan. Koska alla olevassa koneessa on XP + WMP9, jonka kirjasto-ominaisuudet eivät ole kehuttavia, popitan vain Sirenian uusinta, Enigma of Lifea, suoraan CD:ltä. Muistan kun sain tämän levyn, oli hemmetin kylmä tammi- tai helmikuun päivä, ja vasta illalla, talvisen pimeyden oltua yllämme jo useita tunteja, eräs postipaketti tuli töistätulleen äidin mukana kotiin. Avasin sen innoissani, ryntäsin kellarikerrokseen, jossa talon kivoin äänentoistolaitteisto sijaitsee, laitoin yllämainitun levyn soimaan, sammutin kellarista valot ja asetuin lattialle makaamaan. Siellä tunsin reilun tunnin ajan universumin läsnäolon.

Katselen hämärtyvää iltaa, ja nauran. Suomalaiset vihaavat sekä talvea, että kesää. Silti joka talvi nähdään kuinka suomalainen luovuus puhkeaa kukkaan, ja joka kesä suurin osa tuulipukukansastamme kuoriutuu kuin ruma ankanpoikanen. Tämä seuraaminen ja prosessissa mukana oleminen hassuttaa oikeallekirjoittanutta aina yhtä paljon. Toivottavasti tämän syksyn ja talven luovuuskukkanen esittäytyy meille MERPGinä ja parina sivuprojektina, jotka toivoisin saavani valmiiksi edes tämän vuoden puolella.

Vaikka etelänmailla valo vähenee silmissä, ei suomalainen syksykään mikään hidas pimentymään ole. Hitto soikoon, muutama viikko sitten rakas perheeni oli uimarannalla vielä tähän aikaan, ja nyt (22:10) täällä on niin pimeää, että voisi miltei järjestää autokoulun yöajelukokeen. Tämän lisäksi täällä on niin kylmä, ettei sormet jaksa painaa läppärin nappeja niin paljon kuin tämä vanha HP tahtoisi. Odotan innolla Kemin reissua, sillä parin viikon päästä tällä tahdilla junan lähdön aikaan (21:23 tjsp.) on erittäin kylmää ja pimeää. Kyseessä ei todellakaan tule olemaan keskikesän matka tallinnaan :P

Tälläistä tajunnanvirtaa tänään. Koetan muistaa julkaista tämän tekstin D&When kun saan tälle koneelle netin. Nähdään taas jouluna, olettaen ettei blogin kirjoittelutahti tästä kasva.

Thursday 28 July 2011

Loppukesä

Tuska oli ja meni. Lauantaina allekirjoittanutkin oli paikalla kuuntelemassa Epican ja Tarotin setin. Epicaa kuunnellessa jäi ärsyttämään se, etten raahautunut heidän keikalleen viime lokakuussa Nosturiin. Tarot veti yhtä hyvin, vaikka en olekaan lämmennyt Spell of Iron 2011lle. Alkuperäinen, jonka muuten nappasin Tuskasta Äxän kauppakärrystä CD:nä, on vaan äärimmäisen kova pakkaus ikäisekseen. Joka tapauksessa, tuolla ei kuitenkaan tapahtunut mitään niin ihmeellistä, mistä saisi keikkaraportin aikaiseksi :P

Mutta tänään hullu-Tässi sai tänään idean. Tämän idean lopputulos oli, että todennäköisesti lähdemme 19. ensi kuuta Kemiin junalla, ja palaamme seuraavaksi sunnuntaiksi. Siitä reissusta saanemme D&W:n ensimmäisen junakuva-blogitekstin. Aion varautua sinne parilla varapatteriparilla, kameralla ja muilla tarvittaville tilpehööreillä dokumentoidakseni yöjunien kaluston elokuulta 2011. Tässi ei taida olla ainoa hullu tässä seurueessa :P

Lisäksi Kemissä pitäisi uudelleenelää viimevuotisen satamafestarin parhaat hetket: Cumuluksessa voisi käydä ostamassa vanhalle pehmoporolle kaverin, satamassa pitäisi käydä tutkimassa maailman menoa, ja Ämmilässä pitäisi käydä syömässä. Lisäksi Möllärin Möljä oli hassu paikka, kuten Mansikkanokan puistokin. Lisäksi kun pyhiinvaellusmatkalle ollaan menty, pitäisi johonkin luonnon helmaan päästä käpertymään ja popittamaan Sonata Arcticaa "kultsipuppelista".

Tässä suunnitelma. Koulun alettua saanette raportin lopputuloksesta :P

Tuesday 26 July 2011

Tilannekatsaus

Niitä on hyvä tehdä välillä. Tietokoneeni osat tulivat viime viikon maanantaina, ja niiden kokoaminen oli melko läpihuutojuttu. Ei siis ollut mitään, mistä raapia kasaan tekstiä. Jotain kuvia otin pakkauksista, mutta hukkasin nekin jonnekin kovalevyjen tai kameran sisuksiin :D

Uusi kone tarkoitti, että alkuviikko meni sen kanssa säätäessä (ja menee edelleen... mm. Crossfire ei toimi lainkaan CCC:n mielestä, vaikka kaiken pitäisi tukea sitä), ja kun tämä oli mahdollista, aloin Civ V - pelin. Se on vieläkin kesken, joten en ole edistynyt oikein missään pariin viikkoon. Omaan kuitenkin suunnitelman palata Pröngiin, kunhan olen väsynyt Civ V:hen, Empire: Total Wariin ja Anno 1404ään.

Pröngistä minun pitikin puhua. Ensinnäkin, suutuin PHP:n tapaan sallia tehdä asiat melkein, mutta ei aivan, niinkuin ne pitäisi tehdä. Lopputulos oli, että viritin Viuhkaan Apache Tomcatin, aka. Javaserverin. Vielä kun saisin jostain aikaa opetella Javan serverikirjastoja, kun töissä kuitenkin kuluu suurin osa päivästä, ja loppupäivänä ehtii juuri ja juuri blogitekstin kirjoittaa.

Mutta tämä Pröngin kehitystauko on antanut minulle aikaa ajatella. Viikonloppuna joku lausui, että Pröngin tuottajatiimin pitäisi videoida tilanteita, joissa luonnoksia syntyy. Ideana se oli hyvä, mutta tuotanto monimutkaistuisi moninkertaisesti, mikä taas ei ole yhtä hyvä. Kuitenkin idean syntyhetkellä ilmeeni oli samantyyppinen kuin Hra Zuckerbergilla Social Networkissa kun tältä kysyttiin onko se-ja-tää tyttö vapaa. Pröngin pitäisi laajentua.

Osa lukijakunnastani tuntenee myös Fairandcruelin. Websin WYSIWYG-editori saattaa olla helpohko herra ylläpitäjälle, mutta foorumien käyttö on yhtä helvettiä, ei millään hyvällä, ja blogitkin saattaisivat vaatia hieman parempaa käyttötuntumaa. Jos nämä ominaisuudet toisi nykyisten pröngsuunnitelmien (luonnokset, kalendaari, profiilisivut) päälle, olisi F&Clle melko sopiva perillinen kokoomavalmis.

Eli Pröngistä olisi siis tulossa Kolmio-portaali, ei pelkkä luonnosten säilö. Miltä kuulostaa, kansalaiset?

Saturday 16 July 2011

Nörttihenkeä :D

Istun kalsarisillani asuntovaunussa, läppäri sylissä keskellä keskisuomen metsiä, koodaamassa pröngiä ja mussuttamassa leipää keskiyöllä kuunnellen Sireniaa. Tälläiseenkään tilanteeseen päädy ihan joka päivä :P

Saturday 9 July 2011

Miksi?

Otan boheemisti mukillisen vettä ja astun ulos pikkupäpä kainalossa ja soittopeli toisessa. Kello on yksitoista, musiikkina Indica ja on heinäkuinen kesäilta. Täydellinen hetki kirjoittaa D&W:n kuukauden teksti.

Aistin ihmisten usein miettivän, miksi pääni täyttää päivittäin jokin, mikä näyttää monimutkaiselta, vaatii paljon mietiskelyä ja aiheuttaa paljon kirosanoja. Ajoittain mietin tätä itsekin. Mikä ajaa ihmisen ohjelmoimaan, ja mikä ihmisen pitää tässä loppuelämänsä?

Aihetta romantisoimatta, alunperin tunsin, etten tietänyt tietokoneista tarpeeksi ennenkuin osaisin ohjelmoida. Sillä tiellä olen edelleen, sillä jos lähtee tutustumaan ohjelmointiin aikeenaan oppia kaikki aiheesta, ei muuta ehdikään kuin opiskella. Ala on niin laaja.

Hieman romantisoiden, koodari on käsityöläinen, jolla on syytä olla työstään ylpeä. Koodari miettii ongelmaan ratkaisun ja toteuttaa sen, helpottaen ihmisten elämää. Nettiselain, jolla luet tätä, on tuonut tekijöilleen nelinumeroisen summan ongelmia ratkaistavaksi, ja kun nämä on ratkaistu, on lopputuloksena ohjelma, jota olet käyttänyt useampiin merkittäviin asioihin, kuin osaat laskeakaan. Toisena esimerkkinä voitanee käyttää jotain tietokonepeliä, kuten vaikka Age of Empireseja minulle. Pelkän kolmiuloitteisuutta matkivan pelin tekeminen on monimutkaisempaa, kuin yksinkertaisen nettiselaimen, puhumattakaan aidosta kolmedee-pelistä (3D kuten Age Of Empires 3, ei 3D kuten 3D-Avatar - elokuva). Ratkottavia ongelmia on kymmeniä tuhansia, osa on haastavuudeltaan pisteestä pisteeseen - tehtävän tasoa, osaa taas saa miettiä viikkojen ajan. Ja jumankauta, olen viettänyt jonkun alkuperäisen AoE1:n kanssa äärimmäisen monta tuntia. Puhumattakaan siitä, mitä kaikkea olen käynyt läpi AoE2:n ja AoE3:n moninpelien kanssa. Näitä tunteita saavat käyttäjät tekevät koodaamisesta äärimmäisen nautittavaa.

Minulla oli joku idea myös raa'asti romantisoiden - kappaleeseen, mutta kello lienee tehnyt tehtävänsä. Toivottavasti tämä teksti antaa jotain osviittaa siitä, mitä päässäni liikkuu koodatessa :P

Pröngin oliomallintelu

Nyt kun tietokanta on olemassa, lienee sopivaa alkaa miettiä millä abstrakteilla olioilla Pröngin sisäistä toimintaa voisi kuvata. Lisäksi muutakin arkkitehtuuria voisi kuvata, eikä vain tehdä luetteloa tarvittavista luokista.

Ainoa järkevä perusdesign nykyisen (jossa on piilotettu lähinnä Pröngin kahdelle palstalle kirjoittelu luokan sisään) jälkeen, on .NET/Swingimäinen ratkaisu, jossa kaikki pelottava käyttöliittymäkoodi on abstraktoitu piiloon. Eli suomeksi sanoen, pahaa ja ilkeää HTMLää ei tarvitse nähdä, ellei välttämättä halua. Tämä halu kuitenkin luo tarpeen preHTML- ja postHTML-kentille, jotka olisi tarkoitus tulostaa selaimelle ennen ja jälkeen käyttöliittymäelementin tulostuksen.

Eli, tarvitsemme yhteisen, abstraktin Kontrolliluokan, jossa määritellään protected-määreenä varsinaisen kontrollin koodi, ja jossa on juuri nuo pre- ja postkentät (ja näiden getterit ja setterit). Tästä sitten voidaan periyttää ihmeellisempiäkin kontrolleja :P

Kun otin nuo työpöytä-UIkirjastot esiin, voisin toteuttaa myös jonkinlaisen paneelicontainerin. En kuitenkaan kirjoita mitään javamaista layoutmoottoria siitä syystä, että CSS on paljon kivempi ja ajoittain jopa voimakkaampi layoutin luoja.

Mutta, koska Pröng ei ole pelkkä webbiulkoasukirjasto, pitänee datan liikkeitäkin mallinnella. Ensi-alkuun tarvitsemme jonkun staattisen- tai singletonluokan tietokantayhteydelle. Tähän pitäisi riittää joku kevyt PDO-wräpperi yleisimmille operaatioille (getLuonnos(), getLuonnosAttribuutit(), getUser() mm.), ja hienostuneemmat luokkafactoryt (Käyttäjät, Luonnokset) käyttävät tätä wräpperiä (tai sitten suoraan PDO:ta, en tiedä onko tarpeellista laittaa PDO-kerroksen ja muun softan väliin omaa kerrosta, joka vain kutsuu PDOta tekemättä mitään omaa).

Tässä oli kai tärkeimmät osa-alueet :P Lisää keksin viimeistään lopullista luokkakaaviota tehdessäni.

Monday 4 July 2011

Uus kone

Kun enkkublogin puolella sitä hehkutin, niin hehkutetaan sitten täälläkin. Tilasin viime viikolla uusia osia tietskariin (Tuolla näkyy osat), ja toivon että ne olisivat loppuviikosta minulla. Kun ne ovat minulla, tehnen kuvitetun tekstin koneen rakentelusta :P

Sunday 3 July 2011

Pröngin tietokannan suunnittelu

Alkuun meillä on kaavio, joka esittelee tietokannan taulut ja näiden suhteet.

Suorakulmiot ilmaisevat tauluja, salmiakit selittävät miten mikin taulu liittyy toiseensa, ja viivoilla olevat merkinnät (joko 1 tai M) ilmaisevat kuinka monta jäsentä toisesta taulusta osallistuu toisen taulun merkinnän tuottamiseen. Esim taulusta Käyttäjät voi 1 käyttäjä tehdä Monta kalendaarimerkintää tai luonnosta. 1 Luonnosta taas voi kommentoide Moni kommentti, jne. Editoin tähän perään lisää kaavioita, kun nämä valmistuvat.

Tässä taas meillä on koko kaavio tietokannasta, kenttineen. En jaksa alkaa dekoodaamaan merkintöjä, jos ette ymmärrä, ei tästä tarvitse tietää mitään :)

Pröngin lopullinen kehittelylista

Pröng 11.7, nykyaikaisesti versioituna, on se, mitä Pröngin käyttäjät ovat odottaneet Pröng 2011:den julkaisusta saakka. Tämä uusi versio keittää teet ja tekee matikanläksysi - kotimatkalla... Ainakin melkein. Muutoslista on niin iso, etten yllättyisi vaikka tuo tekisikin näin.

Tämä muutos-/ominaisuuslista on seuraava
  • Kaikki vanhat ominaisuudet säilyvät
  • Edellinen- ja Seuraava Luonnos - napit (katso viesti 9. nykyisellä Pröngin laudalla)
  • BB-koodimuotoilut
  • Case-sensitiivisyys käyttäjänimen suhteen (Katso viestit 10. ja 11.)
  • Käyttäjäprofiilit
    • Puolijulkinen synttäripäivä-kenttä (Puolijulkinen, eli synttäriä ei ole pakko antaa. Syntymäpäivän voi pitää piilossa profiilista, mutta voi antaa softan onnitella synttäripäivänä, ja sen voi antaa, mutta piilottaa täysin näkyvistä)
    • Allekirjoitus
    • Privaatti salasanakenttä
    • Henkkohtkuva
    • Hallintasivu ja esittelysivu (eli ei vain kolmea "Vaihda X" - linkkiä sivupalkissa)
  •  Synttärionnittelija, jolla on hieno valikoima "Onnee vaan!" - fraaseja, ja joka onnittelee jokaista, jolla on tiettynä päivänä synttärit ja on sallinut onnittelun.
  • Rekisteröitymismahdollisuus ja käyttäjäarvot
    • Käyttäjätasot alimmasta ylimpään:
    • Spartalainen
      • Voi kommentoida luonnoksia ja kirjoittaa laudalle. Ei voi kirjoittaa luonnoksia tai käsitellä kalendaaria. Voivat muokata tuotoksiaan. Rekisteröityneet ovat näitä.
    • Puolijumala xD
      • Voi yllämainittujen lisäksi kirjoittaa luonnoksia ja käsitellä kalendaaria (josta lisää myöhempänä). Voivat muokata ja poistaa tuotoksiaan. Kolmiomme on automaattisesti tälläinen, ja tälle tasolle päästäkseen kyetä näyttämään olevansa asiallinen ja kykenevä tuottamaan korkealaatuisia luonnoksia :P
    • Sisäinen Kanadanhanhi
      • Minä. Oikeudet luoda, muokata ja poistaa mitä tahtoo. Lisäksi rajalliset oikeudet sörkkiä muiden ihmisten käyttäjäprofiileita. Esim. unohtuneen salasanan voi muuttaa muuksi kauttani, menetelmällä josta kertonen myöhemmin.
  • Saatan toteuttaa mahdollisuuden muokata käyttäjäkohtaista ulkoasua omanlaiseksi. En kuitenkaan lupaa import/export - tukevia teemoja.
  • Etusivulle voisi toteuttaa jonkin pienen widget-moottorin (ja tietysti widgettejä/härpäkkeitä :P)
  • Mietin yhä blogikonseptia (katso viesti 26.)
  • Luonnoksiin voisi lisätä tageja, ja näiden pohjalta luonnoksia voi mm. tulostaa järjestyksessä jonkin tagin mukaan
    • LID-kentänkin voisi toteuttaa tagina
Seuraavaan postiin voisin suunnitella tietokantaa...

Friday 24 June 2011

Kokokon kokokokokoko kokko

Tämä alkaa pahasti kääntyä xkcd-blogiksi. En ole varma, oliko se juuri xkcd, jossa esiteltiin kaveri, joka kirjoittaa blogiinsa neljä kertaa vuodessa, pahoitellen joka kerta kun ei ole jaksanut kirjoittaa enemmän, mutta joka tapauksessa ymmärtänette millaiseksi suureksi puujalaksi olen alkanut näin juhannuksen kunniaksi.

Kokko syttyy


Tänään pohdimme, jokavuotisen juhannusperinteen vuoksi, tulen syvintä olemusta. Tuli on runollisesti kiva. Tuli on loistava, vahva ja voittamaton... mutta niin helposti kaatuva. Tulen mukanaantuomat lämpö ja valo katoavat myös maailmasta helposti. Jos leirinuotion päälle sataa, palelevat leiriläiset koko yön. Myös ihmisten sisimmässä palaa vertauskuvallinen tuli, joka loistaa, valaisten ihmisten kättenjälkeä. Jos tämä tuli sammuu, katoaa käsituosta hohto. Tämä tapahtuu pelottavan helposti.

Kokko on aivan liekeissä
Juhannus on muistaakseni valon juhla. Jaksamatta tarkistaa wikipediasta, voisin olettaa juhannuskokkojen tehtävän olevan valon ja lämmön levittäminen kylmien ja pimeiden suomalaisten sydä....ntalviin. Tämän kun yhdistää suomalaiseen tapaan karkotaa pahoja henkiä juopottelemalla, saadaan lämminveristen ihmisten verestä paljon lämpöä tulevaa talvea varten :P

Liekit nousevat korkealle kuin kerrostalo
Erittäin hyvällä mielikuvituksella, sillä samalla jolle perustetaan uudenvuoden tinataiat, voi juhannuskokon liekeissä nähdä tulevaa ja mennyttä. Ylläolevassa kuvassa ainakin näkyy selvästi torso, kaksi kädenalkua ja pää, joka jäi kuvan yläpuolelle :P Jos oikein hassusti sitä katsoo, voi siinä nähdä mitä vain tulevan morsiamen ja ties minkä väliltä.

Sehän on sarvipää
Asiansa osaavan pyromaanin tapoihin kuuluu myös paloturvallisuudesta huolehtiminen. Ei saa jättää metsäpaloja, ei ruohikkopaloja eikä elävää palanutta. Ei myöskään kannata hukkua :P Se on äärimmäisen typerää.

Nauttikaa loppukesästä kuunnellen suomalaisen musiikkikulttuurin kauneinta helmeä.

 

Loput kuvat löytyvät joko showAll-PHP-skriptillä tai kansiosta

Tuesday 21 June 2011

Pyöritys on rikki :(

Javan kuvanpyöritin ei jostain syystä toimi. Näinollessa ei kannata ihmetellä ongelmaa, vaan kannattaa siirtyä ratkaisemaan helpompia ongelmia, antaen suuremman ongelman muhia päässä. Mainitsin jossain, että MEMAPPERin uuden koodipohjan eka beta tulisi kun tilet voivat pyöriä kuin karuselli, ja karttoja voi tallentaa ja ladata. Taidanpa kuitenkin toteuttaa jotain tosi helppoa ennen tiedostopuolelle siirtymistä: hit-datan nimittäin.

Tuo ei ole todellakaan vaikea toteuttaa. Tällä hetkellä ohjelman globaali tietovarasto omaa layersäilön, listamaisen rakenteen  layereitä. Tämä lista läpikäydään aina kun kartta renderöidään ruudulle. Hit-datan saisi toteutettua jalostamalla layer-luokasta uuden luokan, jonka tilejen tilalla on booleaneja. Tämä kerros piirrettäisiin ruudulle vain, jos hitdatan muokkain on valittuna.

Hitdataa muokkaavan työkalun toiminta taas on tuttua vanhasta koodipohjasta. Kun työkaluoliota ensimmäisen kerran kutsutaan, luodaan kartanW * kartanH kokoinen taulukko booleaneja, ja aina kun työkalua kutsutaan, pidetään silmällä millä tileillä on jo käyty, eikä muuteta niiden arvoja. Tämä toiminta on vielä hieman suunnittelun alla, mutta valmiista tuotteesta nähnemme mitä sain aikaiseksi :P

Monday 20 June 2011

Vähän ajatuksia pröngistä

Alkuun mainos:

Yool kansainvälistyy, avasin DICiin enkunkielisen blogin englannintaitojeni kehittämisen... ja, no, huvin vuoksi. Siellä on vain yksi teksti nyt, mutta lisää tulee kun jaksan tehdä (mikä muuten, yllättäen, pätee kaikkiin blogeihini :P). Tämä pysynee pääblogina, mutten takaa että kaikki faktat päätyvät molempiin blogeihin. Kannattaa siksi lukea molempia ja huomautella kun pahoinpitelen englannin kieltä.

Jatkoon vähän asiaakin.

 Mainitsin pari kuukautta sitten Pröngin laudalla ~puoli vuotta vanhan koodin haisevan kolme vuotta vanhalta. Nyt olen parin kuukauden ajan keräillyt laudalta ehdotuksia uuteen Pröngiin, ja nyt julkistan hieman ajatuksia aiheesta. Alkuun raaka changelist:

  • Tietokanta, jonka rakennetta kehtaa katsoa vielä syksylläkin
  • Fiksu ongelmien hallinta
  • Mobiili www-toteutus
  • BB-/HTML-muotoilut
  • Headers already sent - virsettä karttava koodin rakenne
  • Satunnaisesti valittu "slogan-luonnos"
Tietokannan uudelleentoteutus tarkoittaa sitä, että suunnittelen kantaan jonkinlaisia yhteyksiä taulujen välille, enkä vain lyö kantaan ilmassa roikkuvia tauluja eri asioille. Tällä hetkellä kanta ei mm. ymmärrä, että käyttäjät tuottavat ja lukevat luonnoksia, tai että kommentit kommentoivat luonnoksia. Kanta ymmärtää vain, että on luonnoksia, on kommentteja, on käytttäjiä ja on helvetisti purkkaa, joka toteuttaa nämä yhteydet.

Ongelmienhallinta tarkoittaa sitä, että minä voisin reagoida PHP:n virheisiin kuin työpöydällä poikkeuksiin. Tällä hetkellä kun PHP kohtaa virheen pröngin koodissa, koodin suoritus pysähtyy ja käyttäjä saa ruman (ja useimmiten siansaksaa olevan) virheen(, jos käyttäjä ei tunne PHP:n käyttäytymistä) (vertaa tilannetta nykyCB:n MAViin). Erästä DIC-tutoriaalia pohjana käyttävä systeemi antaisi mahdollisuuden joko toipua virheestä, tai ainakin tulostaa oma, selkeä virheviesti (ja tehdä virheen edellyttämät rituaalit, kuten esim. lähettää emaili virheestä minulle) (vertaa mm. C-kielten exceptioneihin).

Mobiilitoteutuksesta en ole enää varma. Nettitikun heräämisen myötä minulta katosi mahdollisuudet testata pröngiä "tyhmällä kännykällä", ja ainakin Androidin selain renderöi pröngin kuin FF/Chrome. Jos alan väsäämään tätä, saa Tässi vähintään hoitaa testauksen ja mahdollisesti keräillä muotoiluja, jotka ovat vaikeita hänen kännynsä selaimelle ja Opera Minille.

BB- tai HTML-muotoilut ovat ehdoton pakko. Näiden välillä ei tässä yhteydessä ole muuta eroa kuin se, että BB-tagit ympäröidään [näin], kun taas HTML . Menen todennäköisesti BB:llä, ettei ihmisille tule intoa alkaa eksperimentoimaan kummallisia tageja. Tämä mahdollistaa myös enemmän jännempiä tageja vähemmällä "ei tuon näköiset tagit kuulu siihen_ja_tähän standardiin! >:(" huutelulla. Joka tapauksessa, vähintään quote, b, i, u ja url - tageja pitäisi tukea. Lisää tageja tulee jos tulee tarvetta.

Nykyinen koodi huutaisi virhettä jokaisella sivulla ilman ob_ - funktioita, jotka puskuroivat tulostuksen siihen asti kunnes keksejä ei enää tarvitse käsitellä. Tämä ominaisuus vaikeutti muistaakseni kehitystä viimeksi, ja nyt kun olen oppinut ajattelemaan, hoidan keksi- ja muut header-asiat ennenkuin tulostan yhtään mitään.

Tuo slogan-luonnos tarkoittaa sitä, että sivun ylätunnisteessa on jossain "Pröng - tähän_kiva_luonnos" - tyyppinen teksti. Todennäköisesti titlestä tulee samanlainen, vaikka kukaan tuskin huomaa tätä koska prong.tk:n kautta titleksi tulee yksinkertaisesti "prong.tk".

Kuten sanoin, ainakin etusivu saa ylätunnisteen, johon voi laittaa muutakin informaatiota kuin "Olet pröngissä, senkin sherlokki". Esimerkkinä viime lauantaihin asti pröngissä näkynyt "Kippis ja kujaus" - banneri olisi ehdottomasti tarvinnut vähintään oman divinsä, jottei se olisi sotkenut etusivun layouttia.

Lisäksi, ennenkuin itse Pröng alkaa kehittyä, tehnen alle PHP-frameworkin/CMS:n, joka mahdollistaa myös merpg.webs.comin siirron jonnekin Viuhkan kaltaiselle vähällä vaivalla. Tuo CMS-systeemi vaatinee oman tekstinsä, ja minua väsyttää muutenkin, joten julkaisen tämän nyt tälläisenä :P

Saturday 11 June 2011

Karttatiedoston lisäspeksausta

Kuten hyvin tietänette, MERPGin ja MEMAPPERin lataamat karttatiedostot ovat hassusti nimettyjä zip-tiedostoja, ja tämä tuo minulle mahdollisuuksia, jotka tajusin vasta vähän aikaa sitten. Zippitiedostoon voi nimittäin piilottaa vaikka minkälaista tietoa, joka ei häiritse muuta tiedostossa olevaa dataa, ja jonka olemassaolosta ei lataava ohjelma edes tiedä, ellei se tiedä mitä on hakemassa.

Tämä mahdollistaa mm. sen, että saan annettua jokaiselle karttatiedoston layerille oman opacity - arvon. Tämä arvo tuottaa saman efektin, kuin Paint.netin vastaava, joten en ala selittämään sen toimintaa enempää kuin sanomalla, että toiminta on identtinen pdn:n vastaavan kanssa. Mainitsen vain, että sekä editori että pelimoottori tukevat tätä ominaisuutta.

Merkitsen layerien opacityt todennäköisesti sillä helpoimmalla mahdollisella tavalla, joka avaa ovet myös modaajille, jotka eivät jaksa harrastaa MEMAPPERia. Merkitsen tekstitiedostoon raakatekstinä joka riville jokaisen layerin opacityn. Tuo arvo on, luonnollisesti, välillä 0-255, koska pikselin alfa voi olla vain tuolla välillä.

Minua tosin jännittää miten aion toteuttaa tuon opacity-arvon käytännössä. Todennäköisesti parasta olisi ensin piirtää koko layer yhdelle pinnalle, laskea pinnan jokaisen pikselin alfaa (255-LayerinOpacity)n verran, ja sitten piirtää pinta näytölle.

Toinen sovelluskohde tälle zippirakenteelle on metadata. Pelimoottori ei tee mitään tiedolla siitä, minkäniminen mikäkin layer on, mutta editorin käyttäjät tahtonevat antaa layereille fiksumpia nimiä kuin "Layer N" (missä 0>=N>LayerCount). Tälläisen ominaisuuden implementointi on sitäpaitsi erittäin helppoa. Yksi tekstitiedosto, jonka jokainen rivi kertoo jokaisen layerin nimen (missä piirtojonon alin layer saa tekstitiedostosta ylimmällä rivillä olevan nimen).

Taidanpa siirtyä toteuttamaan näitä.

Wednesday 8 June 2011

Työkalupakki pitäisi koota

En ole kai julkaissut yhtään betaa tästä uudesta MEMAPPER-koodipohjasta, mutta koodaustahti on ollut sitäkin kovempi. Kun ensimmäinen beta on julkaisuvalmis, on ohjelma parempi kuin vanha viimeisinä päivinään. Mutta, mieleni teki taas tehdä hieman yhteenvetoa.

Toteutin viime postissa mainitut datarakenteet. Sen jälkeen käytännössä uudelleentoteutin tile- ja karttapinnat, ja ylikirjoitin JPanel - luokan paintComponent() - funktion omallani, joka lukee (pinnan tehtävästä riippuvia) arvoja suuresta, globaalista Tietovarastosta ja piirtää valitun tilesetin ja valitut layerit asianmukaisille pinnoille.

Jotta näiden pintojen mukanapysymistä voi testata, pitäisi minun seuraavaksi kirjoittaa työkalurajapinta, jota vasten kaikki työkalut pitäisi toteuttaa. Rajapinta vaatii toteuttajaltaan vain yhden funktion, use(). Tämä saa parametrikseen Layer- ja Tilesettisäilöt, sekä MouseEvent - olion, josta voi kalastaa missäpäin karttapintaa tapahtui klikkaus, jonka vuoksi työkaluoliota kutsuttiin. Lisäksi rajapinnan use() - funktio voisi saada parametrina valittuna olevan Tile - olion.

Kun tulee sen aika, todennäköisesti toteutan näiden pohjalta myös plugin-apin. Plug-in - luokkien on täytettävä yllämainittu rajapinta ja oltava jossain kivassa kansiossa. Kun se on toteutettu, tehnen julkiset speksit plug-ineille, mutta se on tulevaisuuden murhe. Nyt tärkeintä on saada ohjelma toimivaksi.

Nyt kun otsikon aihe on käsitelty, olen miettinyt jos kokeilisi vaihtoehtoisia blogialustoja blogspotin/bloggerin rinnalla. Yksi mitä olen miettinyt vahvasti, olisi blogailu DICissä, mikä vahvistaisi englannintaitoani. Toinen vaihtoehto olisi kokeilla wordpressiä. Yoolia tuskin alan uudelleenkirjoittamaan nykypäivän vaatimusten tasolle nyt, kun MERPG on työnalla todennäköisesti koko vuoden.

Saturday 28 May 2011

Elämä kehittyy edistymistään

Uutisia, koulun loputtua väsäsin kahdessa illassa uuden MEMAPPER - käyttöliittymän loppuun. Skriini on täällä. Käyttöliittymässä on napit layeroperaatioihin (lisää/poista/kopio/yhdistä layer), tilesettien tuontiin ja poistoon, ja lisäksi olen toteuttanut ToolBoxin niin, että ikkuna korostaa valitun työkalun vihreellä.

Mitä seuraavaksi? Kirjoitan tätä keskeltä mitä parhainta yötä, jossa Tässi suunnittelee PdN:llä hippiAnkkaTässiä, joten minunkin on luonnollisesti suunniteltava ja toteutettava jotain. Kun käyttöliittymä on valmiin näköinen, on luonnollista alkaa miettimään ohjelman datarakenteita. Mitä rakenteita ohjelma tarvitsee?

Rakenteen, joka säilyttää kaikki tilesetit muistissa.
Rakenteen pitäisi pystyä vastaanottamaan tileset ( .add(tileset);), ja palauttamaan ännäs tileset ( .get(tilesetin_nro);). Yllättäen tämän rakenteen pitää laajentua dynaamisesti, mutta se ei ole ongelma.

Tämä koostuu tileseteistä

Tilesetrakenteen
Tämä rakenne osaa palauttaa BufferedImagena/jossain muussa helposti työstettävässä muodossa jokaisen kartalta löytyvän tilen, ottaen parametreina tilen X:n ja Y:n tilesetiltä. Konstruktori voisi ottaa polun .png-tiedostoon, josta tileset sitten ladataan. Ja, kuten toitotettua, ohjelman pitäisi joka kohdassa tukea transparentteja .png-kuvia.

Tämä koostuu tileistä

Tile
Tilerakenne tuntee isäntätilesettinsä numeron, sijaintinsa ko. tilesetillä ja rotaationsa kartalla. Näiden tietojen perusteella pitäisi renderöijän osata piirtää kartan jokainen tile. Jokaista näistä arvoista pääsee käyttäjä muuttamaan.

Tämä on karttojen pienin yksittäinen komponentti

Layer
Layer on samantyyppinen rakenne, kuin tileset. Luodessa layerin koko määritetään, ja layer täytetään erityistileillä. Nämä erityistilet, joiden sijainti tilesetillä on (254,254), ovat täysin läpinäkyviä tilejä. Jokaisen layerin tilen sijaintia voi muuttaa antamalla layer-rakenteelle ensin x,y - arvot, jotka kertovat mistä päin karttaa haluttu tile löytyy, ja sitten muuttamalla palautuvan tilen sijaintia tilesetillä.

Yllättäen, Layeritkin koostuvat Tileistä.

Layerkokoelma
Säilöö Layerit melko samalla periaatteella, kuin tilesetrakenne. Enpä yllättyisi, vaikka Layerkokoelmalla ja Tilesetrakenteella olisi sama, geneerinen kantaluokka jonka päälle erottavat ominaisuudet on rakennettu (Enpä yllättyisi, vaikka käyttäisin oliokielten perusrakenteita :O OMFG)

Saatan olla erittäin paha, ja rikkoa pyhän kolminaisuuden sääntöä, jossa UI ja data pitää pitää erillään. Voi silti olla, että toteutan näille luokille data- ja käyttöliittymärajapinnat, ja käsittelen oliota ulkopuolelta vain rajapintojen kautta, toteuttaen näin piene erotuksen käyttölittymäsysteemien ja datan välille.

Ai miksi teen näin? Tämä mahdollistaisi sen, että kun kartan jonkun layerin jonkun tilen tila muuttuu, osaa systeemi automaattisesti kutsua karttapaneelin repaint()-metodia. Lisäksi minulla on suunnitteilla plugin-api, jonka toteutusta helpottaisi fiksu karttapaneeli. Ei siitä kuitenkaan vielä mitään. Nyt koodaamaan :P

Thursday 19 May 2011

Onnea minä

Tänään valmistui toinen Espanjalaistarina, nimeltään El Lol Ranskassa. El Lol, Diego kavereiden kesken, saapuu Ranskaan eräänä synkkänä yönä keräämään apua Espanjan vallannutta vihollistaan, Fernandezia, vastaan.

Jos se ei päähenkilösankarin kutsumanimestä näy, on tämä (ja edellinenkin) tarina ottanut vaikutteita El Cidin tarinasta. Mikäli tarina ei ole tuttu, voin suositella leffaa, joka minultakin löytyy hyllystä. Jättänen täyden "Viittaukset Cidiin" - listan viimeisen osan loppupuolelle.

Seuraavaksi minun pitäisi kirjoittaa Sceadutiesmikä, aka Ralf-stoori, loppuun. Sen jälkeen joko espanjalaistrilogia loppuun, tai/ja uusi osa Sceadutiesmitä. Minulla on myös suunnitelma tarinasta, joka hylkäisi tutun kioskiritarimiljööni, ja perustuisi vähän enemmän oikeaan elämään. Perustuisi oikeastaan oikeaan elämään yhtä paljon kuin Pröng/MERPG.

Wednesday 18 May 2011

MEMAPPER.net...... tai sitten ei

Hehkutin vähän aikaa sitten Fairandcruelissa alustanvaihtoa .NETtiiin. Enpä hehkuta enään. Noin viikon tekemisen jälkeen on käynyt harvinaisen selväksi, kuinka karmea UI-kirjasto WinForms on. Ellei C#-raamattuni yllätä, palaan takaisin Javaan, vaikka C# omaakin paljon erittäin kivoja rakenteita, joiden hylkääminen ärsyttää, on dynaamisen käyttöliittymän luonti WinFormsilla niin purkkaisaa, etten voi työskennellä sen kanssa.

Eli, palaan Java-alustalle kiintoisan .NET-kokeilun jälkeen. Tämä tarkoittaa sitä, että otan vanhasta mapper.java - projektista käyttöliittymäluokan, ehkä pari muuta rakennetta, ja lähden väsäämään viime postissa mainitsemiani ominaisuuksia (Layerit, pyörittely, transparency). Tämä tarkoittaa, että suurin osa vanhan projektin luokista jää käyttämättä, mutta se tarkoittaa että voin tehdä niistä siistimmät versiot.

Sunday 8 May 2011

Jos ei vappuna ole lunta

Kun vapun aikaan oli sähkökatko, kirjoitin läppärille nojatuolifilosofisen tekstin. Jaan tämän tekstin muille oikolukematta sitä :P

Kirjoitin muuten viime vuonna samankaltaisen tekstin, jonka pitäisi löytyä Yoolista jos mikrobitti ei ole jo poistanut sivutilaani wanhan sivustosoftan vuoksi. Teksti on tässä.


Kuten jo viime vuonna näihin aikoihin kirjoitin, on sähkökatko hyvää aikaa ryhtyä nojatuolifilosofiksi.

Viime vuonna, touko- tai kesäkuussa, oli myös sähkökatko. Silloin se kesti kahdeksan tuntia, joista ehdin kirjoittaa reilut kaksi, koska läppäreissä ei sähkö riittänyt kauemmaksi aikaa. Nyt katko on kestänyt tunnin, ja se on globaalimpi kuin viime vuonna. Muistaakseni viime vuonna ne kahdeksan tuntia, jotka elin pimeässä, Tässi eli valossa. Nyt hänelläkään ei ole valoa. Tästä voisi päätellä kaikenlaista: eteneekö pimeys, hiljaa satoaan korjaten, vai onko sohvalla kaksi mustaa aukkoa jotka kontrolloivat koko universumia – banaanilla?

Onneksi en harrasta ennusmerkkien lukemista vasikan sisälmyksistä. Ei, riistasta ennustaminen on likaista ja antiikkista. Nykyajan ennusmerkit luetaan kevään tapahtumista. Kuoleeko keväällä yksi vai neljä henkilöä, onko keväinen sähkökatko kaksi- vai kahdeksantuntinen, kuinka laaja sähkökatko on? Kaikki nämä kertovat meille jotain elämän nykyisestä tilasta. En vain ole vielä saanut selville mitään, mikä riippuisi näiden kysymysten vastauksista, mutta kuten jo Pröngissä sanotaan: ei vastauksia ensinkään, jos ei kysymyksiä laisinkaan.

Tyhmempi voisi luulla että meillä on vastaukset, kevään ennusmerkkien vastaukset, ja kysymykset puuttuvat. Tällainen oletushan epätoteuttaisi totta olevan ajatuksen siitä että vastaukset riippuvat kysymyksistä, sillä (kuten Linnunradan Käsikirja Liftareille todisti), jos ei ole korrektia kysymystä, ei vastauksessa ole mitään järkeä. Oletus on nimittäin väärin. Kevään ennusmerkkien vastaukset eivät ole osa vastausta jota haemme, vaan osa kysymyksiä joiden vastauksia haemme. Kysymys voisi olla: ”Mitä se tarkoittaa että sähkökatko on näin laaja?”, ja kuten lapsikin osaa päätellä, ei siihen voi vastata että ”sähkökatko ulottuu Tässille asti”.

Ennusmerkit eivät rajoitu yllämainittuihin. Tänä vappuna, eli nimenomaan juuri tänään, 1.5.2011, satoi lunta. Se on melko vahva merkki. Joku voisi ymmärtää sen niin, että pitäisi kuunnella Sonata Arctican Takatalvi – levy lävitse. Tästä taas huomata levyn kolmas ja neljäs kappale, jotka ovat skorpparicover Still Loving You ja omaa tuotantoa oleva Shy. Kuten nimistä jo voi päätellä, ovat kappaleet melko herkkiä ja siirappisia. Putkipäätelmällä voidaan olettaa, että jos vappuna tulee lunta, tulee kesästä romanttinen ja kaunis. Ai miten näen faktoissa vain sen mitä haluan nähdä? :)

Sähköt ovat olleet poissa jo 80 minuuttia. Teoriassa haluaisin päästä jo väsäämään MERPGiä, mutta toisaalta alan jo pitää tästä tajunnanvirtateorian kirjoittamisesta. MERPG on hassu projekti, siihen liittyy jaettu tekemisen maku. Viikoilla se kehittyy vähän hitaahkosti, mutta kun projektiin saa viikonloppuna tai lomalla kipinän, kipinä sytyttää ison tekemisen kokon, ja ennen kuin huomaankaan, on minulla MEMAP-karttaformaatti neljännessä versiossaan ja MEMAPPERista, MERPGin kartanteko-ohjelmasta kymmenen betaa ulkona.

Tämä projekti on opettanut minut hieman nöyremmäksikin. Pelkkä kartantekosofta on käyttänyt puoli vuotta päällä olleesta projektista puolet, eikä sen ohjelman tunnelin päässä näy valoa vielä hetkeen. Onneksi CB-foorumin käyttäjä nimeltä Latexi95 väsää animaatiosoftaa, jota saanemme käyttää projektissa. Jos joutuisin itse tekemään senkin softan, venyisi projekti poikkeuksetta vähintään neljällä kuukaudella. Nyt minulla on ollut aikaa keskittyä MEMAPPERin ja pelimoottorin kartta- ja animaatiosysteemien hiomiseen. Nuo kaikki kolme ovat parhaillaan erittäin paljon parempi kuin kuukausi sitten, mutta silti melkoisia raakileita.

PING! Sähkökatkoa on kestänyt lievästi arvioiden jo puolitoista tuntia. Nyt voisin säästää koneen sähkö mahdollisesti latauksen tarpeessa olevalle DS:lle, ja siirtyä pelaamaan sitä, ellei sähköt palaa.

Wednesday 4 May 2011

Uudesta karttaformaatista vielä

Viime tekstin kirjoituksen jälkeen kävimme Tässin kanssa jatkokeskustelua aiheesta, sillä lopputuloksella että kolmannen memap-formaatin pitäisi tukea
  • Rajoittamatonta layermäärää, tosin näiden kanssa kehittäjät saavat käyttää älliä, sillä kartan käsittelyn raskaus on melko suoraan verrannollinen layereiden määrään.
  • Transparentteja tilejä, mikä tarkoittaa sitä että tilesetit luodaan tästedes PNG-kuvina
  • Käänneltyjä tilejä, mikä tuo helpotusta tilesettien tekijöille, kun yhtä tileä ei enää tarvitse kopioida tilesettiin eri asennoissa.
  • Useampaa tilesettiä, mutta näidenkin kanssa saa käyttää älliä.
  • Tilesettien upotusta karttatiedostoon, eli tilesettejä ei enää tarvitse kuljettaa karttatiedostojen mukana, vaan ne kulkevat karttatiedostossa.
Karttatiedoston rakenne tulee muuttumaan sen verran, ettei nykyisellä MEMAPPERilla luodut kartat ole yhteensopivia tulevien peli- ja MEMAPPER-versioiden kanssa. Julkaissen uuden betan pian, ja odotan että joku veljeskunnasta antaa UIsta ja yleisestä käytettävyydestä kommentteja, jotta softaa voi kehittää eteenpäin. Sen jälkeinen MEMAPPER-versio tukee todennäköisesti uutta karttaformaattia.

Tiedoston speksit pitäisi kirjoittaa, ja nyt kun on aikaa, voisin yrittää sitä.

Tiedoston ensimmäinen tavu ilmaisee kirjastoversion, tätä speksiä noudattavissa tiedostoissa tämän tavun arvo on 3. Seuraava tavu ilmoittaa kartan leveyden tileissä, sen jälkeen tulee korkeus. Neljäs tavu ilmaisee layereiden lukumäärän. Seuraavaksi tulee leveys*korkeus*layerien määrä verran sarjaa, jossa ensimmäinen ja toinen tavu ilmaisevat X,Y - koordinaatit joilta kartan tile löytyy tilesetiltä. Sarjan kolmas tavu ilmaisee monennelta tilesetiltä tile on, ja neljäs tavu sarjassa kertoo tilen kulman. Tilen kulma on 90astetta*sarjan neljäs tavu. Kun sarjoja on tullut tarpeeksi monta (leveys*korkeus*layerien_määrä*4), on tultava ns. EOS-tavu (255), joka merkitsee että layeri on nyt luettu loppuun. Jos oikeassa kohtaa on joku muu kuin EOS-tavu, on karttatiedosto virheellinen, ja sitä ei voi hyväksyä.

Ensimmäisen EOS-tavun jälkeen tulee samaa neljän tavun sarjaa uudelleen leveys*korkeus*layerien_määrä, merkaten toisen layerin sisältöä. Uudet layerit taitetaan samojen periaatteiden mukaan kuin ensimmäinenkin, ja uudet layerit tukevat transparencyä, mitä eka layer ei tee. Kun viimeisen layerin EOS-tavu on kohdattu, eli on luettu tiedoston neljännen tavun verran EOS-merkkejä, alkaa hit-data. Hit-dataa on vain kartan_w*kartan_h verran, eli toisen ja kolmannen tavun tulon verran, ja jos hit-datan joukosta löytyy jotain muuta kuin 1 (=true ("tälle tilelle saa astua")) tai 0 (=false ("tälle tilelle ei saa astua")), on tiedosto viallinen. Karttatiedosto päättyy EOS-tavuun.

Mutta, olen puhunut siitä että tilesetit upotettaisiin karttatiedostoon. Miten tämä tapahtuisi?

Helppoa, rakkaat lukijani. Mietin pari päivää että miten upottaisin n-määrän PNG-kuvia turvallisesti oman datani joukkoon, ilman sitä riskiä että png-kuvan sekaan joutuisi muun kuvan dataa tai omaani. Sherlokkasin lopulta, että MS Wordin .docx - tiedostot, joita wordillä avataan, ovat tunnetusti vain zippitiedostoja jännällä tiedostopäätteellä. Etsin siis Javalle ja C++lle zippikirjastot, ja nyt kun olen ne löytänyt, voin toteuttaa MERPGille ja karttasoftalle tarjottavat karttatiedostot zippeinä, jotka sisältävät todennäköisesti juoksevasti numeroidun tilesetläjän ja binääritiedostona karttadatan, tiedoston jonka speksasin ylle.

Koodaamisiin :P

Friday 29 April 2011

Monikerroksinen karttaformaatti

Tänään hahmotin koulussa miltä neliö näyttää! Tämä tarkoittaa että MEMAPPER Beta 5n julkaisu lähenee, kunhan olen toteuttanut neliöt parin muuhunkin työkaluun.

Mutta, olen tehnyt koodauksen ohella mietiskelyä otsikon esittämästä aiheesta. Tätä mietiskelyä pitäisi sitten jäsentää blogiin, ja koska tämä tieto on tärkeää sekä allekirjoittaneelle että MERPGin tilesettien tekijöille, erotan teksteissä koodirelatiivisen ja tilesettien tekijöitä kiinnostavan osan, koska olen huomannut että tilesettien tekijät eivät jaksa/halua lukea tekstiä joka liittyy liikaa ohjelmointipuoleen. Alkuun siis tilesettereitä (mikä termi...) kiinnostava osa.

Mikä idea on toteuttaa toinen layer karttadatan ja hitdatan päälle?

Karttadata-kerros olisi varattu maastolle. Se ei tue maskiväriä (0,0,0/#000000), eli läpinäkyvyyttä, ja se olisi varattu lähinnä maastotileille. Toisesta kerroksesta eteenpäin layerit tukisivat maskiväripohjaista läpinäkyvyyttä, ja nämä olisi tarkoitettu tileille jotka esittävät objekteja joita voi löytyä maastosta. Lisäksi maskiväripohjainen läpinäkyvyys helpottaa tilesettien tekijöiden elämää todella paljon.





Yllä on eräs keskivanha tilesetti, jonka teimme eräänä Yönä MEMAPPER Beta 2:n tai Beta 3:n aikaan. Teknisesti tuon tilesetin oikeudet kuulunevat Tässille, koska hän tuon teki ja minä kommentoin vieressä, mutta oletan nyt itsekkäästi ettei häntä haittaa vaikka käytän tätä kuvaa esimerkkinä :P

Tuossa tilesetissä näkyy selvä ongelma. Siinä on vettä, kalliota ja ruohoa. Mitä jos karttaan haluttaisiin tehdä ranta? Ranta vaatii tietysti maata ja vettä monissa erilaisissa kulmissa; nuo 8 reuna-/kulmatileä eivät muistaakseni riittäneet sujuvaan karttatyöskentelyyn. Lisäksi nämä reilu 8 tileä pitää toteuttaa jokaiselle maastotyypille erikseen! Leikitään että meillä on viisi maastotyyppiä, joiden kaikkien välille pitää toteuttaa tuollaisia "rantoja". Se tekisi vähintään 8*5*8 + 5 (eli 325) tileä. Turha varmaan edes mainita, että ilman erikoislaatuisia käyttöliittymäratkaisuja MEMAPPER ei taivu tuollaiseen. Tilejen määrä moninkertaistuu aina kun tilesettiin lisätään uusi maastotyyppi.

Jos pohjakerroksen päällä  maskiläpinäkyvyyttä tukevia kerroksia, voitaisiin ylläolevaa tilesettiä muuttaa niin, että jokaisesta maastotyypistä tehtäisiin tuollaiset kulmapalat, ja sen sijaan että tilesettiä tehdessä liimattaisiin maastokulmia maastopalojen päälle, liimattaisiin ne vasta MEMAPPERissa.

Monikerroksinen rakenne mahdollistaisi muitakin kikkailuja. Parille ensimmäiselle kerrokselle voitaisiin rakentaa tilen maasto, ja ylemmälle voitaisiin asettaa kartan kannalta relevantti objekti, joka ei kuitenkaan ole niin tärkeä että sitä kannattaisi pelin puolella ladata. Hyvänä esimerkkinävaikka aita, jonka yli ei tietenkään pelissä saa kulkea, mutta jonka erillinen lataaminen pelissä olisi lähinnä typerää.

Mitä tämä toteutus vaatii koodarin näkökulmasta?

Karttatiedoston rakenne ainakin muuttuu. Tällä hetkellä karttatiedoston ensimmäiset kolme tavua ilmaisevat kartan version, kartan leveyden tileinä ja kartan korkeuden tileinä, sitten alkaa karttadata. Uudessa tiedostorakenteessa tiedoston neljäs tavu ilmaisisi karttalayereiden lukumäärää, ja ensimmäisen EOS-tavun (FF/255) jälkeen ei alakaan hit-data, vaan seuraava layer. Ohjelmien pitäisi siis pitää kirjaa montako EOS-tavua on tullut tiedostovirrassa vastaan, ja näin laskea monetta layeriä renderöidään. Eli kahden EOS-tavun sijasta karttatiedostosta pitäisi löytyä layereiden_määrä+1 EOS-tavua (+1 siitä että hitdatakin päättyy EOS:ään).

Tietorakenteiden puolella tämä monilayerisyys on helppo toteuttaa. Ne mitkä olivat ennenvanhaan kaksiulotteisia listoja/vektoreita karttaluokissa, muuttuvat kolmiulotteisiksi. Näin tietyn tilen arvoon viitattaisiin (x,y,z)lla missä x ja y ovat vanhaa kauraa, ja z viittaa layerin järjestysnumeroon. Z:n kanssa pitää huomata että origo on todennäköisesti ruudulla, eli alin layer on tiletaulukko[x][y][maxZ-1] eikä tiletaulukko[x][y][0]. Jos joku hämääntyy C/Java - taulukkonotaatiosta, sama kolmiulotteisella CB-taulukolla olisi tiletaulukko(x,y,z_arvo).

Thursday 28 April 2011

Jos tiput, otan kopin

Edellinen keikka-arvio lienee tässä. Joulun keikasta ei pitäisi olla arviota olemassa.

Joka tapauksessa, eilen oli Sonata Arctican keikka Helsingin Nosturissa. Mitä olin kiertueen edellisiltä keikoilta lukenut, tiesin odottaa klassikoita lavalta. Noh, keikka alkoi Flag in the Groundilla klo 21. Tätä seurasi pari muuta Days of Graysin klassikkoa, Last Amazing Grays ja Juliet muistaakseni. Tonin spiikit olivat ikivihreitä ja biisit kuulostivat hemmetin hyvältä. Pian näiden jälkeen saatiin yllätys: Blank File, Ecliptican eka biisi. Näin yleisön jäsenenä on sanottava että kyseinen kappale kuulostaa helvetin hyvältä livenä.

Emme kuulleet Black Sheepiä, nyyh, ja pari muutakin klassikkoa taisi jäädä väliin, mutta shown puolivälissä lavasta tehtiin akustinen. Kuulimme Mary-Loun, kuulimme Shyn ja kuulimme Danan. Yleisö piti tästä tehotriosta. Lempibiisini shown alkupuolelta on kuitenkin jäänyt mainitsematta: THE MISERY! Tämä jokaisen pöytälaatikkokirjoittajan lempibiisi oli herkkä kuin nörtti jouluna, ja koko yleisö antautui biisin valtoihin.

Shown toisella puolella, akustisen osuuden jälkeen, alkoi tilutus. Kun naisääni alkoi lausua vuorosanojaan, sali räjähti. Victoria's Secretissä yleisö oli hieman mukana, akustiset vedot ja misery vetivät yleisön aivan kyyneliin, mutta mikään näistä ei vetänyt vertoja Calebille. Nekin jotka olivat olleet koko konsertin aivan paikallaan, alkoivat pomppia ja \m/:ttää. Minä kuitenkin pysyin aivan rauhallisena - tai sitten en. Caleb on nimittäin yksi parhaista, ja biisi jonka olisin halunnut kuulla jo Tampereella viime vuoden helmikuussa. Biisin jälkeen tuli vielä Don't Say A Word ja Vodkatarjoilu.

Täytyy sanoa että tälläisille keikoille pääsee kerran 12 vuodessa.

Tuesday 19 April 2011

Beta 5 ja sellaiset

Julkaisin viime perjantaina Memapper Beta 4n, jossa resize-ikkuna kasvatti ja pienensi karttaa mitenpäin vain. Beta 5 tuo suunnitelmien mukaan toisi työkaluikkunan, "hot-plugattavat" työkalut, ja jonkin leikepöytätoiminnallisuuden. Työkaluikkunan toteutin jo Beta 4,5een, julkaistu Fairandcruelissa (ajatuksia kaivataan!), ja seuraavaksi pitäisi toteuttaa työkalurajapinta ja sen päälle pari toimivaa työkaluluokkaa. Jos jaksaisin alkaa kikkailemaan ja opiskelemaan Javan Reflektioapia, voisin toteuttaa oikeasti hotplugattavat työkalut, jotka toimivat niin että käyttäjä koodaa työkaluluokan, joka implementoi TOOL-rajapinnan View-luokan sisään, ja pudotetaan käännettynä extensions - kansioon, josta MAPPER ottaa työkalun käyttöön.

Tämän rajapinnan kautta olisi helppo toteuttaa loput tarvittavat työkalut. Rajapinta tosin vaatii vielä suunnittelua...

Thursday 14 April 2011

TOLPPA

Tolppa, eli pylväs, ja tässä tapauksessa sellainen roomalainen pylväs joka ilmaisee paljonko matkaa on kuljettu. Suomeksi siis ihan virstanpylväs, joka on nyt saavutettu MERPGissä. Meillä on nyt näyttöluokka, jonka periyttämällä saa melko CB:mäisen käyttötuntuman. Tuo luokka osaa piirtää tekstiä annettuun sijaintiin, ja koska teksti annetaan text()-funktiolle std::string - viittauksena, voi tekstin koota suoraan kutsuun seuraavasti:
Text(0,10,"HiiriX: "+hiiriX()+"   hiiriY:"+hiiriY()); //Tyyli on..... lainattu cb-foorumilta, jos näin ei saisi tehdä, on blogissa vieraskommentointi syystä sallittu
Eli parametriin voi asettaa kaikkia niitä tietotyyppejä, joille on ylikuormitettu + - operaattori std::stringissä. Toiminnallisuus on siis paljon kivempi kuin const char* - teksteissä, jotka eivät tue minkäänlaisia kikkailuja, ja sitäkin huonosti.

Lisäksi näyttöluokka ainakin taipuu samanlaiseen piirtelyyn kuin CB:n piirtelyapi,  jos en ole näitä funktioita jo toteuttanut. Luokan getObject/-Anim/-Map - funktiot taas luovat pyydetyn olion, lisäävät siitä osoittimen näyttöluokan piirtojonoon (joka on oikeasti vektori, mutta kun kerran sille on jono - lempinimen antanut niin se sillä pysyy), ja palauttavat tämän osoittimen käyttäjälle. Piirtojono mahdollistaa sen, että kun DrawScreeniä (kyllä, tämä CB-funktioiden apinointi on ihan tarkoituksenmukaista :D lukekaa loppuun) kutsutaan, se piirtää ensin piirtojonon jäsenet takapuskuriin, ja sitten flippaa puskureita. Eli suomeksisanottuna, käyttäjän ei tarvitse erikseen piirtää jokaista lataamaansa kuvankaltaista näytölle, koska koneen voi laittaa tekemään se automaattisesti.

Koska Text - komento ja objektit aiheuttavat ongelmia jo CB:ssä, toteutin näyttöluokkaan myös DrawGame()n, joka piirtää piirtojonon takapuskuriin, jonka jälkeen käyttäjä voi piirtää tekstinsä pelkäämättä että objektit piirtyisivät niiden päälle. Ilman DrawGamea tilanne olisi se, että ensin pääluupissa käyttäjä piirtää tekstejä innoissaan, ja sitten kutsuu DrawScreeniä, joka piirtää objektit ruudulle - suoraan tekstien päälle.

Piirtojonon-rakenteen huono puoli on siinä että käyttäjä ei voi vaikuttaa piirtojärjestykseen muuten kuin lataamalla mediansa oikeassa järjestyksessä (kuvien pointterit lisätään piirtojonoon latausjärjestyksessä). Jos olisin oikein viisas, vaihtaisin piirtojono - vektorin joksikin muuksi tietorakenteeksi, ehkä listaksi, joka mahdollistaa A) läpi-iteroinnin ja B) karttojen asetuksen piirtojonon ensimmäisiksi piirrettäviksi ja muiden asettamisen jonon (LISTAN!!!) loppuun.


Ja niin, onhan meillä muitakin luokkia. Näyttöluokan sisällä koodaavalle kiinnostavia luokkia ovat MEOBJEKTI, MEMAP ja ärsyttävän epäjohdonmukaisesti nimetty ANIMAATIO. Nuo perivät samoja kantaluokkia, joten niiden käyttö on melko samanlaista. Oikeastaan ANIMAATIO ja MEMAP perivät objektiluokan, joten piirtojono oli johdonmukaista toteuttaa MEOBJEKTI* - tyyppisenä rakenteena. Eli jos osaat käyttää MEOBJEKTIA, eivät animaatio ja kartta ole vaikeita. Mitään näistä ei voi suoraan luoda, vaan näyttöluokka hoitaa luonnin, ja siltä saa pyydettyä getObject/-Anim/-Map - funktioilla pointterit uusiin olioihin. Käyttäjälle saattaisi olla ehkä fiksumpaa tarjota viittaus olioihin, mutta en usko että kukaan luokan käyttäjä on niin tyhmä että menee seuraavaan ansaan:

MEOBJEKTI* objekti = getObject("opjekti.bmp");//tee jotain opjektilleobjekti = jotain_muuta;

Kuka tahansa pelkkää CB:täkin koodaillut tajuaa että tässä menee väärin. Siksi en ala avaamaan miksi tämä on väärin, vaan annan seuraavan CB-koodin:


ukkeli = LoadObject("opjekti.bmp")'tee jotain ihmeellisyyksiä objektille
ukkeli = LoadObject("Anööther opjekti")

Tämä on siis klassinen muistivuoto, objektin osoitin hukataan ja objekti jää ikuisesti seilaamaan halki kartoittamattoman RAM-meren. Tämä on ainoa muistinkäytöllinen asia, josta käyttäjän on huolehdittava näyttöluokan sisällä, sillä näyttöluokka varaa puoliautomaattisesti tarvittavan muistin ja vapauttaa myös.

Esittelen noita luokkia myöhemmin lisää :P nyt lähden kouluun

Sitäpaitsi, jos joku ei vastusta, saatan kirjoittaa Fairandcrueliin tuton siitä, kuinka helppoa näyttöluokan sisällä koodailu on.