F I Oculus Rift Lumetodellisuuden airut OHM & Assembly Hakkerikekkereiltä pelihelvettiin Ohjelmointisarjat jatkuvat QML ja OpenGL Tietokone tietäjänä Ymmärtääkö tekoäly?. Tietokonekulttuurin erikoislehti 2013.3 S K R O L L I
35 OpenGL-ohjelmointi osa 2 Puskureita ja shadereita ohjelmointikurssilla. 26 PDP-1 Emulaattorimatka hakkerikulttuurin juurille. 16 Arduino hallintaan Liitimme ihmisen Arduinoon. 8 Assembly 2013 Livemusiikkia, visionäärejä ja demoja. 11 Kolumni – Ninnu Koskenalho Vieno pyyntö Opetushallitukselle. 32 Vektorista kvaternioon Vektorit ja muut tarpeelliset peruskäsitteet tutuksi. 48 Rogueliket Vähäeleiset ja ruudikkaat rogueliket. 30 Ei näin! Apple Pippinistä ei tullut olohuoneen omenalajiketta. 44 Tikku-ukoista pikselitisseihin Näin bittiporno kiersi kasarilla. 47 Kolumni – Tapio Berschewsky Masentunutta narinaa internetseistä. 40 Kauan, kauan sitten, vuonna 1982… Star Wars -peliuniversumin aamunkoi. 2 2013.3 3 Pääkirjoitus 4 Testissä Oculus Rift Varhaisen omaksujan virtuaalitodellisuus. 24 Parhaasta koodista kultaa Kisakoodaus, penkkiurheilun parhaimmisto. Sisällysluettelo. 20 Ymmärryksen juurilla Kuinka tekoäly kokee maailman. 51 IRC on paras Nettichattien kuningas ei suostu kuolemaan. 14 QML osa 2 Käyttöliittymä C++ -tontulle. 19 Pähkinänurkka Pulmakulmassa ykkösiä ja nollia. 12 OHM 2013 Hollantilaisen hakkerileirin antimia
Heidän asiantuntemuksensa avulla olemme voineet laajentaa käsittelemiemme aiheiden kirjoa huomattavasti. Koska kasvoin lukien 80-luvun harrastuslehtiä ja selaan niitä ajoittain edelleen, oli ajatus jonkin samanlaisen synnyttämisestä aivan liian houkutteleva. Lehteä tekemällä ei rikastu, eikä se ole tarkoituskaan. Sitten tutustuin muihin toimituksen jäseniin, joista suurta osaa en ollut ennen edes tavannut. Jos koet, että sinulla olisi kerrottavaa Skrollin lukijoille, lähetä sähköpostia tai tule roikkumaan IRC-kanavalle. Ja vaikka olin nähnyt omaa tekstiäni painettuna jo monta kertaa, ensimmäinen Skrolli tuntui silti aivan erityiseltä. Teille ja meille. Lehdelle taloudellinen riippumattomuus on toki tärkeää, jotta voimme jatkaa ilmestymistä. Vielä tärkeämpää on kuitenkin tehdä sellaista Skrollia, josta pitävät sekä me itse että lukijamme. Kauppinen, Ronja Koistinen, Sade Kondelin, Juho Lehtinen, Elias Linjama, Oona Räisänen Tämän numeron avustajat Anna Heinonen, Panu Kalliokoski, Aleksi Kinnunen, Antti Laaksonen, Waltteri Lahti, Santtu Pajukanta, Juho Pietarinen, Annika Piiroinen, Visa-Valtteri Pimiä, Tuomas Puikkonen, Rauli Puuperä, Manu Pärssinen, Ville Ranki, Mikko Rasa, Markku Reunanen, Miikka Saukko, Kalle Viiri, Jari Viitala Julkaisija Alternative Party ry Painopaikka Tammerprint, Tampere, ISSN 2323-8992 (painettu) ISSN 2323-900X (verkkojulkaisu) 441 878 Painotuote Kannen kuva: Ville-Matias Heikkilä. Vakuutuin siitä, että tämä porukka saa kyllä lehden aikaiseksi. 3 Yhdessä, ilosta Skrollia tehdään, koska se on sen arvoista. Se, miten pitkälle tämä tarina jatkuu, riippuu ennen kaikkea teistä. Aiempi kirjoituskokemus ei ole tarpeen – tärkeintä on, että sinulla on jotain sanottavaa. En tiennyt tuolloin, kuinka monta numeroa – jos sitä yhtäkään – tätä lehteä ilmestyisi. Osittain siksi käsillä oleva numero onkin tähänastisista ajankohtaisin. Vuoden kuluessa toimitusporukkaan on tullut lisää jäseniä, ja olemme myös löytäneet lukuisia uusia avustajia. Ensimmäistä kertaa voimme jopa maksaa kirjoituksista nimellisen palkkion. Itselleni kysymys on ennen kaikkea siitä, että haluan saada päässäni pyöriviä tarinoita paperille. Leipäpuuni on toisaalla, kuten muillakin Skrollin tekijöillä ainakin toistaiseksi. Useimmat avustajista ovat itse ilmoittautuneet toimitukselle, ja tähän rohkaisemme myös jatkossa. Vajaa vuosi sitten lähdin mukaan tekemään uutta tietokonekulttuurin erikoislehteä – siitäkin huolimatta, että elämän muiden kiireiden vuoksi ei olisi ehkä pitänyt haalia enää yhtään lisävastuita. Mikko Heinonen asiantuntijatoimittaja Pääkirjoitus Skrolli Tietokonekulttuurin erikoislehti Yhteydenotot toimitus@skrolli.fi ircnet — #skrolli Päätoimittaja Ville-Matias Heikkilä Toimituspäällikkö Toni Kuokkanen Toimitussihteeri Ninnu Koskenalho Taitto Risto Mäki-Petäys Mediamyynti Jari Jaanto Talous Anssi Kolehmainen Muu toimitus Lauri Alanko, Mitol Berschewsky, Tapio Berschewsky, Mikko Heinonen, Jukka O. Mukana on reportaasit peräti kahdesta harrastetapahtumasta, minkä lisäksi puemme päähämme tuoreet Oculus Rift -virtuaalitodellisuuslasit
Teksti: Mikko Rasa Kuvat: Mikko Rasa, Wikimedia Commons-käyttäjä Sergey Galyonkin I mmersiivinen virtuaalitodellisuus on pelaajan nirvana ja science fictionin peruskauraa. Tämä on ymmärrettävää, koska paneeli on vain muutaman sentin päässä silmistä. Ympäriinsä katseleminen tuntuu luonnolliselta, eikä minimaalista viivettä huomaa, ellei sitä erikseen tarkkaile. Riftin asentosensori ja sitä lukeva kirjasto suoriutuvat tehtävästä mallikkaasti. Half-Life 2 Riftillä pelattuna on hieno kokemus. Myöhemmin ilmestyvään kuluttajaversioon on kaavailtu 1920×1080 pikselin paneelia, jossa myös pikselirajojen pitäisi olla kapeammat. Immersion täydentämiseksi kuvan on reagoitava pään liikkeisiin. Kuulokkeita Riftissä ei ole, mutta sen muotoilu mahdollistaa omien isojenkin kuulokkeiden mukavan käytön. Laajempaa tukea on epäilemättä luvassa lähitulevaisuudessa, sillä ainakin Valve ja Id Software ovat osoittaneet kiinnostusta laitteen tukemiseksi peleissään. Kuvassa on voimakas hyttysverkkoilmiö, jossa pikselien väliset rajat erottuvat mustina viivoina. Myös kuvan tarkkuus on vaatimaton. Jos tekniset ominaisuudet onkin saatu kohdalleen, on hinta ollut liian kova kotikäyttäjälle. Maailma silmikkosilmin Lupaukset ovat historian valossa suuria, mutta kun laitteen saa päähänsä, epäilykset haihtuvat. Ihmisaivot olettavat ympäröivän maailman olevan pään liikkeistä riippumaton, joten kun käyttäjä kääntää päätään oikealle, on kuvaa liikutettava vastaavasti vasemmalle. Sen viimekesäisen Kickstarterkampanjan suosio ylitti odotukset moninkertaisesti, ja toimitukset alkoivat tämän kevään aikana. Syvyysvaikutelma on niin todentuntuinen, ettei siihen tajua kiinnittää huomiota, mutta jälkeenpäin tavallisella monitorilla esitetty 3D-grafiikka näyttää lattealta. 4 2013.3 Testissä Oculus Rift Lumemaailmojen sukelluslasit Katsoimme keinotodellisuudeen houkuttavilla laseilla. RiftEnabled-sivusto listaa noin 150 peliä ja ohjelmaa, joissa on natiivi Rift-tuki. Näytön 1280×800 pikselin tarkkuus on jaettu vaakasuunnassa kahtia, joten kumpikin silmä saa 640×800 pikselin näkymän. Sen mahdollistavat laitteet ovat tehneet tietään kuluttajan luokse jo 1990-luvulta asti. Koska kyseessä on uusi laite, joka ei vielä edes ole kuluttajamarkkinoilla, on pelituki varsin rajallinen. Tämä on kuitenkin vasta kehittäjille suunnattu versio. Silmikon tarjoama näkymä kattaa lähes koko näkökentän, joskin reunoille jää laitteen rakenteesta johtuva musta alue. Rauta. Näyttöpaneelin edessä olevien linssien ansiosta silmät eivät rasitu, ja mukana on vaihtolinssit likinäköisille. Pääseekö jo pelaamaan. Pelaaja tuntee todella astuvansa Gordon Freemanin ” Oculus Rift lupaa mullistaa pääsyn lumemaailmaan. Aivan täydellinen laite ei ole. Näistä suurin osa on teknologiademoja ja harrastajien kokeilumielessä tekemiä pikkupelejä, eikä isoja julkaisuja ole kuin muutama. Mikäli näin ei tapahdu, syntyy valheellinen mielikuva virtuaalimaailman kääntymisestä pään mukana. Oculus VR-yhtiön virtuaalisilmikko Rift lupaa mullistaa pääsyn virtuaalimaailmoihin. Matkalla on ollut ongelmia, kuten huonot resoluutiot, epämukavuus ja hidas tai puuttuva pään asennon seuranta. Valve on ensimmäisenä suurena yrityksenä lisännyt Rift-tuen Source-pelimoottoriinsa. Erillinen peliohjain onkin vr-kypärän kaveriksi oivallinen valinta. Pelien kontrollien tosin olisi syytä löytyä lihasmuistista, koska näppäimistöä ei silmikko päässä pysty tiirailemaan. Reaktion on oltava riittävän nopea, tai aivot eivät osaa yhdistää pään kääntämistä ja katselusuunnan muutosta toisiinsa
Seuraava suuri haaste ei ole näytön resoluution kasvattaminen, 360:n asteen juoksumattojen kehittäminen tai 3D-ohjainten suunnittelu. Näin osat hyppäävät irti paperista. Virallinen ohjelmistonkehityspaketti sisältää myös pään asennon seuraamiseen tarvittavat rajapinnat ja algoritmit. Olen haaveillut immersiivisestä näyttölaitteesta niin kauan kuin muistan. Joihinkin peleihin saa lisättyä Rift-tuen avoimen lähdekoodin VireIO-ajurilla. Saavatko uudet keinomaailmat minut välittämään kuvitteellisista hahmoista entistä enemmän. Sovita kuviot päällekkäin katsomalla kuvia silmät ristissä. Vieläkään ei oikeastaan tiedetä, millaiset kokemukset parhaiten soveltuvat virtuaalitodellisuuteen. Oculus Rift ei kuitenkaan ole vielä kaikkien unelmien täyttymys. Laitteiden hinnat ovat tavallisten ihmisten kustannettavissa. Pelin aikana tähtäin näkyy kahdessa eri paikassa, ja todellisuudessa laukaus osuu näiden väliin. Riftin näytölle piirtyvää kuvaa täytyy vääristää voimakkaasti, jotta se linssien läpi katsottuna näyttäisi oikealta. Oculus Rift (kehitysversio) Näytön tarkkuus: 1280x800 kuvapistettä Näkökenttä: noin 110° Pään asennon seuranta: integroitu Kuulokkeet: ei ole Hinta: 300 dollaria Linkkejä: http://www.oculusvr.com http://www.riftenabled.com http://www.vireio.com Virtuaalitodellisuuden tulevaisuudennäkymät Teksti: Visa-Valtteri Pimiä V ihdoinkin! Oikeasti toimivien virtuaalitodellisuuslaitteiden aikakausi on koittanut. Unityssä ja Unreal Engine 3:ssa on valmis tuki Riftille, ja muidenkin grafiikkamoottorien käyttö onnistuu, jos näkee hieman vaivaa. Koska peli ei tiedä Riftistä ja sen aiheuttamasta vääristymästä mitään, kaksiulotteiset käyttöliitymäelementit eivät toimi kuten pitäisi. 5 saappaisiin. Virtuaalitodellisuus mahdollistaa kuvitteellisiin maailmoihin uppoutumisen ja niiden sisällä toimimisen ennennäkemättömillä tavoilla. Kontrollit ovat hieman oudot, sillä hiirellä on vaakasuunnassa ruudun keskellä pieni kuollut alue, jolla kursoria voi liikuttaa vapaasti ennen kuin se alkaa kääntää pelihahmoa. Tämä kuitenkin jättää paljon toivomisen varaa. Todelliset puutteet ja mahdollisuudet piilevät ohjelmistossa. Näkymän parametrit on säädettävä kohdilleen käsin. Itsenäisten kehittäjien luomien virtuaalikokemusten aika on koittanut! Toivon, että näitä moderneja silmälappuportaaleja kokeilleet tunnistavat niiden valtavan potentiaalin ja keksivät, kuinka parhaiten valjastaa ne ainutlaatuisia mielikuvitusmatkoja ja mahtavia elämyksiä varten.. Jos jokin juonen syvyyttä sisältävissä peleissä on tärkeää, niin rooleihin ja tilanteisiin eläytyminen. Jos kokemus on aiempaa uskottavampi, vetoavatko tekoni voimakkaammin tunteisiin. Esimerkiksi Portal 2:ssa valikko on hankalasti näkökentän vasemmassa laidassa. Kaikkein eniten odotan syvällisiä, juonellisia kokemuksia jotka käyttävät virtuaalitodellisuuslaitteistojen ainutlaatuisia ominaisuuksia hyödykseen. Kehittäjäsivustolta voi ladata ilmaisen dokumentaation ja lähdekoodit, jotka sisältävät tarvittavat matemaattiset kaavat vääristymän kompensointiin. 3D-grafiikkaa harrastavat bittinikkarit voivat luoda itse omia virtuaalimaailmoja. Seuraan tätä kehitystä ja osallistun siihen etujoukoissa. Tuki löytyy Windowsin lisäksi Linuxille ja Macille. Vääristymän tarkoituksena on keskittää enemmän pikseleitä kuvan keskialueelle. Toistaiseksi ei ole kehitetty täysimittaista, suuren budjetin tai korkealentoisen konseptin immersiivistä kokemusta.Tarjolla on lähinnä puolihuolimattomasti tehtyjä konversioita vanhoista 3D-peleistä tai yksinkertaisia esimerkkiohjelmia laitteiden potentiaalista. Millaisia olisivat virtuaalimaailmassa koetut elämykset esimerkiksi demotaiteen parissa. Valve on ilmoittanut tämän olevan vielä keskeneräinen beta, ja Team Fortress 2:ssa tuen pitäisi olla valmiimpi. Miltä tuntuisi eläytyä elämään neliraajahalvaantuneena sänkypotilaana, joka pystyy kommunikoimaan vain päänsä liikkeillä. Uskon sen olevan merkittävin askel pitkään aikaan videopelien ja muiden immersiivisten kokemusten kehityksessä kohti yhä kunnianhimoisempia ja uskaliaampia suuntia. Katseen suuntaa ja hahmon liikesuuntaa ei ole erotettu toisistaan, joten kävellessä ei voi katsella ympärilleen
Teknisen virtuaalitodellisuuden historia voidaan aloittaa 1800-luvun stereoskoopeista eli stereokuvien katsomiseen tarkoitetuista kakkuloista. Kapeat, 30-50 asteen näkökentät puolestaan loivat illuusion ennemminkin pimeässä huoneessa leijuvasta näytöstä kuin joka suunnalta ympäröivästä keinotodellisuudesta. Laitteessa istuvalle henkilölle esitettiin filmiltä laajakulmaista, värillistä stereoelokuvaa stereoäänillä, ja lisäksi hänelle tuotettiin liike-, tuntoja hajuaistimuksia. Tässä juppilelussa oli jo liikesensorit ja kuva oli värillinen, mutta näkökenttää oli vaivaiset 45 astetta. Cyberfacen kuva oli mustavalkoinen, mutta se tarjosi peräti 145 asteen näkökentän. 1980-luvulla tekniikka ei enää vaatinut miljoonien dollarien laskentarautaa, ja ensimmäiset graafisin työasemiin tarkoitetut järjestelmät pääsivät tällöin prototyyppiasteelle. Liiketunnistukseen ja latenssin minimointiin ei panostettu riittävästi, mikä aiheutti käyttäjille päänsärkyä. Vasta tulevat vuodet kuitenkin näyttävät, riittääkö tämä lumetodellisuuden läpilyöntiin, vai saammeko kenties odottaa vielä vuosikymmenen jos toisenkin.. Stereovalokuvauksesta tuli 1850-luvulla oikea buumi, ja stereoskooppeja myytiin satojatuhansia. Näytöt edustivat lisättyä todellisuutta, jossa tietokonedataa heijastettiin osaksi lentäjän näkökenttää. 6 2013.3 Jokohan tällä vuosikymmenellä. Erikoisaloille tarkoitetut järjestelmät olivat kuitenkin aivan liian kalliita sohvankuluttajalle. Kypärän kuvan tuotti toisessa huoneessa ollut kamera, jota moottorit pyörittivät käyttäjän pään liikkeiden mukaan. Jopa käsitys fyysisen todellisuuden "virtuaalisuudesta" oli olemassa jo varhaisessa buddhalaisessa filosofiassa. Laite jäi kuitenkin kuriositeetiksi, sillä keksijä Morton Heilig ei saanut rahoitettua laajempaa tuotantoa. Näitä olivat Eric Howlettin Cyberface ja VPL Researchin EyePhone. Vuosituhat vaihtui, mutta eri valmistajat jatkoivat samojen perusvirheiden tekemistä. Samantapaisen kypärän yhdisti tietokonegrafiikkaan vuonna 1968 amerikkalaistutkija Ivan Sutherland, jonka järjestelmä esitti käyttäjälle muutamasta viivasta koostunutta huonenäkymää. Kuva tuotettiin punaisilla lediriveillä ja pyörivillä peileillä. Stereoskoopit ovat monelle lapsuudesta tuttuja. Kypäränäyttöjä alettiin 70-luvulla kokeilla sotilastekniikassa. TV-valmistaja Philco rakensi vuonna 1961 ensimmäisen kypäränäytön, joka mahdollisti todentuntuisen etäläsnäolon. Vaikkei kuusiirtokuntia ja ajatusohjauspantoja saataisikaan vielä lähivuosina, niin saataisiinko edes ne toimivat virtuaalikypärät. Kuluttajatason virtuaalitodellisuuden pettymyksentäyteinen historia alkoi vuonna 1995, kun Nintendon Virtual Boy -konsoli tuli markkinoille. Myös sata vuotta myöhemmin muotiin tulleiden "3D"-elokuvien käyttämä sinipuna-anaglyfia keksittiin 1850-luvulla. Ensimmäiset kaupalliset virtuaalisilmikot tulivat markkinoille 1989. Virtuaalitodellisuus-käsitteen vakiinnutti Jaron Lanier, joka perusti VPL Research -yhtiön vuonna 1985. Ensimmäiset viihdekäyttöön myydyt virtuaalisilmikot eivät olleet juuri stereoskooppeja kummempia.. Hieman enemmän yritystä oli seuraavana vuonna myyntiin tulleessa Forte VFX1:ssä, joka kytkettiin PC:hen ja maksoi hulppeat 1500 dollaria. Niitäkin kun on kehitetty ja odotettu jo aika pitkään. Teksti: Ville-Matias Heikkilä Kuvat: Wikimedia Commons -käyttäjät Evan-Amos, ThePassenger E rilaisia lumetodellisuuksia on esiintynyt ihmisten kuvitelmissa jo ammoisista ajoista alkaen, eikä ihme — onhan esimerkiksi unia nähty jo miljoonia vuosia. Oculus Riftiä lienee suitsutettu etenkin siksi, että riittävän halvalla valmistettu laite on kerrankin onnistunut välttämään yleiset sudenkuopat. Vuonna 1961 rakennettu Sensorama oli kunniahimoinen varhainen lumetodellisuuskokeilu. Laite rakennettiin mahdollisimman halvalla, eikä sinä ollut esimerkiksi minkäänlaista liikkeentunnistusta
7 Maista uusi Kapsi! * * Ei juotavaksi. Tarkempi sisällysluettelo www.kapsi.fi
Maailmalla pelimusiikkikeikkoja on nähty enemmänkin, Suomessa 25-päisen orkesterin ja kuoron esittämät rakkaat teemat ovat aika harvinaista herkkua. Assyjen lauantain kärkiohjelmanumeron paikan vei ensimmäistä kertaa ikinä peli. Perjantaina Kepes Mode onnistui tekemään erittäin vaisun vaikutuksen yleisöön. Ei kiinnostanut, ja sanon nytkin, mistä tykkään. Tuimia nuotteja Jo torstaina kolisi ja kovaa. Jälkikäteen irc-kanavan logeja lukeneelle kävi selväksi, että keskimääräinen assykävijä ei erityisemmin kaivannut räppiä saliin. Jälkimmäisen puolen sovitusta odotellessa. Vähintään soodan metronäyttödemo next train takes no passengers tulee katsoa. Real Wildin kolme parasta vetosivat, vaan niin aina. Hyvä jos edes katsoa, tälläinen likainen skenen ulkopuolinen epänörtti. Huhhuh, että se pianolla soolotulkittu Giana Sistersin intromusa oli kova. Tosin eivät kyllä minulle. Kebu jäi välistä, se harmittaa jälkikäteen suuresti. Teksti: Tapio Berschewsky, Ronja Koistinen, Toni Kuokkanen Kuvat: Aleksi Kinnunen, Santtu Pajukanta Assembly 2013 Multimediaa mahan täydeltä! Kulttuuri. Ei voisi itse asiassa vähempää kiinnostaa peliurheilu, tai ylipäätään muiden lanittamisen katselu. Moniääninen festariartikkelimme kertoo, millaista oli olla ensimmäistä kertaa uuden median edustajana oman alan tapahtumassa. En tajua sitä, mutta se on oma ongelmani. Kiire vaan oli. Kilotavun raytracer sai supistajalihaksen tutisemaan innosta. Takana on kymmenen vuotta juoksemista toisen median leivissä, nyt sai ottaa aika iisisti. Rakkaus oli molemminpuolista, ja näillä näkymin mikään ei pysäytä Skrollia olemasta paikalla myös ensivuonna. Ja junailinpa Jaffankin lavalle. Oli muuten aika hyvä sellainen. Painavia sanoja Vip-vieraana oli tällä kertaa hacktivisti Cory Doctorow. Älkää jättäkö siihen, sillä molemmissa kokoluokissa oli paljon hyvää nähtävää. Eikä se muutenkaan haittaa, sillä Assyt on vähemmän peliorientoituneellekin vieraalle täynnä viihdettä. Pöytävuorot jäivät pitkälti hoitamatta, onneksi muu tiimi paikkaili. Oldskool oli torso, lyhytanimaatiot skippasin, demot jäivät vaisuiksi. Emme halunneet editoida näitä yhteen, vaan julkaisemme kunkin osuuden omalla nimellään ja otsikollaan — kuten ne kirjoitettiinkin. Koodin taikaa Joka vuosi joku kompo on köyhä, tai useampikin. Assyilla tai muualla. Ihan hillittömän kova. Hyvän ja YouTubestakin löytyvän How to Live in a World Made of Computers -puheen jälkeen ehdin istahSkrolli osallistui Assemblyihin lähes koko toimituksen voimin. Keskityin pitkästä aikaa itse tapahtumaan. Mutta ketut siitä, itse pompin eturivissä koko keikan ajan. Pelit ovat nyt myös kesäassyjen ykkösjuttu. Finaalina tarjoiltu Second Realityn läpisoitto toimi sekin, mutta jäi kesken. 8 2013.3 A ssembly-tiimiltämme irtosi tapahtumasta useampikin henkilökohtainen tapahtumareppari. Asuksen StarCraft 2 -turnaus oli päälavalla tapahtuman paraatipaikalla lauantai-illassa — juuri siihen aikaan, jolloin demokompot ennen alkoivat. Nelikiloiset Highway 4K ja YogSothoth olivat Assyjen screenin parhaat minuutit. Käsittelyn saivat niin klassikot vuosien takaa kuin uudemmat suosikit Bubble Bobblesta Baldurs Gateen, Boulder Dashista Haloon. Nuori koodaaja väitti joskus kivenkovaan, että introja ei saa arvostella jos ei osaa ite. Olen pelaaja, mutta käyn Assyilla katsomassa demoja ja moikkaamassa kavereita. Kiitokset hyvistä juhlista kaikille osallistujille! Kaukana skeneltä Teksti: Tapio Berschewsky N yt se on sitten virallista. Super Sound of Video Games hoiti homman kotiin kunnialla. Muut pelilaitteet saimme lainaksi keräilijäyhteisö Pelikonepeijooneilta. Metronäyttömatopelin ständillämme tarjosi yleisölle Helsingin Hacklabin Konsta "sooda" Hölttä
Muistan vieläkin PC:n 64k-kompon voittaneen Mewlersin Viagra-nimisen intron tapahtuman kohokohtana. Sittemmin olen käynyt Assemblyilla ainakin 2003, 2004 ja 2010. Demomaailman paras resurssi Pouet auttaa etsijän eteenpäin. 1995 mieleen jäi musakomposta Skavenin Catch That Goblin, joka kirvoitti yleisöstä melkoiset aplodit. Joka kerta kun näet tietokoneita koskevaa uutta lainsäädäntöä, kysy itseltäsi, hyväksyisitkö tämän lain koskemaan jokaista pienintäkin tekoa elämässäsi. Edellisellä visiitillä konepaikoilla soi tauotta Josh Winkin Higher State of Consciousness, eivätkä volyymit varmastikaan olleet EU-normien mukaisia. Lähelle ydintä Teksti: Ronja Koistinen O len käynyt Assemblyilla ensi kertaa 1999, jolloin fiilikset olivat vähintäänkin epätodelliset. Demoskene ja tuttujen tapaaminen ovat aina olleet omat syyni tulla paikalle. Myöskään kolajuomaövereille ei ollut tarvetta. Enää ei käydä desibelikisoja, mikä on kyllä ihan hyvä. Super Sound of Video Games esitti upeaa pelimusiikkia klassisella orkesterilla ja kuorolla. Pelaajien määrä oli melkoinen, mutta hiljaisuus yllätti. Kyllä journalismi avartaa! Kunniavieras hacktivisti Cory Doctorow piti Assyjen kaikkien aikojen poliittisimman esityksen päälavalla. Hienoisena parannuksena 90-lukuun huomasin, että ES:n nenäänpistävä käry peittää tehokkaasti alleen kolmen päivän ajan marinoituneen eau d'Assemblyn. Tunnelma oli edelleen tallella, vaikka muutoksia on tapahtunut. Olin tällä kertaa paikalla vain yhden päivän, joten Areenan nukkumatilat eivät tulleet tutuiksi. Tästähän voisi vaikka tulla tapa. 9 tamaan Coryn kanssa hetkeksi kahden kesken. Muista myös, että Assemblyt ovat vain se näkyvin Suomen tapahtuma. Kompoista en kerinnyt seuraamaan kuin grafiikan ja jokusen musakompon, joissa taso tuntui vaihtelevan reippaasti, kuten viime kerrallakin. Jos et hyväksy, pyri muuttamaan lakia." 18 vuoden välein Teksti: Toni Kuokkanen K ävin Assyilla ensimmäisen kerran 1995, ja nyt 18 vuotta myöhemmin olin siellä taas. Tänä vuonna fiilis oli ihan erilainen, kun olin paikalla Skrollin kanssa. Skrollin ständillä oli kiva tunnelma, ja kävijöitä tuntui kiinnostavan pieni lehtemme. Ständillä oleskellessa ehti jutella compoista tuttujen nimien kanssa. Peltoreita ei tarvita. Tällä kertaa suosikkia ei muodostunut. Harvassa lienevät festarit, joilla on yli 3000 kävijää ja näin rauhallista. Tuhansien kirkkaiden näyttöjen keskellä vanha dataaja tunsi olonsa etupäässä kotoisaksi. Syvempää skenetuntemusta ja lukemattomia upeita demoja: http://pouet.net Assyproduktiot 20 vuoden ajalta: http://archive.assembly.org HBC:lta on odotettu reaaliaikaista teosta ja nyt saatiin kaksi. Tuntui siltä, että pääsin tekemään lähempää tuttavuutta suomalaiseen skeneen ikään kuin takaoven kautta, leppoisalla metatasolla. Dataporukka on selkeästi sivistynyttä väkeä. Skrolli ei julkaise kovin lyhyeksi jäänyttä haastattelua, sillä itse puhe tyhjensi jo pankin. Katso se YouTubesta. Coryn terveiset lukijoille tosin välitämme: "Koko maailma rakentuu tietokoneista ja kaikki inhimillinen toiminta tehdään niiden avulla. Nelikiloiset voitti kaunis 4K Highway.. Parhaat produt ja ohjelmat Älä tyydy lukemaan, vaan katso itse parhaat Assy-produt tapahtuman hyvästä arkistopalvelusta Assembly Archive. Olin 14-vuotias enkä saanut vanhemmilta vielä lupaa yöpyä tapahtumapaikalla. 64 kilon intro oli älyttömän siisti asia. Tapahtuma on selkeästi sivistynyt, eikä järjestyshäiriöitä juurikaan näy, vaikka ei mitään isompaa muistaakseni edelliselläkään kerralla ollut. Sukella siis syvemmälle skeneen. Näytin koulun alettua sitä tietokoneluokassa kavereille, jotka jostain syystä eivät olleet yhtä vaikuttuneita. En ole ikinä ollut etevä ohjelmoija, joten kosketus skeneen on ollut aika etäistä ja hankalaa. Kaunista ja päätä räjäyttävää materiaalia julkaistaan ympäri vuotta moninaisilla demopartyilla pitkin maailmaa ja Suomessakin partyja on useampia
He tarkkailevat missä kunnossa aikuisviihteelle vaihtaneet kävelevät takaisin kohti Areenaa. Niin kuin kaikissa isoissa tapahtumissa, siellä täällä vilahtelee jointteja. Psykedeelit ja stimulantit ovat läsnä, vaikka marginaalin asemassa. Viinapiru kaataa osan nukkumaan, ja osa siirtyy viettämään iltaa muualla. Yön mittaan väki vaihtuu tiuhasti. Vähän sivummassa eivät edes häiritse niitä muutamaa ahdistuneempaa boozekävijää, joille kukka on murhaa. Tuttuja moikkaillaan, ja molemmin puolin tiedetään mistä on kyse. Nuubit uskoo. 10 2013.3 HUOM! Seuraava teksti saapui anonyymistä sähköpostiosoitteesta Skrollin toimitukselle. Tutun tai tuntemattoman kotikasvattama kukka tuoksuu, suuren tekniikkayrityksen lahjoittama kalja maistuu, ja tunnelma on katossa. Se kertoo vain siitä, miten hyvin demoskene ja sen hengaajat hoitavat hommansa. Skrolli ei kannata päihtymistä tai lain rikkomista, ja esitetyt näkemykset ovat kirjoittajan omia. Joka vuosi Boozet on peruttu, tai siirretty, tai jotain. Boozemblyllä ei virallisesti ole järjestäjiä. Teksti: Nano Muumi H artwall Areenan anniskelutilat ovat kiinni, eikä tuoppia saa vaikka sinnikkäästi anelisi. Jotkut siirtyvät takaisin Assyille, ja joitakin kiinnostaa Hashemblyn puoli. Julkaisemme tekstin lyhentämättömänä. Assyt ovat päihteettömät periaatteella "älä kysy, älä kerro". Suurimmalla osalla juoma kädessä ja joitain takana, osa tukevassakin humalassa. Tässä katsotaan, että riehujat ja hoipertelijat päätyvät toiseen osoitteeseen. Kirjoittaja luovutti tekstin julkaistavaksi täysin oikeuksin. Boozemblyt on peruttu Sanovat Assemblya päihteettömäksi tapahtumaksi. Ovella valvotaan, etteivät vieraat kanna pulloja tai lääkkeitä. Upeita syntetisaattoreitaan suvereenisti käsitellyt Kebu villitsi ihmiset perjantaina.. Humaltuneen oloisia ei päästetä sisään, ja sisältä löytyneet passitetaan ulos. Paperit suuhun Tietokonekulttuuri ei ole mikään poikkeus siitä, että ihmisten juhlintaan liittyy usein päihtyminen. Täällä päihdytään, mutta pääosin taidolla. Pinnan alla kuplii vähän vahvempiakin aineita. Energiajuomaa kovemmat mömmöt jäävät takavarikkoon. Boozet ovat siisti tapahtuma, ja ylilyöntejä ei juuri näy. Samaan aikaan reitin puolivälissä ujoimmat kulkijat seisahtuvat kittaamaan viimeisen kaljan pohjat, jotta tölkin voi jättää tarpeeksi kauas näkyviltä. Assyjen päihteettömyyden verho pysyy uskottavana, vaikka viereisessä puistossa ihmiset kiskovat päänsä täyteen yhtä sun toistakin. Passaa vasemmalle Pidemmällä, metsän puolella, musa soi ja ihmiset bilettävät. Vanhat ystävät tapaavat, monet ainoan kerran vuodessa. Joku ilmeisesti silti hakee sille joka vuosi salaa hupiluvan, sillä poliiseja ei koskaan näy paikalla. Pilvenpolttelukallion rauhallisempi porukka puhuu rennosti ja huomattavasti matalammalla volyymilla kuin isompien epävirallisten bileiden juomaveikot. Jos joku sattuukin vetämään pleksit, ja pyrkii takaisin Assyille, järkkärit ohjaavat sekoajan kohti Pasilan asemaa. Pienen piirin omasta kivasta ei juurikaan näe jälkeä, jos ei osaa katsoa oikein. Iltaisin järjestyksenvalvojat parveilevat Boozembly-reitin päässä. Ilman keskivertokävijää ei Assyja olisikaan.. Reippaasti yli sata iloista päätä erilaisissa sekavuuden tasoissa ja tiloissa jakavat yhteistä kesäyötä. Pieniä sieviä nauttineet tai siltä näyttävät pääsevät takaisin sisään, läpi seulasta. Irkissä muistetaan jekuttaa nuorempia. Hyvä niin — tapahtuman puhdas maine on se, minkä takia vanhemmat uskaltavat päästää lapsensa paikan päälle valvomatta. Alue myös siivotaan huolellisesti joka ikinen vuosi
Kouri robotin aivoja rohkeasti Mitä useampi ihminen osaa ja uskaltaa kurkistaa maailmaa kansoittavien koneiden pinnan alle, sitä vähemmän meidän tarvitsee tulevaisuudessa naamakämmentää kaikkia koskevien tietojärjestelmien uudistuksille. Siihen nähden on yllättävää, että peruskoulun opetusohjelmaan kuuluviin pakollisiin, yleissivistäviksi katsottaviin oppiaiheisiin ei kuulu tietojenkäsittelyn ymmärryksen perusteita. Niiden opettaminen on nykypäivänä vähintään yhtä tärkeää kuin vaikkapa ruotsin kielen, tuon ikuisen kiistakapulan. Ei kaikista tule isona koodereita ja haksoreita. Koululaitoksen tehtävä on koulia lapsista pärjääviä kansalaisia. Minkä tahansa hupikäytettävän hilavitkuttimen saumaton hallinta uppoaa tenavien selkäytimeen paljon omaani nopeammin. Siihen kuuluvat käyttöliittymän perushallinta, tekstinkäsittely ja taulukkolaskenta, tietokantapalvelut, piirto-ohjelma sekä sähköpostin ja hakukoneen käyttö. 2000-luvun kansalaistaidot Tietokonekulttuurista puhuminen on sikäli hupaisaa, että termi kattaa joka päivä suuremman osan kaikkea inhimillistä kokemusta. Ilman näitä taitoja on maailmassa jo nyt surkeaa navigoida, saatika nykylasten aikuisuudessa. Viikonlopun kuikuilun perusteella suurin osa assykävijöistä oli pääasiassa ottamassa osaa isoille laneille. Valtiolla olisi erittäin pätevä syy haluta niin ikään taata tulevaisuuden yhteiskunnalle reippaat rivit tietoteknisten palveluiden älykkäitä, kykeneviä tuottajia. Kuin pyy maailmanlopun edellä Areenan asukkien keskimääräinen koko oli kymmenessä vuodessa pienentynyt. Seitsenvuotiaat siskonpoikani rakentavat Minecraftiin uskomattoman eeppisiä todellisuuksia. Seurataan esimerkkiä!. Visiitti oli minulle ensimmäinen sitten 2000-luvun alun. Etumatkaksi ei riitä elämänmittainen altistus nappien rytmikkäälle painelulle. Peruskoulun on syytä avata lapsille konepellin kansi. 11 O sallistuimme Skrollin kanssa Assemblyille. Kiinnostaako haksorointi, naposteleeko koodaus. Ei kaikista tule matemaatikoitakaan, mutta matematiikan perusopetuksen tärkeys on täysin yleisymmärrettävä seikka. Jokainen ipana ansaitsee saada hyvät matkaeväät kasvaa tietokonekulttuurin saralla enemmän kuin kuluttajaksi. Skrollin flaikkuja nuorten näppiksille jakaessa mietin, moniko mahtaa olla kiinnostunut siitä, mitä pelialustan pinnan alla tapahtuu. Pureeko itsetekemisen promoaminen kymppiluvun nuorisoon. Löydän itseni tivaamasta rakennuspiirrosten patentinhaltijan nimeä ja vaatimasta taidonnäytteiden toistoa valvotuissa olosuhteissa. Seitsemänvuotias minä istui 80-luvulla espoolaisessa lähiökodissa seikkailemassa pelimaailmoissa itsekseen. Tietokoneista on ihmisten maailma tehty, ja niillä sitä pyöritetään. Koodia pennuille Ninnu Koskenalho Peruskoulussa ei opeteta ohjelmointia. Kielilaki takaa kansalaiselle oikeuden viranomaispalveluihin kummalla tahansa kotimaisella kielellä. Valtiolla on velvollisuus taata oikeuden toteutuminen kouluttamalla ruotsin kielen osaajia. Tätä kai tarkoitetaan diginatiiveilla. Vaan kuinka ihmeessä tietojärjestelmien toimintalogiikka ja ohjelmoinnin perusteet eivät ole listalla. Toinen kotimainen kieli on jokaiselle suomalaiselle kielilain nojalla pakollinen opiskeltava. Pihan pojista ei tyttöbakteereja pelkäävinä ollut pelikavereiksi, eivätkä tytöt vielä kasarilla ymmärtäneet hauskan päälle. 2010-luvulla kaikki pelaavat. Jälleennäkeminen herätti ajatuksia suomalaisesta dataipanaskenestä ja tietotekniikan käyttötavoista. Olin tuolloin rampannut tapahtumassa vuodesta -94 tarkkaillen sen hidasta muodonmuutosta yhdessä tietotekniikan viihdekäytön yleistymisen kanssa. Kolumnit ” Virossa ohjelmointia opetetaan 7-vuotiaille.. Tietoteknistyvän mediayhteiskunnan tärkeimpiä kansalaistaitoja ovat medialukutaito ja tietotekninen ymmärrys. Mikä siis olisikaan sopivampaa, kuin että tietokonekulttuurin keskelle syntynyt sukupolvi jo nuorella iällä kansoittaa sen omia tapahtumia. Tietotekniikan kielen puutteellinen ymmärrys on aukko yleissivistyksessä. Kumpikin vaatii kyseenalaistamista, asioiden osiin purkamista ja uudelleen kasaamista. Matemaattisten aineiden opettajien liitto MAOL ry:n julkaisu “Mitä peruskoulunsa päättävän oppilaan tulisi tietää tietotekniikasta” listaa tavoitellun yhteisen taitopohjan. Virossa alettiin viime vuonna opettaa ohjelmoinnin perusteita kaikille koululaisille 7-vuotiaasta alkaen
Hakkeroi. Osallistuminen on helppoa. Hakkeroi. Tapahtumaan myytävä "peruslippu" on nimeltään volunteer ticket, eli kaikkien toivotaan kantavan kortensa kekoon. Tämän vuoden näkyvin teema olivat tietovuodot. Yksi alue oli kokonaan omistettu retropeleille. Rakenna. Tänä vuonna hän hoiti oman esityksensä videopuhelun avulla Ecuadorin Lontoon suurlähetystöstä käsin. Puhujien joukossa oli monia nimekkäitä tietovuotajia Yhdysvalloista ja Isosta-Britanniasta, jotka kertoivat omista kokemuksistaan vuotajina olemisesta. Hakkerin paratiisi OHM2013 -tapahtumassa nörttikulttuuri tuli esiin mitä moninaisimmin tavoin. Verkkoyhteydet hoituivat datavessojen (Datenklo) avulla. Keskieurooppalaiset hakkerileirit ovat erikoisia tapahtumia. Myös monet erilaiset tietoturva-aiheet olivat esillä. Hakkerileirillä näiden lisäksi pitää olla tietysti myös sähköä ja internet-yhteys. Tietovuotoaiheiden lisäksi nelipäiväisessä tapahtumassa oli esityksiä muun muassa politiikasta ja erilaisten laitteiden tekemisestä. Tänä vuonna tapahtuman nimi oli "Observe. Havainnoi. Tapahtuman esitykset oli myös jaettu näihin kolmeen teemaan. Tämäkään kuvaus ei täysin onnistu kertomaan, mistä oikeastaan on kyse. Rakenna. Hack. Leirin ehdottomasti kuuluisin puhuja, Julian Assange, oli vielä neljä vuotta sitten paikan päällä esiintymässä. Pääjärjestäjien lisäksi leirillä tarvitaan paljon vapaaehtoisia. Bajamajoista oli tehty yhdyspisteitä, joista jokaiseen telttaan saatiin vedettyä verkkopiuha. Verkkotiimin jäsenet olivat vetäneet kilometrikaupalla valokaapelia ympäri leirintäaluetta, jotta jokaisella olisi pääsy nettiin. Rokkifestareilla perusinfrastruktuuri, kuten vessat ja suihkut, tuottavat työtä järjestäjille. Orvillecopterin tekijät esittelivät myös isompaa aikaansaannostaan strutsikopteria. Valtava urakka järjestetään täysin vapaaehtoisvoimin. Neljän vuoden välein järjestettävät tapahtumat keräävät osallistujia ympäri maailmaa. Edward Snowden mainittiin monessa esityksessä. Make." Havainnoi. OHM2013 on ikäänkuin rokkifestivaali, jossa musiikki on korvattu konferenssiesityksillä. Leirialuetta kierrellessä voi nähdä Teslakäämejä, erilaisia lennokkeja, kaikenlaisia elektroniikkaprojekteja, tiirikointia, radioamatöörilaitteistoa, 3d-printtereitä, laserleikkureita ja paljon, paljon muuta. Tällaisen valtavan kokonaisuuden pystyttäminen vaatii paljon resursseja. Pelialueella pääsi palaamaan omaan (ja myös vanhempiensa) nuoruuteen vanhojen flippereiden ja kolikkopelien parissa. 12 2013.3 Kulttuuri H ollannissa on järjestetty isoja kansainvälisiä hakkerikonferensseja vuodesta 1989. OHM2013 järjestettiin Alankomaissa Oudkarspelissa Alkmaarin lähellä. Nimekkäin esitelty projekti oli Orvillecopter — rakkaasta lemmikkikissasta tehty nelikopteri. Pari piuhaa ristissä Vertaaminen rokkifestariin on ainakin puitteiden puolesta vähättelyä. Loppuunmyytyyn tapahtumaan osallistui 3000 ihmistä ympäri maailmaa. Teksti: Rauli Puuperä Kuvat: Miikka Saukko Wikileaksin nimekäs pääjehu Julian Assange piti puheen OHMeilla, tosin etänä Ecuadorista.
Jos tietokoneen käyttö on vain pelaamista, siitä jää paljon uupumaan. Vähä-Sipilän mielestä leirien esitykset ovat laadukkaita. Paikalla oli vajaa parikymmentä suomalaista. Jos nyt hakkeritapahtumassa ylipäätään uskaltaa siirtää tietoa langattomasti. Kaikki esitykset arvioidaan etukäteen riittävän hyviksi, eikä mätiä mahdu mukaan. Ihmiset olivat organisoituneet erilaisiksi "kyliksi". Nauhoitettuja esityksiä pääsee katsomaan osoitteesta http://wipkip.nikhef.nl/events/OHM/video/ OHMeilla oli nettikuuluisuutta jos jonkinlaista, kuten Orvillecopter. Osa kylistä oli todella panostanut äänentoistoon ja valoilotteluihin. Vähä-Sipilän mielestä OHM2013-tapahtuman kaltaista hakkerileiriä kannattaa ehdottomasti kokeilla ainakin kerran. Merkkasin OHM2013:n kalenteriin heti, kun siitä tuli tieto, ja ostin liput ensimmäisenä päivänä". Rakkautta vai häväistys. Suurin osa suomalaisista toimi tietoturva-alalla. Perheloma hakkerileirillä varmasti avartaa nuorten käsityksiä siitä, mitä kaikkea maailmassa ylipäätään voi tehdä ja saada aikaiseksi. Kiistellyssä projektissa rakas vanha lemmikki on kuoleman jälkeen muutettu nelikopteriksi. Kylä voi muodostua kansalaisuuden, aatteen, ohjelman, jonkun hackerspacen tai kaveriporukan ympärille. Neljään rakennustelineistä koottuun torniin oli viritetty useita valoja, discopalloja ja liekinheitin. Myös saksalainen Chaos Computer Club (CCC) järjestää vastaavaa tapahtumaa neljän vuoden välein. Kylittäin kavereita Tapahtuman leirintäalue oli monen kirjavaa. Osa suomalaisista majaili Finnish Embassy Perkele -kylässä, joka suomalaisittain kuului leirin vaatimattomampiin. Jos joku semmonen tyyppi pelastetaan täysipainoisen tietokoneharrastuksen pariin — saisi vaikka kipinän tämmösen tapahtuman kautta — niin se olisi hyvä", Vähä-Sipilä veistelee. Hollantilaisen Hack42-hackerspacen kylä kuului näyttävimpiin. Vuoroin vieraissa OHM2013 ja vastaavat hakkerileirit ovat lapsiystävällisiä tapahtumia, ja perheen voi ottaa mukaan. Osallistujia oli Helsingistä, Tampereelta ja Oulusta. Niitä pitävät samat tyypit, jotka käyvät puhumassa "oikeissakin" tietoturvakonferensseissa. "Tänne kannattaa raahata semmoset tyypit, jotka on menossa Assyille vain pelaamaan. "Nämä ovat olleet hauskoja tilaisuuksia. OHMin jatkoa Hollannissa saa siis odottaa vielä neljä vuotta, mutta seuraava mahdollisuus päästä kokemaan kansainvälisen suuren hakkerileirin humua on jo 2015 Saksassa, kun seuraava Chaos Communication Camp järjestetään.. Jotkut olivat työmatkalla, toiset lomalla, mutta kaikki teltoissa yhtä lailla. 13 Jokaisessa datavessassa oli myös WLANtukiasema, ja langaton verkko toimi tänä vuonna paremmin kuin aikaisemmissa tapahtumissa. Tätä kelpasi katsella Alankomaiden hämärtyvässä yössä. Paikan päällä oli myös peräti kaksi omaa GSMverkkoa ja DECT-verkko. Lapsille on tarjolla jonkin verran järjestettyä ohjelmaa — nämä voivat esimerkiksi päästä juottamaan, jos haluavat vaikkapa opetella ledivilkkujen väkertämistä. Radiolaitteet on saatu toimiviksi, mutta joitain pieniä puutteita vielä löytyy.. Esitykset ovat kuitenkin samassa sarjassa, koska ne käyvät läpi hyväksyntäprosessin aivan kuten tavallisissakin konferensseissa. Laatu on vaihtelevaa, koska ohjelmaa on määrällisesti enemmän, ja aiheet ovat laajempia. Sähköntarvetta tyydyttämään alueelle hoidettiin useita agregaatteja. "Poliittiset keskustelut ovat tärkeitä, mutta niitä varten ei tarvitse lähteä telttaleirille", Vähä-Sipilä kommentoi. Tietovuotokeskustelu vei huomiota ihmisten jokapäiväisestä rakentelusta ja nysväämisestä, jotka ovat hänelle tärkein syy tulla paikalle. Suomalainen leirillä Vähä-Sipilä kutsuu pelaajat paikalle Tietoturvan parissa työskentelevä Antti Vähä-Sipilä on käynyt viimeisen kahdeksan vuoden ajan hakkerileireillä. Paikalla oli myös hackerspace-aktiiveja. Kylän asukkaat olivat saapuneet lentäen ja lentokoneiden matkatavaroiden painorajoitukset hankaloittivat kylän kasaamista. Elektronisen sodankäynnin kylässä nähtiin myös tämä restauroitu Vampire V2 75FL93. Vähä-Sipilän mielestä tämänvuotinen leiri oli vähän erilainen kuin aiemmat
Myös lämpötilan muuttaminen QML:stä toimii, vaikka sitä ei tässä esimerkissä tarvitakaan. Teksti: Ville Ranki Kuva: Jari Viitala QML osa 2 Yhteys C++ -maailmaan S krollin QML-kurssin kakkososassa selvitämme, kuinka helposti QML:llä tehdyn ohjelman saa tekemään yhteistyötä C++:n kanssa. Kirjoita listauksen 1 koodi tiedostoon saunacontrol.h ja listauksen 2 koodi saunacontrol.cpp. Kuvitteellisessa esimerkkitilanteessamme meillä on Arduinolla toteutettu saunavahti, joka osaa mitata saunan lämpötilaa ja käynnistää tai sammuttaa saunan. Q_PROPERTY-rivillä kerrotaan, että meillä on ominaisuus temp, sen lukumetodi, kirjoitusmetodi ja signaali, joka kertoo lämpötilan muuttuneen. Signaaleista ja sloteista voi lukea tarkemmin linkistä [1] ja ominaisuuksista linkistä [2]. Käynnistä Qt Creator ja luo uusi Qt Quick 2 -projekti. Lisäksi haluamme näyttää lämpötilahistoriaa viiden tunnin ajalta. QObject on Qt:n luokka, jonka perimällä mikä tahansa luokka saa supervoimia kuten signaalit ja slotit, ominaisuudet (properties) ja muistinhallintaa helpottavia asioita. Anna luokan nimeksi SaunaControl ja kantaluokaksi (base class) "QObject". Aloitamme luomalla uuden projektin ja siihen SaunaControl-nimisen luokan, joka toimii rajapintana QMLja C++maailmojen välillä. Arduinon juttelu sarjaportin yli on toteutettu aiemmin C++:lla, mutta nyt haluamme tehdä sille kosketusnäytöllä käytettävän käyttöliittymän. SetSaunaPower-metodia taas kutsutaan QML-koodista, kun käyttäjä painaa painiketta. 14 2013.3 QML-käyttöliittymien tekoon tutustuttiin Skrollin ykkösnumerossa. Delegate-ominaisuudeksi taas asetetaan QML-elementti, joka Koodaus. Luokassa on rakentaja, metodi näytetyn lämpötilan asettamiseksi ja palauttamiseksi, signaali joka kertoo lämpötilan muuttuneen sekä slotti saunan virran kytkemiseksi päälle tai pois. Merkkijonolista asetetaan "tempHistory"nimiseen kontekstin ominaisuuteen, jolloin se näkyy globaalisti QML-puolella. Nyt teemme liittymän C++-ohjelmalle. Tietomalli asetetaan ListView’n model-ominaisuudeksi. Sen toteutus emittoi signaalin tempChanged(), jonka avulla QML-puoli (ja mahdolliset muut tätä signaalia kuuntelevat) tajuavat päivittää arvon. Perinteisesti ohjelmointikielten välinen tiedonvälitys on työlästä, mutta QML:n ja C++:n tapauksessa tarvittavan liimakoodin määrä jää hyvin pieneksi. cpp:stä. #ifndef SAUNACONTROL_H #define SAUNACONTROL_H #include <QObject> class SaunaControl : public QObject { Q_OBJECT Q_PROPERTY(int temp READ temp WRITE setTemp NOTIFY tempChanged) public: explicit SaunaControl(); void setTemp(int newTemp); int temp(); signals: void tempChanged(); public slots: void setSaunaPower(bool power); private: int temperature; }; #endif // SAUNACONTROL_H Listaus 1: saunacontrol.h #include "saunacontrol.h" #include <QDebug> SaunaControl::SaunaControl() : QObject(), temperature(0) {} void SaunaControl::setTemp(int newTemp) { temperature = newTemp; emit tempChanged(); } int SaunaControl::temp() { return temperature; } void SaunaControl::setSaunaPower(bool power) { qDebug() << Q_FUNC_INFO << power; } Listaus 2: saunacontrol.cpp SaunaControl toimii tiedonvälittäjänä C++ja QML-ohjelmien välillä. SetTemp-metodia kutsutaan main. Tarkastellaan main.cpp:tä. Tässä esimerkissä se tulostaa saamansa parametrin. Klikkaa projektia oikealla napilla ja valitse "Add New", "C++ Class". Sen alussa luodaan lämpötilahistoriaa kuvaava tempHistoryData-niminen merkkijonolista, johon laitetaan muutama kiinteä arvo. Kirjoita listaus 3:n sisältö Qt Creatorin luomaan main.qml-tiedostoon ja listaus 4:n sisältö main.cpp-tiedostoon. Tämän ominaisuusmäärityksen avulla lämpötilamuuttujaan päästään käsiksi QML-puolelta suoraan. Tiedoston main.qml loppupuolella on ListView-olio, joka osaa näyttää tietomallin
Lopuksi asetetaan vielä lämpötila arvoon 64 astetta. "salmon" : "steelblue" radius: 30 width: parent.width height: parent.height/3 anchors.bottom: parent.bottom Text { anchors.centerIn: parent text: powerButton.saunaPower . Yksi, ei ehkä niin siisti tapa on suorat funktiokutsut. Lisää aiheesta voit lukea linkistä [3].. 15 luodaan jokaiselle tietomallin alkiolle, tässä tapauksessa siis lämpötila-arvolle. Nyt SaunaControl:n slotteja voidaan kutsua ja sen temp-ominaisuus voidaan lukea ja kirjoittaa QML-koodista. Tässä esimerkissä käytettiin yksinkertaisuuden vuoksi valmista merkkijonolistaa, mutta delegaatit pystyvät käyttämään myös mitä tahansa sopivasti tehtyä QObjectista perittyä luokkaa. Esimerkiksi lämpötilan asetuksen olisi voinut tehdä myös tekemällä QMLpuolelle JavaScript-funktio, jota kutsuttaisiin C++-puolelta QMetaObject::invoke Method()-metodilla. Main.qml:n alussa oleva Text-elementti näyttää isolla näkyvän tämän hetkisen lämpötilan. Qt tarjoaa esiteltyjen lisäksi myös muita tapoja välittää tietoa C++:n ja QML:n välillä. Lämpöhistorian jälkeen main.cpp:ssä luodaan SaunaControl-instanssi ja asetetaan se juurikontekstille nimellä "saunaControl". Siinä viitataan suoraan SaunaControl:n tempominaisuuteen. Huomaa MouseAreaelementin onClicked-käsittelijä, joka kutsuu saunaControl:n setSaunaPower()-metodia aiheuttaen tulostuksen C++puolella. "Sammuta sauna" : "Käynnistä sauna" } MouseArea { anchors.fill: parent onClicked: { powerButton.saunaPower = !powerButton.saunaPower saunaControl.setSaunaPower(powerButton.saunaPower) } } } ListView { width: parent.width/8; height: parent.height model: tempHistory delegate: Item { height: 25 width: parent.width Rectangle { color: "red" opacity: parseInt(modelData)/100 anchors.fill: parent } Text { text: modelData + "°C"; anchors.centerIn: parent } } } } #include <QtGui/QGuiApplication> #include <QQmlContext> #include "qtquick2applicationviewer.h" #include "saunacontrol.h" int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QtQuick2ApplicationViewer viewer; QStringList tempHistoryData; tempHistoryData << "30" << "42" << "50" << "66" << "75"; viewer.rootContext()->setContextProperty("tempHistory", QVariant::fromValue(tempHistoryData)); SaunaControl saunaControl; viewer.rootContext()->setContextProperty("saunaControl", &saunaControl); viewer.setMainQmlFile( QStringLiteral("qml/skrolli-sauna/main.qml")); viewer.showExpanded(); saunaControl.setTemp(64); return app.exec(); } Linkit: [1] http://qt-project.org/doc/qt-5.0/qtcore/signalsandslots.html [2] http://qt-project.org/doc/qt-5.0/qtcore/properties.html#qt-s-property-system [3] http://qt-project.org/doc/qt-5.0/qtqml/qtqml-cppintegration-interactqmlfromcpp.html Listaus 3: main.qml Listaus 4: main.cpp Kuvakaappaus esimerkkisovelluksesta.. Delegaattien avulla saadaan esimerkiksi räiskintäpelissä kuvattua pelihahmot C++-olioina, joiden ominaisuudet päivittyvät itsestään QML-puolelle piirtoa varten. import QtQuick 2.0 Rectangle { width: 500 height: 500 Text { text: saunaControl.temp + "°C" font.pixelSize: parent.height/3 anchors.centerIn: parent } Rectangle { id: powerButton property bool saunaPower: false color: saunaPower . Ominaisuuksia ei näin tarvitse päivitellä käsin pelin pääsilmukasta. Kyseinen arvo näkyy delegaatin modelData-ominaisuutena. Tämäkin on yllättävän helppoa, riittää että oma luokka perii QtQuickItem:n ja rekisteröidään qmlRegisterType()metodilla näkymään QMLpuolella. Toinen ihan hyvä toteutustapa olisi ollut luoda oma QML-elementtityyppi jonka toteutus on C++:aa. Sauna kytketään päälle tai pois main.qml:n powerButtonnapilla
pulse encoder). 16 2013.3 M ikrokontrollerilla voi tehdä paljon muutakin kuin vilkuttaa ledejä tai tehdä saunamittareita. Myötäpäivään pyörittämällä liikutaan valikon tasolla eteenpäin ja vastapäivään taaksepäin. Valitsimen avulla liikutaan LCD-näytön piirtämän, kaksi tekstiriviä kattavan käyttöliittymän valikossa. Sillä voidaan lähettää nuotteja tai kontrollisignaalia. Alustaan on liitetty pyöritettävä valitsin (eng. Esiteltyä ideaa voi kuitenkin soveltaa kaikenlaisiin projekteihin, joissa mikrokontrollerin toimintaa halutaan voida muuttaa lataamatta uutta koodia vanhan päälle. Teksti: Annika Piiroinen Projektin idea ja toteutus: Risto Mäki-Petäys Kuvat: Risto Mäki-Petäys Mikä MIDI. Käyttöliittymän avulla elektronisen musiikin tuottaja saa paremman otteen sellaisista laitteista, joihin ei ole valmista käyttöliittymää tai joiden nykyinen käyttöliittymä on kömpelö ja hidas. Kaikki laitteet saavat kaikki viestit, mutta ne voivat kuunnella vain yhtä kanavaa tai mielivaltaista määrää kanavia kerrallaan. Rauta. Tämä artikkeli on suunnattu niille, joilla on jo kokemusta Arduinolle ohjelmoimisesta, mutta tahtovat tehdä sille jonkin laajemman projektin. Painamalla valitsinta siirrytään alarivin osoittamaan alavalikkoon tai palataan Arduino hallintaan Muokattava käyttöliittymä mikrokontrollerille Säädä arduinosi toimintaa ilman tietokonetta kätevällä käyttöliittymällä. MIDI:ssä on kuusitoista kanavaa per portti, ja laitteet voidaan kytkeä sarjaan, jolloin yksi MIDI-ohjain voi ohjata kaikkia näistä laitteista. Nappulat, jotka nyt säätelevät joitain tiettyjä arvoja, voidaankin asettaa säätelemään aivan toisia arvoja — vaikka kokonaan eri laitetta! Ääntä peliin Risto Mäki-Petäyksen suunnittelema ja toteuttama ohjelmisto moduuleineen kontrolloi MIDI-syntetisaattoreita Arduino Nano -kehitysalustan avulla. rotary dial), joka on teknisestä näkökulmasta pulssianturi (eng. Lisäksi sen avulla pystyy kontrolloimaan useita eri laitteita samasta lähteestä. Niiden ei tarvitse olla vain kojeita, jotka valmistumisensa jälkeen suorittavat uskollisesti aina samaa toimintoa hamaan loppuun asti – tai kunnes niille ladataan uusi koodi. MIDI on sarjaliikenneprotokolla, jota käytetään elektronisten soitinten ohjaamiseen. Muokattava käyttöliittymä tarkoittaa sitä, että laitteen toimintaa voi ohjata käyttöliittymän kautta, mutta myös käyttöliittymän itsensä toimintaa voi muokata. Sen lisäksi siihen on kytketty LCD-näyttö ja MIDI-portit, joihin voi liittää sarjaan useampia MIDI-syntetisaattoreita. LCD-näytön ensimmäisellä rivillä lukee nykyisen valikon tason nimi, esimerkiksi "General settings", ja toisella alavalikon nimi, esimerkiksi "MIDI channel" tai "Return". Palapelin palaset Vaikka valikossa liikutaan vain yhden pyöritettävän valitsimen avulla, käyttöliittymä on erittäin helppoja nopeakäyttöinen
struct MenuCallback { void (*dec_cb)(void); void (*inc_cb)(void); void (*push_cb)(void); }; struct MenuItem { char *rows[2]; struct MenuItem *subMenu; struct MenuCallback cb; }; struct MenuCallback return_cb = { menudec, menuinc, menureturn }; struct MenuCallback enter_cb = { menudec, menuinc, menuenter }; char m_main_title[] = "Main Menu"; char m_preset_title[] = "Preset Edit"; MenuItem menuend = { { NULL }, NULL, {NULL, NULL, NULL} }; struct MenuItem m_main[] = { {{ m_main_title, m_return }, NULL, return_cb }, {{ m_main_title, m_preset_title }, m_reset, enter_cb }, {{ m_main_title, m_global_title }, m_global, enter_cb }, menuend }; Pienellä työstämisellä saa verolevylle sovitettua komponentteja, joita ei ole mitoitettu tuumarasterille. Ylempi rivi ilmaisee aktiivisen valikon, alemmalla rivillä selviää kohde, johon painikkeella valitsemalla sirrytään. Kolmas profiili voisi laittaa potentiometrit kontrolloimaan kokonaan eri laitetta, vaikkapa sampleria. Pyörittämällä voidaan muuttaa arvoa, ja painaminen palaa tasoa ylemmäs tallettaen nykyisen arvon. Siirtorekisteri muuttaa nämä kolme signaalia näytön tarvitsemaksi seitsemäksi. Valikko-objekti, joka vastaa graafisesti yhtä näytön näkymää, on toteutettu MenuItem-tietueena (eng. Näin voi tapahtua, jos valitsimelta tulee pulsseja niin nopeasti, ettei kontrolleri ehdi lukea niitä kaikkia. Taso 1 Taso 2.1 Taso 2.1 Arvo 1 Arvo 1 6 Arvo 2 5 Nimi Esiasetus X Taso 2.1 Paluu Taso 1 Taso 2.2 Taso 2.1 Arvo 2 Taso 1 Taso 2.3 Taso 2.1 Nimi. Globaali pinomuuttuja pitää kirjaa siitä, missä kohtaa valikkoa liikutaan. Nimeä muokataan valikossa siinä missä muitakin arvoja. Valikon avulla voi luoda erilaisia syntetisaattoriprofiileja. Jos halutaan ohjata yhdestä laitteesta useampaa kuin kahdeksaa eri arvoa, sille on luotava useamman sivun verran profiileja. Näytön ohjaamiseen liittyvä kirjasto pitää huolta siitä, että siirtorekisterille lähetetään oikean protokollan mukaista signaalia. Valikon alimmalla tasolla muokataan arvoja, jolloin näytön ylin rivi näyttää arvon nimen ja alempi nykyisen arvon. Näistä yksi on datasignaali ja kaksi kellosignaaleja. Mistä sitten voi nähdä, mitä arvoja potentiometrit milloinkin ohjaavat. 17 ylemmälle tasolle. Jos kontrollerin tahtoo erilleen valikkosysteemistä syöttölaitteineen, kaikkia johtoja ei tarvitse erikseen irroittaa. Eri profiilien ollessa valittuina potentiometrit ohjaavat eri laitetta tai eri arvoja laitteessa. Käyttämämme LCD-näyttö puolestaan veisi muuten vähintään seitsemän nastaa, mutta mikrokontrollerin I/Oporttien säästämiseksi Arduino lähettää siirtorekisterille vain kolmea. Nimenmuokkaustilassa valitsimen pyörittäminen ohjaa tekstirivillä liikkuvaa kursoria, ja painamalla valitsinta päästään vaihtamaan valittua merkkiä. Valikkokoodin runko on toteutettu siten, että se skaalautuu tarpeen mukaan käyttämään useampaakin kontrollia kuin pyöritettävää valitsinta, esim. Ei myöskään tarvitse opetella ulkoa, mikä esiasetus liittyy mihinkin, vaan esiasetukselle on mahdollista antaa nimi. Valitsimen oltua hetken koskemattomana näytölle piirtyy kuva, joka osoittaa potentiometrien nykyiset säätökohteet ja niiden arvon. struct) ja yksi valikon taso taulukkona tällaisia. Esimerkkiprojektissa LCDnäytön reunoja kiertää kahdeksan potentiometriä, joiden avulla MIDI-laitteita ohjataan. Syvin taso on jonkin arvon muokkaus. Näistä valikkorakenne on projektin kannalta kiinnostavin. Entä se muokattavuus. Pyörittämällä merkit Esimerkki hierarkkisen valikon rakenteesta. Kurkistus konepellin alle Koodin voi jakaa periaatteessa neljään osuuteen: valikkorakenne, näytön ohjaamiseen liittyvä kirjasto, syöttölaitteisiin liittyvät kirjastot ja MIDI-signaalin ohjaamiseen tai muuhun haluttuun toimintoon liittyvät kirjastot. Näytön ja valitsimet saa välissä olevan moduulin ansiosta näppärästi irti ja kiinni Arduinoon. Nettijatkoista löytyy moduulin rakentamisessa käytetty kytkentäja katkaisumaski, joka helpottaa verolevylle tehtäviä kytkentöjä. MenuItemillä on kolme attribuuttia, joista kaksi ensimmäistä ovat merkkijonoja, kolmas osoitin alivalikkoon ja viimeinen on funktio-osoittimista (call back) koostuva rakenne. MenuItem-tietueen funktioosoitinten määrittelyyn vain pitää lisätä attribuuttina useampi palautusfunktio, jotka vastaavat uusia näppäimiä. Yhden pyöritettävän valitsimen sijaan voisi tietenkin olla kolme painonappia, mutta pyörövalitsin mahdollistaa nopeamman liikkumisen ja arvomuutokset. Merkkijonot vastaavat näytölle piirtyviä tekstejä, ja funktiot toimintoja, jotka tapahtuvat valitsinta pyöritettäessä tai painettaessa kytkimiä. numeronäppäimistöä. siitä, että nopeasti myötäpäivään pyöritettäessä mikrokontrolleri ei luule valitsimen pyörivän hitaasti vastapäivään. Valikon yhdestä kohdasta on tehty oma structinsa. Yhden profiilin ollessa valittuna potentiometrit saattavat siis vaikkapa ohjata syntetisaattorin oskillaattoriin liittyviä arvoja ja toisessa profiilissa samat potentiometrit sen mikseriin liittyviä arvoja. Asian selvittämiseksi ei tarvitse palata tutkimaan valikoita. Valitsimeen liittyvä kirjasto tulkitsee valitsimen lähettämää kolmea signaalia ja huolehtii mm
Arduino on avoimeen laitteistoon perustuva elektroniikkaalusta ja ohjelmointiympäristö. Projektimme koodissa on kytketty päälle Arduinon sisäinen ylösvetovastus, jolloin keskimmäisen nastan sekä painonapin toisen nastan voi kytkeä maahan. Arduino-laitteita on eri malleja, joista tässä projektissa käytetty Nano on yksi pienimmistä sekä fyysisen kokonsa että esimerkiksi muistinsa puolesta. Merkkijonon editointi, kursori näkyy muokattavan merkin kohdalla, nupin kääntö muokkaa merkkiä. Modernit tietokoneet eroavat muista elektronisista laitteista eniten siinä, että niiden toimintaan voi vaikuttaa. data sheet), jonka voi löytää googlettamalla pulssianturin mallinumeroa, jos sellainen on tiedossa. Uusimmissa kontrollereissa ohjelmointi tehdään USB:n kautta tai Bluetoothin avulla. Painonapin nastat voi kytkeä kummin päin tahansa: yksi nasta maahan ja toinen Arduinon sisääntulonastaan. Liikkeen ilmaisee vastapuolella kaksi kytkintä, joiden yksi yhteinen nasta on yleensä keskimmäinen, ja vastakkaiset nastat ovat reunoilla. Arduino-laitteet perustuvat 8-bittiseen Atmel AVR -mikrokontrolleriin, ja niitä ohjelmoidaan C++:aan perustuvalla Arduinoohjelmointikielellä. rotary encoder) on erilaisia, ja ne lähettävät eri protokollien mukaisia signaaleja. Toteuttamamme koodi tukee yleisintä nelivaiheista protokollaa sekä yhtä vastaan tullutta poikkeavaa kaksivaiheista. Ylärivillä tämänhetkisen valikon nimi, alhaalla valinta. Tässä tapauksessa käytetään inkrementaalista, joka pyöritettäessä nuppia kulkee tiettyä sekvenssiä eteentai taaksepäin. Näyttö oletustilassa: ruudulla näkyy parametrien nimet ja palkkien osoittamat arvot. Sen ei tarvitse olla monimutkainen – tässäkin projektissa käytettiin vain yhtä pyöritettävää namiskaa ja kaksirivistä LCDnäyttöä. Oman pulssianturin protokollan voi saada selville datalehdestä (eng. Painonapitonta voi käyttää lisäämällä ylimääräisen painokytkimen. Pulssienkooderin voi myös kytkeä Arduinoon ja tehdä ohjelman, joka lähettää nastojen arvot sarjaporttia pitkin koneelle. 18 2013.3 viuhuvat näytöllä järjestyksessä, ja oikean merkin löytyessä se talletetaan painamalla. Rakenteletpa vastaisuudessa sitten MIDI-kontrolleria, saunatonttua tai sokkelorobottia, muista että Arduinosta saa enemmän irti, kun sille tekee kätevän käyttöliittymän. On olemassa painonapillisia ja painonapittomia pulssiantureita. Laitetaan siis niistä pienimmätkin tekemään jotain monipuolista!. Arduino-mikrokontrollereista Mikrokontrolleri on elektroniikan komponentti, joka sisältää samalla mikropiirillä prosessorin, ohjelmamuistia, käyttömuistia sekä syöttöja tulostustoimintoja. Pulssianturin käytöstä P ulssiantureita tai pulssienkoodereita (eng. Liikkeen seuranta voi olla mekaaninen tai optinen, joista mekaanisen suurin pyöritysnopeus on yleensä alhaisempi. Käsittelemme aihetta syvällisemmin nettijatkoissa. Tällöin on otettava itse selvää protokollasta esimerkiksi yleismittarin tai oskilloskoopin avulla. Kaikista malleista ei kuitenkaan löydy tietoa netistä. Muussa tapauksessa tarvitsisi käyttää erillistä ylöstai alasvetovastusta. Lähteet: http://fi.wikipedia.org/wiki/Arduino http://arduino.cc/en/. Tämän jälkeen kursoria voidaan liikuttaa seuraavan muokattavan merkin kohdalle. Alustan on nostanut suosioon se, että siihen on helppo liittää kolmannen osapuolen valmistamia lisäosia, kuten sensoreita, moottoreita, LED-valoja ja muita komponentteja. Lisätietoa pulssiantureista yleensä esimerkiksi: http://en.wikipedia.org/wiki/Rotary_encoder#Incremental_rotary_encoder A C B D E A B Pulssianturin nastat ja signaali Esimerkki valikon kohdasta. Niitä käytetään useimmiten sulautetuissa järjestelmissä, esimerkiksi kaukosäätimissä ja digitaalisissa kelloissa. Kun kursori viedään ulos näytöltä, nimi tallentuu ja valikossa palataan takaisin. Tahtoo oman! Skrollin nettijatkoista osoitteesta http://skrolli.fi/2013.3/ löydät projektista lisää materiaalia, kuten esittelyvideon, kytkentäkaavion ja koodin. Jos pulssianturi on painonapillinen, yleensä yhden puolen nastat ilmaisevat liikkeen ja toisen puolen nastat painalluksen
Kuitenkin kaikki perille tulleet bitit ovat samassa järjestyksessä kuin alkuperäisessä viestissä ja ainakin yksi bitti tulee perille. Mikä on odotusarvo sille, kuinka monta erilaista viestiä vastaanottaja voi saada, jos kaikki viestit ovat yhtä todennäköisiä. Ikävä kyllä Uolevin ohjelmassa on bugi ja osa biteistä saattaa kadota matkan varrella. – 20.10.2013 Suvilahti, Helsinki 19 U olevi on koodannut ohjelman, jolla voi lähettää viestejä netin välityksellä. 4.?Entä jos vastaanottaja voi saada tarkalleen 999999 erilaista viestiä. Voitko auttaa Uolevia. Esimerkiksi jos Uolevi lähettää viestin 1101, vastaanottaja voi saada 9 erilaista viestiä: 0, 1, 01, 10, 11, 101, 110, 111 tai 1101. Uolevi haluaa tutkia ohjelmansa luotettavuutta laskemalla, montako erilaista viestiä voi syntyä eri tilanteissa. 1.?Jos Uolevi lähettää viestin 0110001111, montako erilaista viestiä vastaanottaja voi saada. Demos LAN Briim Computers Älymystö Friends Music PARTY! Sauna for people participating in compos! www.altparty.org Buy tickets for you and your friends at a special price! 18. 5.?Uolevi lähettää viestin, jossa on n bittiä. 3.?Vastaanottaja voi saada tarkalleen 123 erilaista viestiä. Jokainen lähetettävä viesti on bittijono eli muodostuu merkeistä ja 1. Kaikki tehtävät on mahdollista ratkaista nopeasti sopivalla algoritmilla — ja osa ilman tietokonetta! Ongelmien ratkaisut löytyvät Skrollin webisivuilta osoitteesta: http://skrolli.fi/pahkina/201303/. 2.?Entä jos Uolevi lähettää viestin 01100 011110000011111100000001111111 1000000000. Pähkinänurkka Tällä palstalla ilmestyy ohjelmointiin ja matematiikkaan liittyviä tehtäviä. Kuinka pitkä on lyhin mahdollinen Uolevin lähettämä viesti
Teksti: Panu Kalliokoski Kuvat: Mitol Berschewsky Kulttuuri. Koneymmärtämisen pohjatyö on tehty jo 60–70-luvulla. 20 2013.3 Ymmärryksen juurilla eli kuinka todellisuus selitetään koneelle Voisivatko tietokoneet ymmärtää maailmaa. Mitä ymmärtäminen ylipäänsä tarkoittaa
Tällaista tietorakennetta kutsutaan tietämyksen esitysmuodoksi (knowledge representation). Lähes kukaan ei enää odota tietokoneiden ymmärtävän ihmisten kieltä, tunnistavan näkyykö kuvassa vettä tai arvioivan eri lähteiden luotettavuutta. Yllä olevissa säännöissä on oletettu, että kaikki ravintolat toimivat samaan tapaan, asiakkaita on vain yhdenlaisia, eikä kukaan oleskele ravintolassa muista syistä. Asioiden ymmärtäminen on monimutkainen, mutta ei sentään mahdoton ongelma. Ensinnäkään ihmisten käyttämät päättelysäännöt eivät usein ole täydellisen varmoja, vaan ne perustuvat erilaisiin pohjaoletuksiin. Näille tietämyksen esitysmuodoille tehtiin sitten erilaisia operaatioita, kuten etsittiin tietokannoista niihin liittyviä lisätietoja tai päätelmiä, muunnettiin niitä takaisin (jollekin toiselle) luonnolliselle kielelle, lisättiin niiden tiedot tietämystietokantaan tai suunniteltiin tulevaa toimintaa tavoitteiden perusteella. Koska suuri osa luonnollisesta. Toisekseen sanoja on usein vaikea muuntaa logiikan käsitteiksi. Mitä tarkoittaa, että ne "ymmärsivät" jotain. Logiikkalausekkeiden on kuitenkin oltava ehdottoman paikkansapitäviä, tai muuten niistä seuraa helposti virhepäätelmiä. Mutta mitä huonommin nämä suhteet on määritelty, sitä vaikeampaa on kirjoittaa virheettömiä päättelysääntöjä. Luonnollisen kielen lauseita on sitä vaikeampi muuttaa predikaattilogiikaksi, mitä tarkemmin määriteltyjä predikaattilogiikassa käytetyt suhteet ovat. Tähän päivään asti nämä tekoälyohjelmien käyttämät sisäiset esitysmuodot ovat huolellisimpia ja käytännönläheisimpiä teorioita siitä, mitä merkitys oikeastaan on. Tietämyksen esitysmuodot eivät ole mielenkiintoisia ainoastaan ohjelmoinnin kannalta. Tässä artikkelissa tarkastellaan yleisellä tasolla näiden ohjelmien toimintaa. 60-luvulla John Robinson ja muut kehittivät muutamia olennaisia työvälineitä, joiden avulla rakennettiin ensimmäiset päättelyalgoritmit: logiikkalauseiden konjunktiivinen normaalimuoto (CNF) ja sille sovellettava yleispätevä päättelysääntö, resoluutio. Käsitys siitä, mitä tietokoneelta voi odottaa, on muuttunut ajan kuluessa. Kolmanneksi predikaattilogiikka soveltuu melko hyvin ikuisten, muuttumattomien asioiden kuvaamiseen, mutta teot, tapahtumat ja aikakehitykset saavat logiikassa hyvin monimutkaisen muodon. Tuohon aikaan aliarvioitiin reippaasti, miten vaikeaa on tehdä ohjelmia, jotka oppivat, osaavat yhdistää kokemuksen käsitteisiin ja selviävät luonnollisen kielen epätarkkuuksien ja monitulkintaisuuden kanssa. Predikaattilogiikka (PL) Logiikkaa tutkittiin "ajattelun kielenä" jo kauan ennen tietokoneita. Tämä merkitsi, että koneet pystyivät nyt tuottamaan automaattisesti väitejoukon kaikki seuraukset. Nykyajan psykologia ja kognitiotiede ovat hyötyneet myös tekoälytutkimuksen epäonnistumisesta, sillä tietämyksen esitysmuotojen puutteet ja ongelmat ovat tuoneet esiin, miten ihmisen mieli ei toimi. Seuraavaksi tarkastelemme muutamia keskeisimpiä perinteisiä tietämyksen esitysmuotoja. Olettakaamme esimerkiksi, että ohjelma tuntee säännöt: 1.?ne, jotka oleskelevat ravintolassa, mutta eivät ole siellä töissä, ovat ravintolan asiakkaita 2.?ravintolan asiakas maksaa ravintolan työntekijälle Predikaattilogiikan lausekkeina nämä voitaisiin ilmaista muodossa: (seuraa (asiakas ?x ?y) jos (ihminen ?x) (ravintola ?y) (sijaitsee ?x ?y) (ei (töissä ?x ?y))) (seuraa (maksaa ?x ?y) jos (asiakas ?x ?z) (ravintola ?z) (töissä ?y ?z)) Nyt jos ohjelmalle syötetään tieto "Tepa on ihminen, sijaitsee Krouvi-ravintolassa eikä ole siellä töissä", kone osaa päätellä "Tepa maksaa kaikille, jotka ovat töissä Krouvi-ravintolassa" eli (seuraa (maksaa Tepa ?y) jos (töissä ?y Krouvi)) Koska logiikka tarjoaa tällaisen tarkan tavan ilmaista sääntöjä ja soveltaa niitä, tämä oli yksi ilmeinen lähestymistapa luonnollisen kielen käsittelyyn: muunnetaan luonnollisen kielen ilmauksia logiikkalausekkeiksi, tehdään niistä päätelmät, ja muunnetaan uudet logiikkalausekkeet takaisin luonnollisen kielen ilmauksiksi. On kuitenkin asioita, joissa ihmisten odotukset tietokoneiden suhteen ovat laskeneet. Koneymmärtämisen pohjatyö on tehty jo 60–70-luvulla. Ymmärtävät ohjelmat ovat olleet niin pitkään unohduksissa, että moni arvioi tällaisen ohjelman kehittämisen vaikeammaksi kuin se onkaan. Mitä ymmärtäminen ylipäänsä tarkoittaa. Tämä johtuu siitä, että sanat viittaavat usein epämääräisesti monenlaisiin asioihin eikä ole helppoa päätellä, mikä niiden tarkka merkitys on. On totta, että tekoälyn kultavuosina oltiin puolestaan aiheettoman optimistisia. Ne ovat myös ainoita teorioita ihmisen toiminnasta, joita on onnistuttu soveltamaan ihmisen kaltaisen toiminnan tuottamiseksi. Enimmäkseen vaatimukset ovat kasvaneet: tietokoneilta odotetaan aina vain suurempaa laskentatehoa, tallennusja tiedonvälityskykyä. 21 V oisivatko tietokoneet ymmärtää maailmaa. tai Tepa on epänormaali asiakas tai Krouvi on epänormaali ravintola", mahdollisesti vieläkin useampia varauksia. Tässä artikkelissa tutustumme klassisiin merkitysteorioihin ja tietämyksen esittämismuotoihin. Silti jo 80-luvulla pystyttiin tekemään luonnollisella kielellä ohjattuja ohjelmia, jotka: •?tuottavat automaattisesti virheettömiä käännöksiä tiettyjen aihepiirien lehtiartikkeleista •?osaavat keksiä syitä ja välivaiheita kertomuksessa tapahtuville asioille ( SAM ja PAM ) •?osaavat perustella toimintatapaansa virtuaalimaailmassa ( SHRDLU ) •?tekevät yleistyksiä havaintojen perusteella •?tuottavat tarkempia diagnooseja epävarman tiedon perusteella kuin ihmislääkärit ( Mycin ). Nämä epävarmuudet voidaan ilmaista logiikassa, jolloin yllä olevaan johtopäätökseen lisättäisiin varaukset "... Esimerkiksi yllä olevat säännöt tarvitsisivat tarkenteita siihen, että Tepa on asiakas nimenomaan siihen aikaan, jolloin sijaitsee ravintolassa. Nykyajan tietokoneilla lasketaan kymmeniä kolmiulotteisen maailman projektioita sekunnissa, mutta 70–90-luvulla vaativimmat ohjelmat olivat ne, jotka yrittivät ymmärtää monimutkaista maailmaa. Miten nämä ohjelmat oikein toimivat. Osoittautui kuitenkin, että logiikka oli hankala väline sääntöjen (ja joskus havaintojenkin) ilmaisemiseen. Muita ratkaisuja epävarmuuteen ovat muun muassa oletuslogiikat ja todennäköisyyslogiikat. Mitkä näistä oletuksista ovat todella varmoja, riippuu käsitteiden "ravintola", "asiakas" ja muiden määritelmistä. Tarvitsisi vain kirjoittaa yleisluontoiset säännöt sekä havainnot logiikkalausekkeiksi. Nämä luonnollista kieltä käsittelevät ohjelmat toimivat tyypillisesti siten, että ne jäsensivät luonnollisen kielen ilmauksia joksikin sisäiseksi tietorakenteeksi, joka edustaa ilmausten tietosisältöä
22 2013.3 kielestä on erilaisten tilanteiden ja niiden muutosten kuvaamista, monet tekoälytutkijat kehittivät mieluummin omia, käytännönläheisempiä tietämyksen esitysmuotoja. CD:tä ei ollut koskaan suunniteltu esittämään maailmassa vallitsevia tiloja, ainoastaan tapahtumia. CD-esitysmuotoa laajennettiin jonkin aikaa uusilla käsitteillä, mutta laajempi primitiivijoukko teki CD-rakenteiden käsittelystä hankalampaa. Logiikka kuitenkin teki mahdolliseksi joitakin pysyviä saavutuksia tekoälyn saralla. Esimerkiksi alla on CD-esitykset ilmauksista "Terhi liikuttaa silmiä", "Terhi oppii artikkelista" ja "Terhi lukee artikkelia": Terhi lukee artikkelia Terhi liikuttaa silmiä Terhi oppii artikkelista MTRANS OBJ silmät AG Terhi DIR nil DIR artikkeli OBJ nil DIR Terhi MOVE DIR nil INSTR AG Terhi (MOVE Terhi silmät nil nil) (MTRANS Terhi nil artikkeli Terhi) (INSTR (MOVE Terhi silmät nil nil) (MTRANS Terhi nil artikkeli Terhi)) Termien selitykset: MOVE – tekijä liikuttaa jotain osaansa; MTRANS – tekijä siirtää ajatuksia tai ideoita; AG – tapahtuman aiheuttaja, tekijä OBJ – se, johon tapahtuma vaikuttaa, kohde; DIR – suuntamääreet, mistä mihin jotain tapahtuu; nil – määrittelemätön lauseenjäsen INSTR – instrumenttisuhde, yksi teko on toisen väline) Alun perin CD-muotoa käytettiin välimuotona käännettäessä tekstiä kielten välillä. Erilaisia tekoja oli vain 11 erilaista, sellaisia kuin siirtyminen (PTRANS), fyysisen voiman kohdistaminen (PROPEL), ajatuksen keksiminen (MBUILD) ja yhdistyminen johonkin (INGEST). Näin pystyttiin tuottamaan uudelleenkäytettävämpiä komponentteja, jotka auttoivat muun muassa monien asiantuntijajärjestelmien kehittämisessä. CD-pohjaiset järjestelmät eivät kuitenkaan tuottaneet olennaisia kaupallisia sovelluksia. Yksi näistä oli se, että erilaiset logiikkaa käyttävät tekoälysovellukset voitiin jakaa kolmeksi osa-alueeksi: tietämyskannaksi, päättelymoottoriksi ja näitä hyödyntäväksi käyttöliittymäksi. Myöhemmin siihen lisättiin päättelymekanismeja, jotka tuottivat erilaisista tilanteista arvauksia ja vaihtoehtoisia ilmauksia esimerkiksi sen perusteella, millaisia tyypillisiä seurauksia niillä on tai minkälaisessa asiainkulussa eli skriptissä ne olisivat tyypillisiä tilanteita. Sen lähtökohtana oli luoda kohtalaisen yleispätevä esitysmuoto, jossa muutamista yksinkertaisista palikoista voisi yhdistelemällä tuottaa kaikki erilaiset merkitykset. CD-muodolla saatiin testatuksi monia luonnollisen kielen käsittelyyn liittyviä teorioita ja ideoita. Conceptual Dependency (CD) Conceptual dependency -esitysmuodon kehitti Roger Schank yhdessä muiden kanssa 60--70-luvun vaihteessa kuvaamaan erilaisten kertomusten asiasisältöä ja auttamaan päätelmien tekemisessä asiasisällöstä. Varsinkin ihmisten sosiaalisissa suhteissa on monia tekoja, kuten vaikkapa ehdottaminen, painostaminen ja isyyden tunnustaminen, joiden esittäminen CDlausekkeina on hyvin monimutkaista. Semanttiset ja kehysverkot Rakkaalla lapsella on monta nimeä. Yksi syy lienee se, että alkuperäinen oletus 11 perustekotyypistä ei ollut kestävä. Samaa tai lähes samaa asiaa on aikojen saa. Kun maailman tilan kuvaamiseen tarkoitetut esitysmuodot alkoivat monimutkaistua, monet alkoivat käyttää niitä myös tapahtumien esittämiseen. Alkuperäisessä CD-esitysmuodossa primitiivilauseessa oli aina teko, tekijä, teon kohde, lähtöpaikka ja kohdepaikka. Monimutkaisemmat ilmaukset muodostettiin tällaisista primitiivilauseista yhdistelemällä niitä lauseiden välisillä suhteilla: yksi teko saattoi olla toisen kohde, syy tai väline
Niihin on yleensä lisätty erityisominaisuuksia erilaisten päättelysääntöjen toteuttamisen tueksi, kuten dynaamiset ominaisuudet määrittämään, miten yksi ominaisuus (kuten ikä) riippuu toisesta (kuten syntymäajasta). Todellisen maailman ymmärtäminen on paljon tutkittu ongelma, jossa on saatu paljon hyödyllisiä tuloksiakin. Käytännössä se tekee mahdolliseksi väitteet, jotka kommentoivat toisia väitteitä, kuten "on hyvä, että Terhi lukee artikkelia". Verkko edustaa väitteitä "Panu ja Henna ovat ihmisiä", "Panu ja Henna rakastavat toisiaan" ja "Henna on 22 vuotta vanha". Se tarkoittaa, että esimerkiksi käsite "ihminen" sisälsi tietoja tyypillisestä ihmisestä sen sijaan, että edustaisi vain kaikkien ihmisten luokkaa. Semanttiset verkot ovat tietämyksen esitysmuoto, jossa luetellaan erilaisia käsitteitä, niiden välisiä suhteita ja ominaisuuksia. On kuitenkin monenlaista yleistietoa, joka täytyy esittää muin keinoin. RDF-verkoissa pystyy tosin viittaamaan verkon kaariin käsitteinä, mutta tätä ominaisuutta ( reifiointia ) ei hyödynnä juuri kukaan. 70-luvun puolivälissä Marvin Minsky ja John Sowa kehittivät näihin vanhoihin ajatuksiin perustuvia esitysmuotoja tekoälyohjelmia varten. Semanttiset verkot eivät sovellu erityisen hyvin päättelysääntöjen kuvaamiseen. Yksi moderni semanttisten verkkojen järjestelmä on Hermann Helbigin MultiNet. Semanttiset verkot ovat silti erittäin monipuolinen tietämyksen esitysmuoto. Sellaisissa kaikki suhteet ovat binäärisiä eli kahdenvälisiä. Yhtä käsitettä suhteineen ja ominaisuuksineen kutsuttiin "kehykseksi", mistä nimi "kehysverkko" tulee. "Terhi lukee artikkelia" esitetään esimerkiksi näin: ihminen Terhi artikkeli tapahtuma y x lukeminen teko tekijä kohde on eräs on eräs on eräs on eräänlainen Termien selitykset: tekijä – tapahtuman aiheuttaja; kohde – se, johon tapahtuma vaikuttaa; on eräänlainen – tarkoittaa, että asialuokka X on asialuokan Y aliluokka, eli kaikki X:n yksilöt ovat myös Y:n yksilöitä Resource Description Framework (RDF) RDF on melko uusi, World Wide Web Consortiumin (W3C) kehittämä konekäsiteltävän tiedon esitysmuoto, joka on erityisesti suunniteltu auttamaan tiedon tuottamista hajautetusti yhteistyössä. Käyttötarkoitukseksi esitysmuodolle ei niinkään ole ajateltu tilannetta, jossa luonnollisesta kielestä tuotettaisiin automaattisesti RDF-verkkoja. Koska tieto löytyy täältä, ei tarvitse seurata "on eräänlainen" -linkkiä ihmisen käsitteestä nisäkkään käsitteeseen, jossa olisi taas tieto, että nisäkkäillä on yleensä 4 jalkaa. Tässä on esimerkki semanttisesta verkosta. Esimerkkejä tällaisista päätelmistä voisivat olla: 1.?Jos selvitetään, montako jalkaa Panulla on, vastaus ei löydy Panusta itsestään, mutta seuraamalla "on eräs" -linkkiä ihmisen käsitteeseen saadaan tieto, että ihmisillä on yleensä 2 jalkaa. 2.?Jos selvitetään, mitä tekemistä Panulla on Helsingin kanssa, löytyisi ehkä ensimmäiseksi tieto, että Panun asuinpaikka on Helsingissä, sillä näiden kahden välinen polku on vain kaksi askelta pitkä: Panu asuu talossa, joka sijaitsee Helsingissä. RDF:ssä olennaisin uudistus vanhoihin tietämyksen esitystapoihin verrattuna on se, että sekä käsitteillä että niiden välisillä suhteilla on maailmanlaajuisesti yksiselitteiset URI-tunnisteet. Ei tässä vielä kaikki Arkijärkeä soveltavien, arvauksia tekevien tai luonnollista kieltä ymmärtävien ohjelmien kirjoittaminen ei ole mitään mustaa magiaa. Semanttisissa verkoissa käsitteet olivat usein prototyyppisiä. Monet tekoälyissä käytetyt semanttiset verkot sisältävät kuitenkin muitakin mahdollisuuksia, kuten ominaisuuksien oletusarvoja, tarvittaessa dynaamisesti laskettuja ominaisuuksia tai muuta vastaavaa. Paljon muitakin yhteyksiä voi olla, mutta tämä on olennaisin assosiaation lyhyyden perusteella. 23 tossa kutsuttu ainakin semanttisiksi verkoiksi, kehysverkoiksi, konseptuaalisiksi graafeiksi ja suhdekaavioiksi. Panu Henna ihminen 22 v on eräs on eräs ikä rakastaa rakastaa Termien selitykset: on eräs – tarkoittaa, että yksilö X kuuluu asialuokkaan Y) Semanttisten verkkojen ja kehysverkkojen teoria palautuu 1900-luvun alkupuolelle ja siis selkeästi aikaan ennen tietokoneita. Proseduraalinen eli toiminnallinen tietämys on sen sijaan vähemmän tutkittu alue, eikä tässä jutussa paneuduttu siihen.?. Pikemminkin on ajateltu tapauksia, joissa jo olemassa olevaa koneluettavaa tietoa julkastaisiin RDF-muotoisena, jolloin sitä pystyisi yhdistelemään muihin RDF-muotoisiin tietoihin. Tavoitteena oli myös jäljitellä sitä, miten ihminen järjestelee mielessään tietoja suuriksi, yhteen kuuluviksi kokonaisuuksiksi. Tässä artikkelissa on esitelty vain näitä. Aika näyttää, kuinka paljon tällaista tietoa saadaan tarjolle. Lisäksi näitä tunnisteita voi käyttää myös linkkeinä, joista voi hakea lisätietoa käsitteestä konetai ihmisluettavassa muodossa. Näiden tunnisteiden perusteella pystyy helposti viittaamaan muiden määrittämiin käsitteisiin ja suhteisiin ja siten laajentamaan yhtenäistä, maailmanlaajuista tietämysverkkoa. Pohjimmiltaan se on ominaisuuksiltaan hyvin yksinkertainen semanttinen verkko. Kehysteoria oli sittemmin yhtenä esikuvana oliopohjaiselle ohjelmointiparadigmalle samoin kuin relaatiotietokantojen tietomalleille. Päättely semanttisessa verkossa on usein vastauksen etsimistä johonkin kysymykseen linkkejä seuraamalla, jolloin ensimmäinen vastaan tullut vastaus yliajaa muut mahdolliset vastaukset. Semanttinen verkko voi olla vain yksi esitystapa predikaattilogiikan lausekkeille. RDF-verkot koostuvat kokonaan kolmikoista (kaksi käsitettä ja niiden välinen suhde), eivätkä ne sisällä mitään perinteisiä helpotuksia päätelmien tai sääntöjen esittämiseen. Myös tapahtumien kuvaamiseen semanttiset verkot soveltuvat. Nykymaailmassa UML-diagrammit tarjoavat vakiintuneen esitystavan semanttisille verkoille. Varsinkin deklaratiivisen eli kuvailevan tietämyksen esitysmuodoiksi on tarjolla jo varsin hyviä ratkaisuja
Syötteenä on kokonaisluku n, joka on välillä 1...109. divisioonan kisoihin. Aluksi rating on 1500, ja muuttuu jokaisen kisan jälkeen. Hyvin mennyt kisa nostaa ratingia ja huonosti mennyt laskee. Bugin löytäjä palkitaan bonuspistein ja virheellisen koodin tekijä voi yrittää korjata ratkaisuaan. Koodi hyväksytään, jos se toimii oikein kaikissa testeissä. Vasemmalta oikealle Henrik Lievonen, Kalle Luopajärvi ja Sami Kalliomäki. Kun koodin lähettää kisan aikana palvelimelle, sen toimintaa testataan muutamalla syötteellä. Jos rating on 1700 tai enemmän, kuuluu kilpailija eliittiin ja saa osallistua 1. Jos tässä vaiheessa löytyy bugi, voi uuden koodin vielä lähettää korvaamaan edellistä. Usein algoritmin täytyy käsitellä suuria syötteitä sekunneissa. Jos luku on taikaluku, tulosta YES, ja muuten NO. Jos koodissa on pienikin bugi, tulos on yleensä nolla pistettä. Koululaisten ohjelmointiolympialaiset on järjestetty vuodesta 1989 asti, ja niihin osallistuu nykyään noin 80 maata. Jokaiseen tehtävään tulee lähettää algoritmin toteuttava koodi, joka lukee lähtötiedot ja tulostaa vastauksen tehtävänannon mukaisessa muodossa. Jos uskoo oman ratkaisun tehtävään olevan oikea, voi ratkaisun lukita, minkä jälkeen sitä ei voi enää muuttaa. TAPAHTUMA ON ILMAINEN JA AVOIN KAIKILLE, TERVETULOA! UUTTA UUSIMMAT KÄYTTÖJÄRJESTE LMÄT: AMIGAOS 4, MORPHOS 3 • JA AROS AMIGAONE X1000 ENSIESITTELYSSÄ SUOMESSA • UUSIMMAT MORPHOS-YHTEE NSOPIVAT KONEET • FPGA-KONEITA JA UUSIA LISÄLAITTEITA VANHOILLE KONEILLE • RETROA PELAILUA USEILLA ALKUPERÄISILLÄ AMIGA-KONEILLA • COMMODOREN 8-BITTISIÄ LAITTEITA C64:STÄ PET 2001:EEN • DRACO VISION, CDTV JA MUITA HARVINAISUUKSI A • NÄYTÖKSIÄ AMIGA-AIHEISIA VIDEOITA JA DEMOJA AUDITORIOSSA • OSTOKSIA SUOMALAINEN AMIGA-JÄLLEENM YYJÄ GENTLE EYE KY • YHDISTYKSEN TUOTTEITA • Kulttuuri K oulujen ja yliopistojen koodauskisoilla on pitkät perinteet. Kisan jälkeen seuraa varsinainen arvostelu, jossa koodia koetellaan suurella määrällä syötteitä. Tällöin pääsee tutkimaan muiden lähetyksiä kyseiseen tehtävään. Vaikuttaakin siltä, että kisakoodauksen suosio on kasvussa. Näissä kisoissa kaikki tehtävät ovat vaikeita. Esimerkiksi Googlen Code Jamiin osallistuvalle voi tulla kisan jälkeen työtarjous Googlelta. Voimalla tehokkaan algoritmin Tällä hetkellä netin aktiivisin kisakoodaussivusto on venäläinen Codeforces, joka aloitti toimintansa muutama vuosi sitten. http://saku.amiga . YHDISTYKSEN 20-VUOTISTAPAH TUMA JÄRJESTETÄÄN VANTAALLA TIEDEKESKUS HEUREKASSA LAUANTAINA 21.9.2013 KLO 12-18. Kisoissa menestyminen vaatii sekä teorian että käytännön taitoja. Koodarin taitoa mittaa rating, joka muistuttaa shakissa käytettyä vahvuuslukua. Vaikeinta on keksiä, kuinka ratkaista annettu ongelma tehokkaasti. Sivustolla järjestetään noin kerran viikossa kaikille avoimia ohjelmointikisoja. Teksti: Antti Laaksonen Millaisia tehtävät ovat. Hakkeroinnista on hyötyä molemmille osapuolille. Jos koodi puuttuu tai ei toimi, ratkaisulla ei ole kisassa arvoa. Arvostelu tapahtuu toteutetun algoritmin perusteella, joten myös itse ohjelmointivaihe on tärkeä. Viime vuosina nettiin on ilmestynyt lukuisia kaikille avoimia kisasivustoja. n.org | http://www.faceb ook.com/suomena migakayttajat SAKU 2013 | HEUREKA 21.9. Yleensä kisassa on kaksi tuntia aikaa ratkaista viisi algoritmitehtävää. Jotkin yritykset käyttävät kisoja rekrytointikanavana. Parhaasta koodista kultaa Kisakoodaus on koodarien oma urheilulaji, jossa tehokkaat algoritmit ovat kaikki kaikessa ja bugisen koodin tekijän kohtalo on kova. Koodista saa pisteitä vain, jos se on toimiva. Koodauskisoissa suunnitellaan ja toteutetaan tehokkaita algoritmeja annettuihin ongelmiin. Tässä on yksi tiivis C++-ratkaisu, jossa on ideana poistaa luvun lopusta 1, 14 tai 144 niin kauan, kuin tämä on mahdollista. Urheilu. Tehtävän ratkaisuun on monia erilaisia tapoja. Jos toisen koodista löytyy bugi, sen voi paljastaa antamalla syötteen, jossa koodi toimii väärin. Eräässä Codeforcesin kisassa helpoin tehtävä oli seuraava: Luku on taikaluku, jos sen voi muodostaa liittämällä peräkkäin lukuja 1, 14 ja 144. Koodaamisen lisäksi kisan aikana voi hakkeroida muiden koodeja. Esimerkiksi 14144, 141414 ja 1411 ovat taikalukuja, kun taas 1444, 514 ja 414 eivät ole. 24 2013.3 MITÄ SAKU 2013 ON SUURIN AMIGA-TAPAHTU MA SUOMESSA • YLI 10 VUOTEEN. Codeforcesin arvostelu on ankara. #include <iostream> using namespace std; int n; int main() { cin >> n; while (true) { if (n%10 == 1) n /= 10; else if (n%100 == 14) n /= 100; else if (n%1000 == 144) n /= 1000; else break; } if (n == 0) cout << "YES\n"; else cout << "NO\n"; } Suomen joukkue vuoden 2013 ohjelmointiolympialaisissa Australiassa. Usein yksikään osallistuja ei onnistu kisan aikana ratkaisemaan kaikkia tehtäviä
Tapaat meidät lokakuussa myös Skrollin ständillä WÄRK:festeillä sekä Alternative Partyilla. Käyrän pisteitä ovat koodarin rating-arvot kisoissa. Osallistu ircnetissä #skrolli tai lähesty sähköpostilla toimitus@skrolli.fi Maksamme nykyään pieniä julkaisupalkkioita. lokakuuta. Toisaalta koodauskisoissa menestyminen vaatii paljon työtä ja vahvan motivaation. Valko-Venäjän lisäksi Codeforcesin kärjessä ovat Venäjä, Kiina, Japani, Taiwan, Puola ja Ukraina. Skrollin lukijoiden joukossa on epäilemättä monia potentiaalisia kisakoodareita. Kuka näin ässää lehteä tekee?! Jatkossa vaikka sinä! Skrollin alkutaipaleen legendaaristen avustajien joukkoon mahtuu yhä mukaan. Koodauskisojen ylivoimaiset hallitsijat tulevat Itä-Euroopasta ja Aasiasta. YHDISTYKSEN 20-VUOTISTAPAH TUMA JÄRJESTETÄÄN VANTAALLA TIEDEKESKUS HEUREKASSA LAUANTAINA 21.9.2013 KLO 12-18. Codeforces-kisa on päättynyt ja tulokset on julkaistu. Ensimmäisenä oleva koodari ratkaisi tehtävän A vain kaksi minuuttia kisan alkamisen jälkeen. n.org | http://www.faceb ook.com/suomena migakayttajat SAKU 2013 | HEUREKA 21.9. Yksi mahdollinen syy länsimaiden heikkoon menestykseen on, etteivät ohjelmointi ja algoritmiikka kuulu koulujen opetusohjelmaan. Sen perusteella valitaan osallistujat valmennukseen ja aikanaan Suomen joukkue olympialaisiin Taiwaniin heinäkuussa 2014. Algoritmien harjoittelun motivaationa voi toimia halu päästä ulkomaille hyvään yliopistoon tai työpaikkaan. Codeforces-koodarin kehitystä voi tarkastella profiilissa olevasta käyrästä. Tuloslistan kautta voi myös tutustua muiden lähettämiin koodeihin. Suomalaisia ei huipulla näy, eikä muitakaan länsimaita. Tällä hetkellä Codeforcesin käyttäjissä on vain kymmenkunta suomalaista, mutta nyt on mahdollisuus muuttaa tilanne ja koodata Suomi maailmankartalle.. Suomessa yliopiston syventävillä kursseilla saatetaan opettaa samoja asioita kuin Itä-Euroopassa ohjelmointipainotteisissa kouluissa. Jos olet peruskoulussa tai lukiossa, sinulla on mahdollisuus päästä Suomen joukkueeseen. 25 MITÄ SAKU 2013 ON SUURIN AMIGA-TAPAHTU MA SUOMESSA • YLI 10 VUOTEEN. TAPAHTUMA ON ILMAINEN JA AVOIN KAIKILLE, TERVETULOA! UUTTA UUSIMMAT KÄYTTÖJÄRJESTE LMÄT: AMIGAOS 4, MORPHOS 3 • JA AROS AMIGAONE X1000 ENSIESITTELYSSÄ SUOMESSA • UUSIMMAT MORPHOS-YHTEE NSOPIVAT KONEET • FPGA-KONEITA JA UUSIA LISÄLAITTEITA VANHOILLE KONEILLE • RETROA PELAILUA USEILLA ALKUPERÄISILLÄ AMIGA-KONEILLA • COMMODOREN 8-BITTISIÄ LAITTEITA C64:STÄ PET 2001:EEN • DRACO VISION, CDTV JA MUITA HARVINAISUUKSI A • NÄYTÖKSIÄ AMIGA-AIHEISIA VIDEOITA JA DEMOJA AUDITORIOSSA • OSTOKSIA SUOMALAINEN AMIGA-JÄLLEENM YYJÄ GENTLE EYE KY • YHDISTYKSEN TUOTTEITA • Länsimaiden perikato Codeforcesin korkeimman ratingin haltija on valkovenäläinen Gennady Korotkevich. Kuvan koodari on onnistunut nousemaan rajan 1700 yli divisioonaan 1. Hän on kisakoodausmaailman julkkis, jonka saavutuksiin kuuluu kuusi kultamitalia koululaisten ohjelmointiolympialaisista. Ensimmäinen vaihe on osallistua Datatähtikisaan, joka alkaa tänä vuonna 15. http://saku.amiga . Suomi osallistuu vuosittain koululaisten ohjelmointiolympialaisiin (IOI). Tervetuloa tutustumaan ja ideoimaan yhdessä!. Haluatko olympialaisiin. Kukin maa voi lähettää olympialaisiin neljän hengen joukkueen
Kun MESS käynnistetään parametrilla "pdp1" ja varoitusdialogit ohitetaan, päästään näkymään, jonka oikeassa ylänurkassa on jäljitelmä PDP-1:n ohjauspaneelista kytkimineen. Sitä valmistettiin vuosina 1959-1969 melko vähän, mutta monien korkeakoulujen opiskelijat saattoivat varata konetta iltaisin käyttöönsä. Vasemmassa ylänurkassa on musta tila, joka vastaa koneen kuvaputkea, ja alareunan valkoinen alue esittää paperipäätteen paperia. PDP-1 on siis laskentaominaisuuksiltaan verrattavissa 1980-luvun alun kotimikroihin. Programmed Data Processor 1 oli yhdysvaltalaisen Digital Equipment Corporationin ensimmäinen tietokone ja merkittävä laite varhaisessa hakkerikulttuurissa. Sen sijaan laitteessa on ohjauspaneeli, jolla voi käsitellä muistia bittitasolla ja käynnistellä ja pysäytellä ohjelman suoritusta. Jutussa esitetyt ideat ovat toki sovellettavissa muillakin alustoilla. Tässä artikkelissa lähestymme PDP-1:tä melko demoskenehenkisesti tarkoituksenamme ohjelmoida sille jotain, jota sillä ei ole koskaan aiemmin nähty. Nykykoneista poiketen PDP-1 ei tee käynnistyttyään mitään. Nämä etuoikeutetut pioneerit saivat ensimmäisinä tuntuman siihen, millaista tietotekninen harrastekulttuuri voi olla. Emulaattori käyntiin Tiettävästi enää yksi PDP-1 on käyttökunnossa. Kone sijaitsee tietokonehistoriallisessa museossa Kalifornian Mountain View'ssa. Ykkösellä ja Q:lla alkavat rivit kääntelevät osoitekentän kytkinten asentoja ja alemmat rivit testisanakentän. PDP-1 oli aikanaan suhteellisen pieni kone — painoa kokonaisuudella oli vain tonni, ja se mahtui pieneen huoneeseen. Ohjauspaneelia ei voi naksutella hiirellä, vaan se tapahtuu näppäimistöltä ctrl pohjassa. Koska SIMH ei tue grafiikkaa, ja koska haluamme tehdä etenkin grafiikkaohjelmia, valitsemme emulaattoriksi MESSin. Muuhunkin kuin Spacewar-peliin taipuvia emulaattoreita on käytännössä tarjolla kaksi: vanhoihin minija mainframekoneisiin keskittyvä SIMH ja kotitietotekniikkaan painottuva MESS. PDP-1:n sananleveys on 18 bittiä ja keskusmuistia peruskokoonpanossa on 4096 sanaa, siis reilut 9 kilotavua. Tietokoneharrastajat kokeilevat mielellään vanhoja laitealustoja, koska ne antavat kosketusta oman kulttuurimuodon juuriin ja ovat usein mukavan yksinkertaisia ja välittömiä. Teksti: Ville-Matias Heikkilä Kuvat: Ville-Matias Heikkilä, Wikimedia Commons (Joi Ito). Siinä ei ole ROMmuistia, jonka sisältöä kone alkaisi suorittaa automaattisesti. Read-in -kytkimellä kone alkaa suorittaa käskyjä reikänauhalta, joten valmisohjelmien lataamiseksi ei tarvitse nyplätä bittejä. Opiskelijat toteuttivat koneelle mm. Kone käytti edistyksellisesti transistoreja ja ferriittirengasmuistia, joten 1950-luvun tekniikalle tyypilliset pullonkaulat olivat sen osalta ollutta ja mennyttä. PDP-1 on tavoitettavissa emulaattorilla. kuuluisan Spacewarvideopelin sekä musiikkija grafiikkaohjelmia. Muistin lukuja kirjoitusoperaatiot vievät aikaa viisi mikrosekuntia, mikä on myös nopeimpien konekäskyjen suoritusaika. 26 2013.3 Rauta Mikä PDP-1. PDP-1:stä innostunut bittinikkari joutuu siis tyytymään emulaattoriin, ellei hän pääse hyviin väleihin museon henkilökunnan kanssa. Keskusyksikön lisäksi peruskokoonpanoon kuuluivat tekstipäätteenä käytetty kaukokirjoitin, reikänauhan lukuja lävistyslaitteet sekä iso, tutkanäyttöä muistuttava kuvaputki. Näppäimet I:stä alkaen vastaavat paneelin kytkimiä PDP-1 Hakkerikulttuurin juurilla Olisiko 50 vuotta vanhan koneen bittejä kiva nyplätä. Toisaalta tietokoneharrastajilla on harvemmin kunnon käsitystä kasibittisaikakautta varhaisemmasta historiasta, joten Skrolli-lehti katsoo aiheelliseksi valottaa sitä
Pettymysten pettymys! Versiohistoria kertoo, että juuri edellisessä MESSin versiossa oli reikänauhanlukijakin rikki. Kun tiedosto on mountattu valikon kautta, ctrl-enter käynnistää reikänauhanlukijan. PDP1:n käskykanta on akkukeskeinen: useimmat käskyt operoivat muistipaikan ja akuksi kutsutun rekisterin välillä. PDP-1:n näyttö on oskilloskooppityyppinen eli ampuu elektronisuihkuja määrättyihin kuvapinnan kohtiin. Emulaattorit eivät kuitenkaan oikein taivu niiden ajamiseen. 27 run, stop, continue, examine ja deposit. Miellyttävän leveiden sanojen ja kertolasSpacewar-pelin ohjelmoijana tunnettu Steve Russell PDP-1:n ohjauspaneelin kimpussa.. Editoria ei saa nykyaikaiselta päätteeltä takaisin komentomoodiin, ja assembleri tuntuu jäävän aina jumiin riippumatta siitä, millaisia nauhoja sille syötetään. Tässä korvaamaton apu on PDP-1:n käsikirja, joka löytyy helposti netistä. Haluamme luoda äkkiä jotain näkyvää. Ylemmät 6 bittiä on varattu käskykoodille ja alemmat 12 bittiä operandille, joka on tyypillisesti muistiosoite. PDP-1:n käskyt ovat yhden 18-bittisen sanan mittaisia. Konekäsky dpy ampuu näytölle pisteen paikkaan, jonka X-koordinaatti saadaan akusta ja Y-koordinaatti IOrekisteristä. Esimerkiksi käsky "add 1234" (oktaalina 401234, binäärinä 100-000-001-010-011-100) lisää akkurekisterin arvoon muistipaikassa 1234 olevan luvun. Bitinnypläystä kytkimillä Kun emulaattori on todettu toimivaksi, siirrymme syöttämään koneeseen omia ohjelmia aluksi suoraan ohjauspaneelista. Naksutellessamme ohjelmaa muistiin huomaamme, ettei deposit-kytkin toimi lainkaan: sanat eivät yksinkertaisesti tallennu muistipaikkoihin. Yritämme korjata toiminnallisuuden itse, mutta emulaattorin koodi ei meinaa kääntyä millään ja luovutamme. Olisimme halunneet saada edes jonkinlaisen tuntuman siihen, millaista varhaisten PDP-1-hakkerien harjoittama ruohonjuuritason kokeellisuus oli, mutta joudumme unohtamaan binäärikytkimet ja vilkkuvalot. Nolla on ruudun keskellä. Laadimme minimaalisen kolmen sanan ohjelman (listaus 1), jonka pitäisi pommitella näytölle pisteitä kasvavilla akun arvoilla. Seuraavalla aukeamalla on enemmän käskyesimerkkejä. Testaamme emulaattoria aluksi lataamalla Spacewarpelin RIM-tiedostosta, virtuaaliselta reikänauhalta. PDP-1:n ominaisuudet vaikuttaisivat erityisen sopivilta pisteistä koostuville grafiikkaefekteille. Unohdamme siis taas kerran autenttisuuden ja tyydymme SIMH:n mukana tulevaan macro1-ristiinkääntäjään. Ohjelma kääntyy suoraan emulaattorissa käynnistyväksi RIM-tiedostoksi. 440003 idx 3 1 730007 dpy 2 600000 jmp Listaus 1: kolmen käskyn grafiikkaohjelma oktaalina ja assemblyna dpy=730007 lp, lat add v dac v rcl 9s xor v dpy jmp lp v, Listaus 2: munching squares -grafiikkaohjelma macro1:lle kelpaavana assemblyna Pikkuohjelmien jälkeen on aika valita isomman projektin aihe. Hienoa! Liikkuva piste toimii kuten pitääkin. Hyvin toimii, ja peli käynnistyykin automaattisesti, koska nauha loppuu sopivaan jmp-käskyyn. Teemme siitä lukuisia muunnelmia ja kokeilemme siinä sivussa myös alkuperäistä munching squares -ohjelmaa (listaus 2). Kääntäminen reikänauhaksi Kaivamme seuraavaksi esiin PDP-1-arkistointiprojektin FTP-palvelimelta esiin Digitalin alkuperäisen MACROassemblerin ja Extensive Typewriter-tekstieditorin
Kun vaatimattomalla koneella toteutetaan vaativampia temppuja, on hyvä testata algoritmit ensin valmiiksi hieman korkeammalla abstraktiotasolla. Testaamme kuvion piirtämistä listauksen 3 mukaisella C-koodilla. Silmukan päätyttyä add-käsky palautetaan ennalleen lawja dap-käskyillä. drawSierpinskiDots() { int i=0; for(;i<512;i++) { int r = rnd[i]; x = (x+vertices[r+0])/2; y = (y+vertices[r+1])/2; dpy(x,y); } } makeRndTable() { int a=0,i=0; for(;i<512;i++) { a>>=1; a^=i; a+=05624; rnd[i]=a&6; } } shuffleRnd() { static int p=0; int i,j=p; for(i=0;i<15;i++) { rnd[j]^=6; j+=16; } p=(p+7)&15; } Listaus 3: C-malli kuvion piirtosilmukasta ja satunnaislukugeneroinnista. Otsakkeella xy merkityn muistipaikan yläpuolisko vastaa X:ää ja alapuolisko Y:tä. Esitämme sinit ja kosinit 13072-osina, joten pudotamme kertolaskujen jälkeen 36-bittisestä tulosta alimmat 17 bittiä pois. Yksi silmukan kierros kestää käsikirjan luvuista summaamalla 135 mikrosekunSierpinskin tetraedrin pyörittelyä C-kielisellä testiohjelmalla.. Tarkkuudesta ei siis tarvitse tinkiä nopeuden vuoksi. Käsky idx kasvattaa muistipaikan ptr sisältöä eli vaihtaa siinä olevan epäsuoran add-käskyn viittaamaan seuraavaan muistiosoitteeseen. Muutamia erilaisia vaihtoehtoja kokeiltuamme päädymme listauksen 5 mukaiseen koodiin. Sas-käsky vertaa uutta käskyä muistipaikassa endptr olevaan käskyyn ja hyppää jmpkäskyn yli, mikäli se on sama. Koska olemme maksimoineet koodin nopeuden, laskemme Xja Ykomponentit samanaikaisesti. Näin satunnaisuutta on riittävästi mutta ei liikaa. Ja sitten assemblerin kimppuun Kun kuvio pyörii algoritmitestissä kuten pitääkin, on aika sovittaa koodi PDP-1-assemblyksi. Koska testikoodi on hyvä pitää mahdollisimman lähellä kohdekoneen abstraktiotasoa, on siihen otettu mukaan myös muutama hyödyllinen osoitinkikkailu. Toteutamme kuvion iteroituna funktiosysteeminä (IFS). Yritämme saada siitä mahdollisimman nopean, ja rakennamme tarvittaessa koko muun ohjelman sen oikkujen varaan. Käytämme 2D-pyöritysrutiinia myös sinitaulukon laskemiseen. Laskennan jälkeen akun alapuolisko heitetään bittipyörityskäskyillä IO-rekisterin puolelle, josta dpy-käsky ottaa pisteen Y-koordinaatin. Kaikki laskenta tapahtuu PDP-1:ssä kokonaisluvuilla. Silmukan alkuosa law-käskystä dac-käskyyn laskee uuden pisteen koordinaatit. Sierpinskin tetraedri on kuvion kolmiulotteinen versio, jossa tetraedrit koostuvat tetraedreista. Päädymme toteuttamaan pisteistä koostuvan, pyörivän Sierpinskin tetraedrin. Koska ylivoimaisesti käytetyin koodin osa on yksittäisiä pisteitä iteroiva silmukka, panostamme siihen eniten. 3D-pyöritykseen tarvitsemme kuitenkin kaikki komponentit. Koska kuvion kaikki pisteet lasketaan neljästä kulmapisteestä, meidän tarvitsee pyörittää vain niitä. Päätämme ottaa satunnaisluvut valmistaulukosta, jota sekoitetaan kunkin piirtorupeaman jälkeen hieman. Periaate on se, että uuden pisteen koordinaatit saadaan laskemalla keskiarvo edellisestä piirretystä pisteestä ja satunnaisesta kuvion ääripisteestä. Satunnaisten kulmapisteiden muistiosoitteilla täytetty rndvtx-taulukko käydään läpi itseäänmuuttavalla koodilla. rotate3D(int*x,int*y,int*z,int*a, int*b,int*c) { rotate2D(x,y,*a,*(a+64)); rotate2D(x,z,*b,*(b+64)); rotate2D(y,z,*c,*(c+64)); } // Pyörityskulma vastaa ympyrän 256-osaa: // 3197 = sin(2PI/256)*131072 // 131032 = cos(2PI/256)*131072 makeSineTable() { int x=0,y=131071,i=0; for(;i<256+64;i++) { sine[i]=x; rotate2D(&x,&y,3197,131032); } } Listaus 4: 3D-pyörityksen C-malli sinitaulukointeineen. Piirtovaiheessa meille riittävät kaksiulotteiset koordinaatit, sillä emme tarvitse perspektiivikorjausta emmekä taakse jäävien pisteiden piilotusta. Pisteiden vähyydestä johtuen emme myöskään laske 3D-pyöritystä varten matriiseja, vaan hoidamme sen kolmen 2D-pyörityksen ketjuna. loop, law i 1000 and xy sar 1s ptr, add i rndvtx dac xy rcr 9s sal 9s dpy idx ptr sas endptr jmp loop law rndvtx dap ptr jmp loop xy, endptr, add i rndvtx+1000 Listaus 5: Sierpinskin tetraedrin piirtosilmukka. Toimiva malli ensin Sierpinskin kolmio on yksinkertainen fraktaali, joka koostuu kolmesta kolmiosta, joista kukin koostuu samalla tavoin kolmesta kolmiosta ja niin edespäin. Andoperaatiolla nollataan yksi välibitti, jotta puoliskot eivät sotkeentuisi toisiinsa. 28 2013.3 kunopeuden vuoksi harkitsemme etenkin 3D-pyöritystä ja fraktaaleja. #define mul(a,b) ((((long long) (a))*(b))>>17) rotate2D(int*x,int*y,int s,int c) { int x1 = mul(*x,c) + mul(*y,s); int y1 = mul(*y,c) mul(*x,s); *x=x1; *y=y1; } // Osoittimet a, b ja c viittaavat sinitaulukkoon, // Sinin kaveriksi saa kosinin samasta taulukosta // 90 asteen eli 64 taulukkoaskeleen päästä. Kuvio ei tule koskaan valmiiksi, joten pisteitä saa piirtää niin monta kuin suinkin ehtii
Nykykulttuuria ei voi ymmärtää ilman historiaa. Alkuperäiset PDP-1-hakkerit kuolevat jo vanhuuteen, eikä viimeinen toimiva laitekaan ikuisesti pysy käyttökunnossa. Sir ja sil pyörittävät IO-rekisteriä, scr ja scl akun ja IO-rekisterin yhdistelmää. Rekistereillä ei voi osoittaa muistipaikkoihin, joten itseään muuttava koodi on usein paras tapa käydä läpi muistialueita. (Deposit Address Part) add 1234 Summaa akkuun muistipaikan 1234 arvon. Tästä syystä PDP-1:n kaltaiset hakkerihistoriallisesti merkittävät koneet ansaitsisivat arvoisensa emulaation, joka vangitsisi niiden teknisen olemuksen ja käyttökokemuksen mahdollisimman hyvin. Kuka lähtisi ajamaan asiaa?. Vastaavat r-alkuiset käskyt ovat kehäpyörityksiä (Rotate). Mikäli laskemme 512 pisteen rupeaman yhdeksi kuvaksi, saamme kuvataajuudeksi noin 14 fps. MESSin PDP-1-emulaattori ajamassa Munching Squares -ohjelmaa.. Aliohjelman on ensi töikseen korjattava lopussaan oleva jmp-käsky osoittamaan oikeaan paluuosoitteeseen. Sal siirtää vasemmalle. Mitä kokemuksesta kostui. PDP1-emulaattorit ovat kuitenkin nykyisellään hyvin vaikeita, keskeneräisiä ja bugisiakin. Kun kuvio pyörii kuten pitääkin, on viimeistelyn aika. Viimeisteltyä tetraedriohjelmaa pyörittävä emulaattori ja linkki täydelliseen lähdekoodipakettiin löytyvät sivultamme osoitteesta http://skrolli.fi/pdp1 . Konekieliohjelmointi on edelleen melko samankaltaista kuin puoli vuosisataa sitten. (InDeX) sar 9s Siirtää akun bittejä oikealle 9 askelta (Shift Accumulator Right). jmp 1234 Hyppää muistipaikassa 1234 olevaan käskyyn. Häkkyrä pyörimään Kun ohjelma toimii hyvin kiinteillä kulmapistekoordinaateilla, pääsemme toteuttamaan 3D-pyörityksen. (Deposit ACcumulator) dap 1234 Tallentaa akun 12 alinta bittiä muistipaikan 1234 vastaaviin bitteihin. Negatiiviset luvut esitetään yhden komplementtina, eli lukujärjestelmään kuuluu sekä negatiivinen että positiivinen nolla. Montako pistettä kannattaa piirtää pyöritysten välissä. 9s tarkoittaa lukua, jossa on 9 ykköstä (oktaalina 777). Ehdollisiin hyppykäskyihin ei voi antaa kohdeosoitetta, vaan ne hyppäävät aina seuraavan käskyn yli. idx 1234 Kasvattaa muistipaikan arvoa yhdellä ja lataa kasvatetun arvon akkuun. Kuinka satunnaislukutaulukkoa kannattaa sekoittaa. 29 tia, mutta sen saisi hieman nopeammaksi unrollaamalla eli kirjoittamalla sisukset useampaan kertaan. Noudatamme melko suoraan C-mallia ilman kummempia lisäkikkailuja. (Load ACcumulator) lac i 1234 Epäsuora osoitus: lataa akkuun luvun muistipaikan 1234 osoittamasta muistipaikasta. (Load Accumulator from Test word) Lopullinen fraktaaliohjelma sovitettuna Masswerk.at:stä nyysittyyn emulaattoriin. PDP-1 on konekielitasolla melko helposti lähestyttävä kone, ja sitä voisi yksinkertaisuutensa vuoksi jopa suositella tietokonetekniikan tai assemblyohjelmoinnin alkeiskursseille. (Skip if Accumulator Same) dpy Ampuu pisteen kuvaputkelle. Ei mikään paha nopeus 50-luvun koneelta! PDP-1-assemblyssa on paljon tuttua mikrotietokoneajan lapsille, mutta myös outoja vanhakantaisuuksia löytyy. PDP-1:een tutustuminen MESSin kautta vaatii nykyisellään jonkin verran salapoliisityötä, ja minkäänlaista tuntumaa bittikytkimiin tai reikänauhoihin on liki mahdoton saada. Monille suosituille koneille on hyviä emulaattoreita, joilla kaikki toimii suoraan, ja jotka kelpaavat tarkkuutensa puolesta jopa rautakikkailudemojen tekemiseen. Useimmilla käskyillä ainoat osoitusmuodot ovat suora ja epäsuora muistiviittaus. Millaiset pyöritysaskelet ovat hyvät. Muutamia PDP-1:n käskyjä: lac 1234 Lataa akkuun luvun muistipaikasta 1234. Monet asiat ovat toki muuttuneet, mutta yllättävän monet ovat myös pysyneet. Assembler-ohjelmoinnin kautta syntyi kuitenkin jonkinlainen suhde tähän "maailman ensimmäiseen lelutietokoneeseen". Kertolaskurutiinin pääsemme toteuttamaan itse, sillä PDP-1:n perusmallissa on mul-käskyn sijaan pelkkä yhden kertolaskuaskelen hoitava mus-käsky. Aritmetiikka ei tunne muistinumerolippua. Luku ladataan negatiivisena, jos epäsuoruusbitti on päällä: law i 1234. Vanhoja pelejä arkistoidaan ja emuloidaan jo melkoisen kiitettävästi, mutta aika alkaisi olla kypsä myös laajemmalle tietokonehistorian elävöittämisliikkeelle. Muita vastaavasti toimivia käskyjä ovat sub, and, xor ja ior. (Load Accumulator With) dac 1234 Tallentaa akun sisällön muistipaikkaan 1234. (DisPlaY) lat Lataa testisanakytkinten asennot akkuun. Kehitysvaiheessa käytetyt parametrit kannattaa vaihtaa sellaisiksi, joilla lopputulos näyttää mahdollisimman hyvältä. law 1234 Lataa akkuun luvun 1234. (JuMP) sas 1234 Ohittaa seuraavan käskyn, jos akun arvo on sama kuin muistipaikan 1234 sisältö. X-koordinaatti akusta, Ykoordinaatti IO-rekisteristä. Pidämme kuitenkin koodin lyhyenä, sillä saamme joka tapauksessa piirrettyä yli 7000 pistettä sekunnissa
Kun Bandai vuonna 1994 lähestyi Applea asian tiimoilta, se oli kiinnostunut ennen kaikkea Motorolan 68030-prosessoriin pohjautuvasta Macintoshista. Tämä lienee ollut Applelle miettimisen paikka. PowerPC:n ympärille suunniteltu Pippin perustui kevennettyyn System 7.5.2 -käyttöjärjestelmään, maksimissaan 32 megatavun muistiin ja CD-asemaan. Nimi olikin kuvaava: sen sijaan, että Apple olisi vain myynyt Bandaille konsoliraudan, se halusi tehdä Pippinistä uuden omenalajikkeen, koko kodin viihdealustan. Auttava käsi idästä Toisen maailmansodan jälkeen pienoismallien teon aloittanut Bandai oli jo 1980-luvulla vakiinnuttanut asemansa yhtenä Japanin ja koko maailman suurimmista leluyhtiöistä. Pitäisi siis vain suostutella Apple suunnittelemaan kotimikrostaan laihdutettu versio, jota Bandai voisi valmistaa lisenssillä. Lopulta asian ratkaisi se, että tutkimusten mukaan kuluttajat halusivat laitteeseen mahdollisuudet tietoverkkojen käyttöön. Ennestään sillä oli jo Playdia, yksinkertainen CD-konsoli visailuja anime-peleille. Koska Apple oli juuri pari vuotta aiemmin uudistanut tavan, jolla Mac käytti modeemia, käytännössä ainoa mielekäs vaihtoehto oli suunnitella koko laite uudelleen PowerPC 603 -prosessorin ympärille. Valmiina oli jopa karkea prototyyppi. Myös sähköinen viihde oli Bandain sydäntä lähellä. Yritys tehdä Macintoshista pelikonsoli ei ollut oikein kumpaakaan. Microsoft Windows nakersi Applen markkinaosuuksia myös graafiseen käyttöön tarkoitettujen työasemien markkinoilla. Niinpä 90-luvun alussa se halusi synnyttää uuden, monipuolisemman laitteen CDROM-pelien pelaamiseen. 30 2013.3 A pple Computer oli hukassa 1990-luvun alkupuolella. Koska konsoli käytännössä perustui Macintosh-laitteistoon, varsinainen suunnitteluvaihe ei kestänyt kovin kauaa. Ajoittaisen realismin puuskassa Apple ei ajatellut ryhtyvänsä itse konsolivalmistajaksi, vaan myyvänsä lisenssejä laitteiston valmistukseen eri yhtiöille. Omppuja olkkariin Pippin ei saanut nimeään suinkaan KeskiMaan tarustosta, vaan Newport Pippin -omenasta. Koska Pippin oli sisäisesti Mac, kasvattaisi se näin välillisesti Macintoshinkin markkinaosuutta. Välirikosta lähtien Apple oli yrittänyt keksiä seuraavaa isoa juttuaan. Teksti: Mikko Heinonen Kuva: Manu Pärssinen Ei näin! Apple Pippin, iFail Pelit ” Peli-Macintosh ei pärjännyt Sonyn, Nintendon ja kumppaneiden konsoleille.. Puolijumala Steve Jobs oli lähtenyt firmasta vuonna 1985 riitaannuttuaan hallituksen kanssa, kehittänyt NeXT-mikron ja perustanut Pixar-elokuvastudion. Samaan päämäärään Apple oli pyrkinyt jo muutenkin sallimalla klooni-Macien valmistuksen. Pelikonsoli saattaisi tuoda kassaan kaivattua täytettä, mutta toisaalta Apple oli juuri siirtymässä voimakkaasti kohti uutta PowerPC-arkkitehtuuria. Yhtiön tietokonemallisto alkoi olla jo vanhahtavaa, vaikka PowerBook-kannettavan esittely olikin tuonut myynteihin tilapäistä nostetta. Lopulta Bandain lisäksi lisenssin hankki vain yksi yritys, Katz Media, joka sekin valmistutti koneensa Bandailla. Bandai Pippin Atmark tuotiin Japanin markkinoille jo vuoden 1995 maaliskuusApple on viime vuosina tullut tunnetuksi rohkeista ja uutta luovista tuote-esittelyistään. Toistaiseksi Applella oli onnistuttu vain toteamaan, ettei uusi menestysresepti ollut ainakaan Newton-kämmenmikro, uusi A/UX-käyttöjärjestelmä, digitaalikamera tai Philipsin hifi-laitteiden myynti omalla nimellä. Arvioituaan markkinoita Bandai tuli siihen tulokseen, että Apple Macintosh sisältää valmiiksi halutut ominaisuudet
Paitsi, että Pippin oli todella kallis (USA:ssakin 600 dollaria), se oli jo lähtökohtaisesti sopimaton pelikoneeksi. Se julkaistiin vasta vuoden 1996 syksyllä, vaikkei eroina ollut kuin käyttöjärjestelmän kieli ja kotelon väri. Heitä ei ollut likimainkaan tarpeeksi. Katz Media solmi kyllä sopimuksia Pippinlaitteiden myynnistä hotelleihin ja infokioskeiksi, mutta nämä ovat kuluttajakauppaan verrattuna pieniä toimialoja. Bandai ei tähdännyt Pippinillä taivaisiin, vaan suunnitteli myyvänsä niitä noin puoli miljoonaa vuodessa. Vakiomallissa oli muistia peräti kuusi megatavua (PlayStationissa kaksi Mt) ja lisämuistiakin oli kaupan. Kuka tätä tarvitsee. Vaikka laite oli tehokas, kokonainen tietokoneen käyttöjärjestelmä vei suuren osan resursseista. Modeemin lisäksi Pippin sisälsi muun muassa tulostinja näppäimistöliitännät ja jopa lähdön VGAnäytölle. Peliohjaimeen oli yhdistetty trackball, jolla saattoi käyttää hiiren vaativia ohjelmistoja. Epäonnistumisen syitä on melkein valittavaksi asti. 31 sa. Pelaajalle syitä Pippinin hankintaan ei oikein ollut. Käytännössä se oli vain vähän riisuttu tietokone. Miltei 65 000 jenin hintaisena se oli tyyris, sillä esimerkiksi Sony PlayStation maksoi julkaisussa alle 40 000 jeniä. Pelijulkaisijat olisivat kaivanneet todellista volyymia. Valtaosa vähäisistä nimikkeistä oli kankeaa multimediaa, harvat varsinaiset pelit käännöksiä Macilta. Kalliissa laitteessa oli toki monenlaisia ominaisuuksia. Pohjois-Amerikassa ja Euroopassa laite sai nimekseen Bandai Pippin @WORLD. Näin Pippin tavoitteli lähinnä kuluttajia, jotka halusivat mitenkuten pelikelpoisen nettipäätteen, mutta eivät oikeaa tietokonetta. Pelikonsolien maailmassa miljoonan kappaleen myynti on lähinnä hyvä alku, ja kunkin sukupolven voittajista voidaan puhua kun myyntiluvut pyörivät kymmenissä miljoonissa. Ja vaikkei Applenkaan tulevaisuus sentään Pippinin varassa ollut, jatkettiin alustan kehittelyä sen floppaamisesta huolimatta. Jos menekki Japanissa oli laiskanlaista, lännessä Pippiniä ei ostanut käytännössä kukaan. Macintosh-variantti ei pystynyt kilpailemaan pelisuorituskyvyssä Sonyn, Nintendon ja kumppaneiden erikoisrautaa sisältäneitä pelikonsoleita vastaan. Työn lopetti vasta Steve Jobs, joka Applen ruoriin palattuaan katkoi kerralla kaikki Mac-tuoteperheen ulkopuoliset versot.?. Tämä musta versio laitteesta onkin huomattavan harvinainen, vaikkei valkoistakaan voi yleiseksi kutsua. Bandaita Pippinin epäonnistuminen tuskin paljon heilutti. Se kun ei ollut edes ainoa pelikonsoli, jota yhtiö valmisti ja myi – lelumyynnistä nyt puhumattakaan. Eri lähteissä mainitaan vain noin 5 000 kappaleen myynti, ennen kuin Bandai laivasi myymättömät koneet takaisin Japaniin. Länsimaihin tarkoitetut Pippinit olivat mustia, jutun kuvassa esiintyvä valkoinen kone on Japanin malli. Tähänkään ei päästy, vaan ennen laitteen tuotannon lopettamista vuonna 1997 niitä ehdittiin saada kaupaksi noin 40 000 kappaletta
Ristitulo lasketaan determinanttina matriisista, jonka ensimmäisellä rivillä ovat kantavektorit, toisella rivillä tulon vasen vektori ja kolmannella rivillä oikea vektori. Tällöin kummankin vektorin vastaaville alkioille suoritetaan erikseen yhteentai vähennyslasku. v. Tästä seuraa joitakin hyödyllisiä ominaisuuksia. Pohjana olevien matemaattisten käsitteiden osaaminen auttaa ymmärtämään mitä pinnan alla tapahtuu. Se on Vektorista kvaternioon 3D-matematiikan peruspalikat Vahva perusta on olennaista 3d-grafiikan hallitsemiselle. Tarjolla on kuitenkin kaksi erilaista kertolaskua muistuttavaa operaatiota. Kun luvut tulkitaan koordinaattiakselien suuntaisina siirtyminä, vektori esittää kahden pisteen välistä siirtymää. Sen pituus on operandien pituuksien tulo kerrottuna niiden välisen kulman sinillä. [1 1 0] × [-1 1] = i j k 1 1 -1 1 det( ) = (1?1-0?0)i + (0?(-1)-1?1)j + (1?0-1?(-1))k = [1 -1 1] Toisin kuin pistetulo, ristitulo ei ole vaihdannainen. Ristitulo on nollavektori, jos ja vain jos operandit ovat samantai vastakkaissuuntaisia tai toinen niistä on nollavektori. 32 2013.3 Vektorit Tärkein 3D-grafiikassa käytettävä matemaattinen käsite on vektori. Normia merkitään kaksoisviivoilla vektorin molemmin puolin. = j?. Vektorimuuttuja on yleensä pienaakkonen, joka on joko lihavoitu tai sen päälle on piirretty nuoli. [1 3] = 1?1 + 2?0 + 1?3 = 4 Pistetulo on suuruudeltaan sama kuin vektorien pituuksien tulo kerrottuna niiden välisen kulman kosinilla: v??u. Jos operandien järjestys vaihdetaan, tulovektori muuttuu vastakkaissuuntaiseksi. = [1 2 0] Vektorin voi esittää myös vektoriavaruuden kantavektorien summana. Merkintätapa on vinoristi. Pistetulo on positiivinen, jos vektorien välinen kulma on terävä, ja negatiivinen, jos kulma on tylppä. = i. dot product), joka nimensä mukaisesti antaa tulokseksi skalaarin. Kolmiulotteisen avaruuden kantavektoreita merkitään yleensä kirjaimilla i?, j. ja k?×i. Jos ensimmäinen piste sijoitetaan origoon, vektori kuvaa toisen pisteen sijaintia. Teksti: Mikko Rasa Kuvat: Mikko Rasa, Mitol Berschewsky Koodaus. = ?v???u??cos(?). Toisin ilmaistuna vektorilla on suunta ja pituus. Matriisit Toinen tärkeä käsite on matriisi. Muodollisesti se on järjestetty joukko lukuja. Vastaavalla tavalla vektorin voi myös kertoa tai jakaa skalaarilla eli paljaalla luvulla. Se muodostetaan kertomalla vektorien vastaavat alkiot keskenään ja laskemalla tulot yhteen. Vektorien esitystavat vaihtelevat hieman, mutta kaikille niille on yhteistä jonkinlaiset sulut, joiden sisällä vektorin alkiot ovat. = k?, j?×k. Kahden yksikkövektorin pistetulosta saadaan arkuskosinilla niiden välinen kulma. [1 2 0] + [1 3] = [2 2 3] [2 2 2] [4 2 0] = [-2 2] [2 1 3] . 1.5 = [3 1.5 4.5] Tavanomaista kertolaskuoperaatiota kahden vektorin välille sen sijaan ei ole määritelty. Kahden vektorin välinen pistetulo on nolla, jos ja vain jos vektorit ovat kohtisuoria (cos(?)=0) tai toinen vektoreista on nollavektori (?v??=0 tai ?u??=0). ja k?. Tulovektori on aina kohtisuorassa molempia operandeja kohtaan. Euklidisen avaruuden kantavektoreille pätee i?×j. Monissa yhteyksissä tosin tarvitaan nimenomaan kosinia. Se on määritelty ainoastaan kolmiulotteisille vektoreille ja antaa tuloksena uuden vektorin. Tässä artikkelissa käytämme hakasulkuja ja nuolimerkintää. Euklidisen avaruuden kantavektorit ovat koordinaattiakselien suuntaiset yksikkövektorit. Käytettäessä tulovektoria pyöritysakselina on kulma ensimmäisestä operandista toiseen positiivinen. Nimitys pistetulo taas johtuu merkintätavasta, joka on rivin keskellä oleva piste. Toinen vektorien välinen operaatio on vektoritulo eli ristitulo. = ?v??². [1 2 1] . Vektorin pistetulo itsensä kanssa on sen pituuden neliö: v??v. Eräs vektorin perusoperaatio on normi, joka euklidisessa avaruudessa on sama kuin sen pituus. v. Vektoreita voi laskea yhteen ja vähentää toisistaan. Myös ristitulolla on muutama hyödyllinen ominaisuus. Ensimmäinen on skalaaritulo eli pistetulo (eng. = i?+2j. Kantavektoreita on yhtä monta kuin avaruudella ulottuvuuksia, ja kukin kantavektori on tietyn ulottuvuuden suuntainen yksikkövektori. Jos vektorin kaikki alkiot ovat nollia, sitä kutsutaan nollavektoriksi
Oikeanpuolimmaisen sarakkeen kolme ensimmäistä alkiota kuvaavat siirtoa. translation). × = A 1,1 A 1,2 A 1,3 B 1,1 B 2,1 B 3,1 C 1,1 A 2,1 A 2,2 A 2,3 A 3,1 A 3,2 A 3,3 B B B B B B 2,2 2,3 3,2 3,3 1,2 1,3 C C C C C C C C 2,2 2,3 3,2 3,3 1,2 1,3 2,1 3,1 C 1,1 A 1,1 B 1,1 A 1,2 B 2,1 A 1,3 B 3,1 = + + Muunnokset Koska vektori voidaan esittää yksirivisenä tai -sarakkeisena matriisina, vektori ja matriisi on mahdollista kertoa keskenään. Myös vektori voidaan ajatella matriisina, jonka toinen dimensio on yksi. 33 kaksiulotteinen taulukko lukuja. Tulosmatriisin elementti i,j on määritelty vasemmanpuoleisen matriisin rivivektorin ja oikeanpuoleisen matriisin sarakevektorin pistetulona. Lineaarimuunnoksilla ei ole mahdollista toteuttaa siirtoa (eng. Siirrossa vektorin kuhunkin alkioon pitäisi lisätä jokin vakioarvo. Matriisimuuttuja on yleensä lihavoitu suuraakkonen. Lopputuloksessa on yhtä monta riviä kuin vasemmanpuoleisessa matriisissa ja yhtä monta saraketta kuin oikeanpuoleisessa. Jos rivien ja sarakkeiden määrä on sama, sanotaan kyseessä olevan neliömatriisi. Matriisia merkitään hakasuluilla, joiden välissä matriisin alkiot ovat. Esimerkiksi 3×2 alkion matriisissa on kolme riviä ja kaksi saraketta. Matriisin kokoa ilmoitettaessa mainitaan rivimäärä ensin. Neliömatriisilla kerrottaessa alkioiden määrä säilyy samana. Siinä avaruuteen lisätään keinotekoinen ulottuvuus, jota kuvaavan alkion arvo on useimmiten 1. Vasemman yläkulman 3×3 osamatriisi on lineaarinen muunnos. Matriiseille on määritelty kertolasku, mutta vain jos vasemmanpuoleisessa matriisissa on yhtä monta saraketta kuin oikeanpuoleisessa on rivejä. Matriisin puolestaan voidaan ajatella koostuvan rivitai sarakevektoreista. Muunnos suoritetaan kertomalla kukin kantavektori vastaavalla lähtövektorin komponentilla. Jos pystysuuntaista tilaa on niukasti, voidaan myös käyttää vektorimerkintää, jonka alkiot ovat vektoreita. shear). Lineaarimuunnoksista on eroteltavissa kolme perusoperaatiota: kierto (eng. Mikä tahansa lineaarimuunnos on hajotettavissa näiden yhdistelmäksi. Myöskään matriisien kertolasku ei ole kommutatiivinen. Alimman rivin sisältö on aina [0 1]. Skaalaus Leikkaus Kierto Tarkkasilmäinen lukija saattoi havaita, että eräs tuiki tarpeellinen operaatio puuttuu äskeisestä listasta. Avuksi otetaan affiinimuunnos. Nyt siirto voidaan toteuttaa leikkauksena kohtisuoraan tätä ulottuvuutta vastaan. 1 2 1 3 1 3 2 M = Matriisien yhteenja vähennyslasku sekä kertoja jakolasku skalaarin kanssa toimii samoin kuin vektoreilla, eli operaatio suoritetaan jokaiselle elementille erikseen. scaling) ja leikkaus (eng. Matemaattisena kaavana ilmaistuna C i , j = . n k=0 A i,k B k,j . rotation), skaalaus (eng. Tällöin muunnosmatriisin saraketai rivivektorit ovat lähtöavaruuden kantavektorit esitettynä kohdeavaruudessa. Tällaista operaatiota kutsutaan lineaarimuunnokseksi, koska saadun vektorin alkiot muodostetaan alkuperäisen vektorin alkioista vakiokertoimilla, eli lineaarikombinaationa. a e i b c f d g h x y z 1 Vakiorivi Lineaarimuunnos Siirto. Hakasulut ovat koko matriisin korkuiset. Lineaarimuunnoksen voi myös ajatella kuvaavan kahden vektoriavaruuden välistä suhdetta. Tuloksena on uusi vektori. Näin saadaan joko rivivektori tai sarakevektori. Affiinimuunnos kolmiulotteisessa avaruudessa on 4×4 matriisi
Kulmiin perustuvassa esityksessä esiintyviä vapausastelukkiutumia ei ole, vaan mielivaltaisten kiertojen ketjutus on helppoa. Tämän huomaa grafiikassa liikkeiden nykimisenä tai geometrian palikoitumisena. Myös käytettävän tietotyypin tarkkuuteen on syytä kiinnittää huomiota. Kiertokvaternioilla on monia hyödyllisiä ominaisuuksia muihin kiertojen esityksiin verrattuna. Jos yksikkökvaternio kirjoitetaan muodossa cos(?/2)+sin(?/2)(xi+yj+zk), sillä voidaan kiertää vektoria kulman . Tarvittavien alkeisoperaatioiden määrä on kaksinkertainen matriisiin verrattuna. Kertolasku ei ole kommutatiivinen. Matriisi voidaan tallentaa yksitai kaksiulotteisena taulukkona. 3D-matematiikan kannalta kvaternioista tekee kiinnostavia niiden kyky esittää 3D-avaruuden kiertoa. verran akselin [x y z] ympäri. p = (1 2 3) p = 1+2j+3k Imaginääriyksiköiden kertolaskukaavat: ij = -ji = k ik = -ki = -j jk = -kj = i Kvaternioiden laskusäännöt voidaan johtaa kaavasta i² = j² = k² = ijk = -1. Kvaterniolla ei pysty esittämään mitään muuta kuin kierron, joten esimerkiksi siirto täytyy tallentaa erikseen. Jos matematiikkaja grafiikkakirjastot ovat erilliset, voi olla tarpeen kirjoittaa muunnosrutiinit niiden välille.. quaternion). Se on yksinkertaisesti kiinteän mittainen lukutaulukko. Yhteenja vähennyslasku hoituvat suorittamalla operaatio erikseen kullekin komponentille. Itse operaatio on hieman monimutkainen. Reaaliosan voi sijoittaa joko ensimmäiseen tai viimeiseen alkioon. Usein on järkevää käyttää kvaterniota simulaation pyörittämiseen ja laskea sen perusteella matriisi grafiikkaa varten. Valmiitakin matematiikkakirjastoja on saatavilla, ja useimmissa korkean tason 3D-kirjastoissa on omat matematiikkarutiininsa. Omia matriisirutiineja koodatessa on tärkeää sisäistää näiden valintojen merkitys. Lopuksi reaaliosa poistetaan, ja jäljelle jää kierretty vektori. Koska kierrolla on kolme vapausastetta ja kiertomatriisissa yhdeksän alkiota, ei ole yksiselitteistä tapaa normalisoida virheellistä matriisia. Pseudokooditoteutukset eräistä vektorija matriisioperaatioista: function length: vector3 a -> number return sqrt(a.x*a.x + a.y*a.y + a.z*a.z) function dot_product: vector3 a, vector3 b -> number return a.x*b.x + a.y*b.y + a.z*b.z function cross_product: vector3 a, vector3 b -> vector3 return vector3(a.y*b.z-a.z*b.y, a.z*b.x-a.x*b.z, a.x*b.y-a.y*b.x) function matrix_product: matrix3 a, matrix3 b -> matrix3 result for i in 1..3 for j in 1..3 for k in 1..3 result[i, j] = a[i, k]*b[k, j]. Muuten seurauksena voi olla outoja bugeja, joiden selvittäminen voi olla vaikeaa. Toisaalta 64-bittiset liukuluvut vaativat kaksinkertaisen määrän tilaa, joten niitä ei kannata sokeasti käyttää kaikkialla. OpenGL:ssä matriisit esitetään sarakkeittain ja käytetään sarakevektoreita matriisin oikealla puolella. Se on neliulotteinen luku, vastaavasti kuin kompleksiluku on kaksiulotteinen. Toinen mahdollinen merkintätapa on polynomi, jossa imaginääriyksiköitä merkitään kirjaimilla i, j ja k. Se helpottaa affiinien muunnosten laskemista ja prosessorin SIMD-käskyjen käyttöä. Kummassakin tapauksessa on päätettävä, onko tallennustapa riveittäin vai sarakkeittain, ja suoritetaanko muunnokset rivivai sarakevektoreilla. Hintana on tarvittavan tilan kasvaminen kolmanneksella. Myös kertolasku on polynomimuodon perusteella suoraviivainen, joskin pitkähkö. Vektorista on ensin tehtävä kvaternio lisäämällä siihen nolla-arvoinen reaaliosa. Kvaternion ympärillä käytetään tavallisesti kaarisulkuja. Näitä käytettäessä on syytä perehtyä kirjaston dokumentaatioon ja käytäntöihin ongelmien välttämiseksi. Soveltaminen ohjelmointiin Vektorin tallentaminen tietokoneen muistiin on helppoa. Matriisiin verrattuna kvaternion etuna on virheensietokyky. Etenkin vanhoissa peleissä voi joskus nähdä, kun lähes pystysuorassa oleva objekti pyörii kummallisesti jouduttuaan lähelle lukkiutumaa. Kolmiulotteisiin vektoreihin lisätään joskus neljäs alkio, jonka arvo on 1. Kvaternio voidaan esittää vektorin tapaan järjestettynä lukujoukkona. Tämä on olennaista, koska muunnoksia ketjutettaessa pienetkin virheet kasautuvat. Direct3D toimii molemmissa suhteissa päinvastoin. Kvaternio tallennetaan samaan tapaan kuin neliulotteinen vektori. Myöskään 3D-rajapinnat eivät tue kvaternioita. 34 2013.3 Kvaterniot Vähemmän tunnettu mutta silti hyödyllinen käsite on kvaternio (eng. Kvaterniolle sen sijaan riittää palauttaminen yksikköpituuteen. Sen jälkeen se kerrotaan vasemmalta kiertokvaterniolla ja oikealta sen konjugaatilla. Jos ohjelmassa esiintyy suuria suhteita etäisyyksien välillä, 32-bittisen liukuluvun dynaaminen tarkkuus ei välttämättä riitä. Haittapuolena kvaternioissa on kierron suorittamisen monimutkaisuus. Konjugaatiota merkitään muuttujan jälkeen tulevalla tähdellä. Kvaternioiden kertolasku: (a?+b?i+c?j+d?k)(a?+b?i+c?j+d?k) = (a?a?-b?b?-c?c?-d?d?) + (a?b?+b?a?+c?d?-d?c?)i + (a?c?+c?a?-b?d?+d?b?)j + (a?d?+d?a?+b?c?-c?b?)k Kompleksilukujen tapaan kvaternioille on määritelty konjugaatio, jossa imaginääriosien etumerkit muutetaan päinvastaisiksi. Kvaterniolla on kolme erillistä imaginääriosaa, joita usein käsitellään kolmiulotteisena vektoriosana
Suurin osa oliotyypeistä noudattaa samanlaisia käytäntöjä. Varsinaiset oliot ovat kuitenkin piilossa käyttäjältä, ja niitä käsitellään rajapinnan funktioiden avulla. Tunniste on varattu tarkoittamaan olematonta oliota. Teksti: Mikko Rasa Kuvat: Mikko Rasa, Visa-Valtteri Pimiä. Sitä käytetään voimassa olevan sidonnan purkamiseen. Kuten sidontapisteen tapauksessa, ajurit voivat käyttää tätä tietoa päättäessään puskurin sijoittamisesta muistiin. Puskurin käyttövihje on muotoa GL_PT_SS, jossa PT kertoo päivitystiheyden ja SS siirtosuunnan Päivitystiheys: STATIC: vain kerran DYNAMIC: silloin tällöin STREAM: (lähes) jokaisen käytön yhteydessä Siirtosuunta: DRAW: käyttäjältä OpenGL:lle READ: OpenGL:ltä käyttäjälle COPY: OpenGL:n sisällä Osaa puskurin sisällöstä voidaan muuttaa glBufferSubData-funktiolla. Se ei sisällä dataa, eikä sille ole edes varattu muistia. Nämä vaihtelevat rajusti olion tyypin mukaan. Epätarkan vihjeen antaminen ei estä puskurin käyttöä, mutta voi hidastaa sitä. Funktiolla voi varata samalla kertaa useamman tunnisteen. void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data) OpenGL-ohjelmointi osa 2 Puskurit ja shaderit Viime numerossa kävimme läpi OpenGL:n toiminnan yleisellä tasolla. Nyt perehdymme tarkemmin kahteen keskeiseen osaan, puskureihin ja shadereihin. Sisältö määritellään glBufferData-funktiolla. Käytössä on useita sidontapisteitä kommunikointiin OpenGL:n eri osien kanssa. Kun oliota ei enää tarvita, se tuhotaan glDeleteTypes-funktiolla. Vapautuksen suhteen on syytä olla huolellinen, sillä näytönohjaimella on rajallisesti muistia, ja vuotoja voi olla vaikea havaita. Puskurit Kuten edellisessä osassa kerroimme, OpenGL:lle syötettävä data täytyy ensin sijoittaa näytönohjaimen muistiin. Funktio ottaa aina parametrina sidottavan olion tunnisteen. Kutsuttaessa glBufferData-funktiota uudestaan samalle puskurille kaikki puskurissa ollut aiempi data hylätään. Päivitettävä alue ei saa ylittää varatun muistialueen rajoja. Useimmat oliot eivät ole käyttökelpoisia tai ainakaan hyödyllisiä heti luomisen jälkeen, vaan ne vaativat jonkinlaisen alustuksen. Tyypistä riippuen se saattaa ottaa myös sidontapisteen tai muita parametreja. void glBufferData(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage) Muistinvarauksen yhteydessä voi antaa myös vihjeen siitä, kuinka usein sisältöä aiotaan päivittää, ja mihin suuntaan dataa siirretään. Sidontafunktion nimi on muotoa glBindType. Joissain erikoistapauksissa viittaa järjestelmän tarjoamaan olioon, kuten näytöllä näkyvään kuvapuskuriin. Tällä voi olla merkitystä, mikäli näytönohjaimella on erilaisia muistialueita. Puskurien sidontafunktio glBindBuffer ottaa parametrina puskurin lisäksi sidontapisteen. Puskurille täytyy tällöin olla etukäteen varattu muistialue, eikä sen kokoa voi osittaisen päivityksen yhteydessä muuttaa. Olioiden tunnisteina toimivat kokonaisluvut. Samalla funktiolla voi myös suorittaa pelkän muistin varauksen antamalla sille null-osoittimen. Olennaisin poikkeus ovat shaderit, joista kerrotaan lisää myöhemmin tässä artikkelissa. Sidottuna olevan olion tilaa voi muuttaa sen tyyppiin liittyvillä funktioilla. Oliolla ei tässä vaiheessa ole vielä mitään tilaa. Olio alustetaan, kun se sidotaan ensimmäisen kerran. Minkä tahansa puskurin voi sitoa mihin tahansa sidontapisteeseen, mutta implementaatio voi käyttää puskurin luomisen yhteydessä annettua sidontapistettä vihjeenä puskurin aiotusta käytöstä. Tähän käytetään puskureita. 35 Koodaus OpenGL:n oliot OpenGL on pohjimmiltaan oliopohjainen rajapinta. void glGenBuffers(GLsizei n, GLuint *buffers) void glBindBuffer(GLenum target, GLuint buffer) void glDeleteBuffers(GLsizei n, const GLuint *buffers) Joitakin puskurien sidontapisteitä GL_ARRAY_BUFFER: kulmapisteiden tiedot GL_ELEMENT_ARRAY_BUFFER: indeksit GL_PIXEL_UNPACK_BUFFER: tekstuuriin ladattava pikselidata GL_UNIFORM_BUFFER: shaderien uniform-muuttujat Vasta luotu puskuri on vielä tyhjä. Aluksi oliolle täytyy varata tunniste. Tähän käytetään glGenTypes-funktiota, jossa Type on olion tyyppi. Tästä on hyötyä, jos varsinainen sisältö halutaan ladata puskuriin muulla tavoin, kuten esimerkiksi osittaisilla päivityksillä tai muualta OpenGL:stä lukemalla. Ne ovat yleiskäyttöisiä muistialueita, joihin voi periaatteessa tallentaa mitä tahansa
Matalammalla tarkkuudella laskeminen voi olla nopeampaa. Sijaintia määriteltäessä on huomattava, että annettu osoitin tulkitaan puskurin alusta lukien. Matriisin rivien ja sarakkeiden määrä voi vastaavasti olla kaksi, kolme tai neljä. Pienin esitettävissä oleva arvo muunnetaan liukuluvuksi 0.0 tai -1.0, riippuen siitä, onko kyseessä etumerkitön vai etumerkillinen kokonaisluku. Korkeaa tarkkuutta ei välttämättä ole tuettu kaikilla laitteilla. Kunkin vaiheen tulokset annetaan syötteenä seuraavalle vaiheelle. Englanninkielinen termi tekstuurikoordinaatille on texture coordinate, mutta usein se lyhennetään muotoon texcoord. Normaalin siirros verteksin alusta on 3*sideof( oat) eli 12 tavua Esimerkki lomitetusta verteksitaulukosta. Koska ominaisuuksia ei ole mahdollista jakaa kulmapisteiden kesken, on usein tarpeen luoda useita kulmapisteitä osittain samoilla ominaisuuksilla. Kaikkien ohjelmointiin käytetään samaa C:tä muistuttavaa kieltä. Jos liukulukutyyppisen ominaisuuden syöte annetaan kokonaislukuina, voidaan arvot normalisoida. Usein kuitenkin tekstuurit kuvaavat saman pinnan eri aspekteja ja käyttävät samoja koordinaatteja. void glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer) OpenGL:lle on myös kerrottava, minkä numeroiset ominaisuudet tulee syöttää shaderille. Haluttu puskuri on oltava sidottuna GL_ARRAY_BUFFERsidontapisteeseen kutsuhetkellä. Yritys käyttää kulmapistettä määriteltyjen taulukoiden rajojen ulkopuolelta johtaa virheelliseen toimintaan tai ohjelman kaatumiseen. Tarjolla on neljä perustietotyyppiä: bool, int, uint ja float. Jokainen kulmapiste on oma kokonaisuutensa, jolla on omat ominaisuudet. On kuitenkin olemassa tiettyjä 3D-grafiikan peruskäsitteitä, joita kappaleiden piirtämiseen käytetään. Lomitettua kulmapistetaulukkoa käytettäessä stride-parametrissa annetaan siirros kahden peräkkäisen kulmapisteen välillä. Määrittely kohdistuu sidottuun kulmapistetaulukkoon. Kuten kaikki muutkin OpenGL:n tilat, myös käytössä olevat ominaisuudet säilyvät, ellei niitä erikseen muuteta. Normaali on vektori, joka on kohtisuorassa pintaa vastaan. Esimerkiksi kuution jokaisen sivun neljällä kulmapisteellä on sama normaali, mutta eri sijainti. Verteksien välinen siirros on 6*sizeof( oat) eli 24 tavua 3. Puskuri tallennetaan osana sijaintia, joten sidonnan voi purkaa heti kutsun jälkeen. Ensimmäinen verteksi alkaa taulukon alusta 2. Jotkin ominaisuudet ovat kuitenkin käytettävissä vain tietylle suoritusvaiheelle. Kunkin ominaisuuden sijainti muistissa on määritetty erikseen. Vektorissa voi olla kaksi, kolme tai neljä elementtiä. Null on siis aivan kelvollinen osoite ja tarkoittaa puskurin alkua. Yleensä käytetään kahden tai kolmen komponentin vektoreita. Shaderien suoritus jakautuu useaan vaiheeseen, joista kullakin on oma tehtävänsä. Joissakin tehosteissa shaderi saattaa pystyä laskemaan sijainnin muiden ominaisuuksien perusteella. void glGenVertexArrays(GLsizei n, GLuint *arrays) void glBindVertexArray(GLuint array) void glDeleteVertexArrays(GLsizei n, const GLuint *arrays) Ominaisuustaulukon sijainti muistissa määritellään glVertexAttribPointer-funktiolla. Kulmapisteiden ominaisuudet kootaan yhteen kulmapistetaulukoksi. Tällöin kokonaislukutyypin suurin esitettävissä oleva arvo muunnetaan liukuluvuksi 1.0. Standardi ei ota kantaa niiden merkitykseen. Erillisiä tietotyyppejä eri kokoisille arvoille ei ole, vaan bool-tyyppiä lukuunottamatta kaikki perustietotyypit ovat 32-bittisiä. Jos kappale on teksturoitu, tarvitaan tekstuurikoordinaatit. Ne voivat sijaita erillisilla muistialueilla, jopa eri puskureissa, tai lomittain sijoitettuna yhdellä muistialueella. Myös normaali GLSL tunnistaa nämä avainsanat, mutta niillä ei ole vaikutusta.. Kaksiulotteisia kuvatekstuureja käytettäessä tekstuurikoordinaateissa on tavallisesti kaksi komponenttia. Nämä vastaavat karkeasti C++:n tietotyyppejä. Normaalissa on lähes aina kolme komponenttia, ja sitä kuvaava englanninkielinen termi on normal. Nyt selvitämme tarkemmin, mitä näillä massiivista rinnakkaislaskentaa hyödyntävillä ohjelmanpätkillä voi tehdä. 36 2013.3 Kulmapistetaulukot Yleisintä puskureissa säilytettävää tietoa ovat kulmapisteiden ominaisuudet. Interpoloinnin ansiosta sopivasti määritellyillä normaaleilla voi luoda illuusion tasaisen pyöreästä pinnasta. Tähän käytetään funktioita glEnableVertexAttribArray ja glDisableVertexAttribArray. Esimerkkejä shaderien tietotyypeistä: bool totuusarvo int etumerkillinen kokonaisluku uint etumerkitön kokonaisluku float liukuluku vec4 4 alkion liukulukuvektori ivec2 2 alkion kokonaislukuvektori mat3 3x3-liukulukumatriisi mat2x4 2 sarakkeen ja 4 rivin liukulukumatriisi oat data[] = { }; -1.00, 1.00, 0.00, -1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 1.00 -1.00, 1.00, -1.00, 1.00, 1.00, Normaalivektori Verteksin sijainti X Y Z X Y Z 3 2 1 1. Jokaisessa kulmassa taas on kolme kulmapistettä, joilla on sama sijainti, mutta eri normaali. Sijaintiin viitataan usein englanniksi sanoilla vertex tai position. Nämä verteksit muodostavat neliön, jonka normaali osoittaa ylöspäin GLSL ES:ssä tietotyypin jälkeen voi lisätä avainsanan lowp, mediump tai highp, joka määrittää matalan, keskitason tai korkean tarkkuuden. Moniteksturointia käytettäessä tekstuurikoordinaatteja voi olla useita. void glEnableVertexAttribArray(GLuint index) void glDisableVertexAttribArray(GLuint index) OpenGL-toteutuksen on tuettava vähintään 16 ominaisuutta, mutta se voi tukea useampaakin. On siis syytä pitää huolta, että vain tarvittavat ominaisuudet ovat käytössä. Yleensä kannattaa käyttää lomitusta, koska tällöin saman kulmapisteen kaikki ominaisuudet ovat lähekkäin, mikä helpottaa niiden hallintaa ja parantaa välimuistin hyödyntämistä. Skalaarien lisäksi on tarjolla myös vektorija matriisityypit. Poikkeuksena ensimmäinen vaihe saa syötteensä kulmapistetaulukoista, ja viimeisen vaiheen tulokset määrittävät piirrettävän pikselin värin ja syvyyden. Sijainti on useimmissa tapauksissa pakollinen. Jokaista erilaista piirrettävää objektia varten tarvitaan oma kulmapistetaulukko. Shaderit Edellisessä numerossa esilteltiin myös lyhyesti shaderien toimintaperiaatteet
Tutustumme niihin tarkemmin seuraavassa numerossa. Vektoriin tai matriisiin voi lisätä tai vähentää skalaarin, jolloin operaatio suoritetaan erikseen jokaiselle elementille. Halutessaan shaderi voi muuttaa pikselin syvyysarvoa kirjoittamalla uuden arvon gl_FragDepth-muuttujaan. Yleensä sijainti lasketaan malli-, näkymäja projektiomatriisien avulla (engl. Edellisen vaiheen tulosten ja seuraavan vaiheen syötteiden täytyy vastata toisiaan nimiltään ja tyypeiltään. Tällaiset muuttujat esitellään uniform-avainsanalla. Vektoreilla on myös swizzlenä tunnettu erikoisoperaatio. Kukin tyyppi vastaa tietynlaista tekstuuria. Sen ainoa käyttötarkoitus on sellaisten funktioiden määrittely, jotka eivät palauta mitään. Shaderien käyttö GLSL-ohjelmia ei voi käyttää sellaisenaan, vaan ainoastaan OpenGL-rajapinnan kautta. Tämä funktio ei ota parametreja, eikä sillä ole paluuarvoa, joten sen tyyppi on void main(). Luontifunktio ottaa parametrina haluttua suoritusvaihetta ilmaisevan vakion. Niihin liittyviä olioita käsitellään hieman eri tavalla kuin muita. Lopuksi on vielä void-tyyppi, tai pikemminkin tyypin puute. Shaderin suoritus alkaa kunkin vaiheen main-funktiosta. Siinä vektorista valitaan kerralla useampi elementti, ja niistä muodostetaan uusi vektori. Jäsenille on kolme eri nimeä, jotka on nimetty avaruuskoordinaattien, tekstuurikoordinaattien ja värikomponenttien mukaan. Näistä voi käyttää sopivia sen mukaan, mitä vektori esittää. Muutamia oikoteitäkin on tarjolla. Näytteistäjät ovat läpinäkymättömiä, ja niitä voi käyttää ainoastaan teksturointifunktioiden yhteydessä. Esimerkiksi v.xzyy vastaa samaa kuin vec4(v.x, v.z, v.y, v.y). Kullakin vaiheella on myös sisäänrakennettuja syöteja tulosmuuttujia kommunikointiin renderöintiputken muiden osien kanssa. Vaihtoehtoisesti tähän voi käyttää sisäänrakennettua gl_ FragColor-muuttujaa. Shaderin on määriteltävä tulosmuuttuja, johon se kirjoittaa piirrettävän pikselin värin. Olio tuhotaan funktiolla glDeleteType. Nykyisin kuitenkin suositellaan muuttujan määrittelemistä itse. Luontifunktio on nimeltään glCreateType ja palauttaa luodun olion tunnisteen. Kahden vektorin välinen kertotai jakolasku suoritetaan komponenteittain. Teksturointia varten on olemassa joukko erityisiä näytteistäjätyyppejä (engl. GLuint glCreateShader(GLenum type) void glDeleteShader(GLuint shader) Shaderin sisältö syötetään OpenGL:lle lähdekoodimuodossa glShaderSourcefunktiolla. Tämä mahdollistaa yhteisten osien sisällyttämisen vec4-tietotyyppi muistuttaa tätä C:n unionia: union vec4 { float array[4]; struct // Avaruuskoordinaatit { float x, y, z, w; }; struct // Tekstuurikoordinaatit { float s, t, p, q; }; struct // Väri { float r, g, b, a; }; };. Shader-tyyppi kuvaa yksittäistä shaderin suoritusvaihetta. model, view, projection). Se ottaa yhden tai useamman merkkijonon, jotka liitetään yhteen käännettäväksi lähdekoodiksi. Eri vaiheiden välinen rajapinta määritellään globaaleilla muuttujilla, jotka on esitelty inja out-avainsanoja käyttäen. Pikselishaderi saa syötteenä gl_FragCoord-muuttujassa pikselin interpoloidun sijainnin. Ero on kuitenkin puhtaasti kosmeettinen eikä vaikuta shaderin toimintaan. sampler). Kulmapisteshaderin on kirjoitettava verteksin sijainti gl_Position-muuttujaan. Tätä sijaintia käytetään primitiivien rasterointiin. Myös muut syötteet ovat interpoloituja. Niiden arvot asetetaan isäntäohjelman puolelta ennen piirtokomennon suoritusta. 37 Vektorin elementteihin voi viitata joko indeksoimalla tai jäsenmuuttujina. Suoritus päättyy main-funktion loppuun. Kaikki shaderivaiheet voivat myös käyttää syötteitä, joiden arvo pysyy samana koko piirtokomennon ajan. Oliota voi käsitellä tarvitsematta sitoa sitä ensin. Aritmeettiset operaatiot toimivat pääosin kuten voi odottaa. Komponenttien järjestys voi muuttua, ja sama komponentti voidaan valita useampia kertoja. Sen on oltava kuvaruudun koordinaatistossa eli kaikkien komponenttien on oltava -1:n ja 1:n välillä
void glAttachShader(GLuint program, GLuint shader) Lopuksi ohjelma on linkitettävä glLinkProgram-funktiolla. Useimmista muista shadereihin liittyvistä funktioista poiketen uniform-muuttujien asettaminen kohdistuu aktiiviseen ohjelmaan. Jotta ohjelma olisi käyttökelpoinen, siinä on oltava kulmapisteja pikselishaderi. GLint glGetAttribLocation(GLuint program, const GLchar *name) GLint glGetUniformLocation(GLuint program, const GLchar *name) Kulmapisteshaderin syötteet annetaan kulmapistetaulukoiden kautta, kuten edellä kerrottiin. Kääntäjää voi kutsua lähdekoodin antamisen jälkeen glCompileShader-funktiolla. 38 2013.3 erillisestä merkkijonosta C++:n otsaketiedostojen tapaan. Sijainnit saa nimen perusteella selville glGetAttribLocationja glGetUniformLocation-funktioilla. Sidonta tehdään glBindAttribLocation-funktioilla. Käytetyn funktion on vastattava asetettavan muuttujan tyyppiä, muutoin seurauksena on virhe. Tätä varten ajureihin on upotettu kääntäjä, joka tuottaa käytettävälle prosessorille sopivan konekielikoodin. Asetetut arvot ovat sidoksissa tähän ohjelmaan ja säilyvät, kunnes muuttujalle asetetaan uusi arvo. void glUseProgram(GLuint program) GLSL-ohjelman ulkoinen rajapinta muodostuu uniform-muuttujista ja kulmapisteshaderin syötteistä. GLuint glCreateProgram() void glDeleteProgram(GLuint program) Shaderit liitetään ohjelmaan glAttachShader-funktiolla. Poikkeuksia ovat totuusarvot ja niistä koostuvat vektorit, jotka voi asettaa minkä tahansa tyyppisellä funktiolla. void glLinkProgram(GLuint program) Kun kaikki on valmista, ohjelma voidaan ottaa käyttöön glUseProgram-funktiolla. Ne tulevat voimaan seuraavan kerran ohjelmaa linkitettäessä. Ohjelmaan liitettyjen shaderien on oltava käännettynä ennen tätä. Epätavallisesta nimestään huolimatta tämä toimii kuten muutkin sidontafunktiot. Tätä varten lisäämme kulmapistettä kuvaavaan tietorakenteeseen kolmannen. Tähän sopivan olion tyyppi on Program. Koska kulmapisteiden ominaisuudet on sidottu kulmapistetaulukossa tiettyihin sijainteihin, on käytännöllistä sitoa myös shaderin syötteet samoihin sijainteihin. void glBindAttribLocation(GLuint program, GLuint index, const GLchar *name) Uniform-muuttujien asettamiseen on joukko funktioita, omansa kullekin tyypille. Joitakin uniform-muuttujien asettamiseen käytettäviä funktioita: void glUniform1f(GLint location, GLfloat v0) void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) void glUniform4fv(GLint location, GLsizei count, const GLfloat *value) void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) Esimerkkiohjelma Tämänkertaisessa esimerkkiohjelmassa loihdimme ruudulle pyörivän renkaan. Näihin viitataan isäntäohjelmassa niiden sijaintia kuvaavilla kokonaisluvuilla. Samaa suoritusvaihetta kuvaavia shadereita voi olla useita, mutta tasan yhdessä on oltava main-funktio. Sama shaderi voi myös olla useammassa ohjelmassa. Näin samaa kulmapistetaulukkoa voi käyttää useiden eri shaderien kanssa. Jos kysyttyä muuttujaa ei ole määritelty shaderissa, funktiot palauttavat negatiivisen arvon. void glShaderSource(GLuint shader, GLsizei count, const GLchar **string, const GLint *length) void glCompileShader(GLuint shader) Eri suoritusvaiheet on vielä yhdistettävä käyttöä varten kokonaiseksi ohjelmaksi. Grafiikkaprosessori ei kuitenkaan suorita lähdekoodia
Pikselishaderissa interpoloitu valaistus yhdistetään pinnan väriin, jotta saadaan lopullinen piirrettävän pikselin väri. uniform vec4 color; in float intensity; out vec4 out_color; void main() { out_color = vec4(color.rgb*intensity, color.a); } Pyöritystä varten annamme modelviewmatriisille uuden arvon ennen jokaista ruudunpäivitystä. Koska katselupiste on origossa, täytyy kappaletta siirtää kauemmas, jotta se mahtuisi ruudulle. -8.0f 0.0f 0.0f 0.0f 0.0f 1.0f float modelview[16] = ; glUniformMatrix4fv(modelview_loc, 1, false, modelview); Esimerkkiohjelman täydellinen lähdekoodi löytyy Skrollin nettisivuilta osoitteesta http://skrolli.fi/2013/ . Saatko kappaleen vaihtamaan väriä pyörityksen aikana. C++:n templateilla ja jäsenosoittimilla saamme aikaan kompaktin syntaksin funktion käytölle. Kulmapistetaulukon täytämme ohjelmallisesti. Onnistuuko pallo, sylinteri tai kuutio. v.x = cos(?)*(R+cos(?)*r) v.y = sin(?)*(R+cos(?)*r) v.z = sin(?)*r v.nx = cos(?)*cos(?) v.ny = sin(?)*cos(?) v.nz = sin(?) R r Kullakin kulmapisteellä on nyt kaksi ominaisuutta. Mallija näkymämatriisit on tavanomaista yhdistää yhdeksi matriisiksi, joka määrittää muunnoksen objektin koordinaateista näkökentän koordinaatteihin. Sen avulla pikseli jätetään piirtämättä, jos samaan kohtaan on jo piirretty lähempänä oleva pikseli. Kokeile erilaisia arvoja ja katso, mitä tapahtuu. Osaatko toteuttaa pikselikohtaisen valaistuksen?. template<typename T> void set_attrib_array(unsigned index, unsigned size, float T::*member) { T dummy; const char *offset_base = reinterpret_ cast<const char *>(&dummy); const char *const offset = reinterpret_ cast<const char *>(&(dummy.*member))-offset_ base; glVertexAttribPointer(index, size, GL_FLOAT, false, sizeof(T), offset); glEnableVertexAttribArray(index); } set_attrib_array(POSITION, 3, &Vertex::x); set_attrib_array(NORMAL, 3, &Vertex::nx); Koska haluamme piirtää kolmiulotteisen kappaleen, täytyy syvyyspuskuri ottaa käyttöön. Tarvitsemme myös indeksitaulukon, koska kulmapisteiden käyttäminen järjestyksessä ei enää riitä. •?Pystytkö muuttamaan kappaleen kokonaan eri muotoiseksi. Kulmapisteshaderin on tehtävä tarvittavat koordinaattimuunnokset. . Turhan toiston välttämiseksi teemme apufunktion ominaisuustaulukoiden asettamiseksi. uniform mat4 modelview; uniform mat4 projection; in vec4 position; in vec3 normal; out float intensity; void main() { gl_Position = projection*modelview*position; intensity = (mat3(modelview)*normal).z; } Kulmapisteshaderi laskee myös valaistuksen voimakkuuden kullekin verteksille ja välittää sen pikselishaderille. 1.0f 0.0f 0.0f 0.0f 0.0f -sin. cos. Pyöritys tehdään matriisin kolmella ensimmäisellä sarakkeella ja siirto neljännellä. 39 koordinaatin ja normaalin. Saatko sen liikkumaan pyörimisen sijaan, tai tekemään molempia samanaikaisesti. cos. •?Kokeile muuttaa modelview-matriisin sisältöä siten, että kappale on ruudulla eri kohdassa tai pyörii eri suuntaan. •?Osaatko lisätä kulmapisteille värin ja luoda monivärisen kappaleen. Kuvakaappaus esimerkkiohjelmasta. struct Vertex { float x, y, z; float nx, ny, nz; }; . •?Saatat huomata pinnan kirkkauden vaihtelussa epätasaisuutta, joka johtuu verteksikohtaisen valaistuksen käytöstä. Tehtäviä ja haasteita lukijalle: •?Lähellä ohjelman alkua on joitakin vakioarvoja, jotka määrittelevät renkaan koon ja käytettävien tasopintojen määrän. •?Shaderille annetaan piirrettävän kappaleen väri uniform-muuttujana. 0.0f sin. glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); Myös shaderit vaativat muutoksia
Parker Brothers oli heti seuraavana haaskalla. Niitä kun löytyy nykyään joka makuun — on Legoja, klooneja ja MMO:ta. Ensimmäiset valokuvat olivat todella suttuisia, ja firma epäili, että läheisen tien rekkaliikenteen aiheuttama tärinä heilutti kameraa." Firma pähkäili ongelmaan ratkaisua ja päätyi lopulta rakentamaan erillisen elohopeaastian, jolla tasapainottaa kameraa. Harva tulee ajatelleeksi, että jostain pelistä se tähtien seassa poukkoilukin lähti liikkeelle. 40 2013.3 O n mahdotonta kuvitella pelien nykymaailmaa ilman Star Wars –universumiin sijoittuvia karkeloita. Star Wars -pelien ensiversio on Atari 2600:n Empire Strikes Back. Siirto ei kuitenkaan sujunut aivan ongelmitta. "Parker pestasi läheisen firman viilaamaan kerroksia grafiikkapiirin päältä ja valokuvaamaan niitä, jotta Mark ja Jim pystyisivät tutkimaan kuvia ja takaisinmallintamaan grafiikkapiirin niiden avulla. Atari varjeli markkinoita hallitsevan konsolinsa grafiikkajärjestelmän saloja kuin orava ainoaa käpyään. Tuo yksinvaltius oli kuitenkin jo alkanut rapistumaan. Star Wars – Empire Strikes Back Julkaisija: Parker Brothers Kehittäjä: Rex Bradford ja Sam Kjellman Julkaisuvuosi: 1982 Genre: Sivuttain vierivä ammuskelu Kaukaisessa galaksissa, vuonna 1982... Säilyttämällä sen tekniset yksityiskohdat mysteerinä Atari toivoi pitävänsä konsolinsa pelimarkkinat yksinoikeutenaan. "Lopulta joku huomasi, että kameran linssin eteen oli jäänyt pala suojateippiä koko ajaksi!", Rex nauraa. Rex muistelee vanhaa työpaikkaansa lämmöllä. Tämä ei kuitenkaan tuonut parannusta: supertarkat kuvat olivat yhä suttuisia. Purkuohjelman avulla tiimi voisi tutkia mistä Atarin pelit oli tehty, ja ottaa niistä ottaa mallia omaa peliä luodessaan. Teksti: Juho Pietarinen Kuvat: Juho Pietarinen, Toni Kuokkanen. Vilkaisemme ensimmäisten syntyhistoriaa Rex Bradfordin seurassa. Activision, jonka oli perustanut neljä Atarilta livahtanutta ykkösrivin pelintekijää, oli ensimmäisenä ulkopuolisena alkanut tuottamaan pelejä Atari 2600:lle jo pari vuotta aiemmin. Siellä Atari 2600:n tuskaisen alitehoiselle raudalle onnistuttiin siirtämään elokuva, joka oli juuri voittanut Oscarit mahtavista erikoistehoisteistaan. Ne valokuvat ovatkin sitten osa bittihistorian komediakultaa. Pelit Jediritareiden universumista on vuosien varrella siinnyt pitkä ketju tähteinvälisiä pelejä. Empire Strikes Back oli sekä Rexin että koko Parker Brothersin ensimmäinen konsolipeli. Parker Brothers Star Wars -peleistä ensimmäistä ohjelmoimaan valikoitui märkäkorva Rex Bradford, joka oli siihen asti lähinnä puurtanut Parker Brothersin ykköstuotteen, Monopolin, elektronisen version kimpussa. Aina kun emoyhtiön pomot tulivat vierailulle, meidän piti siivota pöydät kiiltäviksi ja vetäistä päälle valkoiset labratakit — oikeasti!" Atari 2600:n siirtyminen pelimarkkinoiden valloittajaksi ei ollut aivan yksinkertaista. "Se oli perinteinen jenkkifirma hienoine pukuineen, ja me olimme siinä joukossa kummajaisia. Samalla Jim McGinnis Parker Brothersin pomoportaasta ja ohjelmointitiimin pääjehu Mark Lesser ottivat tehtäväkseen selvittää valokuvien avulla, mitä salaisen grafiikkajärjestelmän helmojen alta löytyi. Se löytyy lautapeleistään tunnetun Parker Brothersin pieneltä peliosastolta vuodelta 1982. "Elektroniikkaporukalla oli hallussaan kokonainen kerros pääkonttorista", kertoo pelivelho. Lepertelyä konekielellä Rexin ensimmäisenä tehtävänä oli opetella konsolin tuskaisen alitehoisen 6507-prosessorin konekieli ja kirjoittaa sille purkuohjelma
Ilotikun vatkaajan kohtalona oli käydä väsyttävän rankkaa viivytystaistelua, jonka mahdollinen voitto laskettaisiin vain pisteillä. Parker Brothersin markkinointipomo Bill Bracy sattui huomaamaan sen ja vaikuttui näkemästään. Ohjusten räjäytykset Rex toteutti viekkaasti suurentamalla ohjuksen osumishetkellä sen spriteä nopeasti kahdeksankertaiseksi ja heiluttamalla sijaintipaikkaa. Tämä taktiikka sai koko jonon matelemaan kuin maatuskat kaupan kassalla, ja soi pelaajalle mahdollisuuden snaipata ärtyneet kävelijät rauhassa yksi kerrallaan. Tässä konsolissahan on potentiaalia, päätteli Bill, ja tiedusteli Markilta miten kuvan saisi siirrettyä peliin. Ei mitenkään, vastasi Mark. Nämä lisäykset toivat peliin taktisen elementin. Teknistä iloittelua Rex kierteli vähätehoisen konsolin rajoja ovelasti, käsittelemällä ruudun eri osaalueita itsenäisinä osina. Siinä peleistä vastasivat pienet tiimit. Pelillä ei ole päätöstä. Oli itse asiassa Markin ansiota, että koko Star Wars -peliä oli ylipäätään ryhdytty tekemään. Upeasta näköiskuvasta löytyi sekä värit että varjostukset, minkä piti olla Atari 2600:lla lähes mahdotonta. Tarina kertoo, että eräänä hämyisenä iltana Parker Brotherin toimistolla Mark oli muiden puuhiensa lomassa taikonut toimiston Atari 2600:n ruudulle Darth Vaderin näköiskuvan. Rungosta tehtiin kiinteä, siihen ei pelaajan auttanut törmätä tai matka tyssäsi. 41 Rex Bradford, SOLMIOhävittäjä Star Wars –pelin tekeminen oli Rexille unelmien täyttymys. Star Wars -pelin aihe, elokuvasta tuttu Hothin taistelu, oli valikoitunut jo ennen Rexin liittymistä projektiin. Pelaaja pystyi joko sarjatulittamaan kävelijät ketoon ensimmäisestä viimeiseen, tai vain hidastamaan ensimmäistä. Parallaksiskrollaus esiintyi ensimmäisen kerran videopelissä pelihallien Moon Patrolissa vuonna 1982, samana vuonna kuin Empire Strikes Back oli valmis kotiyleisön ihmeteltäväksi. Jalat taas asettuivat ruudun alaosaan ja suurennettiin kaksinkertaisiksi. Ei lopputaistelua Darth Vaderia vastaan, jonka yhteydessä voisi pistää riidan ja käden poikki. Aina välillä kävelijöiden eteen tai taakse ilmestyi pelaajaa seireenin lailla houkutteleva vilkkuva pikseli, johon osumalla sai kävelijän kumoon yhdellä laukauksella. Valinta osui nappiin. Kävelijöiden spriten jakaminen osiin mahdollisti samalla myös niiden erilaisen käsittelyn. Mark oli jo lunastanut paikkansa pelialan historiassa, sillä mies oli tehnyt alusta loppuun Mattel Auto Racen, kaikkien aikojen ensimmäisen kannettavan elektroniikkapelin. Ensimmäistä Star Warsia suunnittelemaan ryhtyi Sam Kjellman ja ohjelmoinnista vastasi Rex. Kuva vei koko sen neljän kilotavun tallennustilan, mitä Atari 2600:n pelimoduulilta löytyi. Massiivisten kävelijöiden spritet jaettiin kahtia. Normaali tykitys rasitti rannetta 48 osuman verran. Myös Mark Lesser liittyi porukkaan. Niiden runko sijoitettiin ruudun yläosaan ja suurennettiin nelinkertaiseksi. Hän ryhtyikin peliä tekemään kuin "tykin suusta ammuttuna". Molempien leveys oli kahdeksan pikseliä, mutta yläosa päätyi isomman suurennoksen vuoksi näyttämään kulmikkaammalta. Siinä kuvan tausta liikkuu hieman etualaa hitaammin, ja antaa toiminnalle kolmiulotteisen vaikutelman. Toisin kuin Atarilla, jossa tietyn pelin ohjelmoija käytännössä sulkeutui yksin luolaansa kuukausiksi ja ilmestyi sieltä lopulta hienhajun ja uuden pelin kera, oli Parker Brothers osa Activisionin aloittamaa uutta aaltoa. Jos taas onnistui väistelemään kävelijöiden tykkien ohjuksia kahden minuutin ajan, luritteli konsoli ulos Star Wars -teeman ja pelaajan kiitäjä oli hetken Voiman valtaamana vahingoittumaton. Elokuvalle uskollisesti hyökkäystä ei ole edes mahdollista pysäyttää. "Olin nähnyt tuolloin Empire Strikes Backin jo varmaan kymmenen kertaa teatterissa", mies muistelee. Myöhempiin konsoleihin kyky parallaksiskrollaukKohtalon hetket käynnissä Hothissa.. Peli oli myös ensimmäinen, joka esitteli parallaksiskrollauksen kotikonsoleille. Jalat taas olivat silkkaa ilmaa, joten kiiturilla pystyi luikahtamaan niiden "välistä" kuin elokuvassa konsanaan. "Se oli itse asiassa aika helppoa toteuttaa", toteaa Rex osallisuudestaan yhteen videopelien merkittävimmistä kehitysaskeleista. Pelaaja ohjaa pientä lumikiitäjää massiivisten kävelijöiden vyöryessä Imperiumin mahdin lailla kohti Kapinaliiton Echo-tukikohtaa
Tiimi pakersi pelin parissa yli viisi kuukautta. "En kopioinut sitä tietoisesti", Rex selvittää, vaikka myöntää olleensa pelistä tietoinen. Taustakuviolle voi valita kaksi väriä ja kullekin spritelle yhden värin peräti 121-värisestä kokonaispaletista. Viimeksimainitun sisällä on myös 128 tavua RAM-muistia — kaikki, mitä koko koneesta löytyy. Piiriä voisikin luonnehtia "1D-näytönohjaimeksi". 42 2013.3 seen rakennettiin suoraan rautaan. 6507-prosessorin käskykanta on kiinteän pituinen käskyjaksojensa osalta, joten kikkana oli keksiä kuinka uudelleenohjelmoida ruutua rivi kerrallaan, lukea joystickin liikkeet ja suorittaa kaikki muut laskut ruutupäivitysten välissä. Konsolin graafisia rekistereitä piti muokata reaaliajassa samaan tahtiin, kuin television kuvaputken elektronisuihku piirsi kuvaa ylhäältä alas. Rexin tarinat paljastavat, että mikään osa peliä ei vielä tuohon aikaan ollut itsestäänselvyys. Piiri kykenee tuottamaan kullekin juovalle taustakuvion ja sen päälle viisi liikutettavaa irtokuviota, spriteä. Kunkin spriten leveyden voi valita muutamasta vaihtoehdosta. Valtaosa peleistä on kuitenkin neljän kilotavun kokoisia. Annettakoon se kuitenkin anteeksi, vastaavaa kaavaa kun noudatti aika moni muukin menestyspeli. Mies muistelee yhä erityisellä lämmöllä tuota ensimmäistä peliään.. Ainoa näyttömuistin kaltainen on TIA-piirin rekisteripankki, jonka bittien asennot kuvaavat, kuinka kuvan yksittäinen vaakajuova muodostetaan. Mistään näyttömuistin tapaisista isoista puskureista ei kannata edes haaveilla. "Joten eräänä päivä pistin siihen asti mykkään peliin muutaman äänitehosteen ja vastaus oli: ’Mitä ihmettä sinä teit?! Peli on nyt mahtava!’" Klassikon kopiomallit Empire Strikes Back päätyi lopulta muistuttamaan markkinat kaksi vuotta aiemmin vallannutta kolikkopeli Defenderiä melko vahvasti. Kuulostaako tutulta. Siihen pieneen hetkeen Rex änki siis kaiken muun kuin grafiikat. Äänipuolella Atarissa on Äärimmäisten rajojen viehätys Atari 2600 on tekniikaltaan äärimmäinen laite, jolla monet yksinkertaisetkin asiat hipovat mahdottomuuden rajoja. TIA-piirin ominaisuudet on arvatenkin optimoitu peligrafiikalle. Ohjelmointitiimin Ed Temple päätyi tekemään jokaisesta käskystä oman magneettinsa ja asetteli niitä isolle taululle erilaisiin järjestyksiin. 128 tavun on riitettävä kaikille ohjelman muuttujille. ROM-moduulille mahtuu 4096 tavua kiinteää ohjelmaa — tai enemmänkin, mikäli moduuliin rakennetaan sopiva sivutusmekanismi. Ehkä Rexin tiimi ei suoraan kopioinut peliä, mutta paljon samaa niissä on. Rex paljastaa livistäneensä niiden toteuttamisesta konsolin kyvyttömyyteen vedoten. Defender oli Williams Electronicsin massiivinen menestys ja myi yli 55 000 pelikabinettia. Teksti: Ville-Matias Heikkilä Kuvat: Waltteri Lahti, Toni Kuokkanen, Sven Oliver Moll 2000-luvun demotuotantoa: Wamma-ryhmän Gehirn. Tähtipölyn tiivistämistä Empire Strikes Back valtasi etusivun Parker Brothersin ensimmäisestä videopelilehtisestä ja jätti varjoonsa jopa varmaksi menestyjäksi povatun Froggerin, jonka Atari-käännökseen oli ostettu oikeudet Konamilta. Niin musiikit, ohjausliikkeet kuin pelimekaniikankin. Kolme muuta spriteä ovat pelkkiä tasavärisiä palikoita. "Se oli todella hullunkurista!", Rex nauraa. Samalla Parker Brothersin markkinamiehet intoutuivat vaatimaan peliin uusia ominaisuuksia, kuten kävelijöiden köysitystä ja räjähdysanimaatioita. Taustakuvio on hyvin karkea, 40 pikseliä koko näytön leveydelle. Se sekunnin murtoosa, mitä television elektronisuihkulla kesti siirtyä alhaalta ylös ja aloittaa uuden kuvan piirtäminen, tunnettiin siunattuna hetkenä nimeltä vertical blanking period. Se on malliesimerkki laitteesta, jonka estetiikka on vahvasti sidoksissa tekniikkaan. "Pelin kamera ja lumikiitäjän fysiikka rakentuivat perusversion jälkeen hiljalleen peliä muokaten ja säätäen, kunnes kaikki palat tuntuivat olevan oikeilla paikoillaan." Nykyään Rex puuhaa yhä pelien parissa ja ylläpitää historiallisia salamurhia käsittelevää sivustoa nimeltään History Matters. Siinä pelaaja rullaa aluksellaan sivusuunnassa, ampuen kaikkea mahdollista. "Muistan, että yhdessä vaiheessa peli alkoi tuntumaan varsin hauskalta, mutta muiden mielestä siitä yhä puuttui jotain", Rex kertoo. "Ohjelmointi 2600:lle oli todella hauskaa, mutta muistutti paljon enemmän sudokun täyttämistä kuin varsinaista ohjelmointia", Rex sanoo. 2600:n merkittävin pullonkaula on RAM-muistin määrä. Spriteistä kaksi on 8-pikselisiä bittikarttoja, ja ne saa näkymään samalla juovalla myös kahtena tai kolmena. "Taistelu kävelijöitä vastaan oli luonnollinen valinta ja sivuttain vieriminen väistämätöntä", Rex selventää. A tarin vuonna 1977 julkaiseman Video Computer Systemin, Atari 2600:n, sisällä on kolme mikropiiriä: 6502-yhteensopiva 6507-suoritin, videoja äänipiiri TIA ja I/O-apupiiri 6532. Jotta näytölle saa mitään järkevää, on ohjelman seurattava näytönvirkistyksen etenemistä juova juovalta ja muutettava TIA-rekisterien tilaa sen tahtiin
Harrasteohjelmoijat ovat keskittyneet lähinnä peleihin, mutta 2000-luvulla myös muutama demoryhmä löysi koneen. Demoissa näkyy monia isommista koneista tuttuja perspektiivitemppuja, kuvanvenyttelyjä ja tietenkin plasmaefektejä. Suosiota selittää paljolti koneen historia, mutta monet varmasti motivoituvat myös sen teknisistä puitteista, jotka synnyttävät erikoisia ohjelmointihaasteita ja omalaatuista rujoa estetiikkaa. Mitä rajojen puitteissa syntyy. Laitteen tekniikka vaikuttaa vahvasti myös siihen, millaisia harmonioita ja melodioita sillä on mielekästä toteuttaa. Emulaattorin kaveriksi tarvitaan lähinnä 6502-ristiinkääntäjä ja TIApiirin dokumentaatio. Tämä näkyy esimerkiksi Pole Positionja Battlezone-pelien perspektiivitoteutuksissa. Mahdollisia sävelkorkeuksia on siis hyvin vähän, ja melko harvojen välille saa puhtaita intervalleja. Useimmat uudetkin ohjelmat kunnioittavat perinteisiä rajoja, mutta esimerkiksi Boulder Dash -käännös joutuu huijaamaan hieman. Kotipolttajat työn touhussa Homebrew-kehittäjien keskuudessa 2600 on suosittu alusta. Battlezone myös hyödyntää koneen laajaa väripalettia kauniisti taivaan ja maan väriliu'uissa, mutta vihollistankkien esittäminen karkeina bittikarttoina palauttaa TIA:n rajoitteet takaisin mieleen. Mediatutkijat Nick Montfort ja Ian Bogost käsittelevät 2600:n estetiikkaa kirjassaan "Racing the Beam". Dynaamisesti muuttuva pelikenttä ei kerta kaikkiaan mahdu kerralla 128 tavun muistiin, joten pelimoduulissa on siksi oma RAMlaajennos. Video Chess -shakkipeli joutuu paitsi miettimään siirtonsa hyvin pienellä työmuistilla näyttö sammutettuna, myös piirtämään pelilaudan lomitettuna, sillä kahdeksaa nappulaa ei saa näkyviin samalle juovalle. Uudet pelit vierittävät näyttöä moneen suuntaan, musiikki on moniäänistä ja kuvissa on yllättävän paljon värejä. Mitä laitteelle sitten on tehtykin, tekniset rajat ovat tulleet hyvin äkkiä vastaan. Laitteiston rajoja pusketaan jatkuvasti eteenpäin. Space Invadersin hyökkäyslaivueen leveys on kuusi ötökkää — kaksi triplattua bittikarttaspriteä. Omat tuotokset on perinteisesti siirretty aitoon rautaan EPROMpiireillä, mutta nykyisin on tarjolla myös esimerkiksi Harmony Cartridge, joka käyttää massamuistina SD-korttia.. Rauta Battlezone-käännös vuodelta 1983. Niihin sopeutuminen onkin synnyttänyt aivan oman estetiikkansa. Konekieliohjelmointia karsastaville on tarjolla myös ilmainen BASIC-kääntäjä Batari Basic, jonka käyttöoppaassa käydään läpi konsolin toiminta peruskäsitteistä alkaen. Vierekkäisyys on Atarilla vaikeampaa kuin päällekkäisyys, ja rinnakkain näkyvät hahmot on aina mietittävä tarkoin. Atari 2600 -kehitystä voi hyvin kokeilla myös ilman aitoa laitetta. Puhdas 2D-grafiikka on Atarilla hyvin karkeaa verrattuna useimpiin kasibittisiin kotimikroihin, mutta erilaiset juovittaiset rasteritemput onnistuvat monesti paremmin. 43 kaksi synteesikanavaa, joiden bitinpyöritykset ajastetaan 5-bittisillä laskureilla
Suosittuja olivat erilaiset animaatiot ja yksinkertaiset pelit, joissa ohjattiin yhdyntää tai masturbointia peliohjaimen liikkeillä. Aiheeseen liittyy kuitenkin monia mielenkiintoisia kysymyksiä: mitä kanavia pitkin materiaalia levisi, miten tunnettua se oli ja millaiseksi käyttäjät Tikku-ukoista pikselitisseihin: digitaalisen erotiikan varhaisvuodet Tekniikka valjastetaan eroottisen materiaalin tarpeisiin heti ilmestyessään. Ensimmäinen kaupallinen erotiikkapeli oli tiettävästi Sierra On-Linen Softporn Adventure vuodelta 1981. Al Lowe hyödynsi myöhemmin Softpornin juonikuvioita pelissään Leisure Suit Larry in the Land of the Lounge Lizards (1987), josta tulikin eräs tunnetuimpia eroottisia seikkailupelejä. Eroottisen materiaalin tuottajat ovat aina löytäneet uudet mediat, eikä tietotekniikka ollut mikään poikkeus. Hieman enemmän paljasta pintaa nähtiin strip poker -peleissä, mutta suoranaista pornoa sisältävät tietokonepelit tulivat länsimaisille markkinoille vasta 1990-luvulla. Monien tuntema esimerkki on Landisoftin C-64:lle vuonna 1985 julkaisema Sex Games. Myös varhaiset pelikonsolit saivat osansa erotiikasta. Sitä myytiin peräti 80 000 kappaletta. Konsolimarkkinat myöhemmin valloittaneiden Nintendon ja Segan kontrolli oli tiukempaa, eikä eroottisia pelejä niiden konsoleilla nähty virallisina julkaisuina. 44 2013.3 Kulttuuri V aikka aiheesta puhutaan mieluiten sivulauseissa ja kuiskaten, erotiikka ja tekninen kehitys ovat kietoutuneet tiukasti yhteen. Harrastajien keskuudessa sen sijaan levisi jo 1980-luvulla yleisesti myös bittimuotoista pornografiaa. Varsin pian keksimisensä jälkeen painokone suolsi tuhmia kuvia, kameralla kuvattiin alastomuutta, filmikameralla taas eroottisia elokuvanpätkiä. Digitaalisen erotiikan jäljillä Varhaisen kotimikroerotiikan yleisyydestä huolimatta sitä on toistaiseksi tutkittu varsin vähän. 1980-luvun taitteen markkinajohtaja Atari ei käytännössä juurikaan valvonut mitä sen konsoleilla julkaistiin, joten muun muassa pahamaineinen "raiskaussimulaattori" Custer's Revenge näki päivänvalon Atari 2600:lla. Bittimuotoinen porno levisi jo ennen internetin läpimurtoa. Kumpaakaan näistä peleistä ei voi pitää varsinaisena pornografiana, vaikka ne aikuisille tarkoitettuja aiheita käsittelevätkin. Pornovideoiden saatavuuden sanotaan olleen eräs keinoista, joilla VHS-videoformaatti voitti taistelun kotitalouksien suosiosta. Commodore 64:n ja Sinclair Spectrumin kaltaisten kotimikrojen grafiikkaominaisuudet riittivät jo yksinkertaisten kuvien esittämiseen. Teksti: Mikko Heinonen, Markku Reunanen, Petri Lankoski Rasputin+Pic-animaatio. Tuon aikakauden tietokoneissa ei vielä ollut mainittavia grafiikkaominaisuuksia, joten peli oli täysin tekstipohjainen. Sisällön kopiointi oli helppoa, eikä kukaan valvonut sen julkaisua
Meitä kiinnosti ajanjakso 1980-luvulta 1990-luvun alkupuoliskolle asti, siis aika ennen CD-ROMin, internetin ja JPEG-kuvaformaatin läpimurtoa. Koska kysely koski 20–30 vuoden takaisia tapahtumia, on tuloksia tulkittaessa luonnollisesti myös huomioitava, että vastaajien myöhemmät kokemukset voivat sekoittua lapsuuden ja nuoruuden aikaisiin muistikuviin. Tutkimuksen kuluessa vastaan tullutta sisältöä luonnehtii melko vahva heteronormatiivisuus. 45 sen kokivat. Nuorin vastaaja oli 20ja vanhin 55-vuotias, joten tutkimuksen kattamalla ajanjaksolla he olivat olleet joko lapsia tai nuoria. Luonnollisesti paljon mainintoja saivat myös kuvat, animaatiot ja eroottiset tarinat. Vastaajien keski-ikä oli 32,2 vuotta. (Mies, 30) Avoimissa kysymyksissä taas mainittiin yleisimpänä pelityyppinä erilaiset strip poker -pelit, etenkin Samantha Fox Strip Poker, jota markkinoitiin aikanaan kuuluisan laulajatähden ja Playboy-mallin yläosattomilla kuvilla. Girls of C64 -sivustoon ja World of Spectrum -sivuston Sex-osioon. Osaltaan tämä johtui myös siitä, että kuvien digitoimiseen tarvittava laitteisto yleistyi kuluttajahintaluokassa vasta 90-luvulla. Vastaajat eivät nähneet luetteloa vastatessaan avoimiin kysymyksiin, mutta ennalta annetut nimikkeet ja lajityypit olivat varsin hyvin linjassa avoimissa vastauksissa mainittujen kanssa. Pääosa vastauksista vaikutti kuitenkin ajanjakson tapahtumia vasten tarkasteltuna uskottavilta. ainakin nämä alkeelliset muodot. Larry, Samantha ja giffit Voidaksemme selvittää, miten yleisesti tunnettuja tietyt eroottiset sisällöt olivat, valikoimme kyselyyn luettelon niistä. Eräs vastaajista koki saaneensa Larrysta peräti sukupuolivalistusta: Joka tapauksessa, Larrylta tuli opittua mm. Commodore 64:n kultakaudella suuri osa kuvista ja animaatioista oli piirrettyjä, kun taas Amigaja PC-tietokoneet soveltuivat digitoidun aineiston esittämiseen. Koska mitään vakiintunutta listaa lähdekirjallisuudesta ei ollut saatavilla, perustimme valinnan ensisijaisesti omiin muistikuviimme sekä mm. Muutaman päivän kuluessa saimme hieman alle 300 uskottavaa vastausta, joita saattoi pitää riittävänä aineistona tutkimusta varten. Kyselyssä oli sekä avoimia kysymyksiä että ennalta valittuja eroottisia sisältöjä, joiden tunnettuutta halusimme selvittää. kortsuista, huorista, sukupuolitaudeista jne. sittemmin suljetussa Zorlimin pervotekstiarkistossa. Tässä vaiheessa tarinat olivat etupäässä harrastajien kirjoittamia fantasianovelleja, joita vaihdeltiin BBSjärjestelmissä ja levitettiin myöhemmin internetin kautta. Skrolli-lehtikin on restauroinut näitä vanhoja tekstejä, joita oli laaja kokoelma mm. Tämä oli ennakoitavissa myös sarjan kaupallisen menestyksen perusteella. Kuvat, animaatiot, tarinat, räsypokkapelit sekä erilaiset Sex Games. Kaikkiaan 94 % vastaajista ilmoitti olevansa miespuolisia, mikä sinällään noudattaa yleistä käsitystä varhaisen tietokoneharrastuksen sukupuolijakaumasta. Kuvista puhuttaessa vastaajat korostivat paljon sitä, miten niiden laatu kehittyi uusien laitesukupolvien myötä. Tämä tosin ei sinällään kerro kuin sen, että kysely valikoi vastaajiksi ihmisiä, joita aihe kiinnosti ja joille se oli ennestään tuttu. Tässä edelleen suositussa pelityypissä tarkoituksena on riisua ruudulla oleva naistai (harvemmin) mieshahmo voittamalla pokerissa. Näiden kysymysten selvittämiseksi laadimme kyselyn, joka julkaistiin IRC:ssä, Facebookissa sekä V2.fi-viihdesivustolla. Kaikki vastaajat olivat tutustuneet johonkin digitaalisen erotiikan muotoon. Monivalintaosion tunnetuin yksittäinen nimike oli Leisure Suit Larry -pelisarja, jonka tunnisti miltei jokainen kyselyymme vastannut
Tämä helpotti kyseenalaisen aineiston piilottamista: Lehdet ja videot olivat parempia, mutta tietokonetavaraa oli helpompi käsitellä, koska itsellä oli tietokone omassa huoneessa (Mies, 34) Jos käry sitten kävi, saattoi rangaistuksena olla sisällön menettäminen karullakin tavalla: Näytimme kaverin isosiskolle ja tämän poikakaverille Sex gamesin kun se oli niin hauska/ törkeä juttu nuorena teininä. Ei niissä ollut enää samanlaista viehätystä kuin C-64:n animaatioissa ja peleissä. Porno on ollut ystäväpiirin yhteinen salaisuus, joka omalla nostalgisella tavallaan yhdistää erästä tietokoneharrastajien sukupolvea. Kuvakokoelmia ja pornodemoja oli tarjolla myös PD-ohjelmakirjastoissa. Kyselyvastausten perusteella näitä levyjä ei kuitenkaan moni tilannut. Etenkään ensimmäisten kotimikrojen grafiikkaominaisuuksia ei voinut verrata painettuihin lehtiin tai VHS-elokuviin. Avesoft), jonka mainoksissa vilisi mainintoja kuten "Animoitu Alaston demo" ja "Alastonkuvia Gonanin aikakaudelta". (Mies, 37) Mielenkiintoinen havainto sen sijaan oli, että vähintään yhtä moni kuitenkin näki saman asian positiivisena: 90-luvulla latasin enimmäkseen suttuisia jpg-kuvia ja gif-animaatioita netistä. Jossain nakupokassa oli joku mieskin, mutta en muista koskaan pelanneeni sitä. Ikuisuuskysymys on luonnollisesti myös se, millä tavoin varhainen kosketus pornografiaan muokkaa lasten ja nuorten käsityksiä seksuaalisuudesta. Joku saattaa muistaakin MikroBITTIja C-lehdissä ilmoitelleen Softaboxin (myöh. (Mies, 29) Tikku-ukkojen lopun ajat 1990-luvun loppua kohden digitaalinen erotiikka lopulta pääosin sulautui valtavirtaan. Saattoi myös olla, ettei koneen parissa puuhailu juuri muita perheenjäseniä kiinnostanutkaan. Erotiikan katselu on jollain tasolla tiedetty luvattomaksi, joten lapsuudenkodissa sitä on piiloteltu vanhemmilta. Homoseksuaalinen vastaaja muisteleekin seuraavasti: Lähes kaikki liikkunut porno oli heteromiehille suunnattua ja homona moisesta en saanut sitä tarkoitettua hyötyä irti. 46 2013.3 joystickinvatkaukset kuvasivat suurimmaksi osaksi naisia tai heteroseksiä. Vaikka tekninen laatu ei ole ollut kummoista, materiaali on koettu kiinnostavaksi ja piilottelun arvoiseksi alusta alkaen. (Mies, 35) Voidaan siis sanoa, että varhaisessa tietokone-erotiikassa yhdistyi kaksi nuoria kiinnostavaa seikkaa: kiinnostus tietotekniikkaan ja kiinnostus eroottiseen materiaaliin. Henkilökohtainen tietoverkkojen käyttö poisti tarpeen kopioida sisältöjä kavereilta – katselu muuttui jaetusta kokemuksesta yksityiseksi, ja samalla saatavilla olevan materiaalin määrä kasvoi huimasti. Yhdistelmä teknistä viehätystä, pientä kiihottavuutta sekä aiheen kiellettyyttä saavat varhaisen digitaalierotiikan näyttäytymään joidenkin harrastajien piirissä edelleen erityisen viehättävänä ja nostalgisena. Kuvien ja animaatioiden tekninen laatu kehittyi kehittymistään, kunnes lopulta oltiin jo nykytilanteessa: kuka tahansa voi katsoa tietokoneellaan Full HD -laatuisia eroottisia kuvia ja videoita. (Mies, 33) Kokemuksia bittipornosta Tärkeä osa tutkimustamme oli selvittää myös, miten varhainen digierotiikka levisi, millaisena varhaiset käyttäjät sen kokivat ja mitä muistoja heille siitä jäi. Artikkeli perustuu samojen kirjoittajien laajempaan tutkimusartikkeliin, joka on julkaistu Digirakkaus 2.0 -kirjassa.. Aineiston avoimista vastauksista muodostuukin jonkinlainen yleiskuva siitä, miten bittipornoa saatiin ja miten siihen suhtauduttiin. Bittimuotoisen pornografian puolesta puhui tuohon aikaan myös se, että perheeseen hankittua kotimikroa ei useinkaan osannut käyttää kuin nuoriso. Pornosisällöt levisivät usein samojen "solmukohtien" kautta kuin esimerkiksi pelien kopiot. Isosisko takavarikoi kasetin ja heitti sen roskiin. Kuten voisi olettaa, toisten vastaajien mielestä materiaalin heikko tekninen laatu estikin varsinaisen kiihottumisen: Tietokone-erotiikka lähinnä nauratti, enemmän sitä katseltiin huumorimielessä koska niin paljon piti mielikuvitusta käyttää niitä söherryksiä katsellessa. Vaikka tutkimuksemme ei varsinaisesti aiheeseen paneutunutkaan, vastauksissa tätäkin kysymystä sivuttiin: Erotiikka muodostui mielessäni pornoa mukailevaksi. Aineistossa näkyy nuorten ilmeisen kiinnostunut, mutta epävarma suhtautuminen seksiin ja seksuaalisuuteen. Kuvia miehistä alkoi liikkua vasta purkeissa, mutta ne olivat enemmän eksotiikkaa (pitkä penis solmussa) kuin erotiikkaa tai pornoa homomiehelle. Kun sitten oikeasti aikanaan pääsin hommiin, tajusin että mielikuvani erotiikasta ja seksuaalisuudesta oli auttamattoman vähäinen ja hiukan vinoutunut. Ennen internetin yleistymistä saantikanavista tyypillisimpiä olivat ensin kaverit ja myöhemmin BBS-järjestelmät. (Mies, 32) Avointen kysymysten vastaukset viittaavat siihen, että digitaalinen erotiikka on nivoutunut osaksi yleistä erotiikan kulutusprosessia alusta alkaen. Eräs oleellinen taustatekijä on se, että vastaajat olivat vuosina 1980–1995 pääosin vasta lapsia tai teini-ikäisiä. Omakohtaista kokemusta Olen kuullut En tunne 20 40 60 80 100 % Leisure Suit Larry Eroottiset GIF-kuvat Strip Poker -pelit Samantha Fox Strip Poker ASCII-porno Eroottiset tarinat Kuvakokoelmat levykkeillä Sex Games Mangapornokuvat Muut pornodemot Eroottiset tekstiseikkailut Party Games -peli Stroker Party Girls Girls Just Wanna Have Fun Seek and Destroy 2 Leena Virtanen Helttaa helmaan Kyselylomakkeessa esitellyt eroottiset sisällöt ja niiden tunnettuus.
47 Kolumnit S iitä ei tunnu olevan kovin pitkä aika, kun ihmiset vielä luottivat verkon suuriin palveluntarjoajiin. Näin syksyisin taas suorittimen lämpö kiinnostaa liikaakin. Kaikki tärkeimmät palvelut ja ohjelmat ovat paljastuneet Yhdysvaltain hallituksen urkintakeinoiksi. Kaikki parhaat palvelut, joita haluaisi käyttää, ovat tietoturvan puolesta rikki. Pahojen rikollisjärjestöjen sijaan vaarallisin yksityisyyttäsi uhkaava vihollinen onkin valtio, kaikki valtiot, yhdessä jättikorporaatioiden kanssa. Vaan mitä voi tehdä, jos on sapelin vastaanottaja. Kun verkko yhä tuntuu turvalliselta ja ohjelmat luotettavilta. Jos Chromiumin hyvistä puolista ei halua eroon, esimerkiksi SRWare Iron pohjautuu samaan projektiin, muttei vuoda salaisuuksiasi hyväksikäyttäjille. Tervetuloa dystopiaan, jossa jokainen hakutermisi voi tuomita sinut myöhemmin. Minullakin on fecesbook-tunnari, ja olen ainakin 20 kertaa sanonut sinne jonkin henkilökohtaisen mielipiteen jostakin. Aina välillä tekisi mieli pistää pois päältä kaikki sähkölaitteet, riisua vaatteet ja juosta metsään kiipeilemään puissa. Omaan linnakkeeseen tosin ei pitäisi tuudittautua, kun samaan aikaan huonompia päätöksiä tekeviä kanssaihmisiä nussitaan takalistoon kuumalla sapelilla. Ei Androidia, ei iOS:ää, ei Windows Phonea. Sitä kutsutaan kesäksi. Ainakin NSA lukee Skrollia, jos muut eivät.. Nyt väestö kantaa mukanaan laivuetta NSA:n etäohjattavia kannettavia, puhelimia, ja tabletteja. Nigerialaiskirjeet ja viagramainokset pelottivat ja harmittivat verkon käyttäjiä. Monet niistä on jopa kirjoitettu suoraan Googlen tekstinkäsittelyä käyttäen. Vain avoimeen koodiin voi luottaa. Pahassa maailmassa elämisestä voi repiä lohtuakin, jos osaa ajatella positiivisesti. Poikkeuksena työasiat, joissa Google on ikävä kyllä kovalla käytöllä. Drive ja Docs ovat niin käteviä palveluja toimittajalle, että niitä on vaikea välttää. Seuraavaksi hankkiudutaan eroon PRISM -puhelimista. En juuri käytä, mutta olen NSA:n kartalla silti. Avointa ja vakoiluvapaata versiota odotellessa — pelkkä kirjoitusalusta.fi ei riitä. On helppo hymyillä, kun viimeiset seitsemän vuotta on käyttänyt kaikilla omilla tietokoneilla vain Linux-jakeluja. Kaikki artikkelimme ovat siellä viimeistään kielenhuoltoa varten. Ainakin vaihtaa käyttöjärjestelmää. Ei näin pääse kuin alkuun, mutta ainakin lujalle pohjalle voi rakentaa kestävän talon. Vain vakoilijan silmille Niinhän se vain on: internet on nykyään perseestä. Epäilisin myös Applea. Silti niitä tulee jonkin verran käytettyä. Myös Tor Browser Bundle on erittäin helppo ottaa käyttöön. Tai ehkä Jolla ja Ubuntu Phone. Skrollikin tehdään Driveä käyttäen. Vähennä altistumistasi Juuri ennen kolumnin kirjoittamista julkaistiin uutinen siitä, kuinka Saksan tiedustelupalvelun mukaan turvatoimenpiteenä tunnettu trusted platform management -piiri mahdollistaa Windows 8 -koneen erittäin laajan etähallinnan NSA:lle. Verkkoneutraliteetti ei toteutunut käytännössä, jos käänteli kiviä ja nuuhki ikävistä paikoista, mutta jonkinlainen yhteisymmärrys vallitsi siitä, että melkein kaikki oli riittävän hyvin. Applen laitteissa ei tpm:ää ole, eikä Linux tue ominaisuutta. Jos älyluurin tarvitsee, Jolla on ainoa vaihtoehto. Suojelupoliisin lausuntojen mukaan samat oman kansan vakoiluoikeudet halutaan myös Suomeen. Löytyy myös gmail, plussa, twitter, ja mitä muita näitä nyt on. Syöverin reunalla, kiikkerästi Tapio Berschewsky Muistatko vielä, miltä netti tuntui joitain vuosia sitten, kun fasismin lonkerot eivät vielä olleet ehtineet koskettaa juuri sinua. Kaikki oli vapaata, jos ei ilmaista, eikä mainoksia suurempia riesoja juuri kohdannut. Microsoft ei ole ystäväsi, vaan myy sinut sentistä ensimmäiselle painostajalle. Niin, hankkiutukaa eroon myös Chromesta, Chromiumista, ja Googlesta ylipäätään. ” Internet on nykyään perseestä.. Tietoturvariskit tarkoittivat sitä, että jokin rikollisjärjestö saattaa kontrolloida etänä konettasi ja lähettää roskapostia rahan toivossa miljoonille. Väitettiin, että kunhan pysyy poissa tuhmilta sivulta ja asentaa Windowsiin paremmat haittaskannerit, verkon avaama ruusuinen utopia on vaaraton. Näitäkin tosin pitää osata käyttää varoen. Aina voi myös vaihtaa mummoluuriin ja kantaa mukana jotain luotettavamman oloista tietolaitetta verkon käyttöön. Hakekaa Duckduckgo:lla ja asentakaa parempi selain
Roguelikelle tyypillistä on, että hahmon kuolema on lopullinen, ja pelialueet hirviöineen ja aarteineen ovat satunnaisesti luotuja. Peli on pullollaan mytologian ja popkulttuurin inspiroimia ansoja, jotka uusi pelaaja oppii usein kantapään kautta. Juoni on yleensä läsnä vain nimellisesti. Pelaaja ohjastaa hahmoaan maanalaisissa luolastoissa ja käytäväverkostoissa. Vanhemmista roguelikeista löytyy myös muutama erikoisempi nimi. Moriasta jalostettiin kehitetty versio Angband, joka itsessään on kloonattu sadoiksi eri variaatioiksi. Ensimmäisenä apajille ehtivät Moria ja Hack, jotka samalla polkaisivat käyntiin kaksi rogueliken päähaaraa: "bandit" ja "hackit". Vuonna 1980 julkaistu Rogue popularisoikin genren sisältämällä kaikki sen pääpiirteet. Teksti: Kalle Viiri Kuvat: Mitol Berschewsky, Kalle Viiri Nethack on ehkä tunnetuin roguelike, jopa tunnetumpi kuin Rogue itse. Varhaishistoriaa Nimitys juontaa englannista: Rogue like eli "Roguen kaltainen". Se säilyttää kuitenkin pelityylin samanlaisena: etene luolastossa, kerää aarteita, tapa hirviöitä, koeta selvitä. Genreen yhdistetään usein merkkigrafiikka, vaikka vaihtoehtoiset grafiikat ovat yleistyneet jatkuvasti. Pelin suosio oli niin valtava, että Rogue lisättiin vakio-osaksi suosittua BSD 4.2 -käyttöjärjestelmää. Pelaaja voi myös varustella hahmoaan rauhassa maan pinnalla olevassa kaupungissa. Roguelike-ilmiön perusta oli luotu. Luolaston pohjalla makoilee hirviöiden vartioima kallisarvoinen amuletti tai muu taikaesine, joka pitää hakea maan pinnalle. Roguelike-genren muotoutuminen tapahtui pääasiassa 1980-luvulla Roguen inspiroidessa uusia pelejä. Tavoitteena on selvitä hengissä kohtaamisista maanalaisten hirviöiden kanssa ja kerätä talteen syvälle maan uumeniin kätketyt aarteet. Merkkigraafinen sankarointi ei kuole pois. Mukana olivat satunnaisgeneroitu luolasto, kevyt juoni, jatkuvasti ruokaa tarvitseva sankari ja anteeksiantamaton kalman käsi, joka viedessään hahmon pitää sen otteessaan ikuisesti. Hack muistetaan nykyään parhaiten Usenetin välityksellä kehitetyn NetHackin esiasteena. Turvasatamia on harvassa, ja nälkäkuoleman vaara rankaisee etenemistä arkailevaa pelaajaa. "Bandien" esikuvassa Moriassa luolasto on loputon, sillä peli generoi uusia alueita aina pelaajan siirtyessä uudelle kerrokselle. Pelin pääpaino on hahmon kehittämisessä. Maan alta löytyy hirviöitä ja niiden vartioimia aarteita, jotka auttavat hahmon valmistamisessa taisteluun luolaston pohjalla lymyilevää Balrogia vastaan. Hack on Roguelle uskollisempi klooni, joka lisää peliin erilaisia hirviöitä, alueita ja ominaisuuksia. Tässä koboldi ottaa nenään sankarilta.. 48 2013.3 ()()()() ()()()() ()()() ()()()() ()()()()() ()()()() () ()()() ()()() ()()()()()()()() ()()()()() () ()()() () ()()() () ()()()() ()() () Gearhead DoomRL ()() ()() () ()()() ()() ()()() () Cataclysm IVAN ()() ToME () () ||~// () \\~\\ () () Dwarf Fortress ||~|| \\~\\ __ ()() () //~|| ZAngband //~ \ () ()() Dungeon ADOM \\ () \\~\\ //~//\\ () () SLASH' EM Crawl // \\~\\ ()()() \\~\\//~// \\ ()()()() ()() \\ \\ // \\~\\ ()() ||~||~// \\___ ()()() ()()() \\______\\ __// \\~\\ Ularn ||~ ~// /\ \ \__()() ()() () ()() \________~ ~\\ ||~|| ||~|| Angband / / \ \ ()() () () () \\~ ~\\ \\~\\ ||~|| //~// lukuisia variantteja ()() () () Nethack ||~|| Larn //~// Steamband ()()() ()()()()() \\~ ~\\ Omega ||~|| Moria Hengband ()() () ()() \ Hack\ ||~|| //~// //~// ()() Sangband ()()() *() ()() \\~ ~\\_||~||__//~//__//~// ()()()() ()() ()* ()() \\~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~//() ()() ()()() ()() () () \\~ ~ ~ ~ ~ ~ ~ ~ ~ ~// ()() ()()()() ()() ()* ()()()\\~ ~ ~ ~ ~ ~ ~ ~ ~// ()()() () () //~ ~ ~ ~ ~ ~ ~ ~// * // ~ ~ Rogue ~ ~ || ||~ ~ ~ ~ ~ ~ ~ ~// // ~ ~ ~ ~ ~ ~ ~// // ~ ~ ~ ~ ~ ~ ~ || /\|\/\/\|//\//|//\|\/\|//\//|//\|\/\\//|//\|\/\ //|/|\\|//\//|//\|\//\|///\|\\|//|/\|\\|//|/\|\\|//|/\|//\//|//\|\//\|///\|\\|//|//\|///\| R oguelike on peligenre, joka muistuttaa toimintaroolipeliä tietyillä erikoispiirteillä. Larn Pelit Merkittäviä roolipelejä Roguen perintö on jatkunut jo kolmanneksen vuosisadasta
Käyttöliittymiä kehitetään, aloittelijaystävällisyyttä lisätään, vanhoista perinteikkäistä luolaympäristöistä astutaan seikkailemaan avoimeen maailmaan, tai scifihenkiseen tulevaisuuteen Brutaalin realistinen Unreal World tarjoilee tylyjä kokemuksia muinaispohjolan luonnossa. Se tekee peleistä paljon vaikeampia. Omega puolestaan tarjosi ensimmäisenä roguelikena pelaajalle laajan maailman ja avoimen pelityylin. Modernisointia tapahtuu monella tavalla. Pitkälle kehittyneen hahmon joutuessa tiukkaan paikkaan syke nousee ja jännitys on käsinkosketeltavaa. Useimmat rogueliket ovat vähäisen juonensa ja satunnaisesti luotujen ympäristöjensä takia miellyttäviä aloittaa alusta vanhan hahmon kuoltua. Erityisesti NetHackissa erilaisia odottamattomia vaaratilanteita on runsaasti myös heti pelin alussa. Susista ja muista vaaroista selvinnyt kulkija on tunkeutumassa leiriin. Pelaaja ei voi tukeutua siihen, että huonosti käydessä voi palata pari minuuttia vanhan tallennukseen. Kömpelön käyttöliittymän, bugisten julkaisujen ja erikoisten pelimekaniikkojen ansiosta Omega ei kuitenkaan saanut aikaan varsinaista läpimurtoa. Rogueliket mielletään hankaliksi peleiksi, joista ei selviä ilman strategiaopasta tai pitkää yrityksen ja erehdyksen kautta tapahtuvaa oppimista. Klassista NetHackia pelataan usein vuosia ennen kuin luolaston pohja alkaa häämöttää. Jopa niinkin arkinen asia kuin suihkulähteestä hörpyn ottaminen voi koitua hahmolle kohtalokkaaksi. Dungeon Crawl Stone Soup on tämän hetken parhaita roguelikeja. Eniten pelikokemukseen vaikuttaa lopullinen kuolema, pelottava permadeath . 49 muistuttaa ensi vilkaisulla hieman Moriaa ja Angbandia, mutta mahdollisuutta kehittää hahmoaan rauhassa ei ole. Mukavan käyttöliittymän ja lempeämmän pelisuunnittelun ansiosta tämä uppoaa paremmin moderniin pelaajaan kuin klassisemmat teokset. Pelistä on myös merkkigraafinen versio.. Vaikka kuoleman lopullisuus tuntuu joskus liian rankalta, se lisää peliin paljon syvyyttä. Monille nykyaikaisempiin peleihin tottuneille on myös vastenmielistä omaksua perinteinen merkkigrafiikka ja oppia pelin lukuisat oleelliset näppäinkomennot. Pelillä on tiukka aikaraja jonka puitteissa jalokivi "Larnin silmä" on saatava ulos luolastosta. Kyllä se kehittyy Roguelikejä on kuitenkin tehty 1980-luvun jälkeenkin, ja etenkin 2000-luvun puolella tehdyissä peleissä näkyvät selvästi myös kehityksen merkit. Pelaajan ei tarvitse kahlata samoja taisteluja ja käytäviä, vaan ympäristö on aina uusi. Yhdistävät tekijät Klassisten roguelikejen välillä on paljon eroja, mutta yhdistävät tekijät ovat vielä korostuneemmat. On totta, että monet roguelikeistä jakavat äkillisiä ja arvaamattomia kuolemia avokätisesti. Kuoleman lopullisuus tarkoittaa, että jos pelaajan hahmo kuolee, pelaaja joutuu aloittamaan pelin alusta
DoomRL:ssä väkivaltafantasiaa pääsee toteuttamaan vähän toisesta näkökulmasta kuin vatsaan pultatun BFG9000:n takaa.. Suosituksi tulleet Angband-variantit ZAngband ja ToME sekä NetHackin ja Omegan inspiroima ADOM astuivat kuvioihin. Juonivetoisuus on rogueliken kehittäjälle haaste. Eteneminen muuttuu vähemmän lineaariseksi, kun luolastossa syvemmälle siirtymisen sijasta pelaaja voikin palata pinnalle puuhastelemaan. Muita vastaavia ovat esimerkiksi Cataclysm: Dark Days Ahead ja suomalaista tekoa oleva, jo 21-vuotias UnReal World. Esimerkiksi suosittu avaruusseikkailupeli Faster Than Light tunnetaan roguelike-elementeistään. ADOMin myötä myös juonivetoisen rogueliken suosio on kasvanut. Omegan aikanaan luotsaama avoin maailma sivutehtävineen sai uuden mahdollisuuden 1990-luvulla. Esimerkiksi Dungeon Crawl on klassinen luolastoseikkailu ilman juonta, kaupunkeja tai kilttejä sivuhahmoja. Mitä roguelikeille oikein tapahtui 1980-luvun jälkeen. Ilmiön pioneerina siellä pidetään Mystery Dungeon -sarjaa, jonka lisäksi markkinoilla on muun muassa Final Fantasy -pelien sivuosana toimiva Chocobo-sarja. Samalla se pyrkii poistamaan pelistä roguelikeen usein yhdistettyjä ikäviä piirteitä kuten mekaanisen toiston, äkkikuolemat, ja vain kantapään kautta opittavat ansat. Uusia roguelikeja saatetaan maailmaan esimerkiksi "Seven Day Roguelike" -kilpailuissa, joissa nimensä mukaisesti ohjelmoidaan roguelike seitsemässä päivässä. IVAN mallintaa monia asioita tarkemmin kuin on roguelikeissä totuttu näkemään. Näin tekevät ADOMin lisäksi esimerkiksi suomalaistekoinen IVAN ja erikoisempi, mechataisteluun keskittyvä Gearhead. Perinteisestä luolastoseikkailusta voidaan poiketa runsaastikin, mutta klassisista roguelikeista haetaan ideoita niin ulkoasuun kuin pelimekaniikkoihinkin. Perinteisemmissäkin roguelikeissä on tapahtunut uudistuksia. Vaikka keskeisin sisältö tapahtuu edelleenkin luolissa, maan päältäkin löytyy taisteluita, kaupunkeja ja sivutehtäviä. 50 2013.3 <heg> moi <mar> :---D <heg> sulavoi <mar> lol <3 [13:36] [mar] [#skroll i] <heg> moi <mar> :---D <heg> sulavo i <mar> lol <3 [13:3 6] [heg] [#skr olli] sivuhahmoineen ja -tehtävineen. Genren ominaisuuksia ja nimeä lainataan ahkerasti indie-puolella, jossa leikitellään mieluusti satunnaisten maailmojen ja lopullisen kuoleman kanssa. Pelin suurin kompastuskivi lienee se, että peli vaikeutuu sitä mukaa kun pelaajan varustelu paranee – usein kannattaa jättää vaihtamatta parempaan aseeseen. Merkkigrafiikkaa tai ei, Roguen perintö on tullut jäädäkseen.. Roguelike on saanut osakseen kaupallista suosiota Japanissa, jossa luolastojen aarteita pengotaan useammankin kaupallisen pelisarjan voimin. Dwarf Fortress on osaltaan toiminut inspiraation lähteenä ja pioneerina realismia ja selviytymistä painottavissa roguelikeissa. Yksi ehdottomasti tunnetuimpia genrestä ulos rönsyäviä roguelikejä on Dwarf Fortress. Vaikka genren valtavirtasuosio on vielä vähäistä, kehitysskene on aktiivinen. Juoni ei saa häiritä pelaajaa, vaikka sen joutuisi kokemaan kymmeniä kertoja hahmojen kuollessa. Kun genre ei riitä Roguelike on nostanut viime aikoina päätään indie-pelien maailmassa inspiraation lähteenä. Osaltaan Dungeon Crawlia voikin pitää vastalauseena sekä pitkällistä hahmonkehitystä suosivalle Angbandille että uusia pelaajia jatkuvasti kampittavalle NetHackille. Yleinen tapa tuoreuden säilyttämiseksi on, että osa pelin sisällöstä pysyy pelikerrasta toiseen samana, ja osa taas luodaan satunnaisesti jokaista pelikertaa varten. Länsimaissa roguelike on jäänyt pääosin kaupallisen valtavirtapelikehityksen ulkopuolelle. Myös klassinen räiskintäpeli taipuu roguelikeksi. Pelin seikkailutila muistuttaa paljon normaalia roguelikea, mutta pelissä on myös linnoitustila, joka muistuttaa enemmän kaupunginrakennuspelin ja rogueliken risteytystä
<heg> moi <mar> :---D <heg> sulavoi <mar> lol <3 [13:36] [mar] [#skroll i] <heg> moi <mar> :---D <heg> sulavo i <mar> lol <3 [13:3 6] [heg] [#skr olli] Kulttuuri IRC on paras 25 vuotta tekstiä Juttelualustoja netissä tulee ja menee, mutta irkki on kestotavaraa. Facebook ja Google+ nyrpistelevät kovasti nenäänsä tekaistuille nimille, ja monelta suunnalta tulee muutenkin painostusta oman nimen käyttöön. Irkki on ihan oikea, oma protokollansa ja palvelunsa. Lopulta irkkiä kannattaa kohdella julkisena keskusteluna. Monet käyttäjät tallentavat kaiken keskustelun omille koneilleen. Salauksesta on kuitenkin hyötyä vain, jos jokainen keskusteluun osallistuva henkilö käyttää salausta. Irkissä viehättää sen elegantti yksinkertaisuus. Ei mitään ylimääräistä Irkissä parasta on selkeys ja yksinkertaisuus. Silccaajien käyttäjänimet eivät ole uniikkeja. Ei ole siis mitään takeita siitä, mihin irkkiin sanotut asiat saattavat päätyä. Niiden pohjana voi olla kaveripiiri, ohjelmistoprojekti tai vaikka paikkakunta. Esimerkiksi Skrollilla on useampi irc-kanava, kuten ircnetissä sijaitseva #skrolli, jossa lehteä kehitetään. Korvaajaa odotellessa Vuosien varrella irkille on ehdotettu ja kehitetty useita korvikkeita. Se hyödyntää vahvaa kryptografiaa ja avainten vaihtoon perustuvaa käyttäjien keskinäistä luottamusverkostoa, jollaisen kunnollinen ylläpito vaatii vaivaa ja pedanttisuutta. Missään muussa chatissa kuin irkissä ei ole yhtä selkeää ja yksinkertaista jutella joko ryhmille tai yksittäisille käyttäjille. Paremmasta päästä on SILC, joka ei kuitenkaan ole saavuttanut suosiota. Irc-verkkoja ylläpidetään usein hajautetusti monien toimijoiden yhteistyöllä. Kahden samannimisen käyttäjän erottamiseksi täytyy erikseen puljata salausavainten kanssa. Käyttäjien IP-osoitteet näkyvät useissa verkoissa avoimesti, eikä nimimerkkien autentikointikaan ole käytössä kaikkialla. Mikään firma ei ole myöskään koko ajan tunkemassa väliin mainoksineen, eikä kukaan järjestele ja suodata sisältöä uuteen järjestykseen jonkin algoritmin perusteella. Asiakasohjelmia on monia erilaisia, joista valita mieluisensa. Facebookin kaltaisissa moderneissa suurissa sosiaalisissa medioissa on äkkiä pyörällä päästään monimutkaisista yksityisyysasetuksista, kaveripiireistä ja ryhmistä. 51 I RC eli Internet Relay Chat, kavereiden kesken irkki, on oululainen keksintö 80-luvulta. Jos yksikin linkki näppäimistön ja irc-palvelimen välillä on yhdeltäkin käyttäjältä salaamatta, koko keskustelu on luettavissa selkokielisenä verkkoliikenteestä. Kanavat voivat elää yhden illan tai vuosikymmeniä. Kanavia on helppoa perustaa, ja niiden toiminta on idioottivarmaa. Kaikessa verkkoviestinnässä on tietysti mahdollista olla ylimääräisiä korvia, mutta irkissä on sentään selvää, keille kirjoituksensa osoittaa. Käyttäjä ei myöskään voi helposti varmistaa, onko irc-palvelimien välinen liikenne salattua vai ei. Teksti: Ronja Koistinen Kuva: Mitol Berschewsky. Irkki avautuu irkkaajan silmien eteen sellaisenaan, eikä siinä tapahdu mitään muuta kuin ihmiset itse.. Irkissä on myös mahdollista olla juuri niin anonyymi, kuin hyvältä tuntuu. Parasta suojaa saa siis hyvin konfiguroiduilta ssl-suojatuilta pienen piirin palvelimilta, jossa kaikki käyttävät salausta. Sillä on ainakin puoli miljoonaa käyttäjää ympäri maailmaa. Irkissä voi kuitenkin periaatteessa toimia niin kuin tykkää, vaikka joillakin kanavilla oikean nimen näyttäminen lasketaan osaksi hyviä käytöstapoja. Monet verkot tukevat yhteyden muodostamista SSL-salattuna. Avointa ja julkista Irkin tietoturvaominaisuudet vaihtelevat rankastikin eri verkkojen ja palvelinten välillä. Tekniikka on suoraviivaista ja standardi avoin. Määrä on pikkuruinen vaikkapa Facebookiin verrattuna, mutta irkki on tärkeä erityisesti Suomessa ja tietyissä piireissä muuallakin maailmassa. Käyttää voi nimimerkkiä tai koko nimeä, ja jotkut verkot tarjoavat jopa palveluita IP-osoitteen piilottamiseen muilta irkkaajilta. Eri verkoissa on kuitenkin erilaiset käytännöt niin palvelimien ylläpidollisten velvoitteiden kuin kanavien sisäisen ylläpidonkin suhteen. Viranomaisten tiedetään tarkastaneen irkkaajien käyttäjätietoja selvittäessään rikosten taustoja. Irkissäkin tosin käyttäjänimien kaappaaminen on arkista, eikä pelkkään nimeen kannata luottaa. Välistä on vaikea hahmottaa, mihin asti mikäkin postaus näkyy. Pienimmät irkkiyhteisöt ovat yksittäisten omien palvelinten ympärille kasautuneita tuttavapiirejä. Suomessa internet-palveluntarjoajan oma IRCnetissä oleva palvelin on osa peruspalvelua. Verkkoja on monia muitakin, niin kansainvälisiä kuin paikallisia
Tässä paketissa on kaikki mitä tarvitset Raspberryyn tutustumista varten: • Raspberry Pi -piirilevy • SDHCmuistikortti • Virtalähde • Kotelo piirilevylle • Jäähdytyssiilit 79 € Jimm’s Custom Perfect Gentleman Kun saavut laneille, tahdotko saada täydellisen herrasmiehen vastaanoton. Maukkaat epäonnistujat Asiakaspalvelu +358 29 70 70700 asiakaspalvelu@jimms.fi Jimm’siltä löytyy nettitilauksiin aina toimituskuluton vaihtoehto! Noutopalvelumyymälä Turku Lukkosepänkatu 7 20320 Turku Hinnat €/kpl, sis. Sen on kehittänyt Raspberry Pi Foundation, jotta useammat saisivat mahdollisuuden oppia tietokoneen tekniikkaa ja ohjelmointia ilman suurempia sijoituksia. Perfect Gentleman on suunniteltu kompaktiin BitFenix Prodigy koteloon, joten sen ulkoiset mitat taistelevat jopa Marilyn Monroen mittojen kanssa. Erittäin pieni, ellei täydellinen!! Prodigy koteloon on silti onnistuttu ahtamaan tehoja jopa Espoon tarpeisiin! Tekniset tiedot: • Intel i5-4670K 3.4GHz, 6MB -prosessori • Gigabyte GA-Z87N-WIFI mITX -emolevy • NVIDIA GeForce GTX 760 2GB GDDR5 -näytönohjain • 8GB 1600MHz DDR3 CL9 -keskusmuisti • 120GB SSD-kiintolevy + 1TB SATAIII -kiintolevy • BitFenix Prodigy Midnight Black, Mini-ITX -kotelo • Cooler Master Seidon 120M vesijäähdytysjärjestelmä • Windows 7 Home Premium 64-bit (Suomi) 1389 € Päästä sisäinen koodarisi irti!. alv24% Raspberry Pi Starter Kit Yksinkertainen yhden piirilevyn tietokone