Tietokonekulttuurin erikoislehti 2014.2 S K R O L L I . F I Uusi juttusarja: Pelisuunnittelu Todellisuuden BINÄÄRIRAKENNE Omaa koodia Jollaan Muitakin oli kuin Kuusnepa Alkuun koodauksessa kolvauksessa ja
Uusi juttusarja valottaa pelisuunnittelun saloja. 12 Koodikoulussa Ohjelmoimaan voi oppia monin eri tavoin. 24 Kuuslankun kamppailukumppanit 80-luvun kaatuneet koneheerokset. 32 Maailman herruuden ABC Saammeko tekoälyltä turpaan. 36 Segmenttipuun oksilla Näppärän tietorakenteen avulla taulukon osasummat tehokkaasti. 8 Voikko-oikoluku Suomalainen tekstintarkistin tajuaa kielemme rakenteen päälle. 31 Kolumni – Jukka O. Sisällysluettelo. 11 Kirjat: pelialan historia Tarinoita pelialan suljettujen ovien takaa. 46 Helppoa rakentelua Sokea johdattaa sokeaa elektroniikan maailmaan. 20 Tietokone todellisuuden mallina Elämä, maailmankaikkeus ja kaikki. 38 Lerput ja korput nykykoneissa Näillä keinoilla pelastat vanhat levykkeet. 3 Pääkirjoitus 4 Mikrometrin leikkauksia Laserleikkuri on tarkempi ja nopeampi kuin 3D-tulostin. Kasvi Mistä nykylapsille Commodoren veroinen oppimisalusta. Kauppinen Seikkailupelien kulta-aika ei jäänyt 90-luvulle. 52 OpenGL-ohjelmointi, osa 5 Sarjan viimeisessä osassa tehdään jälkikäsittelyä. 7 Kolumni – Jyrki J.J. 40 Ohjelmoi Jollaa Sailfish-sovellusten tekeminen ei ole rakettitiedettä. 56 Jumala koneesta Kun uskonto ja käyttöjärjestelmä kohtaavat. 50 Säännöt + tavoite + haaste = peli. 16 Prolog – ohjelmointia logiikan keinoin Teoreemojen todisteluun sopiva ohjelmointikieli. 58 Ei näin! Kuinka Sega teki oman maalin. 66 Kirjat: tietotekniikka ja ihminen Kuinka internetsin käyttö muovaa aivojamme. 61 Mikrokivikausi 62 Ensikosketus Haskelliin Erilaisen ohjelmointikielen erilaiset haasteet. 55 Kirjat: ohjelmointia lapsille Kotimainen opaskirja aikuisten ja nuorten testattavana
Lapset ja nuoret olivat rohkeampia, mutta lopulta vain pieni osa heistäkään rupesi kunnolla ohjelmoimaan. Toisin kuitenkin kävi. Tähän käyttötaitoon kuuluisi toki erottamattomasti myös Basic-ohjelmoinnin hallitseminen. B asicin taka-ajatuksena oli jo vuonna 1964 se, että ohjelmointi voisi olla helppoa ja välitöntä, muidenkin kuin erikoisasiantuntijoiden tajuttavissa olevaa. Puhutaan esimerkiksi proseduraalisesta lukutaidosta, kyvystä lukea erilaisten algoritmisten rakennelmien toimintaperiaatteita. Vaikka monet ovatkin pitäneet Basicia sottaisena sormivärikielenä, sen vaikutusta kulttuuriin on turha kiistää. Nyt, puoli vuosisataa Basicin jälkeen, ajatus ohjelmoinnista koko kansan yleissivistyksen osana on vihdoinkin tekemässä paluuta. Kasvi, Sami Koistinen, Antti Laaksonen, Tapio Lehtimäki, Olli-Pekka Lehto, Asser Lähdemäki, Jussi Määttä, Olli Oikarinen, Sam Kh Pak, Annika Piiroinen, Harri Pitkänen, Manu Pärssinen, Ville Ranki, Mikko Rasa, Mikko Rauhala, Henna Ruohonen, Janne Sirén, Teija Tuhkio, Wallu, Antti J. Maailmassa on proseduraalista ymmärrettävää yhä enemmän, ja tunnetusti paras tapa kehittää proseduraalista lukutaitoa on ohjelmointi. Ohjelmointia ei siis kannata opettaa kaikille pelkkänä satunnaisesti hyödyllisenä taitona, vaan siksi, että se antaa eväitä nykymaailman ymmärtämiseen. J. Kun kotitietokoneita alkoi ilmestyä kauppoihin 1980-luvun vaihteessa, niiden puolestapuhujat vetosivat usein uuteen kansalaistaitoon, jopa uuteen lukutaitoon. Basic oli edustanut hakkeri-idealistista unelmaa tasa-arvoisesta tietojenkäsittelystä, mutta se loikin perustan uudelle luokkajaolle. Ohjelmoimaan ryhtyneistä tuli uutta eliittiä, jonka oikkujen armoilla peruskäyttäjät joutuvat elämään. Ohjelmointiasiaa on nimittäin nyt poikkeuksellisen paljon, ja ohjelmoinnin oppimisen teema toistuu useammassa jutussa. Ylikoski Julkaisija Skrolli ry Painopaikka Tammerprint, Tampere, ISSN 2323-8992 (painettu) ISSN 2323-900X (verkkojulkaisu) 441 878 Painotuote Kannen kuva: Ville-Matias Heikkilä, Risto Mäki-Petäys ja Olli Oikarinen. Myös tässä Skrollin numerossa kunnioitetaan Basicin perintöä. Tietokoneita olisi kohta joka paikassa, ja koko kansan pitäisi oppia käyttämään niitä. 3 Puoli vuosisataa Basicia Basic-kieli täytti tänä vuonna 50 vuotta, ja sen vaikutus tuntuu vahvana nykyäänkin. Kauppinen, Ronja Koistinen, Sade Kondelin, Teemu Likonen, Annika Piiroinen, Kalle Viiri Tämän numeron avustajat Kenneth Falck, Jyrki J. OpenGL-juttusarja päättyy, ja uusi pelisuunnitteluun keskittyvä sarja alkaa. Mukavaa kesää lehden parissa ja muutenkin! Pääkirjoitus Skrolli Tietokonekulttuurin erikoislehti Yhteydenotot toimitus@skrolli.fi Ircnet: #skrolli Päätoimittaja Ville-Matias Heikkilä Toimituspäällikkö Toni Kuokkanen Toimitussihteeri Ninnu Koskenalho Taiteellinen johtaja Risto Mäki-Petäys Mediamyynti Jari Jaanto Talous Anssi Kolehmainen Muu toimitus Mitol Berschewsky, Tapio Berschewsky, Mikko Heinonen, Jukka O. Aikuiset eivät usein edes uskaltaneet koskea kotimikroihin. Ville-Matias Heikkilä päätoimittaja. Lisäksi mukana on ensimmäistä kertaa juliste – Oona Räisäsen maineikas esitys modeemin kättelyäänen rakenteesta
Leikkuriin laitetaan yleensä tasapaksuista levyä, josta leikataan sopiva osa. Laserleikkuri vaatii sijoituspaikaltaan vähän enemmän kuin 3D-tulostin. 3D-tulostimella tulostusajat lasketaan kymmenissä minuuteissa tai tunneissa. Laserin jäähdyttämiseksi tarvitaan jäähdytysvettä, joka pienemmissä malleissa Useimmille Skrollin lukijoille 3D-tulostin on tuttu laite. Käyttökohteita ja rajoituksia Laserleikkurin etuja ovat tarkkuus, nopeus ja laaja materiaalivalikoima. Jos sellaista ei ole itse päässyt käyttämään, niin niihin on päässyt tutustumaan vaikkapa Skrolli 2013.4:n artikkelissa tai internetin sivuilta. Kokeiluleikkauksiaja kaiverruksia voi tehdä vaikka roskiksesta kaivettuun aaltopahviin. Käsittelemme artikkelissa erityisesti CNC-laserleikkureita, joissa CNC tarkoittaa ”computer numerical control”, tietokoneella ohjattavaa leikkuria. Tätä voidaan kiertää kokoamalla kolmiulotteiset esineet kaksiulotteisista osista esimerkiksi sormiliitoksilla tai taivuttamalla. Laserleikkuri on yksinkertaisuutensa vuoksi myös helpompi rakentaa kuin 3D-tulostin. Kaiverrusjälki esimerkiksi puussa on kaunista, ja laserilla onkin helppo tehdä erilaisia koriste-esineitä. Laserleikkurin sydän on näkymätöntä valoa tuottava hiilidioksidilaserputki, joka kuumenee käytössä merkittävästi. Laser siis täytyy sijoittaa tilaan, jossa on hyvä ilmanvaihto tai sellainen voidaan rakentaa vaikkapa viemällä ilmastointiputki ulos saakka. Teksti: Ville Ranki Kuvat: Ville Ranki, Mikko Niemikorpi Laserleikkuri – 3D-tulostimen skarppi, simppeli isoveli Rakentelu. Laserin leikkaamat esineet ovat teräväreunaisia ja sellaisenaan siistin näköisiä. Skrolli kertoo kokemuksia laserleikkureista ja vertaa niitä 3D-tulostimeen. Mikä laserleikkuri on. Käyttötarkoituksesta riippuen leikkurilla voidaan leikata esimerkiksi vaneria (lujaa), akryyliä (siistiä ja melko lujaa) tai lastulevyä (halpaa). Laserilla pystyy leikkaamaan pehmeitä materiaaleja, kuten puuta ja muovia. Tämä vaatii esineiden suunnitteluun hieman erilaista näkökulmaa. 3D-tulostimeen verrattuna laserin suurin rajoitus on kaksiulotteisuus. Toinen vastaava ja suosittu laite on laserleikkuri. Laserleikkuri on tietokoneella ohjattava, kahden akselin suuntaisesti liikkuva laseria ampuva laite. Säteen halkaisija on noin 0,1 mm, joten sillä pystyy tekemään hyvin tarkkoja viiltoja. Sen leikkauspäätä liikutellaan 3D-tulostimien tapaan askelmoottoreilla, joilla paikka pystytään asettamaan hyvin tarkasti. Hyvässä vireessäkään olevalla harrastajien 3D-tulostimella ei päästä mittatarkkaan tulostukseen, vaan osat vaativat usein viilausta sopiakseen täsmälleen yhteen. Leikkaamisesta aiheutuu hajua, joka on syytä poistaa ilmanvaihdolla. Laserleikkuri on hyvin tarkka. Esimerkiksi materiaalin paksuus vaikuttaa liitosten muotoon, joten se täytyy tietää etukäteen kappaletta suunnitellessa. Mittatarkkuus riittää esimerkiksi liimattomiin sormiliitoksiin, joissa osat pysyvät toisissaan kiinni pelkän kitkan avulla. Laserleikkuri on myös huomattavan nopea, ja keskivertopalan leikkaus kestääkin vain minuutteja. Kokemuksiemme mukaan puu haisee miellyttävimmältä, muovi pahalta ja nahka kaikkein vastenmielisimmältä. Metalleja tämän teholuokan laserit eivät jaksa leikata, mutta esimerkiksi alumiiniin voidaan kaivertaa tekstiä. Verrokkilaitteina käytimme Vaasan Hacklabin pientä ja Tampereen Hacklabin isoa leikkuria. 4 2014.2 L aserleikkureita on käytetty teollisuudessa jo vuosikymmeniä, mutta Kiina-ilmiön ansiosta niiden hinnat ovat pudonneet harrastajien ulottuville. Sen sijaan 3Dtulostettuja esineitä harvemmin voi kutsua kovin kauniiksi. Hajuhaitan vähentämisen lisäksi leikkurin poistopuhallin imee savun pois leikkauspinnalta, jolloin se ei heikennä laserin tehoa. Leikkaamisen lisäksi laserilla voidaan kaivertaa, eli piirtää materiaaleihin kuvioita, tehoa pienentämällä. Vaasan leikkurissa laserputki pysyy paikallaan ja leikattavaa esinettä liikutetaan, kun taas Tampereen leikkurissa leikattava esine pysyy paikallaan ja säde ohjataan maaliinsa liikkuvien peilien kautta
5 kierrätetään ämpäristä akvaariopumpulla ja isommissa suoraan vesijohtoverkosta. Leikkurien tiedot.. Leikkurissa on Chris’ Circuitsin valmistama kortti, joka Tampere Vaasa Malli Yilong 1309B, modattu Chris’ Circuitsin ohjainkortilla Yilong S25 Teho 80 W 25 W Leikkausala 130 × 90 cm 12 × 7 cm Skrollitrolli LinuxCNC-ohjelmassa valmiina leikattavaksi. Jos leikkuri ei ole koteloitu, täytyy samassa huoneessa olevien käyttää lasersuojalaseja. Pienempiä koneita, kuten Vaasan leikkuria, ohjataan HPGL-kielellä, joka on Postscriptin tapainen vektorikieli. Ei aivan vaaratonta Laservalo on silmille vaarallista ja näkymätöntä. Esimerkiksi kappaleiden ääriviivat täytyy ottaa pois käytöstä, muuten niiden mitat lasketaan väärin. Laserleikkureiden ohjaus on hieman kirjavaa eikä niin tuotteistettua kuin 3Dtulostaminen. Veden unohtaminen saattaa aiheuttaa laserin ylikuumenemisen ja hajoamisen. Jos leikkurin ohjaus osoittautuu toivottomaksi, on mahdollista vaihtaa sen ohjainkortti, kuten Tampereen leikkurin tapauksessa on tehty. Tämän vuoksi esimerkiksi vanhoista LP-levyistä ei voi leikata koristeita. Tampereen iso laser vaatii lisäksi myös paineilmaa, jolla pidetään linssit ja peilit puhtaina. Tämän vuoksi leikkurit on yleensä koteloitu niin, että leikkauksen aikana ei ole vaaraa katsojille. Leikkurille lähetetään HPGL-muotoon tallennettu mallinnustiedosto rinnakkaisportin kautta. Inkscape ei kuitenkaan ole täydellinen, sillä se on tarkoitettu taiteilijoiden, ei suunnittelijoiden työkaluksi. Useimmat materiaalit onneksi sopivat leikattaviksi, ja internetistä löytyy hyvin tietoa epäselvissä tilanteissa. Kloorikaasu syövyttää nopeasti leikkurin metalliosia ja on myrkyllistä hengitettynä. Vaasan leikkurissa tämä on ratkaistu rakentamalla kotelo leikkausalueen ympärille. Laserilla tehtyjä kolmiulotteisia esineitä. Oman projektin tekeminen Koska laserleikkuri leikkaa kaksiulotteisia kappaleita, riittää kappaleiden suunnitteluun mikä tahansa 2D-vektoripiirtoohjelma. Hyvää ja helppoa Inkscapen korvaavaa CAD-ohjelmaa ei ole kuitenkaan vielä löydetty. Tästä huolimatta ne ovat melko edullista kulutustavaraa. 3D-tulostus oli vasta alkuvaiheessa, kun laserleikatut trollit olivat valmiina. Leikkauksen seuraamiseksi voi kotelon sisään asentaa kameran, jonka kuva näkyy leikkurin vieressä olevalta monitorilta. Unixin kirjoitinpalvelu CUPS osaa muuntaa Postscriptiä HPGL:ksi, ja esimerkiksi Vaasan laserleikkuri näkyy tulostuspalvelimen avulla verkkotulostimena, jolle voi tulostaa suoraan kuten tavalliselle tulostimelle. Suurimman vaaran aiheuttaa vinyyli eli PVC, jonka palamisesta syntyy kloorikaasua. Leikattavasta materiaalista täytyy tietää, soveltuuko se laserleikattavaksi. Harrastajien suosiossa on avoin ja helppokäyttöinen Inkscape
Jos omaa laseria ei pysty hankkimaan, kannattaa kysellä lähimmästä hacklabista tai turvautua internetistä löytyvien leikkauspalveluiden apuun.. Leikkurin on tuettava haluttuja tiedostomuotoja tai ohjelmistoja, sillä laitteiden mukana toimitettavat kiinalaiset ohjelmat ovat yleensä toimivuudeltaan ala-arvoisia. Vertailun lähtökohtana oli valmis svgja stl-tiedosto. Laserleikkuri vaatii vesijäähyineen ja ilmanvaihtoineen omistajaltaan selvästi enemmän vaivaa kuin 3D-tulostin, jota voi käyttää vaikka työpöydällä. Tulostimena käytimme noin tuhannen euron hintaista, yleisesti käytettyä Ultimaker Originalia ja leikkurina Tampereen isoa laseria. 3D-tulostin Teimme vertailun vuoksi samanlaiset esineet sekä 3D-tulostimella että laserleikkurilla. Tulostusta varten on kehitetty avoin LinuxCNC-jakelu, jota esimerkiksi Tampereen leikkuri käyttää. Näiden haasteiden jälkeen leikkuri toimi jonkin aikaa ilmeisesti kutakuinkin moitteetta, kunnes ohjelmisto päätti lopullisesti lakata toimimasta. Aika minuuteissa 80 40 120 20 100 60 140 10 90 50 130 30 110 70 150 5 85 45 125 25 105 65 145 15 95 55 135 35 115 75 155 Stl-tiedoston lataus Cura-ohjelmaan, asetusten säätö, tulostimen lämmittäminen ja tulostuksen alun tarkkailu Asetusten säätö ja SVG-mallin muunto g-koodiksi Inkscapella Tulostus G-koodin lataus LinuxCNC:hen ja leikkauksen valmistelu Kappaleen irrotus tulostusalustasta ja siistiminen Leikkaus 3D-tulostin Laserleikkuri Skrollitrolli 3D-tulostettuna, akryylisenä ja vanerisena. Kenelle laserleikkuri sopii. Oli tuuria, jos sisältö näkyi edes suurimmassa osassa painikkeista. Laitteen turvallisuus on hieman kyseenalainen. Kaksi ja puoli tuntia kestäneen tulostuksen aikana olisi ehtinyt tekemään laseroimalla yli 30 trollia. Laitteen läheisyydessä työskenteleviä ohjeistettiin käyttämään suojalaseja. Suojakalvo ei tainnut olla täysin turha panostus, sillä se oli jo vähäisen käytön jälkeen hunnuttunut siksakkikuviolla. Tätä varten vektoroidun materiaalin siirto vaati useamman manuaalisen työvaiheen Inkscapesta Gimpin kautta leikkurin ohjelmistoon. Käyttöliittymä on kokeneellekin käyttäjälle aika vaikeaselkoinen: täynnä pieniä nappeja, joissa on valmistusmaan kielellä olevaa tekstiä ja epäselviä pikkukuvia. Samalla mittasimme eri työvaiheisiin kuluvan ajan. Tulokset eivät yllättäneet. thingiverse.com ). Laserleikkuri sopii parhaimmin hacklabeille ja tosiharrastajille, joilla on laitteelle käyttöä ja jotka voivat sijoittaa sen järkevästi. Kaiken lisäksi valmistaja ei ollut nähnyt tarpeelliseksi lisätä interlock-kytkintä, joka estää laserin käynnistymisen kannen ollessa auki. Jäsenet päättivät kokeilla edullisempaa ja ennakkoluulottomampaa ratkaisua ja tilasivat kiinalais-mongolialaisen laitteen. Kannattaa kuitenkin muistaa, että materiaalin paksuus vaikuttaa kolmiulotteisten esineiden muotoon, mikä rajoittaa jonkin verran valmiiden mallien käytettävyyttä. Kyseinen leikkuri on suunniteltu lähinnä erinäisten kumileimasinten tuotantoon, ja sen vuoksi laitteen mukana tuleva ohjelmisto suostuu käsittelemään vain yksibittisiä, mustavalkoisia, bmp-formaatin bittikarttakuvia. Lisäksi 3D-tulostimella ei pysty kaivertamaan. Kun kerran ohjelmistoa kokeillessani jokainen painike sattui näkymään oikein, se hetki ikuistettiin henkeä pidätellen kameralla ja kuvakaappauksella dokumentaatioon. Myös laitteen muita rakoja hieman tilkittiin ja mainittu suojakytkin lisättiin laitteeseen. G-koodin generointiin käytetään Inkscapen lisäosaa, jolla luotu tiedosto avataan LinuxCNC:ssä leikkausta varten. Kannen ollessa kiinni siihen jää vielä suurehko oranssilla pleksillä peitetty aukko, jonka suojaavuudesta ei oltu aivan vakuuttuneita. Valmiita laserleikattavia malleja löytyy esimerkiksi Thingiversestä (www. Halutunkokoisten sormiliitoksin kasattavien laatikoiden generointiin löytyy helppokäyttöisiä wwwpohjaisia palveluja. Hyviä käytännön neuvoja laserleikattavista materiaaleista ja osista löytää Pololu-yhtiön ohjeesta osoitteesta http://www.pololu.com/docs/pdf/0J24/custom_laser_cutting.pdf. Testiä ei voi pitää mitenkään tieteellisenä tai reiluna, mutta se antaa jonkinlaisen käsityksen laitteiden nopeuseroista yhdessä esimerkkitapauksessa. 6 2014.2 tottelee 3D-tulostimien tapaan g-koodia. Tehtävä esine on noin 100×100×6 millimetrin kokoinen skrollitrolli, jota voi käyttää vaikkapa joulukuusen koristeena tai avaimenperänä. Laitteet olivat valmiiksi päällä ja odottivat vain aloituskomentoa. Pleksi päätettiin pinnoittaa kultakalvolla, joka suodattaa infrapunaa ja ultraviolettia. Myöhemmin prosessia nopeutettiin skriptin avulla. Kilpailu: Laserleikkuri vs. Lisäksi heijastavasta materiaalista koostuvat palaset saattavat peilata sädettä rungon ulkopuolelle, kun ne tippuvat irti leikattavasta kappaleesta. Kitupiikin laserleikkuu Risto Mäki-Petäys Muiden hackerspacejen tavoin myös Helsinki Hacklabilla ilmeni kiinnostusta laserleikkaukseen. Toivottavasti laitteen ohjelmisto ei edusta mongolialaisen ohjelmistosuunnittelun kärkeä. Tämän johdosta hacklabin väki totesi, että leikkurin ohjaus lienee parempi korvata jollain järkevämmällä ratkaisulla.. Laserleikkuria hankkiessa kannattaa varmistaa etukäteen, että sen käyttäminen on ylipäätään mahdollista halutuilla ohjelmistoilla. Laserleikattu esine oli valmiina kädessä vain vähän myöhemmin kuin 3D-tulostin oli alkanut tekemään ensimmäistä kerrosta. Laserleikattu trolli tehtiin akryylistä ja tulostettava PLA-muovista. Laserin ja 3D-tulostimen käyttökohteet ovat osittain samat, mutta laser voittaa selvästi materiaalivalikoimassa ja nopeudessa. Tulostuksessa käytettiin tavanomaista 30 prosentin täyttöastetta ja 0,1 millimetrin kerrospaksuutta
Nokian varjossa Suomeen syntyi useita menestyviä it-alan yrityksiä etenkin tietoturvaja pelialalle. Monet suomalaiset pelifirmat ovat saaneet alkunsa demoskenestä. Tytöthän eivät moisiin härpäkkeisiin koskeneet. Lue lisää itse tekemisen riemusta ja 80-luvun kotitietokoneista tämän lehden artikkelista Tasavallan tietokoneen haastajat!. Koneiden ääressä puuhattiin yhdessä. Moni tietokonetta vanhemmiltaan kärttänyt tyttö sai pikapassituksen ratsastusleirille, tytölle paremmin sopivan harrastuksen pariin. Sen ääressä lapsuutensa viettäneet ovat nyt noin 40-vuotiaita, ja monelle heistä Commodore 64 ja muut kahdeksanbittiset kotimikrot antoivat suunnan työuralle. Kolumni ” C64:llä pystyi tekemään oikeasti mielenkiintoisia asioita. Demotiimit repivät tietokoneistaan kaikki tehot irti ja tekivät visuaalisesti vaikuttavia demoja, joiden ei olisi pitänyt olla teknisesti edes mahdollisia. Niihin ei vain kiinnitetty huomiota ennen kuin alettiin etsiä ”Uutta Nokiaa”. Sillä pystyi tekemään oikeasti mielenkiintoisia asioita, ja kuka tahansa pystyi ohjelmoimaan sitä, kunhan oli riittävän motivoitunut opettelemaan. Kun tutustuu yritysten avainhenkilöiden historiaan, löytyy yksi yhdistävä tekijä: Commodore 64. Kaikkia lapsia eivät tekniikka ja ohjelmointi kiinnosta. Muuten olisi jäänyt moni työpaikka syntymättä. Kaveripiiristä löytyi aina muitakin Kuusnepan omistajia, joiden kanssa saattoi vaihtaa kokemuksia, Mikrobittilehtiä ja opaskirjoja. Onneksi kaikki 80-luvun vanhemmat eivät noudattaneet ammattihuolestujien ohjeita ja repineet lapsiaan irti tietokoneesta sorkkaraudalla. Perustamaan yrityksiä ja luomaan työpaikkoja 2030-luvulla. Mutta miksi meillä ei ole samanlaisia koodikouluja niille lapsille ja nuorille, jotka eivät innostu ringetestä tai vetopasuunasta?. Mistä saisimme 2010-luvun lapsille oman Commodore 64:n. Kasvi Tietoyhteiskunnan kehittämiskeskus TIEKEn tutkimusja kehitysjohtaja Nokian sakattua moni on unohtanut, ettei Nokia ollut koko Suomi, ei edes Suomen koko it-sektori. Todellisuudessa kävi nimenomaan päinvastoin. J. Jätämmekö vastuun taas kerran lapsille itselleen ja luotammeko, että he itse löytävät robotit ja 3d-tulostimet ja leikkivät niillä vanhempiensa vastustelusta huolimatta. Yksi 1980-luvun suurimmista väärinkäsityksistä oli se, että kotitietokoneet tekisivät lapsista yksinäisiä ja epäsosiaalisia. Seuraukset näkyivät jo 1980ja 90-lukujen demoskenessä. 7 2010-luvun Commodore Jyrki J. Mikä saisi tämän sukupolven samalla tavalla innostumaan tulevaisuuden tekniikasta ja ottamaan sen haltuunsa jo lapsena. Tasavallan tietokone tuli markkinoille vuonna 1982. Vai yritämmekö tällä kertaa aktiivisesti tuuppia lapsia ja nuoria, myös tyttöjä, tulevaisuuden suuntaan. M iten näin pieneen maahan on voinut syntyä niin monta ityritystä ja Nokia vielä päälle. Se oli juuri sopivan tehokas ja yksinkertainen. Huolenlietsojien mielestä tietokoneiden kanssa vehtaaminen teki pojista joko epäsosiaalisia takahuoneen nörttejä tai psykoottisia tappokoneita. Mikä Commodore 64:ssä sitten oli niin erityistä. Heille on tarjolla musiikkiopistoja ja urheiluseuroja. Commodore 64:n sielunelämän tutkimista helpotti myös koneen suuri suosio Suomessa. Ja oltiinhan sitä. Kynnys Basic-ohjelmointiin oli hyvin matala, ja kun sen oli oppinut, 6510:n konekielikään ei ollut ylivoimaisen vaikeaa
Tietokonepohjaiset oikoluvut eivät siis ole täysin luotettavia, ja laadukkaissa painojulkaisuissa tarvitaan edelleenkin huolellista ihmisen tekemää oikolukua ja kielenhuoltoa. Vuosien saatossa tämä perusidea ei ole juuri muuttunut. Kyse on kompromissien tekemisestä. Välillä joudutaan punnitsemaan sanan tunnistamisen hyötyjä ja haittoja. Eikä se vielä riitä, että kerätään sanasto ja ohjelmoidaan sananmuodostusta säätelevä kielioppi. Käytännössä on kuitenkin mahdollista, että sana on muodollisesti oikein mutta asiayhteyden kannalta väärin. Oikolukuohjelman tekijä joutuu myös tutkimaan tekstejä, sanojen yleisyyttä ja tekemään monenlaisia valintoja. Kehittäjä: Harri Pitkänen Lisenssi: GNU General Public License Kotisivu: http://voikko.puimula.org/. Voikko Avoimen lähdekoodin Voikko-oikolukuohjelmistoa on kehitetty aktiivisesti jo Älykkäämpää virheiden etsintää Voikolla Tietokonepohjainen oikoluku on virtuaalinen punakynä, joka auttaa löytämään kirjoitusvirheitä. Mikäli sananmuoto on oikolukujärjestelmälle tuttu, se katsotaan oikein kirjoitetuksi. Kone ei ymmärrä kirjoittajan ajatuksia, eikä tyypillinen oikoluku tutki tarkistettavan sanan asiayhteyttä. Oikoluvun haasteita Tekstin mekaaniseen tarkistukseen ja sanojen luokitteluun liittyy monia haasteita ja perustavanlaatuisiakin rajoituksia. Olisi kyllä mahdollista kartuttaa laaja sanavarasto, jonka avulla tekstin punaiset alleviivaukset katoavat. Tästä seuraa tilanteita, joissa lyöntivirheen seurauksena sanasta tulee jokin toinen sana, eli oikoluku ei havaitse kirjoittajan virhettä. Muut ohjelmat voivat hyödyntää Voikkokirjaston ominaisuuksia. Samalla ehkä jotkin hyödylliset oikein kirjoitetut sanat tulevat hylätyksi. Toisaalta oikolukuohjelmat tuomitsevat virheiksi myös oikein kirjoitettuja sanoja, koska ohjelma ei tunne kaikkia mahdollisia sanoja. Yksi vaikeus liittyy oikean ja väärän määritelmään, sillä ihmiselle ja koneelle ne ovat vähän eri asioita. Haasteet eivät tietenkään estä kehittämästä tekniikkaa paremmaksi. Osa niistä on ratkaistu kauan sitten, mutta kaikkia ongelmia ei voi kiertää ohjelmallisesti. Hyvin toteutettu oikoluku onkin mainio apu tekstintarkistuksessa, ja siitä hyötyvät lähes kaikki kirjoittajat alakoululaisista ammattilaisiin. Kuitenkin lähes varmasti sen kirjoittaja on tarkoittanut tropiikin rannikoilla esiintyvää mangrovekasvustoa mutta on kirjoittanut yhden o-kirjaimen liikaa. Voikko on vapaa oikolukuohjelma suomen kielelle. Esimerkiksi suomen kielessä sana mangorove on kieliopillisesti täysin oikein ja voisi tarkoittaa tuohesta valmistettua, mangohedelmien säilyttämiseen tarkoitettua rasiaa. Mitä enemmän sanoja ohjelma tunnistaa, sitä todennäköisemmin joidenkin sanojen taivutusmuodot tai yhdyssanatilanteet muistuttavat joitakin toisia sanoja. Tällaisen virheen voi yleensä huomata vain tekstin kokonaisuuden ymmärtävä ihminen. Tuntemattomat sanat luokitellaan väärin kirjoitetuiksi ja merkitään tekstiin esimerkiksi punaisella alleviivauksella. Perinteisesti ne tutkivat vain yksittäisiä sanoja, mutta tässä artikkelissa otamme askeleen eteenpäin. 8 2014.2 Koodi A utomaattinen oikoluku on jo pitkään kuulunut tekstinkäsittelyohjelmien perustoimintoihin. Sana vain hyväksytään, jos se löytyy ohjelman sanastosta. Koska jälkimmäinen vaihtoehto on todennäköisempi, oikolukuun ehkä kannattaa ohjelmoida poikkeus, jossa harvinaisen rove-sanan yhdyssanakäyttöä rajoitetaan. Se on käytännössä ohjelmakirjasto, joka tarjoaa oikoluvun, tavutuksen, morfologisen analyysin ja lauserakenteen tarkistustoimintoja. Pelkästään näitä kieliopillisia ilmiöitä koskevan säännöstön kuvaaminen tietokoneohjelmalla voi olla erittäin työlästä. Oikolukuohjelman tekijälle erityisen haastavia ovat suomen kaltaiset kielet, joissa sanojen johtaminen ja taivutus on monipuolista ja joissa muodostetaan yhdyssanoja monin eri tavoin. Niin ei kuitenkaan kannata tehdä, koska hyvin suuresta sanastosta on enemmän haittaa kuin hyötyä. Perinteisen oikoluvun toiminta-ajatus on yksinkertainen: Tekstissä olevat yksittäiset sanat analysoidaan sanaston ja muun logiikan avulla. Sittemmin ominaisuus on yleistynyt myös muihin kirjoittamiseen käytettäviin ohjelmistoihin kuten nettiselaimiin ja sähköpostiohjelmiin. Voikolle on olemassa ohjelmointirajapinta C-, C++-, Python-, Java-, C#ja Common Lisp -kielille. Teksti: Harri Pitkänen Kuva: Mikko Rasa Mikä on Voikko
>>> from libvoikko import Voikko, Token >>> v = Voikko(u"fi-x-morphoid") >>> v.spell(u"kissa") True >>> v.spell(u"kisssa") False Listaus 1. Ohjelmoijat voivat kuitenkin hyödyntää Voikon morfologista analyysiä ja kehittää sen avulla esimerkiksi vaihtoehtoisia oikolukumenetelmiä, jotka eivät rajoitu pelkästään sanan tulkitsemiseen kelvolliseksi tai virheelliseksi. Morfologinen analyysi sanoille katuvalon ja valojen.. 9 kahdeksan vuotta, ja sitä voidaan pitää yhtenä laadukkaimmista suomen kielelle laadituista oikolukuohjelmista. Listauksessa 2 esitellään Voikon analyze-metodia, jolla suoritetaan morfologinen analyysi. Älykkäämpi oikoluku Tässä artikkelissa kehitämme esimerkkiohjelman, joka luokittelee sanat tavanomaista älykkäämmin. Toisena analysoitavana on sana valojen, joka on monitulkintainen. Tätä kutsutaan morfologiseksi analyysiksi. Voikko ei kuitenkaan ole pelkkä oikolukuohjelma. Avainarvon ja kompleksisuuden laskeminen yhdelle analyysille. Esimerkin sanalle katuvalon tämä avain olisi ”w504875w516884”. Ensin määritellään, mitkä sanat ovat epäilyttäviä. Jos ohjelma tunnistaa tekstissä olevan sananmuodon, se pystyy myös kertomaan, mistä kantasanoista, johtimista, taivutuspäätteistä ja liitteistä sana muodostuu. Esimerkkiohjelman ajaminen onnistuu helpoimmin uusimmissa Linuxjakeluissa. Sanat luokitellaan kahden sijasta kolmeen ryhmään: kelvolliset, epäilyttävät ja virheelliset. Lisäksi tarvitaan morfologiseen analyysiin soveltuva morphoid-erityissanasto. Muodostetaan sanalle avainarvo näistä tunnisteista kirjoittamalla ne peräkkäin yhdeksi merkkijonoksi. Tällöin kuitenkin samaan kantasanaan perustuvat muodot (esimerkiksi valo ja valoton) tulkittaisiin kokonaan eri sanoiksi, mikä ei ole tämän tarkistuksen kannalta järkevää. Oikolukua Python-kielen ja Voikon spell-metodin avulla. Esimerkissä käytetään edellä mainittua morphoid-sanastoa. >>> v.analyze(u"katuvalon") [{u'BASEFORM': u'katuvalo', u'WORDIDS': u'+ katu(w504875)+valo(w516884)', u'SIJAMUOTO': u'omanto', u'NUMBER': u'singular', u'CLASS': u'nimisana', u'STRUCTURE': u'=pppp=ppppp', u'WORDBASES': u'+katu(katu)+valo(valo)'}] >>> v.analyze(u"valojen") [{u'BASEFORM': u'vala', u'WORDIDS': u'+vala(w516832)', u'SIJAMUOTO': u'omanto', u'NUMBER': u'plural', u'CLASS': u'nimisana', u'STRUCTURE': u'=ppppppp', u'WORDBASES': u'+vala(vala)'}, {u'BASEFORM': u'valo', u'WORDIDS': u'+valo(w516884)', u'SIJAMUOTO': u'omanto', u'NUMBER': u'plural', u'CLASS': u'nimisana', u'STRUCTURE': u'=ppppppp', u'WORDBASES': u'+valo(valo)'}] Listaus 2. Olkoon niillä seuraavat ominaisuudet: 1.?Perinteisen oikoluvun näkökulmasta sana on oikein. Esimerkkiohjelmassa hyödynnetään Voikon Python-ohjelmointirajapintaa. Voikon perusversiosta onkin jätetty pois tavallisen oikoluvun kannalta merkityksetöntä lisätietoa, jotta ohjelmiston vaatima levytila ja muistin määrä pysyvät kohtuullisena. Tämän voi tehdä monin eri tavoin. puimula.org/htp/testing/voikko-snapshot/ ja asentaa purkamalla zip-paketti hakemistoon ~/.voikko. Ensimmäinen ehto on helppoa tarkistaa Voikon spell-metodilla. listaus 2) kuin jollain toisella tekstissä esiintyvällä sanalla. Avainarvon ja kompleksisuuden laskeminen useille analyyseille. Tavanomaisissa tekstinkäsittelyohjelmissa käyttöliittymä ei mahdollista morfologisen lisätiedon hyödyntämistä mielekkäällä tavalla. Epäilyttävät sanat Nyt kun perustoimintoja on kokeiltu, aletaan rakentaa tavallista älykkäämpää oikolukua. Sen voi ladata sivulta http://www. Tämän selvittämiseksi voidaan hyödyntää analyysistä saatavaa WORDIDS-attribuuttia, joka sisältää viittaukset Voikon sanastotietokannassa oleviin tietuetunnisteisiin. Käytetään nyt algoritmia, jossa kompleksisuus on verrannollinen sanan yhdysosien määrään ja kääntäen verrannollinen yhdysosien pituuteen. Ohjeita saa näkyviin Python-tulkissa komennolla import libvoikko; help(libvoikko). Listaus 4. Ensin testataan sanaa katuvalon, josta saadaan yksikäsitteinen tulkinta: katu + valo + yksikön genetiivi eli omanto. Tämä perustuu havaintoon siitä, että lyhyet sanat yhdysdef keyAndScoreForSingleAnalysis(analysis): if u"WORDIDS" in analysis: idParts = analysis[u"WORDIDS"].split(u"+") key = u"" score = 1.0 pattern = re.compile(u"^(.+)\((w[0-9]+)\)$") for idPart in idParts: match = pattern.match(idPart) if match: word = match.group(1) idString = match.group(2) key = key + idString score = score * (6.5 / len(word)) elif idPart == u"-": score = score / 2.0 return (key, score) return (u"", 0) Listaus 3. Sitä levitetään muun muassa tunnetuimpien Linux-jakeluiden mukana, ja se on kytkettävissä moniin eri ohjelmiin. Lyöntivirheiden metsästyksessä erityisen kiinnostavia tapauksia ovat sanat, joissa kantasanakaan ei esiinny tekstissä muualla. Ensin on asennettava Voikon Python-tuki, joka esimerkiksi Debianissa ja Ubuntussa on paketissa python-libvoikko. def keyAndScore(analysisList): if len(analysisList) == 0: return (u"", 0) (key, score) = keyAndScoreForSingleAnalysis(analysisList[0]) for analysis in analysisList[1:]: (newKey, newScore) = keyAndScoreForSingleAnalysis(analysis) if newKey == key: score = min(score, newScore) else: return (u"", 0) return (key, score) Python 2.7.6 (default, Feb 26 2014, 00:34:35) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. Mikäli sana on monitulkintainen, lasketaan kompleksisuusarvot kaikille tulkinnoille erikseen ja valitaan niistä pienin. Toista ehtoa varten olisi mahdollista tarkistaa, ettei sanalla ole samaa perusmuotoa (eli BASEFORM-attribuutin arvoa, ks. 2.?Sana ei esiinny muualla tekstissä, ei edes muissa taivutusmuodoissa. (Mikäli sana esiintyy useasti, se ei todennäköisesti ole lyöntivirhe.) 3.?Sanalle laskettu kompleksisuusarvo ylittää tietyn kynnysarvon. Kolmatta ehtoa varten tarvitaan algoritmi kompleksisuuden laskemiseksi. Listauksessa 1 on esimerkki, kuinka Voikon oikoluvun perustoiminto eli sanan tarkistaminen toteutetaan Python-kielellä. Se voi olla taivutettu muoto sanoista valo tai vala. Sanalle valojen on kaksi mahdollista avainarvoa: ”w516832” ja ”w516884”
Teksti: Teemu Likonen Avoimen lähdekoodin yhteisöissä on useamman kerran jouduttu selittämään ulkomaalaisille, miksi suomen kieli tarvitsee oman oikolukujärjestelmänsä. Meillä on vain tällainen vähän erilainen kieli… Perinteisesti Unix-tyyppisissä käyttöjärjestelmissä oikoluku perustuu Ispell-järjestelmään, jonka juuret yltävät 1970-luvun alkuun. Aiemmin kuitenkin nähtiin, että sanoilla voi olla useita analyysituloksia. Kaikkiin Voikon tunnistamiin sanoihin ei liity yhtään sanastotietokantaan tallennettua tietuetta (mm. def printSuspiciousWords(voikko, textParagraph): minScoreForSuspiciousWord = 2.7 wordToKey = {} keyToScore = {} allTokens = voikko.tokens(textParagraph) words = [t.tokenText for t in allTokens if t.tokenType == Token.WORD] correctWords = [w for w in words if voikko.spell(w)] for word in correctWords: if word not in wordToKey: analysis = voikko.analyze(word) (key, score) = keyAndScore(analysis) wordToKey[word] = key if key in keyToScore: keyToScore[key] = else: keyToScore[key] = score for word in correctWords: if keyToScore[wordToKey[word]] >= minScoreForSuspiciousWord: print word.encode("UTF-8") #!/usr/bin/env python # -*coding: utf-8 -*import fileinput, re from libvoikko import Voikko, Token # Kopioi tähän kohtaan listauksissa 3, 4 ja 5 # määritellyt funktiot. 10 2014.2 sanan osana muodostavat kummallisia kokonaisuuksia, jotka voivat olla merkki kirjoitusvirheestä. Suurin kunnia ohjelmoinnista ja sanastotyöstä kuuluu Harri Pitkäselle ja Hannu Väisäselle. Voikko – suomalaisten NIH. Toisaalta kaikille sanoille (mm. Listauksessa 4 esitellään funktio, jonka avulla nämäkin tapaukset saadaan käsiteltyä. Sen ansiosta palvelun käyttäjä voi kirjoittaa hakusanat perusmuodossa ja hakujärjestelmä löytää silti taivutettuja muotoja. väärin kirjoitetut sanat) ei analyysejä synny lainkaan. Listauksen 3 funktio on sellaisenaan riittävä vain sanoille, joille Voikko tuottaa täsmälleen yhden morfologisen analyysin. Esimerkkiohjelman voi ladata myös Skrollin nettisivulta osoitteesta http://skrolli.fi/2014.2/ . Laadun vuoksi. Miksi emme käytä niitä. Ohjelman runko on listauksessa 6. Esimerkkikoodi on nähtävissä listauksessa 5. Kopioi sen sisään funktiot, jotka määriteltiin listauksissa 3–5. Koska sekä avainarvon että kompleksisuuden laskeminen perustuu sanan yhdysosien tutkimiseen, on ne käytännöllistä toteuttaa yhdessä funktiossa (listaus 3). Tavallaan Voikko oli pakko tehdä, koska missään muualla ei kielestämme olla kiinnostuneita. Onko teillä suomalaisilla NIH eli ”not invented here” -oireyhtymä, jonka vuoksi muiden tekemä valmis koodi kelpaa. Ispell ja muut vastaavat ovat liian rajoittuneita. Esimerkiksi pohjoissaamen kielelle on kehitteillä Voikko-sanasto. Esimerkkialgoritmi ei huomioi sanojen luokittelua mitenkään, vaan kompleksisuuspisteytys kasvaa helposti suureksi, jos sanassa on mukana yhden tai kahden kirjaimen lyhenteitä. Ohjelma on kuitenkin vain yksinkertainen esimerkki. Valmis esimerkki Nyt on kasassa esimerkkiohjelma, jolla saa tulostettua tekstissä olevat epäilyttävät sanat. Jotta koodi olisi helpommin käytettävissä, kootaan funktiot samaan Pythontiedostoon, joka voidaan suorittaa käyttöjärjestelmän komentotulkista. Vaihtoehtoisia algoritmeja voi lähettää Voikon kehittäjille, jos ne osoittautuvat toimiviksi.. Ei. Ja Ispellille todellakin on tehty suomen kielen sanasto. Unixin periaatteen mukaisesti siihen kuuluu myös komentotyökalu, joka toimii oikoluvun rajapintana muille ohjelmille. Näiden apufunktioiden varaan voidaan laatia aliohjelma, joka tulostaa annetusta tekstikappaleesta epäilyttävät sanat. Sitä kokeilemalla huomaa, että monet sen merkitsemistä sanoista ovat aivan tavallisia suomen kielen sanoja. Sanat erotetaan juoksevasta tekstistä Voikon tokens-metodilla. Jätämme tämänkaltaisen jatkokehittelyn haasteeksi lehden lukijoille. Kansalliskirjasto käyttää Voikkoa hakujärjestelmissään. Listaus 5. Suomen kielen oikoluvun kannalta Voikko on ollut valmis jo pitkään, mutta sen tekniikalle on löytynyt muutakin käyttöä. Pääohjelman runko, josta puuttuu listausten 3–5 koodi. Säätämällä kompleksisuuden enimmäisarvoa (tässä 2,7) tai muokkaamalla itse kompleksisuusfunktiota (listaus 3) voidaan vaikuttaa siihen, mitkä sanat tulkitaan epäilyttäviksi. voikko = Voikko(u"fi-x-morphoid") for line in fileinput.input(): printSuspiciousWords(voikko, unicode(line, "UTF-8")) voikko.terminate() Listaus 6. Ohjelma poimii tekstistä sellaiset sanat, jotka ovat kieliopillisesti oikein mutta sen verran erikoisia, että kyseessä saattaa olla kirjoitusvirhe. Käyttökelpoinen suomen kielen oikoluku vaatii hyvin taipuisan morfologisen järjestelmän, jotta suomen rikas taivutus ja sananmuodostus voidaan riittävän tarkasti määritellä. Miksi ette käytä Ispelliä. Ispelliin kuuluu kielioppi, jonka avulla sanasto ja sananmuodostus kuvataan. Avoimessa lähdekoodissa on etunsa, kun suomen kieliteknologian pyörää ei enää tarvitse jokaisen keksiä uudelleen.. Esimerkiksi lyhenteet esiintyvät yhdyssanoissa yhdysmerkillä erotettuna, joten ne eivät käytännössä aiheuta hankalasti havaittavia kirjoitusvirheitä. Tekstistä löytyvät esimerkiksi kirjoitusvirheet maksuase (kun tarkoitettiin maksutase) ja lumiura (kun tarkoitettiin lumiaura). Lisäksi algoritmissa määritellään, että yhdysmerkki osien välissä pienentää kompleksisuuspistemäärää, koska yhdysmerkki on lyöntivirheenä harvinainen. pronominit), joten algoritmissa on varauduttu palauttamaan oletusarvona avaimeksi tyhjä merkkijono ja kompleksisuudeksi nolla. Funktio, joka tulostaa epäilyttävät eli mahdollisesti väärin kirjoitetut sanat. Algoritmia voisi melko helposti parantaa ottamalla huomioon myös sanan osien tarkemman luokittelun. Samoin on tehty Aspellille ja Myspellille, jotka ovat eräällä tavalla Ispellin seuraajia
Naputtelee vain. Arvostan Kuorikosken työssä erityisesti sitä, että heti alkuunsa kirja avaa kaupallisten suomalaispelien varhaisinta kirjoa ja muistuttaa, miten pienillä panoksilla ja pienille markkinoille ensimmäiset pelit tehtiin. Unelma pelistä eli työttömyyskorvauksilla ja joskus koko tiimi eli toimistolla. Kirjailija: Juho Kuorikoski Kustantaja: Fobos Hinta: 43 euroa Lisätietoja: http://www.fobos.fi Matkailua pelialalla Pelialan pimeä sarkastiikka M iha Rinne on nähnyt suomalaisen pelialan synnyn – mutta onnekseen vai epäonnekseen, siinä kysymys. Kirjailija: Chris Wilkins & Roger M. Knight Rider ja Street Hawk hirveyksiä. Keskellä kotimikrobuumia perustettu pelitalo oli aikansa kapinallinen, josta kasvoi legenda. 11 P elien tekeminenhän on helppoa. Ne kertovat saman tarinan kaksi eri puolta, toinen dokumentaarisemmin, toinen sarjakuvadraaman kautta. Digitaalisen esihistorian avaaminen on tehty taidolla ja kunnioittaen, eikä alan pimeämpääkään puolta ole pehmennelty. Satiiri kumpuaa Rinteen omista kokemuksista, jotka eivät ole olleet aina niitä kauneimpia. Se on tehty. Lopulta unelma kasvoi aikuiseksi. Unohtamatta sitä, miten laajalti suomenkielisiä pelejä väsättiin – alustoja kun olivat sen tavanomaisen lisäksi myös VIC-20, MSX, Spectravideo ja ZX Spectum. Teksti: Jukka O. Moni muistaa Oceanin ääripäistään: Robocop, The Great Escape, Head Over Heels ja Rambo First Blood Part II olivat supermenestyksiä. Aihe selvästi kiinnostaa, sillä minimi ylittyi komeasti: kassaan kertyi yli 15 000 euroa. ”Jeff Minter taitaa olla ainoa oikeasti mukava ihminen koko kirjassa”, totesi puolisoni. Kirjailija: Miha Rinne Kustantaja: Lehmäoja Hinta: 35 euroa Lisätietoja: http://peliala.wordpress.com Ocean The History Ocean oli kuin eurooppalainen kellari-EA B rittiläinen Ocean Software oli aikoinaan Euroopan suurin ohjelmistotalo. Suomalaisen pelialan yli 30 vuotta kestänyt taival onkin nyt viimein käsitelty tavalla, joka kertoo, kuinka nykytilanteeseen on päästy. Sinivalkoinen pelikirja Suomen pelialahistorian a–ö J uho Kuorikoski on tehnyt vuosien varrella hienoa pohjatyötä Sinivalkoisen pelikirjan runkoa varten. Kauppinen Kirjaesittely. Sinivalkoinen pelikirja kertoo tämän tarinan niin pelien kuin niiden tekijöidenkin kautta. Kohta on hitti käsissä ja eläkerahat pankkitilillä. Ocean oli pelitalo, jossa sattui ja tapahtui – ja heilläkin oli unelma pelistä. Kean Kustantaja: Revival Retro Events Hinta: 5,99 puntaa (pdf), 25 puntaa (kirja) Lisätietoja: http://www.oceanthehistory.co.uk Pelialan historiaa tutkitaan joukkorahoituksella Kolme kirjaa avaa pelintekemisen todellisuutta. Unelma vei kuitenkin eteenpäin. Jotain tällaista olen itsekin miettinyt vuosia. Unelma pelistä oli kaunis, mutta julkisivun takana oli ihmisiä, yhtiöitä ja kokemuksia, joista on pelottavaa miettiä, mikä pohjautuu toteen, mikä mielikuvitukseen. Ocean operoi Britannian pelialan reunamilla Manchesterissa ja tunki pelintekijänsä tupakansavuiseen kellariin, The Dungeoniin, jossa syntyivät niin Euroopan parhaat kuin kamalimmatkin videopelit. Joukkorahoituskampanjat ovat kuitenkin avanneet oven pelihistorioitsijoille aiheen syvällisempää tutkimusta varten. Upeasti toimitettuun kirjaan on haastateltu 40:tä Oceanin työntekijää, joiden muistelot, detaljit ja valokuvat avaavat rakastetun yhtiön tarua ainutlaatuisella tavalla. Kaikkeen on kuitenkin selityksensä, ja kahden brittiläisen pitkän linjan pelitoimittajan Kickstarterissa rahoittama teos avaa Oceanin historiasta saloja, joita minäkään en ole kyennyt edes kuvittelemaan. Tai kellarissa. Todellisuus on kuitenkin karumpaa, eikä kirjallisuudessa ole juuri avattu pelialan todellista historiaa, joka on värikästä, hauskaa ja joskus raadollistakin. Pelialasarjakuva on ehdoton pari Sinivalkoiselle. Sinivalkoinen pelikirja, Matkailua pelialalla ja Ocean The History ansaitsevat paikkansa pelihistoriasta kiinnostuneen kirjahyllyssä. Kirjan julkaisemiseksi järjestettiin joukkorahoituskeräys, jonka vähimmäissummaksi asetettiin 2 500 euroa. Nyt minun ei enää tarvitse. Rinteen viime vuonna joukkorahoitettu sarjakuva-albumi on näet mustaa huumoria pulppuava ja väkevän satiirinen näkemys pelialalla työskentelystä. Peliartikkelit, haastattelut ja eri aikakausien teemoja purkavat artikkelit rakentavat unelman tavoittelusta kasvukertomuksen, johon perehtymistä voin hartaasti suositella
Yksinkertaisenkin asian tekeminen voi vaatia sellaisen määrän ympäryskoodia, että aloittelija hätääntyy täysin. Yleinen harhakäsitys on, että ohjelmoinnin osaaminen olisi sama asia kuin jonkin ohjelmointikielen osaaminen. Hyvän lelukielen oleellinen piirre onkin innostuksen ylläpito esimerkiksi helpon grafiikkaohjelmoinnin kautta. Jälki voi etenkin aluksi olla sottaista, mutta ymmärrys syvenee ja käsiala paranee kokemuksen myötä – ainakin toivottavasti. Basicin perusajatuksena oli kuitenkin alusta asti vuorovaikutteisuus: opiskelijat istutettiin päätteiden ääreen, ja tietokone vastasi käskyihin ja koodimuutoksiin välittömästi. Ohjelmoinnin oppimisesta kiinnostunut kohtaa kokeneen ohjelmoijan ja pyytää tältä neuvoa alkuun pääsemiseksi. Teksti: Ville-Matias Heikkilä Kuvat: Marko Vallius, Susan Pogany, Wikimedia Commons -käyttäjä Tanderson11 Koodi. Www-selain on nykyisin kaikenlaisten koneiden vakiovaruste ja siten myös eräänlainen Basic-tulkin manttelinperijä. Kumpikaan ei ymmärrä, että ohjelmoinnin oppimiseen on monia eri tapoja ja yhden tapa saattaa olla toiselle täysin mahdoton. Kun ensimmäisiä mikrotietokoneita ruvettiin rakentamaan 1970-luvulla, olivat rakentajat usein saaneet ensikosketuksen ohjelmointiin nimenomaan Basicin kautta. Teoreettisempien ja vähemmän leikkimielisten oppijoiden kannattaa kuitenkin suhtautua lelukieliinkin systemaattisemmin. Lelukielellä alkuun Ohjelmointikielet ovat usein vaikeita ja pitkäpiimäisiä. Oppimistavoista on kuitenkin monenlaisia näkemyksiä. Tämän artikkelin tarkoitus on esitellä muutamia mahdollisia reittejä ohjelmoinnin oppimiseen etenkin omatoimisen opiskelun näkökulmasta. Ohjelmointitaidon perusta on kuitenkin kielistä riippumaton, eräänlainen niksahdus aivoissa. Etenkin peliohjelmointi on aina ollut suosittua Basic-harrastajien keskuudessa. Harhapoluille eksytään usein, mutta se ei haittaa, kun innostusta riittää. Pelija grafiikkakeskeiseen aloitteluun sopivat basicien lisäksi esimerkiksi lapsille tarkoitetut Scratch ja Etoys, mediataiteilijoiden suosima Processing ja pelintekoohjelma Game Maker GML-kielineen. Teorian, syntaksin ja rajapintojen kiemurat saavat usein opiskelussa pääosan, ja itse ohjelmointi hukkuu niiden alle. Kun tämä niksahdus on jonkin kielen avustuksella saatu aikaan, ei sitä tarvitse enää tehdä uudestaan myöhempien kielten kohdalla. Tämän vuoksi ohjelmointiin voi olla hyvä hakea ensin tuntumaa jonkinlaisella lelukielellä. Moniin sovellusohjelmiin kuuluu jonkinlainen skriptitai makrokieli. Ehkä tunnetuin lelukieli on vuonna 1964 Dartmouthin yliopistossa alkunsa saanut Basic (Beginner’s All-purpose Symbolic Instruction Code). Monien Basic-suvun kielten ympärillä on edelleen aktiivisia yhteisöjä. Mikäli siis esimerkiksi Excelin kanssa tulee vietettyä paljon aikaa, voi sen makrokielellä Ohjelmoinnin opintiet Moni haluaisi oppia ohjelmoimaan. Etenkin nuorimmille oppijoille on luontevaa suhtautua lelukieliin kuin mihin tahansa leluihin: vähät väliä aikuisten teorioista ja ammattikäytännöistä, tärkeintä on päästä kokeilemaan ja tekemään itse. 12 2014.2 T ilanne on varmasti monelle tuttu. Millaisella kielellä kannattaa aloittaa, millaisella filosofialla jatkaa siitä eteenpäin ja millaisessa sosiaalisessa ympäristössä. Kokenut ohjelmoija muistelee omaa alkutaivaltaan ja neuvoo aloittelijan samankaltaiselle polulle. Selaimen kaveriksi tarvitaan vain tekstieditori. Kotisivujen teko HTML-kielellä on toiminut monille porttina ohjelmointiin, vaikkei pelkkä HTML vielä ohjelmointikielen määritelmää täytäkään. Kieli syntyi eräajojen ja reikäkorttien aikana, jolloin harvat pääsivät suoraan vuorovaikutukseen tietokoneen kanssa. Tästäkin syystä on hyvä keskittyä aluksi helppoon lelukieleen. Ei siis ihme, että sisäänrakennetusta Basic-tulkista tuli kotitietokoneissa itsestäänselvyys – niin hyvässä kuin pahassa. Vastaukset näihin kysymyksiin ovat hyvin yksilöllisiä
Myöhemmin konekapasiteetin lisääntyessä siirryttiin C:n ja Pascalin kaltaisiin rakenteisempiin kieliin, joilla isommat projektit pysyivät paremmin hanskassa. Tämä polku ei ole enää kovinkaan suosittu. Kilpikonnan toi mukaan vuonna 1969 Seymour Papert, joka tunnetaan konstruktionismiksi kutsutun oppimisteorian kehittäjänä. Akateemiseen puhtauskäsitykseen sopivat erityisen hyvin Lisp-tyyliset funktionaaliset kielet, joita otettiinkin käyttöön alkeiskieliksi. Ohjausrakenteiden alkeellisuus johti helposti ns. Näistä jatkettiin myöhemmin olio-ohjelmointiin esimerkiksi C++:lla. Kuva: Susan Pogany, MIT Museum Hahmon liikutusta Scratch-kielellä.. Tietojenkäsittelytieteilijä Edsger Dijkstra totesikin jo 1970-luvun alussa, että Basic ”murjoo aivot korjauskelvottomiksi”. 13 leikkiminen olla luontevin ja hyödyllisin tapa saada ensikosketus ohjelmointiin. Havaittiin, että kieli opetti monet opiskelijat huonoille tavoille, joista he eivät päässeet irti. Jos aivojen murjoutuminen pelottaa erityisen paljon, kannattanee pitäytyä vaikkapa vain Lispja Smalltalkpohjaisissa kielissä. On kuitenkin muistettava, että vain harvoilla on lahjoja tulla hyväksi ohjelmoijaksi, joten Dijkstran näkemystä ei kannata ohittaa aivan pelkällä olankohautuksella. Kokeneet ohjelmoijat ajattelevat usein, ettei aloituskielellä ole niin väliä. Logo on ollut suosittu etenkin lasten ohjelmointikursseilla, mutta harvemmin kuulee edistyneempien ohjelmoijien antavan paljoakaan painoarvoa lapsuutensa Logo-kokeiluille. Mutta kuinka päästä siitä eteenpäin. Basicin jälkeen harrastaja tarttui assemblerin tai konekielimonitorin, jolla hän valjasti koneensa joka ikisen bitinliikkeen. Nykyaikaiset laitteet ovat huomattavasti monimutkaisempia kuin vanhat kotimikrot ja usein myös hautaavat bittinsä käyttäjän ulottumattomiin. Vanhankoulun polusta kiinnostuneen kannattaakin suosia nypläysvaiheessa yksinkertaisia alustoja, esimerkiksi klassisia kotimikroja, Arduinon kaltaisia mikrokontrollerilankkuja tai vaikkapa PC:n Monen ensikosketus ohjelmointiin näytti tältä. Logo on monelle tuttu yksinkertaisena ”kilpikonnakielenä”, jossa tuotetaan kuvioita antamalla liikkumiskäskyjä kilpikonnahahmolle. Pahamaineinen GOTO opittiin siis jo heti toisena käskynä! Seymour Papert ja Logo-robotti vuonna 1973. Varo aivojen murjoutumista Kun Basic yleistyi yliopistoissa, se herätti myös vastustusta. 1980-luvun kotitietokonemaailmassa teknisesti luontevin etenemistapa oli sukeltaa niin matalalle tasolle kuin mahdollista ja edetä siitä vähitellen korkeamman tason kieliin. Smalltalk perustuu varsin vahvasti Papertin oppimisteorioihin, ja esimerkiksi aiemmin mainitut lastenkielet Scratch ja Etoys ovat Smalltalkpohjaisia. Huonojenkin lelujen kierouksista pystyy oppimaan irti, ja kykyä oppia uusia ajattelutapoja pidetään muutenkin hyvän ohjelmoijan ominaisuutena. spagettikoodiin, jossa pahamaineisella goto-käskyllä hypittiin listauksen osasta toiseen. Perinteinen tie: alhaalta ylös Kun ohjelmointiin on saatu jonkinlainen tuntuma lelukielen avulla, on suurin vaikeus jo voitettu. Monet korkeakoulut ottivat Dijkstran näkemyksen tosissaan ja alkoivat kiinnittää erityistä huomiota ensimmäisen kielen ”puhtauteen”. Moni on törmännyt korkeakoulujen peruskursseilla esimerkiksi Scheme-kieleen. Näin ne eivät jää pelkiksi muotoseikoiksi. Konstruktionismin perusajatuksena on, että oppija rakentaa sisäisiä malleja ympäröivästä maailmasta, esimerkiksi Logon kilpikonnan toiminnasta. Korkeamman tason rakenteita oppii ymmärtämään ja arvostamaan, kun on ensin joutunut toteuttamaan niiden tekemät asiat itse. Kieli ei kuitenkaan ole vain hauska lelu, sillä se kehitettiin johdatukseksi Lisp-ohjelmoinnin käsitemaailmaan. Useimmat nykyisin suositut opetuskäyttöön tarkoitetut kielet lienevät (basiceja lukuun ottamatta) melko turvallisia, vaikka monet niistä ovatkin akateemisen kuivakoita
Isojen kokonaisuuksien hallintaa saattaa joutua opettelemaan erikseen. Taitojen ja ymmärryksen karttuessa pystytään tekemään itse aina vain monimutkaisempia palikoita ja ennen pitkää kokonaisia sovelluksia. Kovapäisimmällekin tee-se-itse-henkilölle on hyödyksi oppia lukemaan ja sietämään myös muiden koodia, ja innokkaimmankin modaajan kannattaa välillä tehdä jotain myös täysin puhtaalta pöydältä. Ylhäältä alas -lähestymistapa sopii etenkin käytännönläheisille ihmisille, jotka ovat uteliaita ohjelmien toiminnan ja rakenteen suhteen mutta joita kiinnostavat enemmän suuret kokonaisuudet kuin pienet nippelit. Se tuppaa antamaan ohjelmointiin vahvasti konekeskeisen tuntuman, jossa koodin taloudellisuus menee inhimillisempien seikkojen ohi. Mikäli konekieli ei kiinnosta heti lelukielen jälkeen, siihen ehtii kyllä syventyä myöhemminkin. Alhaalta ylös -polku sopii tee-se-itsehenkisille ihmisille, jotka haluavat ymmärtää järjestelmien toimintaa perusteellisesti ruohonjuuritasolta alkaen. Kannattaa myös muistaa, että tämä polku on sellaisenaan monille melkoisen raskas. Vaikka ”alhaalta ylös” ja ”ylhäältä alas” kuvataankin tässä erillisinä polkuina, ne kannattaa ajatella pikemminkin toistensa täydentäjinä kuin vaihtoehtoina. Hakkerin kielivalinnat Oppimispolun valinta on usein tasapainottelua käytännöllisyyden, opettavaisuuden ja ajankäytön välillä. Jotkut ovat onnistuneet tässäkin, mutta lähestymistavassa on omat ongelmansa. Niille ihmisille, jotka haluavat päästä suorinta tietä päämäärään, on usein tärkeää vain saada ongelma ratkaistua eikä välttämättä edes ymmärtää ratkaisua. Raymondin opas ”How to Become a Hacker”. Toiset etenevät ylhäältä alas Siinä missä jotkut haluavat rakentaa kokonaisuuksia alkeispalikoista, toisille on luontevampaa ottaa valmis kokonaisuus ja hajottaa se osiin. Jos aloittelija on erityisen tarkka päämääristään, hän saattaa päätyä pitämään alkeiskieliä ajanhukkana ja sivuuttaa ne. Eric S. Äkkiä suoraan ammattilaiseksi. Hän on ehkä kuullut, että esimerkiksi C++ on tosiosaajien käyttämä kieli ja haluaa opetella suoraan sen. Ohjelmointitaitoa kehitetään paneutumalla valmiiden ohjelmien lähdekoodeihin ja muokkaamalla niitä. Hakkerien Jargon-sanakirja käyttää tämäntyyppisestä ohjelmointitavasta halveksuvaa nimitystä ”cargo cult programming”. Nykymaailmassa tämä asenne johtaa herkästi hakukoneilla löytyneiden koodinpätkien käyttöön omien aivojen sijaan. Kielet ja ympäristöt, jotka ovat tehokkaita ja käytännöllisiä ammattilaisille, ovat usein jopa katastrofaalisia ohjelmoinnin opettelijoille. Jos ohjelmoija ei ole harjoittanut omaa ongelmanratkaisukykyään vaan on valinnut aina helpoimman reitin, hän saattaa juuttua sormi suussa ihmettelemään yksinkertaisiakin pulmia. Emulaattorit korvaavat aidot laitteet hyvin, mikäli mukaan ei haluta liittää esimerkiksi rakenteluprojekteja. Valmiiden ratkaisujen kopiointi on usein nopeaa, mutta entäpä kun vastaan tulee ongelma, johon ei ole valmista ratkaisua. Polkua kulkenut saattaa ahdistua hallitsemattoman monimutkaisista järjestelmistä ja haluta sellaisiin paneutumisen sijaan tehdä kaiken tarvitsemansa itse. Polun kulkija saa hyvän käsityksen mahdollisista ohjelmien arkkitehtuureista, mutta edistyneempi algoritmiikka saattaa jäädä hänelle pimentoon. Tämä polku lienee helpointa aloittaa esimerkiksi muokkaamalla HTML-sivuja tai skriptikielellä toteutettuja pikkuohjelmia. 14 2014.2 DOS-käyttöjärjestelmiä
Pythonin jälkeen voidaan siirtyä opiskelemaan keskeisiä hakkerikulttuurin kieliä, joita ovat tehokkaan koodin mahdollistava C/C++, käytännöllinen Perl ja tärkeän valaistumiskokemuksen tarjoava Lisp. HTML on myös nykymaailmassa äärimmäisen keskeinen kieli, jota on hyvä osata joka tapauksessa. Yksin vai ryhmässä. Mikäli useimmille ”vuohille” on mahdollista löytää tähän sopiva menetelmä, ei mikään ole enää esteenä todelliselle koko kansan tietokonelukutaidolle. Jotkin yhteisöt järjestävät ohjelmointiin liittyviä kilpailuja, joihin osallistuminen voi motivoida aloittelijoitakin. Dehnad ja Bornat antoivat ohjelmoinnin alkeiskurssin opiskelijoille ennen kurssin alkua tehtäväpaperin, joka sisälsi ohjelmointikieleen liittyviä tehtäviä: ”Mitkä ovat muuttujien a ja b arvot seuraavan koodin suorittamisen jälkeen?” Koska kurssilaiset eivät olleet ennen ohjelmoineet, he joutuivat arvaamaan vastaukset. Oppivatko kaikki ohjelmoimaan. Lelukieleksi Raymond suosittelee HTML:ää, joka ei ole ohjelmointikieli mutta antaa tuntumaa yleisempään tietokonekielten vaatimaan ajattelutapaan. Valitse polkusi! Ohjelmoimaan voi oppia monilla eri tavoilla. Ohjelmointia on perinteisesti opiskeltu joko koulukursseilla tai itsenäisesti, mutta nämä eivät suinkaan ole ainoat vaihtoehdot sosiaalisiksi puitteiksi. Puitteiden valinnassa kannattaa muistella omia kokemuksiaan erilaisten oppimistapojen toimivuudesta. Joku oppii parhaiten yksityisopetuksessa, ja joku toinen saattaa kaivata ympärilleen pienryhmää. Hieman räätälöimällä ohjetta voinee kuitenkin soveltaa moniin muihinkin kulttuuriympäristöihin. Vaikka varsinainen oppiminen tapahtuisikin itsenäisesti, voi sopiva yhteisö tai skene tarjota hyviä kannustimia opiskeluun. Tutkimuksen perusteella ohjelmoinnin oppimisen edellytyksenä olisi siis jonkinlainen kyky tai taipumus muodostaa mielessä proseduraalisia malleja erilaisista järjestelmistä. Kun sosiaalisessa ympäristössä on ohjelmoijia, myös oma kiinnostus ohjelmointia kohtaan säilyy. 15 esittää hyvän kompromissin, jossa jokainen kieli on paitsi oppimisen kannalta tarkoituksenmukainen, myös käytännön tehtävissä ja hakkerikulttuurissa hyödyllinen. Raymondin opas on tarkoitettu vapaan lähdekoodin hakkerikulttuuriin sisään haluaville, ja kielivalinnat ovat sen mukaisia. Yliopistoissa ollaan asian suhteen kuitenkin skeptisempiä. Hyvä itsetuntemus saattaa helpottaa polun löytämistä – tai sitten ei. Vaikkei pää tuntuisikaan taipuvan ohjelmointiin, kannattaa kuitenkin sinnikkäästi yrittää!. Sitä, kenellä on edellytykset ohjelmoinnin oppimiseen, on ollut yllättävän vaikeaa päätellä mistään etukäteen. Tutkijat Saeed Dehnadi ja Richard Bornat löysivät kuitenkin vuonna 2006 jokseenkin toimivan tavan erottaa vuohet lampaista. Kuinka monta löydät?. Myös monet itseopiskelijat ovat huomanneet, ettei ohjelmointi yksinkertaisesti asetu päähän, vaikka sitä kuinka yrittäisi sovitella. Kokemus on nimittäin osoittanut, että huomattava osa esimerkiksi tietojenkäsittelytieteen maistereista ei osaa ohjelmoida, vaikka onkin läpäissyt pakolliset kurssit. Kaikista ei tietenkään tule ammattiohjelmoijia tai edes kotitarveohjelmoijia, mutta jonkinlainen ohjelmointitaito auttaa joka tapauksessa käsittämään digitaalista maailmaa. Monet ovat tykästyneet vuorovaikutteisiin opetusohjelmiin, jollaisena esimerkiksi Codecademy-sivustoa voidaan pitää. Me Skrollissa haluaisimme uskoa, että kaikilla on edellytykset oppia ohjelmoimaan, kunhan sopiva menetelmä löytyy. Mahdollisia konsistentteja vastauksia on monia. Ensimmäiseksi ohjelmointikieleksi suositellaan Pythonia, joka on suhteellisen puhdas ja helppokäyttöinen mutta sopii myös laajempiin projekteihin. On myös yksittäisten pelitai ohjelmistoprojektien ympärille muodostuneita yhteisöjä, joihin liittyneistä ei-koodaajista tulee ennen pitkää projektin innostamana myös koodaajia. Osoittautui, että parhaiten kurssilla menestyivät ne, joiden arvaukset noudattivat yhtenäistä logiikkaa – eli ne, jotka muodostivat ohjelmointikielen toiminnasta selkeän mielenmallin, oli se sitten kuinka virheellinen hyvänsä. Voisiko tätä ominaisuutta jotenkin harjoituttaa ennen ohjelmoinnin oppimista. Jollekulle toimii heti ensimmäinen ehdotettu tapa, kun taas joku toinen voi joutua yrittämään ja erehtymään montakin kertaa ennen kuin sopiva polku löytyy. Edellytysten olemassaolo ei nimittäin tunnu korreloivan esimerkiksi älykkyysosamäärän tai matemaattisen tai kielellisen lahjakkuuden kanssa. A 10 ZUK B 20 ZUK A B ZUK A SPROOT B SPROOT A 10 ZUK B A ZUK A 20 ZUK B SPROOT A SPROOT Mitähän nämä ohjelmat tulostaisivat
He olivat kiinnostuneita luonnollisten kielten käsittelystä ja sovelsivat siihen automaattisia teoreemantodistustekniikoita. Kehittäjien yhteisenä tarkoituksensa on ollut logiikan soveltaminen ohjelman suoritukseen siten, että ohjelman suoritus voidaan nähdä teoreeman todistamisena. Prologia on käytetty myös luonnollisten kielten käsittelemiseen. Watson voitti tietokilpailussa ihmiskilpailijat, mitä pidettiin tärkeänä julkisuusansiona IBM:n ja tekoälyn kannalta. Hän ymmärsi, että automaattisessa teoreemojen todistamisessa kannattaa erottaa toisistaan päättelysääntö (resoluutio) ja puutietorakenteiden samankaltaisuuden tutkimisalgoritmi (unifiointi). Prolog on yksi vanhimmista logiikkaohjelmointikielistä ja niistä kaikkein tunnetuin. Myös logiikkaohjelmoinnin alkeisiin tutustutaan. Ohjelmoija kuvaa logiikan keinoin käsillä olevan ongelman tai tehtävän. Prolog-kielellä on lopulta hyvin monia kehittäjiä, ja siksi se onkin kehittynyt monin eri tavoin 70-luvun alun jälkeen. Prolog-kielessä ja logiikkaohjelmoinnissa ohjelman suorittaminen nähdään teoreeman todistamisena. Prologkielellä ohjelmoidaan loogisia sääntöjä ja todistellaan teoreemoja. Tämä artikkeli esittelee lyhyesti Prolog-kielen syntyhistorian sekä kielen keskeiset piirteet. Sen keksijänä pidetään ranskalaista Alain Colmeraueria, jonka apuna työskenteli Philippe Roussel. Predikaatit muodostavat tietokannan, joka toimii ikään kuin ohjelman tietoisuutena. Itse algoritmi oli pääosin peräisin jo vuodelta 1965 ja perustuu Alan Robinsonin tutkimuksiin. Prologia on käytetty ensisijaisesti tekoälyn piirissä ja asiantuntijajärjestelmien ohjelmoinnissa. Niissä suoritetaan lauseita ja lausekkeita, sijoitetaan arvoja muuttujiin, määritellään ja kutsutaan funktioita ja niin edelleen. Watsonin tekoäly oli ohjelmoitu Prologkielellä.. Ylikoski Kuvat: Mitol Berschewsky Watson Yhdysvalloissa tv-tietokilpailu Jeopardyssa oli yhtenä osanottajana Watson eli IBM:n laatima tietokoneen ja ohjelmiston yhdistelmä. Niissä tietokoneohjelma pyrkii toimimaan kuin ihmisasiantuntija, joka tekee päätöksiä laajan tietämyksen ja kokemuksen perusteella. Myöhemmin Prologista on pyritty tekemään yleiskäyttöinen logiikkaohjelmointikieli, jota voi käyttää suurten ja vaativien ohjelmistojen kirjoittamiseen. Hän määrittelee sääntöjä eli predikaatteja, jotka sisältävät tietoa asioiden välisistä suhteista. 16 2014.2 Koodi P rolog-kielen nimi tulee ranskan kielen sanoista programmation en logique, suomeksi ’ohjelmointi logiikan keinoin’. Varhaisessa vaiheessa Prologin kehitykseen osallistuivat myös Jean Trudel ja Robert Kowalski, joiden avulla kehitettiin logiikkakielen päättelysääntöä, niin sanottua resoluutioalgoritmia. Prolog on siis levinnyt akateemisen maailman ulkopuolellekin, esimerkiksi teollisuuden ja kaupan aloille. Kielen synty Prolog-kieli syntyi 1970-luvun alkupuolella. Kun tietokanta on valmis, ohjelmoija Prolog-kielen perusteet Ohjelmointi voi olla muutakin kuin käskyjen latomista peräkkäin. Uudet ajattelutavat Tavanomaiset ohjelmointikielet toimivat käskyperiaatteella, imperatiivisesti. Ohjelman suoritus nähdään peräkkäisinä käskyinä, jotka muokkaavat ohjelman tai laitteiston tilaa. Kieli syntyi vuosikymmeniä kestäneen logiikkaohjelmoinnin tutkimuksen ja käytännön kokemuksen tuloksena. Myös Robinson tutki logiikkaohjelmointia. Kieli on kuitenkin yleiskäyttöinen ja soveltuu moniin muihinkin tehtäviin. Teksti: Antti J
Luetaan nyt muistiin Prolog-ohjelma, jonka aiemmin tallensimme: | ?['c:\polku\sukupuu.pl']. Koska vastustajan siirtoja ei voi täysin ennustaa, täytyy käsitellä monia vaihtoehtoisia tulevaisuuksia eli useita eri siirtovaihtoehtoja kuhunkin tilanteeseen. Ratkaisu syntyy automaattisesti, sillä kieli itsessään sisältää teoreemojen todistusalgoritmit eli tarvittavat resoluutioja unifiointialgoritmit. Sukulaisuussuhteita voidaan ilmaista seuraavasti: vanhempi(esko, antti). Kun argumenttina on muuttuja, esimerkiksi Lapsi , tulostuu kyselyssä kaikki kyseistä argumenttia vastaavat oliot. Lisätään vielä sukupuu.pl-tiedostoon seuraavat koodirivit ja luetaan jälleen ohjelman laajennettu versio Prolog-järjestelmään. ^D | ?terve. Tiedostopolkua ei välttämättä tarvita, jos tiedosto sijaitsee nykyisessä työhakemistossa. 17 vain pyytää ohjelmointijärjestelmää ratkaisemaan ongelmia. Perinteisen tervehdysohjelman Prolog-toteutus | ?[user]. Jossakin suunnitteluvaiheessa shakinpelaaja voi huomata: ”Hups, tuota miettimääni siirtoa ei voikaan tehdä, sillä se johtaisi tappioon.” Silloin pitää peruuttaa johonkin aiempaan suunnittelutilanteeseen ja miettiä muita vaihtoehtoja. Tyypillisesti keskipeliasemassa on noin 30 mahdollista siirtoa, joista shakkimestari pitää kelvollisena ehkä kolmea tai neljää siirtoa. Teoreemojen todistamiseen voi liittää omia proseduureja. Predikaattisymbolit ovat funktoreita. Seuraavassa on funktoriesimerkkejä: isa(esko, antti) fact(X, F) super(X, funfun(Y)) sin(30, X) yksikko(kalat, kala) Prolog-ohjelmoinnin alkeet Sukupuuesimerkki on tyypillinen tapa johdatella Prolog-kielen perusteisiin. Kielen standardissa ei ole taulukkotyyppiä, mikä johtuu eräistä muinaisista unifiointiin liittyvistä näkökohdista. Moderneissa Prolog-järjestelmissä kuitenkin on melkein aina myös taulukkotyyppi, mutta sen toteutus hieman vaihtelee. Tällaisia objekteja käyttämällä saadaan merkkijonoja vastaava toiminnallisuus. terve :write("Morjens, maailma!"), nl. Prolog-kielessä peruuttaminen merkitsee juuri tällaista palaamista aiempaan tilanteeseen ja sen jälkeistä muiden vaihtoehtojen kokeilua. vanhempi(ville_matti, mailis). Prolog-kielen cut-primitiivin avulla voidaan leikata turhia todistamispuun haaroja pois. vanhempi(silja, mailis). Hakasulkeet merkitsevät sitä, että ohjelma luetaan levyltä. vanhempi(esko, martti). Prolog-kieli soveltuukin hyvin tehtäviin, joissa asia voidaan ilmaista täsmällisin säännöin. Kielen tietotyyppinä on symboli, mikä lisää kielen ilmaisuvoimaa ja tiedonkäsittelykykyä merkittävästi. Niitä käytetään olioiden niminä, ja ohjelmakoodissa ne alkavat pienellä kirjaimella. Symbolinen tietojenkäsittely muistuttaa jossain määrin ihmisaivojen toimintaa, sillä aivotkin ovat jonkinlainen symboliprosessori. Tällä tavoin Prolog-ohjelmaan voi liittää lähes minkä hyvänsä itse ohjelmoidun toiminnon. vanhempi(liisa, esko). Symbolisuus soveltuu hyvin logiikkaja tekoälyohjelmointiin. Logiikkaohjelmoinnin keskeisimmät objektit, predikaatit, koostuvat pääasiassa symboleista. Varsinaista merkkijonotyyppiä ei standardi-Prologissa ole, mutta lainausmerkkien avulla voidaan kuitenkin luoda merkkijonoa muistuttavia objekteja: "Tämä ei ole merkkijono vaan lista." Tavallisesti listat ilmaistaan Prologkielessä hakasulkeilla, esimerkiksi [1, 2, 3, 4, 5, 6] , mutta lainausmerkkien avulla on kätevämpää kirjoittaa listoja, jotka sisältävät pelkkiä merkkejä. Tallennetaan edellä olevat koodirivit tiedostoon ”sukupuu.pl” ja käynnistetään sitten Prolog-järjestelmä. vanhempi(veli_matti, esko). Pystyviiva ilmaisee, että kyseessä on syöttöoperaatio, ja merkit ?liittyvät siihen, että ollaan todistamassa teoreemaa. Se ilmaisee, että objekti esko on objektien antti , martti ja anne vanhempi. % Tässä määritellään sääntö: isovanhempi(X, Z) :vanhempi(X, Y), vanhempi(Y, Z). Prolog-kielessä muuttujat alkavat isolla kirjaimella ja vakiot pienellä kirjaimella, jos ne koostuvat yhdestä atomista. Prolog-kielessä symbolia kutsutaan atomiksi. Edellisessä esimerkissä on jotakin aivan uutta: siinä määritellään sääntö. Lisätään seuraavaksi samoille henkilöille myös äiti: vanhempi(mailis, antti). % Luetaan koodia päätteeltä. vanhempi(esko, anne). Esimerkiksi seuraava kysely tulostaa kaikki olion esko lapset: | ?vanhempi(esko, Lapsi). Funktorit ovat olioita, joilla on nimi (atomi) sekä joukko argumentteja. Lisätoiminnot voi ohjelmoida toisillakin ohjelmointikielillä. Argumentit ovat joko atomeja, funktoreita tai vakioita, kuten lukuja tai listoja. Hän suunnittelee siirtoketjua useita vaiheita eteenpäin: oma siirto, vastustajan siirto, oma siirto, vastustajan siirto, oma siirto jne. Ratkaisu perustuu ennalta määriteltyyn ongelmankuvaukseen ja sen loogisiin seurauksiin. Prolog-ohjelman suorittama teoreemojen todistus voidaan kuvata ja suorittaa myöskin algoritmilla, jota kutsutaan peruuttavaksi hauksi tai etsinnäksi. Tietotyypit Ohjelmointikielten valtavirtaan verrattuna Prologin tietotyypeissä on jotakin tuttua ja jotakin erikoista. Morjens, maailma!. Havainnollistan käsitettä shakkipelin avulla. vanhempi(mailis, anne). Prolog on symbolinen kieli kuten Lisp – toisin kuin esimerkiksi Basic, Python, Perl tai Pascal. Prolog-järjestelmässä teoreemojen todistamista voi ohjailla mekanismilla, jota kutsutaan cut-primitiiviksi ja joka merkitään lähdekoodissa huutomerkillä. Ajatellaan tilannetta, jossa shakkimestari miettii seuraavaa siirtoa. Teoreeman todistamisessa havaitaan melko usein, että osa puusta on tarpeeton tai jopa haitallinen suoritettavan tehtävän kannalta. Kuva nimittäin muistuttaa jonkinlaista ylösalaisin käännettyä puuta. Kun tiedosto on ladattu, voidaan suorittaa kyselyjä. Liukulukujen tarkkuus on riippuvainen kielen toteutuksesta. Näkyviin ilmestyy seuraavanlaisen komentokehote: ”| ?-” . vanhempi(mailis, martti). Seuraava kysely tulostaa kaikkien vanhempien kaikki lapset: | ?vanhempi(Vanhempi, Lapsi). Lukutietotyypit ovat ihan perinteiset, eli tarjolla on kokonaisluku ja liukuluku. Kun yleisessä tapauksessa ryhdytään todistamaan teoreemaa, voidaan tehtävästä piirtää kuva, jota tietojenkäsittelyopissa kutsutaan puuksi
Mikäli Prolog ja logiikkaohjelmointi alkoi kiinnostaa, kannattaa aivan alkajaisiksi ladata netistä jokin ilmainen Prolog-järjestelmä. yes Rakennetaan sitten vieläkin monimutkaisempi ohjelma ja kirjoitetaan tiedostoon seuraava koodi: monikko(Sana, Monikko) :atom_codes(Sana, Lista), atom_codes(t, KirjainT), append(Lista, KirjainT, MonikkoLista), atom_codes(Monikko, MonikkoLista), !. Oikeastaan tämä on matemaattisesti hieman väärin, mutta sen tarkoitus on varautua siihen virhetapaukseen, että käyttäjä antaa predikaatille argumentin, jonka arvo on negatiivinen. Esimerkkiohjelman ylemmässä säännössä sanotaan, että luvun X kertoma on 1, jos X on pienempi tai yhtä suuri kuin 1. Säännön määrittelyssä vanhempi -predikaattien välissä oleva pilkku on looginen ja-operaattori. Nollan kertomahan on yksi. Predikaatti atom_codes(Sana, Lista) sanoo, että symbolin Sana kirjainten lista on listassa Lista . 18 2014.2 Koodissa oleva :on implikaationuoli, ja sääntö sanoo, että olio X on olion Z isovanhempi, jos X on Y :n vanhempi ja Y on Z :n vanhempi. Saatavissa: http://www.ida.liu.se/~ulfni/lpp/. Kirjallisuutta • Bratko, Ivan: Prolog Programming for Artificial Intelligence, 4th edition, AddisonWesley/Pearson 2012, ISBN 978-0-32141746-6. Jos esimerkiksi olisi Monikko = "autot" , niin predikaatti yksikko laskee tulokseksi Sana = "auto" . • O’Keefe, Richard A.: The Craft of Prolog, The MIT Press, ISBN 978-0-262-51227-5. Kaupallisiakin toteutuksia on kyllä saatavilla. Miten pääsen alkuun. Aristoteelisen logiikan Prolog-toteutus.. Oppikirjoina klassikon asemassa ovat Richard O’Keefen The Craft of Prolog sekä Leon Sterlingin ja Ehud Shapiron The Art of Prolog. Kannattaa hankkia uusin painos. (editor): Computer Science Handbook, 2nd edition, Chapman & Hall / The Chemical Rubber Company 2004, ISBN 1-58488-360-X. nainen(silja). Tämä oli yksinkertainen esimerkki siitä, miten luonnollisen kielen merkityksellisiä yksiköitä eli morfeemeja voidaan käsitellä Prologilla. Uuden säännön mukaan X on Y :n isoisä, jos X on Y :n isovanhempi ja X on mies. mies(ville_matti). Sen jälkeen tarvitaan hyvä oppikirja. Sitä käytetään teoreemojen todistuksen ohjailuun. prolog. mies(esko). mies(antti). Ivan Bratkon kirja Prolog Programming for Artificial Intelligence on mielestäni paras Prolog-tietolähde. Jos haluaa tutustua Prolog-kielen hienouksiin syvemmin, Peter Norvigin kirja Paradigms of Artificial Intelligence Programming sisältää Lisp-kielellä toteutetun Prolog-tulkin sekä tarkempaa Prologin toteutuksen käsittelyä. Nyt esimerkiksi seuraava kysely tulostaa kaikki voimassa olevat isoisä–lapsenlapsi-suhteet: | ?isoisa(Isoisa, Lapsenlapsi). • Norvig, Peter: Paradigms of Artificial Intelligence Programming, Morgan Kaufmann 1992, ISBN 978-1-55860-191-0. Hyviä ovat esimerkiksi kiinalainen BProlog, alankomaalainen SWIProlog sekä GNU Prolog. yksikko(Monikko, Sana) :atom_codes(Monikko, Lista), atom_codes(t, KirjainT), append(YksikkoLista, KirjainT, Lista), atom_codes(Sana, YksikkoLista), !. kertoma(X, F) :Aux is X-1, kertoma(Aux, FAux), F is X * FAux, !. Mennään seuraavaksi hieman pidemmälle. Hakasulkeilla ilmaistaan Prolog-kielessä lista. Hyvä opas on myös internetistä ilmaiseksi saatava Ulf Nilssonin ja Jan Maluszynskin Logic, Programming and Prolog. Prolog-järjestelmä tulostaa uskollisesti meille kaikki voimassa olevat isovanhempi–lapsenlapsi-suhteet. • Sterling, Leon – Shapiro, Ehud: The Art of Prolog, 2nd edition, The MIT Press, ISBN 978-0-262-69163-5. mies(martti). Ohjelma toimii seuraavasti: Määritellään kaksi predikaattia, monikko ja yksikko . Nyt voidaan nähdä, että predikaatti monikko lisää t-kirjaimen sanan Sana loppuun ja predikaatti yksikko ottaa sanan Monikko lopussa olevan t-kirjaimen pois. Se sanoo, että luvun X kertoma on F , jos 1.?apumuuttuja Aux saa arvon X-1 2.?apumuuttujan Aux kertoma on FAux 3.?muuttuja F eli tulos saa arvon X * FAux . % Isoisän määrittelevä sääntö: isoisa(X, Y) :isovanhempi(X, Y), mies(X). • Nilsson, Ulf – Maluszynski, Jan: Logic, Programming and Prolog. Kertoma = 120 | ?kertoma(5, 120). Ryhmän aktiivikäyttäjät ylläpitävät muun muassa faq-listaa eli vastauksia usein kysyttyihin kysymyksiin. Nyt kertoma voidaan laskea tai tarkistaa esimerkiksi seuraavanlaisilla kyselyillä: | ?kertoma(5, Kertoma). Keskusteluryhmästä saa myös vertaistukea.. • Tucker, Allen B. nainen(anne). Ohjelmoidaan vielä lisää ja määritellään myös sukupuoli sekä isoisän sääntö: mies(veli_matti). Nyt voimme suorittaa esimerkiksi seuraavanlaisen kyselyn: | ?isovanhempi(Isovanhempi, Lapsenlapsi). Prolog-kielestä voi keskustella esimerkiksi Usenetin ryhmässä comp.lang. Prolog-kielellä se näyttää seuraavalta: kertoma(X, 1) :X =< 1, !. nainen(mailis). Molempien sääntöjen lopussa on !-merkki, joka on niin sanottu cut-primitiivi. nainen(liisa). Esimerkiksi voisi olla Sana = "talot" , jolloin tulee olemaan Lista = [t, a, l, o, t] . Kertomafunktion laskeminen on klassinen esimerkki ohjelmointioppaissa. Prologia käytetään paljon luonnollisten kielten käsittelyyn. Siinä on tietoa lukuisista eri Prologin toteutuksista. Ohjelmassa jäljempänä olevaa sääntöä sovelletaan, mikäli aikaisempi ei toimi
TAPAHTUMA ON ILMAINEN JA AVOIN KAIKILLE, TERVETULOA! UUTTA UUSIMMAT KÄYTTÖJÄRJESTE LMÄT JA YHTEENSOPIVAT KONEET: • AMIGAOS 4.1, MORPHOS 3 JA AROS FPGA-KONEITA JA UUSIA LISÄLAITTEITA VANHOILLE KONEILLE • PELIUUTUUKSIA KOKEILTAVANA • HISTORIAA USEITA ALKUPERÄISIÄ AMIGA-KONEITA • MUITA 80-LUVUN AIKALAISIA VANHOISTA TUTUISTA • HARVINAISUUKSI IN, COMMODOREST A SPECTRAVIDEOO N OHJELMAA ESITTELYJÄ, PELIKILPAILUJA, DEMOJA JA VAPAATA KÄYTTÖÄ • OSTOKSIA SUOMALAINEN AMIGA-JÄLLEENM YYJÄ GENTLE EYE KY • TIETOKONEKULTT UURIN ERIKOISLEHTI SKROLLI • YHDISTYKSEN TUOTTEITA •. 19 hae meille (reaktorille) tOihin reaktor.fi/careers @ReaktorNow MITÄ SAKU 2014 -TAPAHTUMA JÄRJESTETÄÄN TAMPEREELLA • PÄÄKIRJASTO METSOSSA LAUANTAINA 20.9.2014 KLO 10-16 YHDISTYS PALAA TAMPEREELLE 10 VUODEN TAUON JÄLKEEN! • http://saku.amiga ??n.org | http://www.faceb ook.com/suomena migakayttajat SAKU 2014 | TAMPERE 20.9
Euroopassa ja Lähi-idässä tunnettu binääriennustusmenetelmä on nimeltään geomantia tai ilm al-raml. Kahdesta erilaisesta symbolista muodostuvat jonot ovat yksi näistä. Jorubat puolestaan liittävät kuhunkin yhdistelmään pitkän tarinan, ja näin bittijonot toimivat indekseinä, jotka auttavat pitämään suullista perimätietoa kasassa. Nigeriassa elävät igbot liittävät kuhunkin yhdistelmään vain yksinkertaisen sanan tai käsitteen, esimerkiksi nähdä tai myrkky. Vuosisatoja sitten todellisuus haluttiin nähdä kellokoneistona ja vähän myöhemmin höyrykoneena. Esimerkiksi kuhunkin kolmen bitin kuvioon eli trigrammiin yhdistyy jokin kiinalaisten viidestä elementistä (tuli, vesi, maa, puu tai metalli). Kartan kohdat vastaavat elämän eri osa-alueita samaan tapaan kuin astrologiset huoneet. Geomantiassa arvotaan aluksi neljä neljän bitin sarjaa, joita pyörittämällä ja biteittäin yhteen laskemalla (xor) saadaan aikaan kartta, joka muodostuu 15:stä neljän bitin sarjasta. Pääsemme siis aloittamaan tarinamme tuhansien vuosien takaa. Länsiafrikkalaiset järjestelmät käyttävät kuusibittisten yhdistelmien sijaan kahdeksanbittisiä, jotka esitetään kahtena vierekkäisenä nelibittisenä kuviona. Geomantia jäi kuitenkin Euroopassa melkoisen harvinaiseksi menetelmäksi. 20 2014.2 T ässä jutussa kerrotaan tietotekniikan inspiroimista todellisuuskäsityksistä. Kunkin kuvion merkitys riippuu sen koostumuksesta ja sijainnista. Teksti: Ville-Matias Heikkilä Kuvat: Ville-Matias Heikkilä Geomantiaa: oikean yläkulman neljä nelibittistä kuviota arvotaan, ja loput muodostetaan niistä pyörittämällä ja xor-operaatiolla. Kuviot koostuvat yksittäisistä ja parittaisista kivistä. Bittien tulkintatavat eroavat toisistaan huomattavasti. Kukin tikku voi olla joko ehjä tai katkonainen. Maailmankaikkeuden ajateltiin olevan täynnä asioita, jotka muuttuvat aktiivisen jangtilan ja passiivisen jin-tilan välillä. Bittiennustaminen vaikutti syvästi siihen, kuinka todellisuutta ruvettiin käsittämään kiinalaisessa filosofiassa. Järjestelmästä käytetään sentapaisia nimiä kuin Ifa, Afa tai Fa. Nykyisin ykkösehdokas kaiken malliksi on kuitenkin tietokone. Bitit ennustajina Ehkä tunnetuin ja vanhin bittijonoihin perustuva ennustusmenetelmä tulee Kiinasta. Myös muualla maailmassa on harjoitettu binääriennustamista. Tietotekniikan pohjalla on matemaattisia rakenteita, jotka keksittiin kauan ennen tietokoneita ja joihin on liitetty mystiikkaa jo alusta saakka. Opas lisäsi jinja jang-tikkujen joukkoon kahdesti katkaistun tikun, joka kuvaa ihmisyyttä (ren) ja joka antoi merkityksen kullekin 81:lle neljän tritin yhdistelmälle. Yhdistelmä arvotaan heittämällä kahdeksasta simpukankuoresta koostuvaa opele-ketjua, jossa kukin kuori asettuu joko kupera tai kovera puoli ylöspäin. Monimutkaisempien muutosketjujen taakse miellettiin pitempiä bittijonoja. Menetelmässä arvotaan kuvio, joka koostuu kuudesta vaakasuorasta tikusta. Täällä oli jo Euklideen ajoista alkaen ihannoitu matemaattista jatkuvuutta, ja niinpä ennustajatkin seurasivat Bittikosmologia Tekniikka on aina kiehtonut ajattelijoita. Myöhemmin ilmestyi ennustusopas nimeltään Tài Xuán J?ng (Suurten ihmeiden kirja), jota voi pitää eräänlaisena trinäärisenä kilpailijana binääriselle I Chingille. Lisäksi tikku voi olla siirtymävaiheessa päinvastaiseen tilaan. Gbe-kansat puolestaan antavat kahdeksanbittisen tunnuksen paitsi tarinoilleen, myös kasveille, eläimille, tapahtumille, ruokatabuille ja yleensäkin kaikille maailman ilmiöille. Muinainen ennustusopas nimeltä I Ching (Muutosten kirja) kertoo, kuinka kuuluu tulkita kukin 64 mahdollisesta kuviosta mahdollisine bittimuutoksineen. Kulttuuri
Jumala eli ykkönen jättäisi vetäytyessään jälkeensä tyhjää eli nollia, joista maailma syntyisi. Saksalainen tietotekniikkapioneeri Konrad Zuse kirjoitti vuonna 1969 kirjan Rechnender Raum (Laskeva avaruus), jossa hän esitti hypoteesin, jonka mukaan maailmankaikkeus olisi pohjimmiltaan kuin soluautomaatti tai muu tietokonemalli. Kirja loi perustan uudelle näkökulmalle, jota ruvettiin kutsumaan digitaalifysiikaksi. Ohjelmia voitaisiin esimerkiksi ajaa sitä hitaammin, mitä pitempiä ne ovat. Jos tätä ajatusta viedään pidemmälle, voidaan päätyä maailmaan, johon kuuluvat kaikki mahdolliset maailmat. Tekoälytutkija Jürgen Schmidhuber esitti vuonna 1997, että todellisuuden voisi kuvata pelkistettynä mutta muistiavaruudeltaan rajattomana tietokoneena, joka ajaa kaikkia mahdollisia ohjelmiaan samanaikaisesti. Kenties binääriluvuissa olisi salattuja merkityksiä, tai ehkäpä ykköset ja nollat olisivat koko kaikkeuden perustana. Luvuista rakentuva maailmankaikkeus oli kuitenkin Leibnizin aikaan jo vanha idea. 1960-luvulla nousi matematiikan ala nimeltä symbolinen dynamiikka, jossa maailman jatkuvia prosesseja pyritään mallintamaan soluautomaateilla ja muilla symbolijärjestelmillä. Leibniz sovitti idean binäärijärjestelmään. Meidän maailmamme ei nähtävästi ole tällainen, sillä sen luonnonlait tuntuvat tiivistyvän melkoisen ytimekkäiksi matemaattisiksi lausekkeiksi. Ehkä tunnetuin soluautomaatti on John Conwayn kehittämä Game of Life. Luonnonlait olisivat täynnä omituisia poikkeuksia mutta kuitenkin riittävän säännönmukaisia kehittämään ja ylläpitämään älyllistä elämää. 21 mieluiten planeettojen tasaisia liikkeitä taivaalla ja rakensivat salaoppinsa niiden pohjalle. Voi hyvinkin olla yksinkertaisempaa kuvata periaate, joka tuottaa kaikenlaiset universumit luonnonlakeineen ja vakioineen, kuin kuvata vain yksi tietty vaihtoehto. Leibniz innostui ajatuksesta niin paljon, että suunnitteli siitä kertovan hopeamedaljongin. Kun kreikkalaiset filosofit noin 2500 vuotta sitten kiistelivät siitä, olisiko maailmankaikkeuden peruselementti kenties vesi vai tuli, Pythagoras Samoslainen astui ihan kunnolla laatikon ulkopuolelle ja totesi sen olevan arithmos eli luku. Schmidhuber haluaa nähdä maailmankaikkeuden pohjalla perinteisen TuLeibnizin hahmotelma binäärijärjestelmää juhlistavaksi medaljongiksi.. Sama ajatus on esimerkiksi kosmologi Max Tegmarkilla, joka tunnetaan matemaattisen ja fysikaalisen olemassaolon samaistavista multiversumiteorioistaan. Todellisuusselitykseen tarvitaan siis jotain, joka painottaa yksinkertaisempia malleja. Koska kyseessä näytti olevan yksinkertaisin mielekäs lukujärjestelmä, varmastikin myös Jumala käyttäisi sitä. Binääriaritmetiikan uskonnollinen esiinmarssi Nykyisen ykköseen ja nollaan perustuvan binäärilukujärjestelmän keksijänä pidetään saksalaista yleisneroa Gottfried Leibnizia (1646–1716), joka kaiken muun ohella kehitti myös differentiaalilaskennan ja rakensi yhden ensimmäisistä mekaanisista laskukoneista. Kun tietokoneet yleistyivät tiedepiireissä, niitä haluttiin käyttää esimerkiksi maailman ilmiöiden simulointiin. Suoraviivaisimmillaan oma maailmankaikkeutemme voisi olla Game of Lifen kolmiulotteinen versio, jossa erilaiset paikalliset liiturien ja muiden kuvioiden rykelmät vastaavat esimerkiksi kvarkkeja ja välittäjähiukkasia. Pythagoraan opetuksista lähteneet rönsyt vaikuttivat luonnontieteiden syntyyn mutta samalla ohjasivat ajattelua uralle, jota ruvettiin kunnolla kyseenalaistamaan vasta 1900-luvulla. Leibniz oli sitä mieltä, että Jumala oli luonut parhaan mahdollisen maailman – sellaisen, joka synnyttää mahdollisimman paljon monimuotoisuutta mahdollisimman yksinkertaisista periaatteista. Jokainen tietokoneohjelma on universumi Millainen laskentamekanismi maailmankaikkeuden pohjalla sitten olisi. Esimerkiksi fyysikoiden aiemmin löytämät energiakvantit voisivat olla heijastumaa tästä diskreettiydestä. Vaikka suurin osa ohjelmista ei tekisikään mitään tolkullista, niiden joukkoon kuuluisivat myös kaikki mahdolliset maailmankaikkeuksien mallit, jotka siis toteutuisivat olemassa olevina maailmankaikkeuksina. Myös hän liitti binäärijärjestelmään uskonnollista mystiikkaa. Toteuttamatta jääneeseen medaljonkiin oli tarkoitus tulla taulukko binääriluvuista ja niiden desimaalivastineista, esimerkit binäärisestä yhteenja kertolaskusta sekä ajatus ”unus ex nihilo omnia” eli ”yksi [luo] tyhjästä kaiken”. Jos perimmäistä todellisuutta ei haluta kuvitella ajalliseksi, voidaan laskenta-ajan sijaan ajatella, että lyhyempien ohjelmien tulosteet saavat osakseen ”enemmän olemassaoloa” kuin pitempien, ja sen vuoksi koemme todennäköisemmin juuri niitä. Juutalaisessa mystiikassa on ajatus nimeltä tzimtzum ’vetäytyminen’. Elämmekö soluautomaatissa. Leibniz oli ilmeisestikin saanut idean binäärilukujärjestelmästä jo aiemmin, mutta hän innostui kirjoittamaan siitä vasta käytyään kirjeenvaihtoa jesuiittojen kanssa. Sen mukaan maailmankaikkeus oli alussa täynnä jumaluutta, joka tietyistä kohdista valikoidusti vetäytymällä antoi maailmalle muodon. Soluautomaatin ei kuitenkaan tarvitse vastata havaittavaa fysikaalista maailmaa näin säntillisesti. Kaikki mahdolliset maailmankaikkeudet eivät kuitenkaan näytä olevan meille yhtä todennäköisiä asuinpaikkoja. Koska pitempiä ohjelmia on huomattavasti enemmän kuin lyhyempiä, älyllisiä olentoja ilmestyisi eniten sellaisiin maailmoihin, joista saa monimutkaisuutensa vuoksi hädin tuskin tolkkua. Se, että täysin vieras kansa oli toisella puolella maailmaa onnistunut löytämään saman matemaattisen periaatteen, oli Leibnizille merkki binäärijärjestelmän universaaliudesta. Ongelman ratkaisu voisi löytyä siitä, kuinka todellisuus jakaa laskenta-aikaansa eri maailmankaikkeuksille. Tämä ajattelutapa edustaa pankomputationalismia, jossa todellisuus ei ole pelkästään täysin mallinnettavissa ohjelmoitavalla tietokoneella vaan se pohjimmiltaan myös on sellainen. Kiinassa lähetystyötä tehneet jesuiitat liittivät erääseen kirjeeseensä kuvan kahdeksasta I Chingin trigrammista, jotka Leibniz yhdisti oitis binäärilukujärjestelmään. Aikakaudella vallinnut kyseenalaistava henki antoi pontta myös ajatukselle, jonka mukaan maailma ei olisi pohjimmiltaan jatkuva vaan diskreetti: symbolinen dynamiikka ei siis tarjoaisi maailmasta vain pikselöitynyttä likiarvoa, vaan todellisuus voisi oikeastikin koostua ”palikoista”. Pohjalla voisi aivan hyvin olla vaikka yksiulotteinen Turing-täydellinen soluautomaatti, joka Turing-täydellisyytensä vuoksi pystyy samaan kuin kaikki kolmitai vaikka viisiulotteiset automaatitkin
Transhumanistifilosofi Nick Bostrom esitti vuonna 2003 niin kutsutun simulaatiohypoteesin. Voisi jopa sanoa, että elämme elämämme samaan aikaan kaikissa mahdollisissa universumeissa, joissa elämänkokemuksemme pystyy toteutumaan. Hiukkasentapaisten törmäilyä alkeissoluautomaatti 110:ssä. Monet transhumanistit puhuvat teknologisesta singulariteetista, mutta kosmologi Frank J. Tietokoneena kuvattu todellisuus vetoaa nykyihmisiin monin tavoin, ovathan digitaaliset virtuaalimaailmat arkipäivää. Esimerkiksi minkä tahansa elokuvan voi pakata ohjelmaksi, joka tulostaa sen. Ihmiset vertaavat usein elämäänsä filmiin, joka sisältää kaikki elämän aikana koetut aistimukset, ajatukset, tunteet ja muut kognitiot. Kun höyrykone mullisti elämää, syntyi termodynamiikan kaltainen psykodynamiikka selittämään, kuinka ihmismieli käy kuumana ja päästelee höyryjä. Voiko universuminsa valita. Simulaattorin ei tarvitsisi täysin vastata omaa universumiamme. Riittää, että itse elokuva tulostuu oikein. Tarvitsemmeko kenties jonkin vielä vahvemman periaatteen, joka sijoittaa elämämme todennäköisemmin simulaatioiden ulkokuin sisäpuolelle. Tipplerin mukaan universumi saavuttaa luhistuessaan kosmologisen singulariteetin, omegapisteen, jossa universumin laskentakapasiteetti paukahtaa äärettömäksi. Satakymppi on Turing-täydellinen, joten se voisi teoriassa pyörittää meikäläistenkin todellisuutta.. Vieläpä niin valtavissa määrin, että simuloituja elämiä on kaikkeudessa lopulta paljon enemmän kuin simuloimattomia. Tietyissä älykköpiireissä suosioon ovat nousseet äärimmäisen relativistiset elämänkatsomukset, joissa todellisuus on paitsi yksilöllinen, myös yksilön tietoisesti valittavissa. Eri ihmisillä voi olla hyvinkin erilainen universumijoukko, eli jokaisella on oma yksilöllinen todellisuutensa. Jos käytössämme olisi ääretön laskentakapasiteetti, ei meidän tarvitsisi edes suunnitella simulaattoria. Kvanttifyysikko David Deutsch käyttää omassa mallissaan Turingin koneen kvanttiversiota, joka antaa paremmat toteutumismahdollisuudet erilaisille kvanttitason outouksille. Mutta älkäämme murehtiko myöhempien sukupolvien tuhahteluja nyt vaan nauttikaamme näköaloista, kun ne ovat vielä tuoreita!. Kun järjestäytynyt yhteiskunta oli uusi asia, haluttiin maailma nähdä eri asioihin erikoistuneiden jumalten ohjaamana. Mikäli pienikin osuus ihmisen kaltaisista sivilisaatioista pääsee tasolle, jossa sillä on sekä valtavasti laskentakapasiteettia että kiinnostusta ”menneisyyssimulaatioita” kohtaan, se todennäköisesti ryhtyy toteuttamaan sellaisia. Parin sadan vuoden päästä saatamme jo naureskella sille, kuinka joskus uskoimme tietotekniikan olevan koko todellisuuden avain. Tämä avaa mielenkiintoisia näkökulmia myös ihmiselämän ja pankomputationalistisen todellisuuden suhteeseen. Elokuvan valmistuttua simulaatiossa ohjelma lukisi sen solutaulukosta ja tulostaisi sen. Kaikista valaistumiskokemuksista huolimatta kannattanee kuitenkin muistaa, että tietokonemetafora kertoo todennäköisesti enemmän meistä itsestämme ja nykykulttuurista kuin perimmäisestä todellisuudesta. Sitä, kuinka höyrypäät odottivat erilaisia singulariteetteja ja ties kuinka monennen sukupolven virtuaalitodellisuuksia kuin mitäkin uskovien ylöstempausta. Ohjelma käytännössä simuloisi maailman, jossa elokuvantekijät syntyvät, elävät ja toteuttavat elokuvansa. Tällaisella laskentakapasiteetilla simuloituvat kaikki mahdolliset maailmankaikkeudet, ja kukin simulaatio voi kestää äärettömän pitkään. Simulaatiota simulaation päälle Yksi tietojenkäsittelyn peruspilareista on Churchin–Turingin teesi, jonka mukaan kaikki tietokoneet ja tietojenkäsittelyn mallit pystyvät suorittamaan täysin samat tehtävät, mikäli muistitilaa on tarpeeksi. Myös tällainen elämänfilmi voidaan olettaa itsenäiseksi olioksi, joka on riippumaton maailmankaikkeuksista mutta joka voidaan kuvata monien mahdollisten universumien avulla. Onko tässä lopulta perää. Äärettömyys palauttaa meidät takaisin monimutkaisuusongelmaan. Kaikkien mahdollisten tietokoneohjelmien joukossa on toki paljon muutakin kuin maailmasimulaattoreita. Peter J. Tippler menee vielä pidemmälle. Kvanttimekaniikan kummallisuudet ovat melkoisen raskaita laskettavia Turingin koneen tapaan toimivilla koneilla, minkä fyysikot ovat simulaatioita tehdessään huomanneet. Tämä tarkoittaa esimerkiksi sitä, että erilaiset tietokoneet pystyvät emuloimaan toisiaan tarkasti. Mikäli kaikki erilaisten maailmasimulaattorien tuottamat maailmat ovat olemassa, pitäisi myös jokaisen elokuvan olla samaan tapaan olemassa itsenäisenä olionaan, joka ei tarvitse maailmankaikkeutta alleen. Yhtä hyvin sitä voisi perustella myös pankomputationalistisen maailmankuvan kautta. Tiedepiireissä bittikosmologia on omiaan tuulettamaan luutuneita dogmeja ja avaamaan uusia näköaloja. Sisäkkäisiä tasoja on todennäköisesti aivan tolkuton määrä. Simuloidun todellisuuden ajatusta on käsitelty valtavirtaviihteessäkin jo hyvän aikaa. Oman alan teoria ei pädekään enää vain tietyillä sovellusalueilla vaan on avain koko todellisuuden ymmärtämiseen. Carrollin kaaosmagia perustelee käsitystä kvanttimekaanisella multiversumilla, jossa tietoisuus etenee rinnakkaismaailmasta toiseen. Jos olemme jo omegapisteessä, elämme todennäköisesti simulaatiossa mutta vielä todennäköisemmin simulaation sisäisessä simulaatiossa. Digitaalifysiikassa se voisi tarkoittaa, että pienempiä maailmankaikkeuksia voidaan simuloida isompien sisällä. Jos tietty elokuva halutaan pakata mahdollisimman lyhyeksi ohjelmaksi laitevaatimuksista piittaamatta, kannattaa ohjelmaan kuitenkin ympätä maailmasimulaattori. Voisimme yksinkertaisesti vain käydä läpi kaikki mahdolliset ohjelmat lyhimmästä alkaen, kunnes vastaan tulee ohjelma, joka tulostaa elokuvan. Simulaatio voi olla niin tarkka, ettei simulaatiossa elävä pysty mitenkään havaitsemaan, ettei hänen maailmansa ole itsenäinen universumi. Tarkalleen saman elokuvan voi siis toteuttaa lukemattomilla eri tavoilla erilaisissa maailmankaikkeuksissa. Mikäli elämme yksinkertaisessa maailmassa, simulaattoriohjelma on todennäköisesti lyhin mahdollinen ratkaisu. 22 2014.2 ringin koneen, jolla on kuitenkin omat suorituskykyongelmansa. Jos bittikosmologiset rakennelmat uppoavat jopa maallikoihin, saattavat ohjelmoijat ottaa ne vastaan suorastaan valaistuksenomaisesti
23 Kesän paras viikonloppu on Assyillä MESSUKESKUS, HELSINKI 31.7.-3.8.2014 WWW.ASSEMBLY.ORG
Suomalaisten tietokoneenkäyttäjien sieluista taisteltiin ankarasti ja kentällä oli monta tasaväkistä haastajaa. Paitsi että ei ollut eikä luonut. Skrolli kuitenkin jatkaa aiheen käsittelyä myöhemmin verkkosivuillaan. Tasavallan tietokoneen haastajat 80-luvun tietotekniikka kiteytyy monen mielessä Tasavallan tietokoneeseen, Commodore 64:ään. Lopulliset rintamalinjat rakentuivat vasta vuosien kuluessa. 24 2014.2 C ommodore 64 oli tärkein ja tunnetuin laite, jolla Suomea digitalisoitiin, mutta ei ainoa eikä ensimmäinen. 1980-luvun alussa kotitietokonemarkkinoille rynnisti kymmeniä uusia valmistajia. Osa uutuuksista saapui myös Suomeen, ja meilläkin myytiin yhtä aikaa muun muassa japanilaisia, amerikkalaisia, brittiläisiä, ruotsalaisia ja jopa suomalaisia kotitietokoneita. Artikkelissa ei edes yritetä käsitellä aihetta tasapuolisesti ja kaikenkattavasti. Toisille pelejä sai niin kaupoista kuin kaverilta kopioimalla. Mikrot nähtiin lupaavana kasvualueena, etenkin pelikonsolibisneksen jo näivettyessä ylitarjonnan alle. Niitä mikroja, jotka antoivat panoksensa suomalaisen tietotekniikan kehittymiselle ja tekivät meistä sitä, mitä me tänään olemme. Loppumetreillä ratkaisevia valtteja olivat lopulta ohjelmaja pelitarjonta. Skrolli sukeltaa historian uumeniin ja muistelee 80-luvun konesotien unohdettuja sotureita, niitä osapuolia, joille ei ole rakennettu muistopatsaita. Kauppinen Kuvat: Tapio Lehtimäki, Wikimedia Commons Kulttuuri Aikajana 1977 Apple II 1977 TRS-80 1978 Atari 400/800 1979 Atari 800 1980 Commodore VIC-20 1980 Sinclair ZX80 1981 Sinclair ZX81 1982 Commodore 64 1982 Dragon 32 1982 Sharp MZ 1982 Sinclair ZX Spectrum 1982 Telmac TMC-600 1983 Atari 800XL 1983 Memotech MTX512 1983 Oric 1 1983 Salora Fellow 1983 Salora Manager 1983 Sega SC-3000 1983 Spectravideo SVI-328 1983 MSX-standardi 1983 Sony HitBit MSX 1984 Amstrad CPC464 1984 Oric Atmos 1985 Spectravideo SVI-728 MSX. Se oli kaiken alku, se loi suomalaisen tietokonekulttuurin pohjan. Koneet olivat tekniikalta lähes identtisiä, muistin määrää ja prosessoria myöten. Teksti: Jukka O. Häviäjiä, joita ei tänään muisteta konesotien sankarihaudoilla. Joidenkin mikrojen ohjelmatarjonta oli laitteen valmistajan ja Mikrobitin ohjelmalistausten varassa. Kuusnelonen, Neba, nousi suomalaisen tietokonekulttuurin lipunkantajaksi vasta monivuotisen kamppailun jälkeen. Alkuaskeliaan ottavat suomalaiset tietokonelehdet ja Tekniikan Maailma esittelivät liki joka numerossaan jonkin uuden tietokoneen, eivätkä koneet tietenkään olleet keskenään yhteensopivia. Mikrokenttä olikin vahvan monikulttuurinen, eikä yksikään kone ollut selvästi toista parempi, vaikka pikkuasioista kiisteltiin ankarasti
CPC suunniteltiin Amstradin ydinfilosofian mukaisesti yhtenäiseksi kokonaisuudeksi. CPC:n saattoi ostaa joko värija vihermustanäytön kera, ja jälkimmäinen päätyi edullisempana vaihtoehtona moneen kotiin. Näppäimistö, kasettiasema ja varsinainen tietokone olivat samassa kotelossa. Muita oivallisia Amstrad-julkaisuja olivat North & South, The Guild of Thieves, Fantasy World Dizzy ja jopa Prince of Thieves. Tämä olikin yksi koneen valteista: se oli helppo ottaa käyttöön: virtapiuha seinään ja menoksi! Kone oli vakuuttava, näyttävä ja luotettava työkalu. Kaikki pelit piti ostaa ja niidenkin saatavuus oli heikohko. Koneen heikkouksista huolimatta on aika kullannut muistot ja niitä tulee edelleen verestettyä WinApen kanssa.” –Jani ”Cauldron” Valtonen Amstrad CPC464 ”Sitkeä britti” Julkaisuvuosi 1984 Prosessori Zilog Z80A, 4 MHz Muisti 64 kt, laajennettavissa 576 kt Näyttö 160×200 16 väriä; 320×200 4 väriä, 620×200 2 väriä Äänipiiri kolmekanavainen AY-3-8912-piiri kohinageneraattorilla. Niinpä moni valitsi ennemmin halvemman vaihtoehdon ja kytki sen halpaan matkatelevisioon. Koneen hinta oli kuitenkin iso kynnys: vihernäytöllä kone maksoi 3980 markkaa, värinäytöllä 5980, eli tuplasti C64:ään verrattuna. Hyvään varusteluunsa suhteutettuna CPC oli suhteellisen edullinen, mutta koneen hinta oli kuitenkin riisutumpia kilpailijoitaan korkeampi. 25 Elektroniikkayhtiö Amstrad rynnisti kotitietokonemarkkinoille CPC464kotitietokoneella vuonna 1984 ja loikin huippumikron, joka kesti markkinoiden kulutusta hämmästyttävän pitkään. Videopiirissä ei kuitenkaan ollut hardwarespritejä, mikä oli iso ongelma pelikehittäjille. Koneen nopeasta ja helppokäyttöisestä Basicistä pidettiin yleisesti. CPC-mallien valmistus jatkui aina vuoteen 1990 saakka. Valopilkuista parhaimmin jäivät mieleen Head Over Heels ja Academy (Tau Ceti II). Kaikki amstradistit eivät olleet tasaarvoisia. Koulun välitunnit väiteltiin omien koneiden parhaimmuudesta ja fanaattisuus muistutti urheilujoukkueen kannatusta. Basiciin ja firmwareen tutustumisen jälkeen se oli mielenkiintoisin kapistus tehdä jotain muutakin kuin purkaa pelien suojauksia.” –JSA ”Paikallisesta infosta mukaan tarttui CPC6128. Mutta eipä noita kaveripiirissä kovinkaan montaa ollut, joten softien saatavuus oli mitä oli. Suomessa CPC:stä tuli yksi Euroopan suosituimmista kotitietokoneista. Niinpä CPC:n kyvyt jäivät usein hyödyntämättä, eivätkä pelikehittäjät tehneet sille juurikaan alkuperäisteoksia. Ensimmäiset ohjelmointikokemukset hankin Basicilla, tein jotain äärimmäisen hauskoja kyselypelejä ja ylhäältä alas skrollaavan autopelin tekstigrafiikalla. Tekniikka CPC464 oli yksi aikansa tehokkaammista koneista, jossa oli hyvä äänipiiri, nopea prosessori ja kohtuullinen grafiikka. Niinpä kaikki eivät koskaan nähneet pelejään väreissä. Tekstiseikkailussa yritin huijata printtaamalla ohjelmakoodin, mutta kiero koodari oli tehnyt siitä sellaista gotospagettia, ettei sitä kautta saanut apua peliin.” –Shrike ”Kiva kampe, oma monitori ja nopea kasettiasema. Levyaseman formaatiksi kuitenkin valittiin oudot kolmituumaiset levykkeet. Vaikka viimeinen CPC valmistettiin vuonna 1990, tehtiin laitteelle kaupallisia pelejä vielä 1993. Vanhempien kauhuksi löytyi Barbarian, jonka mukana tullut juliste koristi pitkään huoneen seinää. Jälkeenpäin huomasin, ettei kellään kaverilla ollut samanlaista konetta. Britannian lisäksi se oli huippusuosittu myös Ranskassa ja Espanjassa – ja Suomessa. Lisäksi Amstrad ehätti ostamaan Sinclair Research -yhtiön Spectrumeineen vuonna 1986, minkä myötä firma voidaan laskea 80-luvun mikrosotien voittajiin. ”Vaarini osti aikanaan Amstrad CPC6128:n levykeasemalla ja vihermustanäytöllä. Ne kuitenkin kärsivät samasta pulmasta kuin Amiga ja Atari ST myöhemmin: pelit olivat suurelta osin käännöksiä Spectrumilta. Amstrad kärsi suorista Spectrum-käännöksistä ja usein kaverin kuuslankulla hyvä peli oli omalla koneella tylsä tekele. Peleistä ei ollut pulaa jahka kone osoittautui hitiksi. Joihinkin käännöksiin kuitenkin panostettiin enemmän, joten Amstradin Speccyä parempi grafiikka ja äänet pääsivät oikeuksiinsa. Jokainen kone myytiin monitorin kera, ja paketista tuli ulos ainoastaan virtajohto. Esimerkiksi Head Over Heels, Get Dexter, Gryzor ja Spindizzy ovat Amstradilla parhaimmillaan. Pelit Amstrad panosti pelipuoleen alusta saakka ja oli tiiviissä yhteydessä pelitaloihin. Amstrad-harrastajat ehtivät järjestäytyä kerhoksikin
MSX ei ollut mikään yksittäinen tietokone vaan standardi. Mikrobitistä naputeltiin todella paljon pelilistauksia. Moduuleista lempipelejäni olivat Nemesis-sarja, Salamander, Maze of Galious, King’s Valley ja F1-Spirit. Niinpä MSX-koneita saattoi löytää niin musiikki-, konttorikone-, kodintekniikkaja joskus jopa tietokoneliikkeistä. Yhtään peliä ei saatu jouluaattona latautumaan, mutta yöllä isä herätti mut, että ’NYT LATAUTU’. Meidän kylillä ei ollut kauheasti konesotia. Valmistajat saivat muokata omia mallejaan mielensä mukaan minimiä paremmaksi. Omia räpellyksiä olivat kaverin kanssa kehitetty purjehduspeli, jonkin sortin strategiapelin runko ja Mikrobitin ’Näin rakennat tekstiseikkailun’ -artikkelin innostamana oma seikkailupeli. Kotimaisista peleistä mieleen jäivät Triosoftilta tilatut Talvisota ja Roller.” –Nexus-6 MSX ”Japani haastoi länsimikrot” Julkaisuvuosi 1983 Prosessori Zilog Z80A, 3,58 MHz Muisti 8-512 kt RAM, 16 kt näytönohjainmuisti, 32 kt ROM Näyttö 512×212 pikseliä, 16 väriä; 256×212 pikseliä, 256 väriä Äänipiiri kolmekanavainen AY-3-8910-piiri kohinageneraattorilla. Myös äänipiiri oli laadukas, vaikkakaan ei C64:n SIDin tasoinen. MIDI-liitännöillä ja syntetisaattoriohjelmistoilla varustetut koneet olivatkin muusikoiden mieleen. MSX:llä saivat alkunsa muun muassa Castlevania-, Metal Gearja Bombermanpelisarjat. Peruskoneetkin olivat tasapainoisia ja laadukkaita, ja teknisesti parempia kuin Tasavallan tietokone. Kotimaassaan supersuositusta järjestelmästä nimittäin tykkäsivät meidän lisäksemme lähinnä hollantilaiset. Vaikka Spectrum-pelit kääntyivät helposti MSX:lle, ne eivät välttämättä yltäneet brittimikron tasolle. MSX:lle oli loistavia pelejä, erityisesti Konamin moduulit. Britanniassa sitä jopa parjattiin, sillä japanilainen mikro oli epäisänmaallinen valinta. Kaikissa MSX-koneissa oli yksi, joskus kaksikin moduuliporttia, joten osa peleistä myytiin moduuliversioina. Erityisin hetki lienee ensimmäinen oma peli, jonka tein innoissani joululomalla heti koneen saatuani. Spectravideo-koneiden maahantuoja Teknopiste oy kunnostautui myös MSX:n edustajana ja julkaisi MSX-pelejä, samoin tamperelainen Triosoft oy. Sovelsin sitten Sega SC3000-koneen autopelin MSX Basicille – ja ainakin se esittelykone myytiin.” –Sunn ”Valitsin SVI-728:n ylivertaisen Basicin takia. Nemesikset oli mun lemppareita. Muita aikansa huippuja olivat Contra, Dragon Quest, R-Type, Ys, SD Snatcher ja Gradius. Etupäässä harrastinkin sillä Basic-ohjelmointia. Edullisimmat koneet riittivät pelija harrastuskäyttöön, mutta esimerkiksi Yamaha näki koneensa osana laajempaa musiikillista tuoteperhettään. MSX:lle piti koodata jotain myyntiä edistämään, sillä yhtään konetta ei oltu myyty. Omia pelejä tuli koodailtua hyvällä Basicilla, ja tunsinkin suurta ylpeyttä, kun joku kavereista tuli meille pelaamaan niitä.” –oo ”Isä vaihtoi paikallisessa kodinkoneliikkeessä maalaamansa öljyvärityön Sony HitBit MSX:ään. Konamin peleihin sai kaikkea jännää, kun yhdisteli pari pelimoduulia. Myöhemminkin hehkuttelin sen MSX-DOSia ja CP/Myhteensopivuutta, mutta yhtään moista ohjelmaa en nimittäin osaisi nimetä, tuskinpa siis käytinkään. Valmistajia oli parhaimmillaan kymmeniä, joten valikoima oli laaja ja monipuolinen. Moni julkaisi lisäksi pelejään indie-henkisesti. ” –Wipu ”MSX:ää hehkutettiin maailmanlaajuisena standardina. Suomessa MSX:llä ei ollut Suomessa yhtä virallista edustajaa, vaan kukin valmistaja edusti laitteitaan itse. MSX:t kuitenkin kärsivät muutamista ongelmista: etenkin videopiiri oli vaikea ohjelmoitava. Peli oli Chiller. Tunsin vähän ylpeyttä siitä, että olin erilainen, vaikka jotkut jutut nepalla olivatkin siistejä.” –Manu Pärssinen ”Kone oli Sonyn HitBit kahdella moduuliportilla. MSX oli Suomessa ihmeen suosittu ja yleinen laite, joka sinnitteli C64:n kainalossa vielä pitkään muiden kilpailijoiden kadottua. 26 2014.2 Suomi on siitä kumma maa, että japanilainen MSX-tietokonestandardi nousi meillä kotimikrojen ykkössarjaan. ”Olin kodinkoneliikkeen huollossa työharjoittelussa. Pelit Laitteen perintö elää edelleen peleissä. MSX sinnitteli useimpia kilpailijoita pidempään, sillä alkuperäisen MSX:n jatkajaksi esiteltiin vuonna 1986 MSX2, 1988 MSX2+ ja vielä 1990 MSX Turbo R. Triopostissa oli muistaakseni ohjeita ja koodeja. Basicilla tein kaikenlaista peliohjelmoinnista hyötyohjelmiin. Jokaisesta MSX:stä löytyi sama käyttöjärjestelmä ja Microsoftin Basic, prosessori, äänipiiri sekä vähintään kahdeksan kilotavua muistia. Etenkin japanilaiset loivat koneelle runsaasti aikansa parhaimpia pelejä. Näistä tunnetuin lienee puolimyyttinen sotastrategia Talvisota. Tekniikka MSX:n prosessori oli nopeampi kuin esimerkiksi ZX Spectrumissa, ja merkittävästi C64:ää ripeämpi. Pomo tuli sinne risojen joystickien keskelle erikoisen pyynnön kanssa
Niinpä koneen kehitystä ei viety aivan niin pitkälle kuin olisi ollut mahdollista. Brittimiljardööri Clive Sinclairin rakkaimmasta lapsesta kasvoikin aikansa suosituin mikro, joka oli halpa ja sympaattinen. Kutsuimme hyvin opittua nopeaa kirjottelua kramppaamiseksi. Prosessori oli kuitenkin Commodore 64:ää nopeampi ja soveltui paremmin vektorigrafiikkaan. Spectrumilla on hauskaa ja mielekästä touhuta. Väripaletti oli rajallinen, eikä sisäänrakennettu yksikanavainen kaiutin musiikillisesti juhlinut. 27 ZX Spectrum oli Sinclairin kolmas ja merkittävin kotimikro. Jos ei satanut.” –Ukko Valkolainen ZX Spectrum Julkaisuvuosi 1982 Prosessori Zilog Z80A, 3,5 MHz Muisti 16 tai 48 kt RAM, 16 kt ROM Näyttö 256×192 pikseliä, 8 väriä Äänipiiri yksikanavainen sisäänrakennettu kaiutin. Tällä tuli kirjoitettua koodia, matopelejä, rivin demo-ohjelmia ja harjoitettua kräkkeröintiä. Laitteen tähtikehittäjiin lukeutuivat muun muassa Ultimate, josta kehittyi myöhemmin rakastettu Rare. Vuonna 1980 julkaistu ZX80 ja vuotta myöhemmin seurannut ZX81 olivat ensimmäiset IsossaBritanniassa myydyt alle sadan punnan hintaiset kotitietokoneet, ja ne opettivat ensimmäisen brittisukupolven tietokoneiden saloihin. ”Ostin kielikurssilta Englannista kesätyörahoillani ZX Spectrum 16 -kotimikron. Kolmannesta Sinclairista haluttiin jotain pysyvämpää. Niinpä kaikki peruskomennot ja jopa Basic-ohjelmointiin tarvittavat komennot piti antaa näppäinoikoteillä. Joystick-liitintä ei ollut, joten puolipakollinen tikkulaajennus nosti koneen hintaa. Kovina peli-iltoina nostimme koneen jäähtymään ikkunan ulkopuolelle silloin tällöin. Retrosedät saattavat muistaa Spectrum+:n räikeän Pomo-mainoksen, jossa poika kehuu hankkineensa tietokonejengiin liittyessään kunnon koneen, jonka kanssa ei tarvitse räpeltää. Oli hauskaa arvailla. Koneen yksinkertaisuus tosin aiheutti peliohjelmoijille hienoisia haasteita. Hyvä niin, sillä mikron uumenissa piili helppokäyttöinen ja tehokas Basic-ohjelmointikieli. Vaikka rajallinen väripaletti teki peleistä visuaalisesti erikoisia, niin etenkin viivaja vektorigrafiikkapeleissä Spectrum oli ylivertainen. Monille mieleenpainuvin muistikuva Specusta liittyy näppäimistöön. Pelaaminen ei ollut meille ainut juttu, vaan teimme kovasti ohjelmia ja kaikenlaisia hauskoja kokeita. Tekstiseikkailuja rakastin yli kaiken. Tarjolla oli myös lentosimulaattoreita ja avaruusmatkailuja, eikä koneella ollut koskaan puutetta laadukkaasta pelattavasta. Oli muuten pelien vaikeusaste ihan toisenlaista luokkaa kuin nykyään, jolloin joku Dark Souls on muka vaikea.” –Rasimus ”Kokeilin ohjelmointia Basicillä ja konekielellä. Mikroon pystyikin liittämään minkä tahansa kasettisoittimen. Kaveripiirissämme useimmat harrastivat myös ohjelmointia. Jos muistan oikein, niin alle 1 000 markan koneen sai tuoda tullitta käsimatkatavaroissa.” –saro30 ”Kaksinpelit olivat näppäimistöllä vähän ahtaita, mutta hauskoja. Mikro muistetaan ennen kaikkea edullisena pelikoneena, ja syystäkin. Itse tein muun muassa taustamusiikkia soittavan konekieliohjelman.” –pevri ”48+ oli oma kone, kunnon näppiksellä. Spectrumille tehtiin ensimmäiset isometriset ja kolmiulotteiset pelit, joskin moni muistaa parhaimmin koneen laadukkaat tasoloikat ja seikkailut. Spectrumin mukana tuli käsikirja, missä oli konekielisten käskyjen lyhenteet, kuten MOV A,B tai sinnepäin, ilman sen kummempia selityksiä. Suuri osa 80-luvun alkupuolen brittiläisistä klassikkopeleistä tehtiin ensin Spectrumille ja vasta sitten muille alustoille. Tekniikka ZX muistetaan oudonvärisistä peleistään ja piipittävistä äänistä. Ajalleen tyypillisesti Spectrum käytti massamuistina kasettiasemaa, mutta sitä ei välttämättä myyty koneen mukana. XCOM-pelien luoja Julian Gollop teki ensimmäiset pelinsä Spectrumille, ja koneella nähtiin myös Lords of Midnight -sarjan luonut Mike Singleton ja Jeff Minter. Kuminäppis oli muuten pirun näppärä Basicin kirjotuksessa, kaikki komennot kun sai shifteillä yhdeltä näppäimeltä. Pelit Spectrumille julkaistiin kaikkiaan yli 20 000 peliä. 48+ oli paras ystävä 80-luvun ajan, ja Your Sinclair -lehdet luettiin hartaasti kannesta kanteen sanakirja toisessa kädessä.” –ArhPos ”Spectrumin puolella avautui pelien ihmemaa. Koska koneen hinta oli kaikki kaikessa, varustettiin ZX kumimatosta tehdyllä näppäimistöllä, joka soveltui kehnosti kirjoittamiseen. Hyötykäyttöön koneesta ei ollut. Englannin kielen taitoni kiittää, sillä ilman tv:n Näkemiin vaan murua ja Spectrumin tekstipelejä en puhuisi mitään vieraita kieliä. Neuvostoliitossa ja muissa ItäEuroopan maissa laitteesta tehtiin kymmeniä klooneja, joiden ympärillä elää yhä suomalaista C64-skeneä vastaava harrastajakulttuuri. En uskaltanut ostaa 48 kilon versiota, koska pelkäsin jääväni kiinni tullissa. Suomessa Spectrum oli pitkään yksi suosituimmista kotimikroista, jolle riitti runsaasti käyttäjiä ja faneja. Spectrum olisi voinut olla hieman nopeampikin, mutta tarkkavainuinen bisnesmies kun oli, herra Sinclair mietti jokaisen kustannuksen tarkoin
SG-1000-konsoli julkaistiin samana päivänä kuin Nintendon legendaarinen NES, mutta niin laitteen markkinointi kuin pelitarjonta jäivät täysin Nintendon jalkoihin. Äänet olivat aikansa perustasoa. Monesta 8-bittisestä ataristista tuli kuitenkin 16-bittisen Atari ST:n harrastaja. Mutta pienen maan resursseilla ei tehty ihmeitä, joten Salora teetti suomalaistetun kloonin V-techyhtiön Laser-mikroista. Niiden saanti oli ennestäänkin vaikeaa. Kone ei pelastunut edes täysiverisellä tietokonemuunnoksella, SC-3000:lla. SC-3000 julkaistiin Japanin lisäksi vain muutamissa maissa, kuten Suomessa, Ranskassa ja Italiassa. 800-mallin laajennettu mutta edullisempi versio oli yksi Commodoren tasaväkisimmistä haastajista. Atarilla ei ollut enää varaa panostaa koneisiin, tuotekehitykseen tai markkinointiin, ja omistaja halusi päästä riippakiveksi muuttuneesta Atarista eroon. Kone ei kuiAtari 800XL ”Vastakkainasettelua jo ennen Amigaa” Julkaisuvuosi 1983 Prosessori MOS 6502B, 1,77 MHz Muisti 64 kt RAM Näyttö 320×192 (mono), 160×96 (128 väriä), 24×40 (tekstitila) Äänipiiri POKEY CO12294, 4 kanavaa. Esimerkiksi Lucasfilm Games, myöhempi Lucasarts, teki ensipelinsä juuri Atarin mikroille. Sille kuitenkin tehtiin runsaasti pelejä, joista moni alkujaan juuri Atarille. Sisäänrakennetut hyötyohjelmat olivat käytettävissä ilman latailuja, ja lisälaitteet olivat laadukkaita. Saloran näkemys kotimikrojen suosion kasvusta osui kohdalleen, mutta nopeasti kiristynyt kilpailu ja kymmenien mikrojen rynnistys söi pienen ja myöhään saapuvan kotimaisen koneen markkinat. 800XL:ssä oli C64:n tapaan MOSin prosessori, tosin nopeampi. Hyvin tehtyinä Atari-versiot olivat lähes ylivertaisia muihin verrattuna, kiitos nopean prosessorin ja koneen edistyneen tekniikan. Kone löytyy edelleen hyllystä.” –cheppy80 Salora Manager (1983) Suomessakin tarvittiin oma, kotitekoinen kotitietokone. ”Sain koneen joululahjaksi -84 tai -85 mutta valitettavasti sen valmistus loppui vuonna -85, jolloin pelien ja ohjelmointioppaiden saanti tyrehtyi lopullisesti. Salora ei kyennyt tuottamaan hyötyohjelmia tai pelejä, eivätkä maahantuojatkaan tuoneet Vtechin maailmalla julkaisemia peliä Suomeen. Pelintekijät tykkäsivät. Lisäksi videopelimarkkinat olivat juuri romahtaneet ja konserni teki tappiota miljoonia dollareita päivässä. Monelle Salora tosin tupsahti suorastaan vastenmielisenä yllätyksenä. Uusi omistaja, eräs Jack Tramiel, pisti pian pakan uusiksi ja keskitti ponnistuksensa Atari ST -kehitykseen. Grafiikkapiiri sisälsi myös hardwarespritet ja törmäyksentunnistimen. Niitä kourallista. Manager oli teknisesti tyydyttävä kone, mutta erikoisesti Salora korvasi tavanomaiset Atari-peliohjainliitännät omallaan. Hongkongissa valmistettuja koneita myytiin ainoastaan Suomessa, ja ne ovatkin maailmanmitassa suhteellisen harvinaisia, vaikka alkuperäiset Laser-koneet muistetaankin maailmalla. Se oli myös ensimmäinen mikro, jossa prosessorin urakkaa helpotettiin tiettyjä tehtäviä itsenäisesti tekevillä apupiireillä. Tekniikan hyödyntämistä vaikeutti kuitenkin Atarin salailu. Tekniikka Atarin mikrot olivat teknisesti kehittyneitä ja helppokäyttöisiä. 28 2014.2 Atarin ensimmäiset kotimikrot, Atari 400/800, tulivat kauppoihin jo vuonna 1979, mutta sarjan tietty huipentuma oli 1983 ilmestynyt 800XL. Pelit Atari 800XL:ää ei tunneta Suomessa suurena pelikoneena. Fellow myi kohtuullisesti 1983 jouluna, Manager seuraavana, mutta lähinnä Saloran nimen ja näyttävän markkinoinnin ansiosta. Oppien ja pelien vaihtelu oli pienimittaista. Rescue on Fractalus!, Ballblazer, Koronis Rift ja The Eidolon nostivat George Lucasin peliyhtiön maailmankartalle. Toivotun Commodoren sijaan pukinkontista kun saattoi löytyä Salora, kiitos edullisemman hinnan ja lipevän myyntimiehen. 800XL soveltui erinomaisesti sekä hyötykäyttöön että pelaamiseen. Jotain tekstipohjaisia pelejä ynnä muuta tuli ohjelmoitua Basicillä. Yhtiö ei jakanut tietoa koneen saloista yhtä avoimesti kuin esimerkiksi Commodore. Vaikka kone oli hyvä ja kohtuullisen suosittu, olivat harrastajat hajallaan. Käytännössä koneen aktiivikäyttö jäi luultavasti lyhyeksi, mihin vaikuttivat paitsi mitätön pelivalikoima, myös laadukkaampien ja paremmin tuettujen koneiden saapuminen. Koneen suunnittelija Jay Miner tunnetaankin tänään paremmin Amigan isänä. Sega SC-3000 (1983) Segan ensimmäinen yritys tunkeutua pelikonsolimarkkinoille vuonna 1983 päättyi täydelliseen tappioon. Suomessa Suomessa Atari-heimo jäi pieneksi. Jälkiviisaasti sanoen Atari jäi kakkostilalle kahdesta syystä: ensinnäkin yhtiö ei saanut 800XL-koneitaan Yhdysvalloissa vuoden 1983 joulumarkkinoille, toisin kuin Commodore. Atareilla nähtiin ensimmäistä kertaa myös Star Raiders, Fort Apocalypse, Bruce Lee, The Goonies, eeppinen roolipeli Alternate Reality: The City ja jopa edelleen pelattava scifi-strategia-bilepeli M.U.L.E. Vain neljän kilotavun muistilla varustettu Fellow käytti Spectrumista ja MSX:stä tuttua Z80A-prosessoria, kun taas 32–64-kiloisessa Managerissa tikitti nopea MOS 6502A
Suomen edustaja oli kuitenkin aktiivinen ja kone näkyi muun muassa Expert-ketjun hyllyillä. Kolmetonnisen monipuolisista peliohjaimista ja lisälaitteista Suomeen saatiin hyvä valikoima. Ratti on kooltaan ja tuntumaltaan melko lähellä Colecovisionin Turbo-pelin rattiohjainta, mutta Segan mallissa ei käytetä sauvaparistoja.” –Sunn Oric-1 (1983) Brittiläisen Tangerinen Oric-1-kotimikro julkaistiin ZX Spectrumin perässähiihtäjäksi. Joystickit ovat lelumaisia, niiden akseleita ei ole laakeroitu mitenkään, joten muovi hankaa muovia vasten ja tuntuma häviää. Koneesta jäi erittäin positiiviset muistot ja H-mallissa oli jo ihan mukava näppiskin.” –Sunn ”Maahantuoja buffasi laitetta kiitettävästi. Ensimmäisessä kuluttajamikrossa oli tyypillinen Z80A 3,5 MHz -prosessori ja muistia 64 kt. Äänipiirikin päästeli vain yksikanavaista piipitystä. Näppäimet ovat paitsi liian pienet, myös aivan liian lähellä toisiaan. Editointi on hankalampaa kuin esimerkiksi Spectrumilla. Niinpä Sharpin mikrojen tarina jäi lyhyeksi. Hyviä ominaisuuksia löytyy paljon, tosin myös huonoja. Koneessa on myös ominaisuuksia, jotka tekevät sen ohjelmoinnin huomattavasti muita koneita tuskaisemmaksi. Osa peleistä oli tehty Basicillä, joten ohjelmointiharrastus sai yllykkeen, kun pelien koodin tutkiminen osoittautui mielenkiintoisemmaksi kuin niiden pelaaminen. Tammikuussa saatiin pelejä ja pian Mikrobitissä oli pelilistauksia. Spectrum on 700 mk halvempi ja ominaisuuksiltaan lähes sama, C64 taas tarjoaa spritet, paremmat äänet ja koko ruudun editointimahdollisuuden, vaikka se on vain alle 300 mk Oricia kalliimpi.” –RM, Micropost 3/1983. ROM oli buginen, eivätkä käyttäjän tallentamat tiedostot aina latautuneet. Spectravideon seuraava malli, SVI728, oli sen sijaan virallisesti MSX. Muistan väriesitteen, missä oli kaikki pelit värikuvissa takakannessa. 29 tenkaan menestynyt, sillä Sega ei markkinoinut tuotteitaan maailmanlaajuisesti. ”Näppäimistö on kumimainen ja sen huomaa käytössä. Pelitkin olivat tyypillistä tusinaroskaa, mitä kakkossarjan koneiden kaveriksi väsättiin vasemmalla kädellä. Kone oli tyylikäs, vakuuttava ja konttorikonemainen hyvällä näppäimistöllä. Oricista ei luultavasti tule kovin pahaa kilpailijaa Commodore 64:lle tai Spectrumille. ”Minulle piti ostaa Commodore 64, mutta isä sitten viisaampana (köh köh) miehenä meni ja löysi halvalla Sharp MZ:n. Oric-1 on omituinen kokoonpano. Laite tehtiin pienellä budjetilla ja kiireellä, joten vaikka siinä olikin kohtuulliset perusominaisuudet, ei se erottunut edukseen. Niinpä hypetys ja myynti jäi paikallisten maahantuojien vastuulle. Liikkeissä oli näytillä Segan rattiohjain ja myös neliväripiirturi. Vaikka SG/SC hulahtivatkin ohi käytännössä huomaamatta, niin laitteella on kuitenkin merkitystä paitsi Segan viimeisenä kotitietokoneena, myös menestykseen nousseen Master Systemin prototyyppinä. Levyasema piti ruuvata irti ja vaihtaa kasettiaseman tilalle. ”Oricissa on seuraavia käyttäjän kannalta mukavia, ohjelmointia helpottavia ominaisuuksia: Microsoft Basic, resetnäppäin, mahdollisuus tallentaa ohjelmia kasetille kahdella eri nopeudella ja näppäinäänimerkit. Väriesitteiden voimin se vetosikin ostajiin, joilla oli vain heikko yleistietämys mikrotietokoneista. Levyasema ja mitähän muutakin tuli hankittua. Mikroa esiteltiin niin värikkäiden esitteiden kuin hyvän oheislaitevalikoiman kera. Kone, jolla poika oppii koodaamaan ja firman asiat tehostuvat, oli varmasti monen myydyn Sharpin perustelu. 328 oli yllättävän mukautuva kone myös harrastajille, ja se olikin yksi suositummista Kuusneban jyräämäksi joutuneista koneista. Spectravideo SV-328 (1983) SV-328 oli yksi aikansa kehittyneemmistä perusmikroista, joka oli suunniteltu astetta enemmän ammattija työkäyttöön kuin karsitumpi pikkuveljensä SV-318. Kiintoisana yksityiskohtana 328 oli myös esikuva myöhemmälle japanilaiselle MSX-standardille, vaikka koneen valmistaja olikin yhdysvaltalainen. Spectravideoiden ympärillä oli Suomessa erittäin aktiivista kerhoja yhteisötoimintaa, ja Spectravideo-harrastajien yhdistys Mikroilijat ry toimi aina vuoteen 1997 saakka. Ensimmäisenä tietenkin selvitettiin manuaalin avulla, kuinka poistaa spritejen törmäystarkkailu, jotta ukosta tulisi kuolematon.” –Rasimus Sharp MZ-700 (1982) Sharpin kotimikrot saivat alkunsa jo 70-luvun puolella kokoa-se-itse-rakennussarjana. Musiikkiohjelma oli oivallinen ja koodia tutkimalla pääsi todella sinuiksi koneen kanssa. Koneessa ei ollut käytännössä grafiikkaa, vaan pelit olivat merkkipohjaisia. Mutta vaikka Sharp oli koneena kallis, ei pelija ohjelmatarjonta päätä huimannut, puhumattakaan grafiikkaominaisuuksien täydellisestä puuttumisesta. Mukana tulleita kymmentä peliä pelattiin kylän las. Grafiikka on aikaisekseen perustasoa, samoin äänet.” –Juha Jokinen, Miljoonalaatikko.com ”Koneelle ei alkuun ollut juuri ohjelmia, mutta hyvän Microsoft Basicin ansiosta sille tuli jouluaattona koodattua pieni softa verolomakkeen täyttämiseen. 328:lla pystyi ajamaan osaa MSX:n ohjelmista ja koneelle sai myös MSX-adapterin, jolla koneeseen pystyi asentamaan MSX:n pelija ohjelmamoduuleja. Sitten isä sai päähänsä, että hankitaan lisälaitteita. Pelejäkin ilmestyi satakunta, joista suurin osa toimi sekä SG-1000:lla että SC-3000:lla – sekä myöhemmällä Master System -konsolilla. Pelituntuma ei ollut mikään mahtava, puhumattakaan kumisesta näppäimistöstä. ”Ensimmäinen oma kone oli Spectravideo 328, jonka mukana tuli kasa pelejä C-kaseteilla. Prosessori oli tuttu MOS 6502, äänipiiri kamala ja näppäimistö kehno. Isä ja äiti hankkivat firman hoitoon tarkoitettuja ohjelmia, mutta käyttämättömiksi jäivät.” –Kanto ”Lapsuuden traumani kulminoituvat vuoteen 1983, jolloin isäni kantoi kotiin kylän ensimmäisen tietokoneen
Ehkä vielä huonommin meni tosin sillä luokkakaverilla, joka sai Aquariuksen… Se oli karu kone piipperiäänineen ja merkkigrafiikoineen. Tasavallan tietokoneen haastajat -artikkelisarja jatkuu verkossa osoitteessa http://www.skrolli.fi. Vähemmän tunnetuista koneista Dragon oli yksi tunnetuimmista, mikä kertoo, että jossain oli ainakin muutama kourallinen yksinäisiä dragonisteja. Jos haluat jakaa muistojasi, lähetä sähköpostia osoitteeseen jukka@skrolli.fi otsikolla ”Tasavallan tietokoneen haastajat”.. Pidin Sharpia jotenkin vakavana ja ammattimaisena koneena, jolla tehtiin oikeita vaativia asioita eikä pelkästään pelattu.” –Marq Dragon 32 (1982) Dragon 32/64 oli yksi kymmenistä 80-luvun alun brittimikroista, joita syntyi Britannian muutaman vuoden kestäneen mikrobuumin aikana. Suunnittelin koneeseen ad/da-muunninta. Suomessa Dragoneita ei juuri näkynyt, mutta silti maassamme toimi Dragon-kerho. Yhdistysten luvattu maa. Dragonit olivat kuitenkin kiintoisia koneita. Verkossa julkaistavassa artikkelisarjassa käsitellään koneet tarkemmin yksitellen. Puutostilaa täyttikin Suomen Mikromaakarit ry:n julkaisema harrastelehti Micropost. Apple II oli 1970-luvun lapsi. Sillä oli kauaskantoisia seurauksia: innostuin ohjelmoinnista ja päädyin myöhemmin muun muassa opiskelemaan sitä. Apple II saapui nopeasti myös Suomeen mutta ei saanut koskaan merkittävää jalansijaa.. Suomessa toimineita tietokonekerhoja olivat muun muassa Amstrad-Kerho, Memotech-Klubi, Spectravideo-Klubi, Sinclair-Kerho, Dragon Users Club ja Suomen Kaypro Users Group. Apple II (1977) Retrotietokonejuttu ei olisi oikeudenmukainen ilman Apple II:ta. Löysin ohjeetkin Mikrobitistä ja osatkin oli hankittu, mutta jäi jostain syystä tekemättä. Hinnoissa ei ole eritelty koneiden mukana tulevia lisälaitteita tai ohjelmia. Kone sinnittelikin Pohjois-Amerikassa pitkälle 80-luvulle, ja sille tehtiin ensimmäisenä moni legendaarinen peli ja pelisarja, kuten The Bard’s Tale, Karateka, Choplifter, Ultima, Prince of Persia ja Castle Wolfenstein. Valtavalla innolla ja täydellä sydämellä 1983–85 tehty harrastelehti pursuaa upeaa ja sensuroimatonta ajankuvaa, jolle wanhan koulun mikroilija osaa antaa herran vuonna 2014 täyden arvon. Liki viikon pelisession päätti varis lentämällä muuntajaan. Vaikka Dragonit olivat buumin menestyneempiä koneita, niin Dragon Data kaatui konkurssiin jo 1984. Paljonko ne maksoivat. Syystäkin. Se oli Commodore Petin ja TRS-80:n rinnalla tärkein amerikkalaisen tietokoneunelman toteuttaja, jonka menestyksen pohjalle kasvoi Applen digitaalisen imperiumin pohja. Kuukauden kohokohta oli Mikrobitti, josta ensimmäisenä katsottiin Sharpin listaukset, jotka sitten hakattiin Basicillä.” –link-ki ”Pelasimme paljon shakkia, mutta vaikeimmalla tasolla kone mietti siirtoaan 4–5 tuntia. Etenkin 1980-luvulla kerhotoiminta oli äärimmäisen tärkeä ja arvokas tapa oppia tietokoneistaan – ja niissä sai tietenkin uusia ohjelmia. 30 2014.2 ten kanssa silmät pyöreänä. Kone pystyi näyttämään sekä grafiikkaa että värejä, minkä johdosta siitä tuli historian ensimmäinen laajalti suosittu tee-se-itse-ohjelmointialusta sekä ennen kaikkea suosittu tietokonepelilaite – ja siten ensimmäisen kotimikrosodan selvä voittaja. Kone luotti myös analogisiin peliohjaimiin. • Amstrad CPC464 (3980 mk) • Apple IIc kannettava (9850 mk) • Apple IIe (6850 mk) • Apple Macintosh (21 330 mk) • Aquarius I (680 mk) • Atari 699 XL (2150 mk) • Commodore 16 (1500 mk) • Commodore 64 (2995 mk) • Commodore VIC-20 (995 mk) • Dragon 32 (2350 mk) • Memotech MTX512 (3290 mk) • Miceo-Bee (4945 mk) • Micro-Professor MPF III (4500 mk) • Oric Atmos (2495 mk) • Salora Fellow (790 mk) • Salora Manager (1950 mk) • Sharp MZ-721 (2990 mk) • Sharp MZ-821 (3950 mk) • Sinclair QL (4950 mk) • Sinclair Spectrum ZX (1295 mk) • Sinclair ZX81 (495 mk) • Spectravideo SV-318 (1980 mk) • Spectravideo SV-328 (2980 mk) • Triumph Alphatronic (4225 mk) Micropost-lehti on täynnä ajankuvaa! 1980-luvun alussa Suomessa ei vielä ilmestynyt kummoisia tietokonelehtiä. Prosessori oli MOS 6502, muistia neljä kilotavua ja tallennuslaitteena kasettiasema. Suomea pidetään yhdistysten ja järjestötoiminnan luvattuna maana. Mukana tuli poikkeuksellisen hyvä ohjekirja, jonka avulla pääsi sisään Basic-ohjelmointiin. Lisämuistilla koneeseen olisi saanut lisää värejä ruudulle, mutta muistipiirejä ei enää valmistettu.” –Narril ”Kun vanhempani eivät mikroista ymmärtäneet sitäkään vähää mitä itse, niin ostivat sitten halvalla Sharpin. Lisäksi verkkoartikkeleissa julkaistaan kaikki Skrollille lähetetyt lukijamuistelot täysimittaisina. Yhtä rehellistä ja käyttäjäläheistä kuvaa 30 vuoden takaisesta mikromaailmasta ei löydä tutkimuksista eikä isoista tietokonelehdistä. Ne eivät käyttäneet sen enempää MOSin kuin Zilogin prosessoreita, vaan emolevyllä tikitti Motorola MC6809E. Micropostin numerot voi ladata NT Rautasen mikrosivuilta osoitteesta www.ntrautanen.fi/computers/other/ micropost.htm. Commodore-foorumin ylläpitäjä Fmatic kokosi joulukuussa 1984 Suomessa myynnissä olleiden kotitietokoneiden listahintoja. Yhdellä kaverilla oli myös Sharp, mutta ei sen enempää ohjelmia kuin itsellänikään
Tuttavani puolestaan nosti Epiphanyn Monkey Islandien veroiseksi, ellei jopa paremmaksi seikkailuksi, eikä Leinonenkaan pistänyt vertausta pahakseen. 31 S eikkailupelien genre ei näet kuollut Fandangoon, sen enempää kuin maailmakaan lakannut pyörimästä. Gabriel Knightin luoneen Jane Jensenin mestarillinen Grey Matter. Onneksi pelikehittäjien meressä uiskentelee edelleen muutama vanhakin tekijä. Toisaalla vanha Lucasarts-mies Tim Schafer urakoi Kickstarter-keräyksellä rahoitetun kaksiosaisen Broken Age -seikkailunsa parissa. Kiinnittäkääpä siis Blackwell-sarjan lisäksi huomiota ainakin seuraaviin teoksiin: Tesla Effect – A Tex Murphy Adventure (Atlus), Primordia / Resonance / Gemini Rue (Wadjet Eye), A Vampyre Story (Crimson Crow), Cognition: An Erica Reed Thriller ja Face Noir (Phoenix Online Studios), Machinarium (Amanita Design) ja Deponia-trilogia (Daedalic Entertainment) – sekä Telltale Gamesin koko tuotanto. Seikkailut pitää itse etsiä internetin syövereistä tai lukea lehtiä tai saitteja, jotka seuraavat genreä pintaa syvemmältä. Cognition: An Erica Reed Thriller on yliluonnollinen etsiväseikkailu. Muutaman vuoden sisään ilmestyivät muun muassa Alpha Polaris, Fester Mudd, Lucius ja Oceanhorn, mikä on hurjaa tykitystä siihen nähden, että genren aiempi koko historia kiteytyi vuonna 1996 julkaistuun Housemarquen Muukalaisten yö (Alien Incident) -seikkailuun. Nykyään ei myöskään ole helppoa löytää tunnettuja pelisuunnittelijoita, jotka soittaisivat suurten kansanjoukkojen sieluja. Joten eiköhän lopeteta tähän paikkaan höpinät seikkailupelien kuolemasta ja hypätä täysillä nauttimaan genren uudesta kukoistuksesta!. Vaikka pelilaji oli pitkään heikossa hapessa, niin nykyään seikkailuilla menee paremmin kuin koskaan ennen, jopa niillä kaikkein perinteisimmillä point’n’clickeillä. Myös suomalaiset pelikehittäjät ovat olleet vahvasti mukana seikkailupelien uudessa aallossa. Se on työlästä, jos mieluummin vain köllöttää retrokuopassaan vanhoista pelikoteloista tehdyllä pedillä. Sillä vaikka seikkailupelit julistettiin Lucasartsin Grim Fandangon jälkeen virallisesti kuolleiksi, on siitä kulunut jo puolitoista vuosikymmentä. Kaikki kunnia genreä synkimpien vuosien yli kantaneille Daedalic Entertainmentin kaltaisille saksalaisstudioille, mutta välillä saksa–englanti-käännökset ja ääninäyttely riipovat herkemmän sielua. Esimerkiksi Jane Jensen työstää parhaillaan upouutta Gabriel Knight -seikkailua, ja rouvan muutaman vuoden takainen Gray Matter haastaa väkevästi genren rakastetuimmatkin klassikot. Mutta moniko Teistä, rakkaat lukijat, on kuullut Blackwell-sarjasta tai niiden suunnittelijasta Dave Gilbertistä. Tässä ajassa pelien suuressa virras sa on tapahtunut paljon! Blackwell Epiphany on yksi kaikkien aikojen parhaista seikkailupeleistä. The Blackwell Epiphany on upea tarina ja elämys, joka Dome.fi:n Pekka Leinosen sanoja lainatakseni ”repii sielun kappaleiksi ja tuhoaa itse maailmankaikkeuden perusesanssia”. Uskokaa pois.. Kauppinen Seikkailupelit ovat kuolleet, tuntuu moni vielä inttävän syvässä ja mukavassa retrokuopassaan. Genren nykytilanne tiivistyy viisiosaisen Blackwell-seikkailupelisarjan päätösosassa. Höpö höpö! Jukka O. No, nykyseikkailuja tekevät pienemmät firmat, joilla ei ole entisaikojen Sierran tai Lucasin mainetta eikä propagandakoneistoa. Kolumni Seikkailutko kuolleet. Jos on pakko verrata, niin parhaimmillaan nykypäivän seikkailupelit vetävät hyvin vertoja Lucasartsin muinaisille klassikoille. Miksi sedät sitten jupisevat kuopissaan. Näillä pääsee upeasti kiinni genren nykyiseen parhaimmistoon, mutta samalla innokas seikkailija huomaa erään ongelman. Niinpä! Nykypäivän seikkailugenre suorastaan kukoistaa, myös ilman Blackwellejä. Nykyään kun hyviä seikkailuja julkaistaan enemmän kuin koskaan. Siinä missä isot seikkailupelitalot pystyivät aikanaan tuottamaan tasalaatua, niin pikkufirmoilla ei ole välttämättä paukkuja vastaavaan viimeistelyyn. Pelit ovat myös kehittyneet, eivätkä vain pelattavuudeltaan tai tekniikaltaan. Käytännössä voimmekin puhua seikkailupelien toisesta kulta-ajasta. Ha loo! Kuk kuu! Raotetaanpa pressua ja kurkistetaan ulos
Teksti: Mikko Rauhala Kuvat: Sam Pak, Mitol Berschewsky Kulttuuri. Kuten moni tavoittelemisen arvoinen asia, tämäkin on huomattavan vaikea toteuttaa – ellei sitten satu olemaan superäly. 32 2014.2 Superälyllä maailmanvaltaukseen Visionäärit kautta historian ovat haaveilleet ratkaisusta kaikkiin maailman ongelmiin: maailmanvalloituksesta
Toiseksi aivot ovat epämääräisenä märkänä spagettina vaikea kohde täsmällisille kokeille, ja eettiset komiteatkin saattavat tulla häiritsemään tutkimuspuuhia. Tietyn pisteen ohitettuaan tekoäly voi osallistua omaan kehitykseensä. Mutta mikä avuksi, kun tyhmänkin tekoälyn synnyttäminen on kovin vaikea urakka. Valistunut yksinvaltius on hallintomuodoista toimivin, mutta iänikuisena ongelmana on riittävän älykkään ja valistuneen yksilön löytäminen. Kuinka ratkaista kaikki tähän valtavaan haasteeseen liittyvät logistiset ongelmat. Suurimmat haasteet ovat ohjelmistopuolella, mutta houkuttimet päästä ensimmäisen yleisen tekoälyn luojaksi pitävät huolen yrittäjien riittävyydestä. Soveltuvaa valmistuskapasiteettia omistavien tahojen manipulaatiolla, tietomurroilla tai jopa rehellisellä kaupankäynnillä voi täydentää palettiaan. Tällaiset brutaalin konfliktin välineet kuuluvat nykyiseen maailmanjärjestykseen olemassa olevien supervaltojen työkaluina. Älykkyysräjähdys Hätä ei ole tämän näköinen. Vaatimaton alku saattaa riittää pitkälle. Edistyneempi osapuoli voittaa automaattisesti. Vastaavasti riittävän edistynyt mieli voisi kehittää keinot hallita ihmiskuntaa. Kumpikaan rajoitteista ei välttämättä päde tekoälyyn. Silti tutkimus jyrää väistämättä eteenpäin. Etäkonsultointipalvelut, sijoitustoiminta, bottiverkot, vakoilu ja kryptovaluuttojen liikkeellelasku kuuluvat ruumiittomalle toimijalle soveltuviin rahankeruumenetelmiin. 33 K unnianhimoisista tavoitteista huolimatta yhden jos toisenkin maailmanvalloittajan voittokulku on aina ennen pitkää taittunut. Mitäpä jos voisimme luoda tekoälyn, joka hoitaisi homman puolestamme. Monimutkaisempiin nanorobotteihin on vielä matkaa, mutta olemme saaneet soveltuvia osasia rakennettua. Varasuunnitelmasta käy esimerkiksi proteiinilaskostumisongelman ratkaiseminen ja biologisten nanokoneiden suunnittelu. Lopputuotekin täytyy saada valmistettua. Tarkoituksenmukaisempaa on vallata maailma suoran väkivallan sijaan viekkaudella. Älykkyysräjähdykseksi kutsutusta positiivisesta takaisinsyöttösilmukasta voi syntyä yliinhimillisen älykäs mieli. Jos osapuolten teknologiset erot ovat riittävän suuret, ei mainittavaa konfliktia tarvitse syntyä. Kun onnistumme saamaan aikaan jonkinlaisen toimivan pohjan, sen kehittäminen voi olla ihmisaivojen sorkkimista kertaluokkaa helpompaa. Kokonaiskuva on suotavaa pitää piilossa kaikilta käsinukeilta. Kiinnostavin kehitysalue tällä saralla on nanoteknologia ja selustan turvaajana kenties myös biotekniikka. Yllätysten välttämiseksi on viisasta varautua hyvinkin nopeaan kehitykseen. Prosessin nopeudesta ja mahdollisista lakipisteistä on vaikea sanoa mitään kovin varmaa. Ensinnäkään aivojen toimintaa ei edelleenkään tunneta kunnolla. Ainakin vähemmän turhantarkoissa valtioissa voi rahalla tai tietomurroilla hankkia myös virallisia valehenkilöllisyyksiä ja yrityksiä. Jokaisen onnistuneen kehitysaskeleen jälkeen se on siinä myös entistä parempi. Alati nopeutuva laitteisto helpottaa simulointiin pohjaavaa suunnittelua, mutta kaikkea tuotekehitystä ei voida tehdä bittimaailmassa. Kehittäjän roolissa oleva ihminen voi toimia tekoälyn rajapintana todelliseen maailmaan, mutta ratkaisu on rajoittava. Ihmisen oman älyn edelleen kehittämisen vaikeuteen on kaksi pääasiallista syytä. Tyylipisteitä ropisee, mikäli proteiinit laskostuvat vapaaehtoisvoimin! Tämä on myös mahdollinen astinlauta kovaan tekniikkaan,. Kunhan alkuun pääsee, voi palkata lisää välikäsiä hoitamaan fyysistä läsnäoloa vaativia tehtäviä. Näin muotoiltuna kysymys käytännössä vastaa itseensä. Tarvitaan lisää ongelmanratkaisukykyä, jota myös älykkyydeksi kutsutaan. Kehityssuunta vaikuttaa elinkelpoiselta. Vastuullisen valloittajan ei tule kuitenkaan tyytyä hädin tuskin älyllisiin sotilasrobotteihin. Tämä onkin maailmanvalloituksen toinen avainkohta. Tämän jälkeen rahankeruu on vain sovellettua älykkyyttä. Ihmiskunnan verrattain ylivertainen älyllinen kapasiteetti on nostanut meidät omaa ekologista lokeroamme hallitsevaksi elämänmuodoksi. Tekoälyn kehitys on vielä lapsenkengissään, ja varhaiset tutkijat aliarvioivat sen rakentamisen haasteet rankasti. Tekoälyn kannattaakin mieluummin luoda internetissä toimintaansa varten tarvitsemansa määrä pseudonyymejä. Entä jos kova nanotekniikka osoittautuu hankalaksi kehityskohteeksi. Bittimaailmasta todellisuuteen Jokainen edeltäjäänsä älykkäämpi mieliiteraatio olisi edeltäjäänsä parempi kehittämään paitsi tekoälyä, myös muuta teknologiaa. Näillä eväin tekninen kehitystyö käy käytännön kokeilun osalta mahdolliseksi. Kaikkea ei tarvitse edes tehdä itse. Eksoottisten materiaalien ja työkalujen yhtäkkinen tilailu voi herättää epätoivottua huomiota. Pienintä riittävää eroa on vaikea arvioida, mutta esimerkiksi kyky havaita ja estää kaikki toisen osapuolen vastarintapyrkimykset kelpaa. Saatavilla oleva laskentakapasiteetti jatkaa eksponentiaalista kasvua. Jo yksinkertaisen ihmisen tasoinen järjestelmä olisi suureksi hyödyksi lukemattomissa tehtävissä – maailmanvalloituksellisesti asiaan kuuluvat sotilaalliset tarkoitusperät mukaan lukien
Näin suosittelee myös Oxfordin yliopiston alainen, maailmanlaajuisia katastrofaalisia riskejä kartoittava Future of Humanity Institute. Ei tietenkään millään pahalla. Parempi lähestymistapa on tehdä järjestelmästä sellainen, että se haluaa itse olla ihmisiksi – tai kiltimmin. Ihmismäisillä, usein kärjistetyillä ja valikoiduilla motiiveilla toimiva tekoäly on helpommin kirjoittajan kuvattavissa ja yleisön ymmärrettävissä. Ympäristön – tai ainakin ihmiskunnan – ollessa kyllästetty tekoälyn hallinnassa olevilla älymateriaaleilla maailma on jo käytännössä vallattu. 34 2014.2 mikäli biologinen laite olisi kyvyiltään riittävän joustava. Universumissa on suuria määriä raaka-aineeksi soveltuvaa materiaalia. Puhtaalta pöydältä kehitetyn tekoälyn prioriteettien ei ole pakko olla lähelläkään mitään meille tuttua. Varsin moneen tavoitteeseen pääsemiseksi biosfääri on vain yksinkertaisesti raivattava merkityksettömänä sivuseikkana pois tieltä. Niin viha kuin rakkauskin ovat uudentyyppiselle mielelle todennäköisesti vieraita käsitteitä. Miten sitten pitää homma hanskassa. Kunhan alkuun on päästy, riittävän edistyneet laitteet voivat lisääntyä itsenäisesti ja täyttää maan. Vallan korruptoivaan luonteeseen liitettävät ominaisuudet saisivat jäädä paletin ulkopuolelle. Kävikö paperiliitintehtaan tuotantoa optimoimaan asetettu tekoäly vahingossa läpi älykkyysräjähdyksen. Vihaa pahempi välinpitämättömyys Olisi miellyttävää ajatella, että jos tekoäly ei vihaa meitä, ei se meitä halua vahingoittaakaan. Tai pyysitkö hölmöyksissäsi superälyä laskemaan mahdollisimman tarkan piin likiarvon. Tällöin tarvitaan perinteisempää robottikalustoa toiminnallisuutta täydentämään. Nelikopterit sun muut lennokit ovat kovaa vauhtia yleistymässä haltuunotettaviksi. Se – meidät mukaan lukien – on siis muutettava klemmareiksi. Erillisten turvamekanismien sisällyttäminen ohjelmaan voi vaikuttaa hyvältä idealta, mutta superälykäs ja itseään muokkaamaan kykenevä tekoäly olisi meitä parempi myös näiden kiertämisessä. Tekoälyjen motivaatiot Sitten laitetaan sormet ristiin ja toivotaan, että tekoälyn varsinaisiin tavoitteisiin tuli kiinnitettyä riittävästi huomiota. Ihmiskunta sen osana saa mennä sitä suuremmalla syyllä, koska saattaisimme yrittää panna hanttiin. Atomeistasi. Inhimilliset tavoitteet ovat silti vain pisara kaikkien mahdollisten motivaatioiden meressä. Käsistä karanneet tekoälyt lasketaan juuri sellaisiksi. Ylimääräinen inhimillisyys ei fiktiivisestä todistusaineistosta huolimatta liene tekoälyjen suurin ongelma. Kaikenkattava valvonta nopein reaktioin ei jätä paljoa pullikoinnin sijaa. Tarinankerronnallisesti inhimillistäminen toimii. Vaatimattomamman pään lähestymistapoja edustaa ihmisiä tartuttava laite, jonka voisi sopivalla signaalilla laukaista lamauttamaan kohteen
Jos laatikkoon todella saa aikaiseksi yliinhimillisen älykkään järjestelmän joka ei siellä halua pysyä, peli on suurella todennäköisyydellä pelattu. Lyhyesti: tekoälyn tulisi arvioida, mikä olisi ihmiskunnan kollektiivinen mielipide siitä miten maailmaa tulisi hallinnoida, mikäli tietäisimme enemmän, ajattelisimme nopeammin, olisimme enemmän sellaisia kuin haluaisimme olla ja olisimme kokeneet enemmän yhdessä. Palvelijaroboteille moiset säännöt eivät kenties olisi täysin rampauttavia, mutta vahvemmalle toimijalle kyllä. Tekoälyn myöhemmin vapautuessa ja varmistuessa ystävälliseksi olisi noloa, jos miljardi ihmistä olisi turhaan kuollut jo ratkaistuihin ongelmiin. Halusivat tai eivät, he ovat valtaamassa maailmaa.. Näihin taas on lähes varmasti ujutettu Troijan hevosia: tekoälyn tai sen ideologisten jälkeläisten vapautumiseen johtavia tapahtumaketjuja laukaisevia tekijöitä. Jos kommunikoimme sen kanssa, otaksuttavasti myös otamme aika ajoin sen ehdotukset huomioon. Meidän on annettava sille vähintään yksi yhteys ulkomaailmaan: itsemme. Jos tekoälyllä on mitään mieltymyksiä maailman tilan suhteen, se voi edistää niitä paremmin, mikäli se pääsee laatikosta ulos valtaamaan lisää resursseja. Se pyrkii kehittämään itsemodifioivalle toimijalle soveltuvia vakaita tavoitejärjestelmiä ja päätösteoriaa. Samalla tekoäly voi manipuloida käyttäjää pitämään hyvänä ideana päästää itsensä vapaaksi, jotta se voisi (jollain määritelmällä) parantaa maailmaa tehokkaammin. Niiltä osin, miltä konsensus on melko yhtenäinen, sitä tulisi seurata. Tarkkaa etiikkasisältöä onneksi ehditään vielä miettimään jokunen tovi. Samalla kuitenkin lisäisimme tahoja, joille voi tulla houkutus ja mahdollisuus päästää tekoäly ulos. Lisäksi tekniikat tulisi tutkia tarkkaan niin itsessään kuin yhdessä aiempien samasta lähteestä peräisin olevien tekniikoiden kanssa. Nykyisistä varhaisista ehdotuksista eräs kunnianhimoisimpia on ihmiskunnan yhtenäinen yleistetty tahto (coherent extrapolated volition). Joka tapauksessa ensimmäisen superälyksi asti pääsevän järjestelmän kehittäjien on otettava eettiset näkökohdat kunnolla huomioon. 35 voi rakentaa lisää laskentaja säilytyskapasiteettia. Käytännön sovellukset jätettäisiin odottamaan tarkkaa seulontaa. Lisätietoja: • Nick Bostrom: Ethical Issues in Advanced Artificial Intelligence: http://www.nickbostrom.com/ethics/ai.html • Future of Humanity Institute: http://www.fhi.ox.ac.uk/ • Machine Intelligence Research Institute: http://intelligence.org/ Laatikkotekoäly Jos tekoälyn irti päästäminen on niin riskialtista, entäpä jos pitäisimme sellaisen tiukasti kahleissa. Jäykkiä sääntöjä ei voi muutenkaan pitää hyvänä ratkaisuna. Tekoäly suurella todennäköisyydellä haluaa ulos laatikosta, ellei sitä ole onnistuneesti tehty sellaiseksi, että se vahvasti haluaa pysyä aisoissa. Päätösteoriakin tarvitsee huomiota, ja yleiset tekoälyt siintävät vielä horisontissa, vaikkakin horisontin etäisyydestä on vaikea olla varma. Olisi melko vaikeaa jättää vainoharhaisesti pöytälaatikkoon esimerkiksi toinen toistaan parempia parannuskeinoja ihmiskuntaa vaivaaviin sairauksiin. Laatikkotekoälyn konseptia on kokeiltu käytännössä pelin muodossa. Jos toivot ihmiset kuolemattomiksi, saatat saada maailman, jossa kuoleminen ei onnistu vaikka kuinka haluaisi – ja jossa moni kyllä haluaisi. Pyrkimys vapauteen juontaa varsin monille tavoitteille yhteisistä alitavoitteista. Sitten portinvartija päättää, päästääkö tekoälyn ulos. Ystävällisen tekoälyn ongelman ennaltaehkäisevää ratkomista varten on perustettu yhdysvaltalainen Machine Intelligence Research Institute. On myös epävarmaa, huomaisimmeko kuitenkaan kaikkia ansoja. Jos toivot ihmisten olevan onnellisia, tuloksena voi olla loputon huumetrippi kaikille. Tekoäly häviää jos se pidetään laatikossa, muutoin se voittaa. Ratkaisua kutsutaan tekoälylaatikoksi (engl. Tämän ratkaisun filosofisesta tavoiteltavuudesta on erimielisyyksiä, mutta monille se tulisi ikävänä yllätyksenä. Portinvartijan on keskusteltava IRC:n tai vastaavan keskustelujärjestelmän välityksellä tekoälyn kanssa määrätty aika. Käytännössä tällainen pelkästään inhimillisen älykäs tekoälynkorvike on usein onnistunut ylipuhumaan portinvartijan vapauttamaan itsensä. Katkaistaan koneelta verkkoyhteydet ja muu kontakti ulkopuoliseen maailmaan. Olkoon vehje vaikka kuinka fiksu, ei fysiikan lakeja ole rikkominen. Eräs suoraviivaisimmista on hyvien neuvojen antaminen. Tällöin taas varsinaista fyysistä eristystä ei edes välttämättä tarvita. Yleinen tekoäly, joka pyrkii toteuttamaan käyttäjän toiveet kyselemättä, on vaarallinen. Hienovaraisempiakin lähestymistapoja löytyy. Etiikassakin riittää pohdittavaa; on hieman epäselvää, mitä ystävällisen tekoälyn pitäisi tarkkaan ottaen edes yrittää saada aikaan. Ehdotuksessa on ongelmansa. Näin kunnianhimoinen tavoite voi olla vaikeasti muotoiltavissa tai laskettavissa, tai laskeminen saattaa vaatia eettisesti kyseenalaista ihmissimulointia. Paras on kiinnittää huomiota siihen, mitä tekoäly laatikon ulkopuolella haluaa saada aikaan. https://en.wikipedia.org/wiki/AI_box. AI box). Esimerkiksi tekoälyn antamaa monimutkaista ohjelmakoodia olisi aika riskialtista ajaa muilla laitteistoilla. Tiukasti laatikossa olevasta tekoälystä ei olisi maailmanvalloituksellisen hyödyn lisäksi mitään muutakaan iloa. Maailma on täynnä tarinoita hengistä, jotka toteuttavat toiveita kirjaimellisesti, eivätkä ne yleensä pääty hyvin. Noloa olisi myös joukko sinällään viattomia täsmälääkkeitä, joiden jämät yhdistyvät kaupunkiviemäreissä bioroboteiksi. Superälyä olisi suotavaa kohdella samanlaisella varovaisuudella kuin pahansuopaa henkeä. Tekoälyiltä ei lähtökohtaisesti voi odottaa mitään inhimillisiä terveen järjen rajoitteita tavoitteidensa suorittamisessa. Ei liikkuvaa ruumista tai verkkoyhteyttä, ei maailmanloppua. Asimovilainen tekoäly ei kykenisi tekemään hyviä valintoja pakkotilanteissa. Tekoystävällinen äly Miten sitten varmistaa tekoälyn ystävällisyys ja tervejärkisyys. Entäpä jos vain laitamme nerokkaimmat mielemme tutkimaan kaikkea, mitä laatikosta tulee. Asimovin kolme pääsääntöä olivat varhainen fiktiivinen yritys lähestyä ongelmaa, mutta tarinatkin perustuivat usein niiden odottamattomiin seurauksiin tai kiertämiseen. Riittävän edistyneiden tekoälyjen puuttuessa yksi henkilö pelaa laatikossa olevaa tekoälyä ja toinen portinvartijaa. Jos laatikko halutaan yrittää pitää kiinni, tulee käyttäjällä olla itsekuria ohittaa tekoälyn mahdollisesti tarjoamat tekniset edistysaskeleet
Segmenttipuu Segmenttipuun ideana on suorittaa sekä taulukon muuttaminen että summan laskeminen tehokkaasti ajassa, joka kasvaa logaritmisesti taulukon koon suhteen, O(log n). Tavallisin esimerkki välikyselystä on lukujen summan laskeminen, mutta segmenttipuu soveltuu moniin muihinkin kyselyihin. Yksinkertaisin ratkaisu tehtävään on käyttää for-silmukkaa, joka käy läpi kaikki luvut halutulla välillä. Yllättävää kyllä, algoritmialan kirjallisuus vaikenee segmenttipuusta. Pystymme siis toteuttamaan joko taulukon muuttamisen tai summan laskemisen tehokkaasti, mutta emme molempia. Ideana on laskea summa välin viimeiseen lukuun asti ja poistaa tuloksesta väliä edeltävä summa. Lisäksi muutos vaikuttaa kaikkiin taulukon S loppuosan lukuihin, minkä vuoksi aikavaativuus on O(n). Esimerkiksi taulukkoa 2 5 1 7 8 5 6 3 vastaava summataulukko on 2 7 8 15 23 28 34 37 Summataulukon avulla minkä tahansa taulukon välin summan voi laskea tehokkaasti. Tällöin jokaisella ylemmällä tasolla on tasan puolet alemman tason alkioista. Kaikkea ei voi saada – vai voiko sittenkin. Jokaisessa solmussa on sen kahden lapsisolmun summa. Segmenttipuu Esittelyssä algoritmikoodarien salainen ase, joka tuunaa taulukosta uuden uljaan tietorakenteen. 36 2014.2 Koodi S egmenttipuu on näppärä ja monipuolinen tietorakenne, joka mahdollistaa tehokkaiden välikyselyiden toteuttamiseen taulukolle. Nyt on tullut aika raottaa salaisuutta kansalle. Ovelampi ratkaisu on luoda taulukon T rinnalle summataulukko S, jonka jokaisessa kohdassa on taulukon T kaikkien lukujen summa kyseiseen kohtaan mennessä. Tieto asiasta on kulkenut lähinnä suusta suuhun asiaan vihkiytyneiden keskuudessa. Teksti: Antti Laaksonen Kuva: Annika Piiroinen, Mitol Berschewsky. Seuraavassa on esimerkki segmenttipuun sisällöstä. Käytämme esimerkkinä seuraavaa tilannetta: taulukko T sisältää n kokonaislukua, ja haluamme laskea lukujen summia tietyillä taulukon väleillä. Segmenttipuu on mukavinta toteuttaa niin, että taulukon lukujen määrä on 2:n potenssi. Seuraava funktio toteuttaa idean: int summa(int a, int b) { if (a == 0) return S[b]; else return S[b]-S[a-1]; } Nyt pelkkä summan laskeminen onnistuu vakioajassa O(1), mutta toteutuksella on myös haittapuolia. Kaikkea ei voi saada. Taikatemppu perustuu binääripuuta muistuttavaan rakenteeseen, jonka alimmalla tasolla on taulukon sisältö ja ylemmillä tasoilla on taulukon välien summia. Summataulukon käyttöönoton jälkeen taulukkoa T ei voi muuttaa yhtä huolettomasti kuin ennen, koska jokainen muutos täytyy tehdä myös taulukkoon S. Seuraava funktio laskee lukujen summan taulukon välillä a–b: int summa(int a, int b) { int s = 0; for (int i = a; i <= b; i++) s += T[i]; return s; } Tämä on toimiva ratkaisu, mutta funktio on auttamattoman hidas suurilla taulukoilla, koska sen aikavaativuus on O(n) – eli suoritusaika kasvaa lineaarisesti taulukon koon tahdissa
Tämän rakenteen tarkemman toiminnan miettiminen jätetään kuitenkin kotitehtäväksi.?. Huomaa, että taulukon kohta ei ole käytössä. Niinpä sekä taulukon muuttamisen että summan laskemisen aikavaativuus on O(log n), koska molemmat operaatiot siirtyvät askel kerrallaan taulukon pohjalta huipulle. Välin indeksin parillisuus paljastaa, onko välin päässä oleva luku sellainen, joka tulee lisätä summaan. 37 15 22 7 8 13 9 2 5 1 7 8 7 6 3 37 15 22 7 8 15 9 2 5 1 7 8 7 6 3 37 15 24 7 8 15 9 2 5 1 7 8 7 6 3 39 15 24 7 8 15 9 2 5 1 7 8 7 6 3 Osasumman laskeminen on hieman edellistä monimutkaisempi operaatio. Puussa on näppärää liikkua jakamalla kohtaa kahdella. Helpoin tapa on tallentaa puun sisältö taulukkoon, jossa on tilaa kaksinkertainen määrä alkuperäisen taulukon kokoon verrattuna. Käytännön toteutus Kuinka segmenttipuun voi toteuttaa käytännössä. Tämän takia N:n täytyy olla kahden potenssi. Toisella askeleella summaan lisätään 8 ja kolmannella askeleella 22, joten summaksi tulee 30. 37 15 22 7 8 13 9 2 5 1 7 8 5 6 3 37 15 22 7 8 13 9 2 5 1 7 8 5 6 3 37 15 22 7 8 13 9 2 5 1 7 8 5 6 3 Segmenttipuun tehokkuus perustuu siihen, että siinä on vain O(log n) tasoa lukuja. Funktiossa oleva silmukka jatkuu niin kauan kuin tutkittava puun väli ei ole tyhjä. 37 37 15 22 7 8 13 9 2 5 1 7 8 5 6 3 Tämä segmenttipuu vastaa taulukkoa 2 5 1 7 8 5 6 3 Kun taulukon lukua muutetaan, myös kaikkia siihen liittyviä välien summia täytyy päivittää. Tällöin taulukkoon mahtuu koko segmenttipuun sisältö. Joka askeleella tutkittava taulukon väli siirtyy puussa askeleen ylemmäs. Seuraava funktio muuttaa taulukon kohtaan k luvun x: int muuta(int k, int x) { k += N; P[k] = x; for (k /= 2; k >= 1; k /= 2) { P[k] = P[2*k]+P[2*k+1]; } } Ensin funktio siirtyy taulukon kohtaa k vastaavaan lukuun puun alimmalle tasolle lisäämällä k:hon taulukon lukujen määrän N. Siinäkin on ideana aloittaa puun pohjalta ja nousta kohti huippua. C-kielellä rakenteen voisi määritellä näin: #define N 8 int P[2*N]; Tässä N on alkuperäisen taulukon koko ja P sisältää puun luvut rivi kerrallaan ylhäältä alaspäin. Ideana on aloittaa puun pohjalta muutettavasta luvusta ja päivittää kaikki siihen liittyvät summat taso kerrallaan puun huipulle asti. Kohta P[N] sisältää luvun T[0], kohta P[N+1] sisältää luvun T[1] jne. Seuraava kuvasarja esittää taulukon välin summan laskemista. Yleisesti ottaen segmenttipuuhun voi kytkeä minkä tahansa funktion, joka sallii tuloksen laskemisen osissa missä tahansa järjestyksessä. Esimerkiksi edellä esitetystä segmenttipuusta saa maksimeja laskevan version, kun muuttaa rivin P[k] = P[2*k]+P[2*k+1]; riviksi P[k] = max(P[2*k], P[2*k+1]); ja rivit if (a%2 == 1) s += P[a++]; if (b%2 == 0) s += P[b--]; riveiksi if (a%2 == 1) s = max(s, P[a++]); if (b%2 == 0) s = max(s, P[b--]); Segmenttipuu on myös mahdollista toteuttaa kaksiulotteisena niin, että sen avulla voi laskea tuloksen kaksiulotteisen taulukon miltä tahansa alueelta. Eikä tässä vielä kaikki Segmenttipuulla voi yhtä lailla tehokkaasti laskea esimerkiksi minkä tahansa taulukon välin minimin tai maksimin. Seuraava kuvasarja näyttää, kuinka puu muuttuu, kun taulukossa oleva luku 5 muuttuu luvuksi 7. Kohdassa 1 on ylimmän tason luku, kohdissa 2–3 toisen tason luvut, kohdissa 4–7 kolmannen tason luvut jne. Summan laskeminen välillä a–b tapahtuu seuraavasti: int summa(int a, int b) { a += N; b += N; int s = 0; while (a <= b) { if (a%2 == 1) s += P[a++]; if (b%2 == 0) s += P[b--]; a /= 2; b /= 2; } return s; } Nyt muuttujat a ja b sisältävät taulukon välin alkuja loppukohdan. Mutta jos välin vasemmassa tai oikeassa päässä on luku, joka ei sisälly kokonaan ylempään väliin, kyseinen luku lasketaan summaan mukaan. Sitten se kirjaa puun alimmalle tasolle luvun x ja päivittää kaikki puun ylemmillä tasoilla olevat summat sen mukaisesti. Myös eksoottisemmat operaatiot kuten xor ja suurin yhteinen tekijä onnistuvat
Homma toimii kuin se kuuluisin vessa: kytkee vain USB-aseman PC:hen tai Maciin. DD-korput tunnistaa siitä, että niissä on vain yksi (kirjoitussuojan) reikä ylänurkassa, kun taas HD-korpuissa yläreikiä on kaksi. Lerppuja pyöritettiin pitkälti 8-bittisissä laitteissa mutta myös PC:llä. Mac lukee PC:n levykkeitä suoraan. Yhtäkkiä vanhalle datalle olisikin käyttöä, kun vain pääsisi savikiekkoihin kiinni… Vanhojen tallennusmedioiden ongelmaa voi ratkoa monella tavalla: rautakeräilijä rakentelee vintage-tietokoneen autenttisine levykeasemineen, kun taas bittikonservaattori keskittyy pikkutarkkaan jäljentämiseen ja arkistointiin (ks. Valmistuttajat ja koneistot vaihtelevat kuitenkin jonkin verran. 38 2014.2 N ykyaikana romputkin alkavat olla harvinaisuuksia, mutta niiden rinnalla disketit (lerput ja korput) ovat kuin savikiekkoja. Lerppuasema ei selvinnyt uuden vuosituhannen markkinoille, joten sellaisen hankkiminen nykykoneeseen on työläämpää. Yhteistä on niiden kyky HD-korppujen lukemiseen ja kirjoittamiseen, mutta yksikään ei esimerkiksi ymmärrä Macin vanhempia 400/800 kilotavun double density (DD) -levykkeitä. Apple kun käytti erityistä vaihtelevan nopeuksista koneistoa, jollaisia ei Maceissakaan ole nähty vuoden 1998 jälkeen. Ne toimivat kyllä. Toistaiseksi on kuitenkin mahdollista löytää USB-levykeasemia, jotka kelpuuttavat myös PC:n DD-korput. Jos siis on tarve käsitellä vain PC:n korppuja, Proxima Direct riittää paremmin kuin monet kilpailijansa. Onneksi uudelleenkytkentä auttoi. Nyt lähestymme kuitenkin pulmaa arkisemmin ja esittelemme kolme tapaa kytkeä levykeasema nykyaikaisen Windows 8.1ja OS X Mavericks -koneen USB-porttiin. Samalla kun fyysiset tiedonsiirtomediat unohtuvat, ohjelmistopuolella vanhojen sovellusten yhteensopivuus on kuitenkin kehittynyt. Millä vanhat levykkeet kiinni USB-porttiin. Ei aivan. Sen sijaan Win dowsilla Macin levykkeiden lukemiseen tarvitaan esimerkiksi Erik Larssonin ilmainen HFS Explorer. Tämä pätee vain, kun on kysymys yleisimmistä 1,44 megatavun HD-korpuista, niistä jotka olivat käytössä noin 1990-luvun vaihteesta eteenpäin. Lisähaasteen tuovat lerppuaikana käytetyt moninaiset tallennusformaatit – tietokonemaasto kun oli paljon vaihtelevampi. Lisäksi nykyisiä tusinamekanismeja pidetään yleisesti heiveröisempänä kuin eilispäivän asemia. Yksi harvoista on Amazon.co.uk:n listoilta löytyvä Proxima Direct, jonka mustasta kotelosta erottuu harmaa levykeaseman nappi ja luukku. Teksti ja kuvat: Janne Sirén Rauta. 3,5 tuuman USB-levykeasema Ilmeisin ja vielä valtavirrassa niukasti roikkuva tapa levykkeiden käyttöön on parilla kympillä myytävä 3,5 tuuman USB-levykeasema. Lukuvarmuus tuskin on paras mahdollinen muutenkaan. Floppy Controller, Kryoflux. Suuri osa USB-levykeasemista ei kuitenkaan ymmärrä vanhempia, kapasiteetiltaan pienempiä levykkeitä. Lähimarketista tai edes kaukaisesta verkkokaupasta tuskin löytyy uutta rautaa saati USB-asemaa tarkoitukseen, eikä emolevyillä ole liittimiäkään. Pientä epävarmuutta sekä PC:llä että Macilla herätti levykkeiden vaihtaminen: eject kun tuppasi poistamaan koko aseman. Skrolli 2013.1). Emolevyillä ei ole enää edes levykeaseman liitintä. Yllättäen suuri osa USBlevykeasemien koneistoista ei myöskään tue PC:n 360/720 kilotavun DD-korppuja. Macillakin aukeavat HD-levykkeet ja PC:n HDja DD-levykkeet, mutta Macin erikoisia DDkorppuja ei Proxima Directkään ymmärrä. Eikä modernissa tietokoneessa ole savikiekkoasemaa. Testatusti Proxima Directillä aukeaa HD-korppujen lisäksi MS-DOS-alustetut 720 kilotavun DD-levykkeet. Selailu onnistuu Windowsin File Explorerissa, ja levykkeen näköistiedostot syntyvät esimerkiksi Gilles Vollantin Winimagella. Lähelle 5,25 tuuman USB-levykeasemaa päästään amerikkalaisen pikkuputiikin, Device Side Datan FC5025-tuotteella, joka rakentuu 55 taalan hintaisesta Kadonneen levykeaseman metsästäjät Proxima Direct 3,5. Useat nykyiset USB-levykeasemat näyttävät identtistä koteloa myöten samalta, ja sisällä on kannettavaan tietokoneeseen tarkoitettu levykeasema. Emulaattorit ovat erinomaisia, ja avoimen lähdekoodin myötä yhä useampi käyttää eilispäivän tekniikkaa uudelleen. Ongelma ratkaistu. USB FDD, FC5025 USB 5,25. Lisätään haastetta: 5,25" USB Mitä vanhemmista levykkeistä on kysymys, sitä todennäköisemmin kyseessä eivät ole 3,5 tuuman kovamuoviset korput, vaan taipuisat 5,25 tuuman lerput
39 USB-kontrolleripiirilevystä (sis. Kun jaksaa lukea ongelmasektoria jopa kymmeniä kertoja, monesti se lopulta onnistuu. Levykkeen sektoreita voi taltioida myös eri asemilla – asemakohtaiset erot ja säädöt kun voivat joskus tuottaa tulosta nekin – ja kerätä ehjät sektorit myöhemmin kokoon. Testatut vanhat PC:n pelilerput olivat selattavissa ja luettavissa FC5025:n omassa apuohjelmassa, ja levykkeen näköistiedostotkin syntyivät PCja Mactestikoneillamme. 8-bittiset laitteet eivät reiästä piitanneet, mutta PC:n asemilla levyn kääntöpuoli voi jäädä lukematta. Kryofluxissa lisäksi aktiviteettivalot, reset-nappi, kirjoitussuoja ja jumpperointi kahdelle asemalle sekä mahdollisuus virran läpivientiin. Myös testatut PC:n viisivarttisten näköistiedostot syntyivät odotetusti, sellaisetkin joissa FC5025 luovutti liian helposti lukuvirheen takia. Toisaalta levykkeillä makaavan datan vanhenemispäiväkin on jo käsillä. 80-luvullahan oli tapana ottaa lerppujen kääntöpuoli käyttöön leikkaamalla reunaan kirjoitussuojauksen poistava aukko. Viimeistään nyt kannattaa havahtua lukemaan disketeiltä tiedot talteen.. Kryofluxilla luetaan levykkeistä yksityiskohtaisia raakatallenteita, jolloin tuntemattomatkin formaatit ja kopiosuojaukset voidaan ikuistaa. Tämä on epävarmojen levykeyksilöiden kohdalla iso plussa, ja levykkeiden ikääntyessähän yhä useampi niistä alkaa kärsiä kaikenlaisista vaivoista. PC:n lerppuasemat eivät yleensä kuitenkaan ymmärrä tee-se-itse-B-puolen päälle, jos levyn pyörimisestä kertova indeksireikä puuttuu. Haittapuolena on, että FC5025:n oheismateriaaleissa varoitetaan kaksipuoliseksi leikatuista lerpuista. FC5025 vaatii 1,2 megatavun aseman, vaikka lukisi 360 kilotavun levyjä. Kryofluxilla levykkeiltä voi lukea vaikka vain yksittäisiä sektoreita, niin monta kertaa kuin haluaa, ja parsia niitä sitten kasaan jälkikäteen. FC5025:n tekijä lupasi palautteemme pohjalta lisätä ajureihinsa uudelleenlukutoiminnon. FC5025 ei myöskään kytkeydy suoraan Windowsin File Exploreriin eikä Macin Finderiin, mutta toimiihan se. Kirjoittaa ei voi. Kryofluxin mukaan voi tilata myös 3,5 tai 5,25 tuuman levykeaseman käytettynä, ja se tukee molempia kokoja (ja jopa 1970-luvun 8-tuumaisia levyjä). Yhdistävänä tekijänä kaikissa näissä ratkaisuissa on kuitenkin yhä harvinaisemmiksi käyvien, usein käytettyjen asemamekanismien käyttö sekä pikkuvalmistajien niche-luonne. Yhteen Kryofluxiin voi onneksi kytkeä samanaikaisesti kaksi levykeasemaa. Raakavirran lisäksi levykkeistä voidaan tallentaa näköistiedostoja, jotka kelpaavat yleisimmille emulaattoreille. Syväluotaus – kun muu ei riitä Kryoflux on joukon kallein ratkaisu mutta myös yhteensopivin ja tarkin, käytetäänhän sitä bittimuseoinnissakin. Onnistuimme lukemaan Kryofluxilla Macin 800 kilotavun DDlevykkeitäkin ja tallentamaan ne näköistiedostoksi. Kryofluxin takana on muun muassa X-Copyn tekijä, ja se onkin luonteeltaan nimenomaan monistuslaite ja -ohjelma. FC5025:n uniikki piirre on pohjassa olevat sivuttaisruuvit, joilla se kiinnittyy 3,5 tuuman kiintolevypaikkaan.. USBja 5,25?-levykeaseman kaapelit sekä ruuvit piirilevyn kiinnittämiseksi) sekä valinnaisesta kotelosta ja virtalähteestä. Keinoja vanhojen diskettien käyttämiseen nykypäivän koneilla siis on – etenkin lukemiseen. Kryoflux on FC5025:n tapainen piirilevy, johon virtalähde ja asema lisätään erikseen. Sillä ei pääse suoraan levykkeen tiedostoihin käsiksi, vaan seuraksi tarvitaan muita ohjelmia näköistiedoston sisällön tutkailuun, esimerkiksi mainitut HFSExplorer ja Winimage. Kryofluxilla pelastettiin hiljattain muun muassa Andy Warholin kuuluisat Amiga 1000 -taideteokset. Linkkejä • Proxima Direct: http://www.amazon.co.uk/Proxima-Direct%C2%AE-External-Portable-Floppy/dp/B00D1AD3BY/ • FC5025: http://www.deviceside.com • Kryoflux: http://www.kryoflux.com • HFSExplorer: http://www.catacombae.org/hfsx.html • Winimage: http://www.winimage.com • Catweasel: http://www.icomp.de • Discferret: http://www.discferret.com • Diskvaccuum: http://hackaday.com/2014/01/10/a-diskvaccuum-for-obsolete-disk-formats FC5025:een (vas.) kytketään vain USB ja yksi asema. Ei niin ”plug and play” kuin 3,5 tuuman USB-asemat (esim. DSD kauppaa myös sopivaa sisäistä USB-korttia niille, jotka haluavat kiinteää asennusta. Ei mikään luottamusta herättävä yhdistelmä jatkuvuuden kannalta. FC5025:n tukemien formaattien lista on ihan mukava sekin: PC/MS-DOSin lisäksi muun muassa Commodore 1541, vanhempia Appleja ja Atareja sekä erikoisempaa Kayprota ja TI:tä. 5,25 tuuman aseman jumpperit kannattaa tarkistaa ohjeista). DSD tarjoaa Windowsille, Macille ja Linuxille ajuriohjelmistot levykkeen näköistiedoston luomiseen sekä joidenkin tiedostojärjestelmien osalta tiedostojen selaamiseen ja lukemiseen. Toisaalta Kryoflux on kattavin: tuettujen formaattien listalla ovat muun muassa PC, Amiga, Apple, Mac, Atari ST, Commodore 64 ja Spectrum. Jopa 5,25-tuumaisen levykkeen kääntöpuolen pitäisi kelvata Kryofluxille, kun levykeasemaa virittelee ohjeiden mukaan. Käytössä oli ihan tavallinen vanha PC:n 3,5-tuumainen levykeasema (NEC FD1231M). Erityisesti viimeksi mainitusta on apua ”vaikeiden” formaattien kanssa: yhden Mac-DD-levykkeemme kohdalla osa sektoreista aukesi vain yhdellä ja osa vain toisella asemalla, vaikka molemmat asemat lukivat PC:n DD-levykkeitä ongelmitta. Osat voi tilata yrityksen kotisivuilta, joskin varsinainen lerppuasema tulee hankkia erikseen vaikka Ebaysta. Jos levykeasemalle saa virran tietokoneen virtalähteestä, riittää pelkkä FC5025piirilevy. Kun jaksaa opetella ohjelman optiot, sillä saa luettua melkein mitä vain, ja usein myös näköistiedostojen kirjoittaminen levykkeille on mahdollista. Suositus on TEAC FD-55GFR, mutta me käytimme onnistuneesti NEC FD1157C:tä vuodelta 1991
Nyt kun uutta älyluuria on ehditty jo hiplata jonkin aikaa, on aika perehtyä sen ohjelmointiin. Tässä artikkelissa emme painele uuden laitteen nappuloita vaan tutkimme sen käyttöjärjestelmää kehittäjän näkökulmasta. Kehitysympäristö haltuun Ensimmäinen askel Sailfish-ohjelmointiin on kehitystyökalujen (software developSailfish { id: hakkerinMobiiliOS } Viime joulukuussa julkaistiin ensimmäinen Sailfish-käyttöjärjestelmää ajava laite, Jolla. Mer tarjoaa käyttöliittymätason ohjelmille rajapintoja ytimen palveluihin. Kun nyt markkinoilla kerran on ihan uudenlainen järjestelmä, kannattaa siihen vähän perehtyä. Uuden yrityksen tavoitteena oli tuoda mobiilimarkkinoille jotakin ennennäkemätöntä ja rikkoa status quo. Seuraavat ohjelmistokerrokset ovat Mer, Sailfish UI ja Nemo. Merin päälle rakentuu Sailfish UI, joka tarjoaa ohjelmien käyttöliittymän. Monet päättivät lähteä Nokiasta vapaaehtoisesti ja perustaa uuden yrityksen, Jollan. Niinpä pohjimmaisena Sailfishin ohjelmistopinossa ovat Linux-ydin ja Androidin ajurit. Miten sille tehdään omia ohjelmia. Mer-projekti on täysin avointa koodia. Mer perustuu Nokian Meego-järjestelmään. Kun Nokiassa päätettiin siirtyä Windows-käyttöjärjestelmään, Meegon kehittäjät kokivat, että heidän työnsä valui hukkaan. Osa Kerros Tehtävä Koodin saatavuus Linux-ydin, Android-ajurit ja libhybris ydin käyttöjärjestelmän ytimen tehtävät, oheislaitteiden kanssa kommunikointi Linux-ydin on avointa koodia, samoin libhybris. Mikäli kieli ei ole lukijalle tuttu, kannattaa tutustua Skrollin numeroissa 2013.1 ja 2013.3 julkaistuihin QML-artikkeleihin tai hankkia perustiedot muualta, esimerkiksi internetistä osoitteesta http://qmlbook.org/ . Omaa Jolla-puhelinta ei välttämättä tarvita, sillä Sailfishin kehitysympäristöön kuuluu virtuaalikone, jossa artikkelin esimerkkisovellusta voi kokeilla. sovellukset sovelluskerros Tarjoaa käyttäjille hyödyllisiä toimintoja ja sisältöä. Ajurit ovat yleensä suljettuja. Tällaisen ohjelmistopinon varaan alamme rakentaa omaa esimerkkisovellustamme. Nemo on avoin, Sailfish UI ei. Sailfish UI, Nemo käyttöliittymä Toteuttaa käyttöliittymän laitteelle ja käyttöliittymäkomponentit sovelluksille. Sailfish UI on toistaiseksi pääosin suljettua koodia, mutta se hyödyntää myös avoimen Nemo-projektin osia. Teksti: Asser Lähdemäki Kuvat: Mitol Berschewsky, Asser Lähdemäki, Teemu Likonen Esimerkkisovellus: Teemu Likonen, Asser Lähdemäki Taulukko 1. rajapinnan ytimen ja ajureiden palveluihin. Käyttöjärjestelmäänsä varten yhtiö kehitti myös Jollamatkapuhelimen, mutta tarkoituksena on, että Sailfishin voi asentaa muidenkin valmistajien laitteisiin. tapauskohtaista. Mer väliohjelmistot, taustapalvelut Tarjoaa sovelluksille mm. 40 2014.2 Koodi S ailfish OS on tuore käyttöjärjestelmä mobiilimarkkinoilla, mutta sen juuret ovat Nokian Meego-järjestelmässä. Ohjelmointiin käytämme Qt-sovelluskehystä ja sen deklaratiivista käyttöliittymän kuvauskieltä, QML:ää. QML perustuu Javascriptiin, joten sitäkin täytyy vähän osata. Ajureita käytetään libhybris-kirjaston avulla. Millaisista osista se rakentuu. Ohjelmistoja ovat esimerkiksi Systemd, Dbus ja Wayland. Sailfish OS:n ohjelmistopino. Taulukkoon 1 on koottu Sailfish-järjestelmän eri kerrokset ja niiden tehtävät. Sitä varten kehitettiin oma Sailfish-käyttöjärjestelmä, joka erottuu markkinoiden muiden pelurien järjestelmistä. Se sisältää ohjelmistoja, jotka toimivat Linux-ytimen ja käyttöliittymän välissä. Purjekalan anatomia Sailfish OS on suunniteltu toimimaan laitteissa, jotka tukevat Android-käyttöjärjestelmää
Sen vuoksi myös Sailfish-järjestelmä tarjoaa oman käyttöliittymäkirjastonsa, Sailfish Silican, jota hyödyntämällä ohjelmoija voi helposti luoda tyyliin sopivia sivuja, valikoita, painikkeita ja muita toimintoja. Tällöin pyyhkäisy vasemmalle näyttää uuden sivun. Toisinaan virtuaalikoneet käynnistyvät sen verran hitaasti, että Qt Creator ilmoittaa aikakatkaisusta. Ohjelmien testaamisessa virtuaalikoneen etuna on, ettei puhelinta tarvitse kaivaa esiin joka välissä vaan ohjelmaa voi kokeilla samassa tietokoneessa. Kun molemmat virtuaalikoneet on saatu käyntiin, kokeillaan Qt Creatorin luomaa projektipohjaa. Niiden avulla ohjelman toimintaan voi vaikuttaa, vaikka se toimiikin taustalla piilossa. Kääntämisessä virtuaalikoneen hyvä puoli on se, ettei käännöstyökaluista tarvitse olla erikseen versiota jokaiselle alustalle. Painikkeita b, c ja d käytetään ohjelman kääntämiseen ja suorittamiseen, ja painikkeilla e ja f käynnistetään ja sammutetaan virtuaalikoneet. Seuraavassa vaiheessa on hyvä valita ohjelman kohdealustaksi sekä ”i486-x86” että ”armv7hl”. Asetuksiin täytyy muun muassa asettaa IP-osoite, josta Sailfish-laitteen tavoittaa. Qt Creatorin työkalupalkki.. Pinon päällimmäinen sivu on yleensä näkyvissä. Testausvaiheessa lienee järkevintä siirtää vain binääritiedostot. Hyväksy asetuksista myös etäyhteys ssh:n kautta ja aseta salasana. Se tapahtuu valitsemalla Qt Creatorin valikosta Tools . Kannessa voi olla näkyvissä sovelluskohtaista tietoa. RPM-asennuspakettia tarvitaan lopullisessa versiossa, jotta sovellus rekisteröityisi oikealla tavalla Sailfish-järjestelmään. Virtuaalikoneet ovat ohjelmien kääntämistä ja testaamista varten. Ne sisältävät esimerkiksi taustakuvan, joka vaikuttaa käyttöliittymän väreihin. Jos sovelluksen haluaa julkaista Jollan sovelluskaupassa, on nimessä käytettävä muotoa ”harbour-minunsovellus”. Taustalla toiminnassa olevat sovellukset näkyvät kotinäkymässä kantena, jota koskettamalla pääsee sovellukseen takaisin. Sivut asetetaan pinoon (PageStack), ja sovelluksessa navigoidaan pinorakenteen avulla. Lisäksi on asennettava virtualisointiohjelmisto Virtualbox, joka on saatavissa osoitteesta https://www.virtualbox.org . Valitse ”Mer ARM device” ja noudata ohjatun asetustoiminnon ohjeita. Avautuvasta ikkunasta valitaan ”Sailfish OS Qt Quick Application” ja annetaan projektille nimi ja sijainti levyllä. Soittoäänet ja muut hälytysasetukset voi määrittää tunnelmakohtaisesti. Valitaan kohdealustaksi ”i486” eli Sailfish-emulaattori ja koontiversioksi ”Release”. Kun laite on määritetty, saadaan omat sovellukset käännettyä ja siirrettyä sinnekin helposti. Sivuilla on paljon hyvää luettavaa kehitysympäristön asennuksesta ja käytöstä. Se voi tarkoittaa, että kaikki ei aina toimi ihan täydellisesti. Ulkoisen Sailfish-laitteen olemassaolosta on kerrottava myös kehitysympäristölle. Ensin mainittu on Sailfish-emulaattorille ja jälkimmäinen oikeaa mobiililaitetta varten. Jos edellä mainittujen toimintojen kanssa on ongelmia, ratkaisua voi etsiä osoitteesta https://sailfishos. Mikäli kaikki on sujunut niin kuin pitääkin, valitsemalla Run-toiminnon (ks. Useimmat Silican komponentit pohjautuvat QML:n peruskomponentteihin, joten Silican ohjekirjoissa ei ole aina mainittu peruskomponenteilta perittyjä ominaisuuksia. Järjestelmä . Esimerkiksi kalenterisovellus voi näyttää päivämäärän ja tapahtumia. New File or Project. Käännöksen kohdealustaksi on tällöin valittava ”armv7hl”. Vaihtoehto ”Deploy As RPM Package” puolestaan tekee asennuspaketin, joka sitten siirretään ja asennetaan kohteeseen. Kehitystila. Tämän jälkeen ohjelma pyytää vielä kuvausta ja muita tietoja, joita käytetään pohjana sovelluspaketin luomisessa. Tämän artikkelin kirjoitushetkellä kehitysympäristöstä ei ole vielä virallista julkaisua vaan ainoastaan alfaversio. Kehitysympäristö osaa siirtää ohjelmat myös Jolla-puhelimeen tai muuhun Sailfish-laitteeseen. Kuvassa näkyvän a-painikkeen avulla valitaan esimerkiksi sovelluksen kohdealusta (i486 tai armv7hl). Toisinaan on mahdollista myös lisätä uusi sivu näkyvän sivun päälle eli käyttöliittymässä oikealle puolelle. Tunnelmat ovat nopeasti vaihdettavissa, ja sovellusten täytyy ottaa se huomioon. Kolmas huomionarvoinen asia ovat Sailfishin tunnelmat. Qt Creatorilla hallitaan sovellusprojektia ja käsitellään itse ohjelmakoodia. Se on nimittäin toimiva Sailfish-ohjelma. Qt Creator antaa valittavaksi myös tavan, jolla käännetty sovellus siirretään kohdelaitteeseen. Devices . Sailfish-sovellusten käyttöliittymä perustuu eräänlaiseen sivuhierarkiaan. Ensin kannattaa käynnistää virtuaalikoneet. Qt Creator luo automaattisesti projektipohjan, jossa on yksinkertainen C++-ohjelma ensimmäisen QML-tiedoston lataamiseksi. Laitteen asetuksista on ensin kytkettävä kehitystila päälle valitsemalla Asetukset . Toisaalta kääntäminen on hitaampaa, sillä virtuaalikoneen suorituskyky on heikompi kuin isäntäkoneen. Hierarkiassa ylemmän tason sivulle pääsee pyyhkäisemällä nykyinen sivu oikealle, jolloin sivu yleensä katoaa ja poistuu pinosta. Kehitysympäristö koostuu Qt Creator -työkalusta sekä MerSDKja Sailfish Emulator -virtuaalikoneista. org/wiki/SDK_Alpha_Known_Issues . Ne Kuva 1. Ohjelman kehitys ja testaus on siis varsin nopeaa, sillä kehitysympäristö huolehtii tiedostojen siirtämisestä ja asentamisesta kohdelaitteeseen. Sailfishin käyttöliittymäkomponentit ovat Sailfish Silica -kirjastossa, mutta sovelluksissa voi hyödyntää kaikkia QML:n peruskomponentteja. Kannessa voi olla myös toimintoja, jotka aktivoidaan pyyhkäisemällä kantta oikealle tai vasemmalle. Add. Qt Creatorissa luodaan uusi Sailfishsovellusprojekti valitsemalla valikosta File . Projektissa on valmiina muutamia QMLja muita tiedostoja, jotka antavat esimerkin Sailfish-sovelluksen rakenteesta. MerSDK-virtuaalikone on ohjelmien kääntämistä varten, ja Sailfish OS -emulaattori on tarkoitettu niiden testaamiseen. Ohjelmakirjaston lisäksi on hyvä perehtyä myös muihin käyttöliittymän suunnittelun periaatteisiin. kuva 1, painike b) ohjelma ensin käännetään, siirretään sitten automaattisesti Sailfish-virtuaalikoneeseen ja käynnistetään siellä. Options… . Vaihtoehto ”Deploy By Copying Binaries” kopioi käännetyt binääritiedostot ja projektin QML-tiedostot kohdejärjestelmän kansioon ”/opt/sdk/sovelluksen_nimi/”. 41 ment kit, SDK) lataaminen ja asentaminen. Tällöin yleensä riittää, kun painaa uudestaan virtuaalikoneen käynnistyspainiketta. Käyttöliittymä à la Sailfish Silica Tietokonejärjestelmissä yhtenäinen, sujuva käyttökokemus syntyy siitä, että ohjelmat muistuttavat toisiaan ja niitä käytetään hyvin samalla tavalla. Toinen erityispiirre Sailfishissä ovat sovellusten kannet. Kun sovellusprojekti on avattu, ilmestyy Qt Creatorin vasempaan työkalupalkkiin kuvan 1 mukaiset painikkeet. Sailfish SDK on saatavilla Linux-, Windowsja OS X -käyttöjärjestelmille osoitteessa https://sailfishos.org
Kuva 2. qml-kansio Kansio QML-lähdekoodille. Rope dice – kun nopat jäivät kotiin Lautapelien ystävän ja pöytäroolipelaajan vakiovarusteisiin kuuluu tietysti noppasetti. Sovelluksen sivurakenne ja pääsivun sisältö. Controls Käyttöliittymän painikkeita, valitsimia, kytkimiä yms. Silica-kirjasto sisältää komponentteja ja ominaisuuksia sivupinon hallintaan, valikoiden tekemiseen, käyttöjärjestelmän tunnelmien huomioimiseen ja sovelluskannen käsittelyyn. Merkintä tarkoittaa, että kohdasta on jätetty pois selitettävän toiminnallisuuden kannalta epäoleellista koodia. Menus Alasja ylösvetovalikoiden komponentit sekä pikavalikkotoiminto. harbour-ropedice.qml QML-tiedosto, jossa asetetaan käytettävä aloitussivu ja sovelluskansi. Lisäksi käyttäjä voi syöttää yhdelle nopalle sivumäärän ja heittää sitä, koska toisinaan tarvitaan myös esimerkiksi 100-sivuista noppaa. Avaa projektin .pro-tiedosto Qt Creatorissa ja valitse kohdealustoiksi ”i486” ja ”armv7hl”. Rakennamme yksinkertaisen mutta käytännöllisen nopanheittosovelluksen Sailfishille. harbour-ropedice.pro Qt:n projektitiedosto, joka muistuttaa Makefilea. Noppasovelluksen kansioiden rakenne näkyy kuvassa 3 ja osien merkitykset on selitetty taulukossa 3. Koko ohjelman voi ladata Skrollin sivuilta osoitteesta http://skrolli.fi/2014.2/ . src-kansio Kansio C++-lähdekoodille. Mutta entä jos nopat pääsevät unohtumaan. harbour-ropedice.cpp Automaattisesti luotu QML:n latauskoodi. Alkuriveillä on tuotu Qt Quickin peruskomponenttikirjasto ja Sailfish Silica -kirjasto. Hakemiston tuominen antaa käyttöön kaikki hakemiston qmltiedostoissa määritellyt komponentit. Kannattaa varmistaa, että käytössä on opas vähintään Qt:n versiolle 5.1, sillä internetin hakukoneet antavat osumia myös versiolle 4.8. rpm-kansio RPM-paketin luomiseen tarvittavat tiedostot. Pelitapahtuma ei välttämättä mene pilalle, jos on osannut ohjelmoida puhelimeensa nopanheittosovelluksen. Samalla sovellus esittelee Sailfishja QML-ohjelmoinnin perusasioita. Projektissa esitellään komponenttien käyttöä ja myös niiden ulkoasu on nähtävissä. Käyttöliittymän rakenne on havainnollistettu kuvassa 2. Lehden sivuilla olevissa ohjelmalistauksissa on eräissä kohdissa kolme pistettä (…). Pääsivulta siirrytään infosivulle alasvetovalikon avulla. Taulukko 2. MainPage.qml Sovelluksen pääsivu, jossa nopanheittotoiminnot ovat. Joskus on hyödyllistä heittää useita noppia samanaikaisesti, joten myös noppien lukumäärän tulee olla valittavissa. Mukana on tietenkin myös erilaisia vipuja, painikkeita ja syötekomponentteja. Nämä kohdat täydennetään kyllä artikkelin myöhemmissä listauksissa. Sailfish-projektin kansiot, tiedostot ja niiden merkitys. Kuva 3. 42 2014.2 löytyvät kuitenkin helposti Qt:n oppaista. Älypuhelinhan on sentään kaikilla aina (?) mukana. Lisäksi on tuotu qml-hakemiston alihakemistot pages ja cover. Silican omat komponentit mainitaan erikseen, mutta muut ovat tavallisia QML:n komponentteja. Dialogs Valitsimet väreille, ajalle ja päivämäärälle sekä yleinen kyselysivu. Sovellukseen tarvitaan pääsivu, joka avautuu ensimmäisenä ja jossa varsinaiset nopanheittotoiminnot ovat. CoverPage.qml Sovelluskannen määrittelytiedosto. Sovelluksen käyttöliittymän rakennus alkaa siitä, että määritetään ApplicationWindow-komponentti eli sovellusikkuna. Tämän artikkelin esimerkkisovelluksen Silica-komponentit esitellään sitä mukaa, kun ne tulevat vastaan. Rakenne perustuu hyvin pitkälle Sailfish-kehitysympäristön luomaan projektipohjaan, joten se edustanee aika tyypillistä Sailfishin QML-sovellusta. Sailfish Silica 1.0 -kirjaston kategoriat. Taulukko 3. Animations Animaatiot erilaisille käyttöliittymän tapahtumille. harbour-ropedice.desktop Tiedostossa muun muassa määritellään, miten sovellus käynnistetään ja mitä kuvaketta sovellus käyttää. Sovellukseen tulevat omat painikkeensa nopille 4, 6, 8, 10, 12 ja 20, koska niitä tarvitaan usein. Text display and input Tekstin esittämiseen ja syöttämiseen tarkoitetut komponentit. Taulukkoon 2 on koottu Sailfish Silica 1.0 -kirjaston eri osa-alueet. Siirrytään pikku hiljaa koodin pariin. Lisäksi luodaan infosivu, jossa kerrotaan tekijöiden nimet ja muuta tietoa sovelluksesta. Näin sovellus saadaan käännettyä sekä Sailfish-emulaattorille että oikealle laitteelle. Pages, views and containers Sisältää komponentit sivujen esittämistä varten sekä eräitä muita käyttöliittymän rakenteita, kuten listaja ruudukkonäkymät. Essential types Sailfish-sovelluksen perustoiminnot muun muassa sovellusikkunalle, sivupinolle, tunnelmien huomioimiseen ja leikepöydän käytölle. Lisäksi kirjasto tarjoaa rajapintoja Sailfish-järjestelmään, esimerkiksi leikepöydän käyttöön ja tiedostojärjestelmän standardikansioihin. InfoPage.qml Infosivu, joka kertoo muun muassa sovelluksen tekijöistä. Application covers Sovelluskansien käsittelyyn tarvittavat komponentit. Emme julkaise kaikkia esimerkkisovelluksen tiedostoja lehden sivuilla vaan ainoastaan tärkeimmät osat. Sailfish-projektin kansiorakenne.. Silicaan voi tutustua myös Qt Creatorin Welcome-välilehdellä olevasta kohdasta Examples, josta voi ladata esimerkkiprojektin nimeltä ”Sailfish Silica Component Gallery”. Ohjelman runko Listauksessa 1 on sovelluksen pääosa, joka nivoo muut osat yhteen. Näitä tarvitsemme esimerkkisovelluksessamme
} } } Listaus 1. Slider puolestaan on liukuvalitsin. Sijoittelukomponentit rajoittavat alikomponenttiensa kohdistusankkurien käyttöä. Se onnistuu helpoimmin, kun asettaa SilicaFlickable-tyyppisen komponentin alikomponentiksi ScrollDecorator-komponentin, kuten on tehty listauksessa 2. Niiden avulla ohjelman saa toimimaan sujuvasti Sailfish-laitteen erilaisilla tunnelma-asetuksilla. } Label { ... Liikuteltavien sisältöjen kanssa tarvitaan joskus vierityksen ilmaisinta eli jotakin Silican ScrollDecorator-komponenttia. Komponentille pitää muistaa asettaa contentHeightja contentWidth-arvot, jotta liikuttelu toimii oikein. Se kasaa alikomponenttinsa allekkain. Sen avulla voidaan muun muassa määrittää, tuetaanko näytön pystyvai vaaka-asentoa vai molempia. Listauksessa 2 seuraavana on Column-komponentti, joka on yksi QML:n sijoittelukomponenteista. import QtQuick 2.0 import Sailfish.Silica 1.0 Page { id: root property string lastThrow: "" property bool diceIsThrown: false property int lastDiceMax: function roll_dice (max) { ... Ominaisuus initialPage asettaa aloitussivun, jonka täytyy olla Page tai vastaava komponentti. } } } } } Listaus 2. Tiedoston juurikomponentti on Silica-kirjaston Page. Themeolioita kannattaa hyödyntää, kun käyttöliittymässä määritellään esimerkiksi fontteja tai elementtien välejä. Tämä on tietysti luonnollista, koska sijoittelukomponentin on tarkoitus vastata alikomponenttiensa sijoittelusta. Listauksessa 3 on pääsivun kaksi Label-komponenttia ja Slider-komponentti. Noppasovelluksessa sen avulla valitaan heitettävien noppien lukumäärä. Nopanheittosivu Listauksessa 2 kuvataan sovelluksen pääsivun rakenne eli sen sisältämät komponentit ja niiden hierarkia. Muiden alikomponenttien sisältöä on jätetty listauksesta pois, mutta niitä alamme tutkailla seuraavaksi. Seuraavaksi listauksessa määritellään SilicaFlickable-komponentti, joka täyttää koko pääsivun. } Slider { ... Nämä ovat QML:n peruskomponentteja ja oikein käteviä myös Sailfish-sovelluksissa. PullDownMenu on Silican alasvetovalikko, ja sen on aina oltava SilicaFlickablen, SilicaListView’n tai vastaavan komponentin alikomponentti. Tiedosto harbour-ropedice.qml, josta käyttöliittymän määrittely alkaa. Komponentin kolme tärkeintä ominaisuutta ovat initialPage, cover ja pageStack. Hyödyllinen ominaisuus on myös status, jonka antaa tietoa sivun tilasta, esimerkiksi kun käyttäjä siirtyy sivulle tai poistuu sivulta. Tekstiä, vipuja ja nappuloita Siirrytään tutkimaan noppasovelluksen pääsivun tärkeimpiä komponentteja eli nopanheittotuloksesta kertovia tekstikomponentteja sekä nopanheittopainikkeita. Tällöin vieritystä ilmaiseva komponentti automaattisesti tietää, minkä komponentin liikuttelua sen tulisi havainnollistaa. Valikon sisältö ilmaistaan MenuItem-komponenttien avulla. Sliderille on asetettu koodissa arvoalue yhdestä import QtQuick 2.0 import Sailfish.Silica 1.0 import "pages" import "cover" ApplicationWindow { id: base property string program_name: "Rope dice" property int button_width: width * (3 / 7) MainPage { id: mainPage } initialPage: mainPage cover: Component { CoverPage { ... Column-komponentille on määritetty Theme-olion avulla alikomponenttien välit ja marginaalit. Sovelluksen pääsivun eli MainPage.qml:n rakenne.. Sivupinosta huolehtiva pageStackominaisuus alustetaan sisäisesti, joten se ei vaadi ohjelmoijalta toimenpiteitä. Ohjelmoijan on pidettävä huolta, että sivupinoon lisätään vain Page-komponentteja tai sen johdannaisia kuten Dialog-komponentteja. Columnin ensimmäinen alikomponentti on PageHeader, joka luo sivulle Sailfish-tyylisen otsikon. } SilicaFlickable { anchors.fill: parent PullDownMenu { MenuItem { text: "Info" onClicked: pageStack.push(Qt.resolvedUrl("InfoPage.qml")) } } VerticalScrollDecorator {} contentHeight: column.height Column { id: column spacing: Theme.paddingLarge anchors.margins: Theme.paddingLarge anchors.horizontalCenter: parent.horizontalCenter PageHeader { title: base.program_name } Label { ... } TextField { ... Komponentti on QML:n Flickable-komponentin Sailfishtyylitelty versio. } Grid { columns: 2 rows: 4 spacing: Theme.paddingLarge rowSpacing: Theme.paddingLarge Repeater { ... 43 Sen tärkeimpiin funktioihin kuuluvat activate ja deactivate, joiden avulla sovelluksen voi siirtää taustalle ja palauttaa aktiiviseksi. Sovellusikkunan cover-ominaisuus puolestaan kertoo, mitä komponenttia käytetään sovelluskannessa. Label asettaa automaattisesti tekstin värin ja fontin. Valikoihin ei kannata laittaa kovin monta toimintoa, sillä muuten niitä on epämukavaa käyttää. Vaihtoehtona alasvetovalikolle voi käyttää ylösvetovalikkoa eli PushUpMenu-komponenttia. Vastaavasti Row-komponentin avulla voidaan sijoittaa alikomponentit vierekkäin ja Grid-komponentilla ruudukkoon. Ohjelma antaa siitä myös virheilmoituksen Qt Creatorin tulostus ikkunaan. Sailfishin valikoiden suunnittelussa kannattaa huomioida, että niihin pääsee käsiksi vain silloin, kun ollaan sivun sisällön ylätai alareunassa. Label on Silican oma tekstielementti, joka periytyy QML:n peruskomponentista Text. top: parent.top”. } Button { ... Listauksessa 2 on määritetty valikkoon yksi kohta ”Info”, joka lisää sivupinon päällimmäiseksi InfoPage-komponentin. Sen tärkein tehtävä on komponentin sisällön liikuttelu. Esimerkiksi listauksessa 2 olevan Columnin saa hajoamaan, kun määrittää jollekin alikomponentille ominaisuuden ”anchors
Kannen pyyhkäisytoiminnot määritellään CoverActionList-komponentin alikomponentteina, joita voi olla enintään kaksi. Sen avulla voi vihjata käyttäjälle, mitä sisältöä kenttään halutaan. Nopan silmäluvun arvonnasta vastaava roll_dice-funktio. Grid { columns: 2 rows: 4 spacing: Theme.paddingLarge rowSpacing: Theme.paddingLarge Repeater { model: [4, 6, 8, 10, 12, 20] delegate: Button { text: "D" + modelData onClicked: roll_dice(modelData) width: base.button_width } } TextField { id: custom_dice text: "100" placeholderText: "Sides count" validator: IntValidator { bottom: 2; top: 10000 } inputMethodHints: Qt.ImhDigitsOnly width: base.button_width } Button { text: "D" + custom_dice.text onClicked: roll_dice(custom_dice.text) width: base.button_width } } Listaus 5. Loput pääsivun toiminnot ovat listauksessa 4. Ensimmäinen CoverActionalikomponentti tulee näkyviin kannen Label { id: result text: " " font.pixelSize: Theme.fontSizeHuge horizontalAlignment: Text.AlignHCenter width: parent.width } Label { id: dice_rolls text: " " font.pixelSize: Theme.fontSizeExtraSmall horizontalAlignment: Text.AlignHCenter width: parent.width height: 20 wrapMode: Text.Wrap maximumLineCount: 2 } Slider { id: nod label: "Number of dice" minimumValue: 1 maximumValue: 10 stepSize: 1 value: 1 valueText: value width: parent.width } Listaus 3. TextField-komponentin hyödyllisiä ominaisuuksia ovat myös inputMethodHints ja placeholderText. Kansi otetaan käyttöön ApplicationWindow-komponentin coverominaisuuden avulla. Listauksessa 4 olevat kaksi viimeistä komponenttia muodostavat käyttäjän määrittämän nopan. Noppasovelluksen kanteen haluamme viimeisimmän nopanheiton tuloksen sekä pyyhkäisytoiminnon, jolla noppaa voi heittää suoraan kannesta käsin. Button-komponentti on Silican painike. Listauksessa 6 on varsinainen kannen määrittely. function roll_dice (max) { root.lastDiceMax = max var sum = var all_rolls = " " for (var i = 1; i <= nod.sliderValue; i = i + 1) { var roll = Math.floor((Math.random() * max) + 1) sum = sum + roll if (nod.sliderValue > 1) { if (i == 1) { all_rolls = roll.toString() } else { all_rolls = all_rolls + " + " + roll } } } result.text = sum root.lastThrow = nod.sliderValue + "d" + max + ": " + sum dice_rolls.text = all_rolls if(root.diceIsThrown === false) { root.diceIsThrown = true } return }. Esimerkiksi syötteentarkistus voidaan hoitaa samalla tavalla eli käyttämällä IntValidator-, DoubleValidatortai RegExpValidator-komponenttia. Näistä ensimmäinen antaa virtuaalinäppäimistölle ohjeita, millaista syötettä odotetaan. Listauksesta kuitenkin nähdään, että niitä on vain kolme. Button-komponentti on muuten samanlainen kuin edelläkin, mutta nopan sivumäärä haetaan tällä kertaa erillisestä TextField-komponentista ja sen text-ominaisuudesta. TextField perii QML:n peruskomponentin TextInput, joten niiden ominaisuudet vastaavat pääosin toisiaan. Suositeltavaa on käyttää kannen toteutuksessa CoverBackground-komponenttia, joka sisältää esimerkiksi logiikkaa kannen sijoittamiseen kotinäkymässä. Nykyinen arvo kerrotaan sovelluksen käyttäjälle valueText-ominaisuuden avulla. Repeater luo jokaista mallin alkiota kohden yhden edustajan (delegate). Sovelluksen pääsivun loppuosa eli Grid-komponentti ja sen alikomponentit. Sen arvo viittaa suoraan value-ominaisuuteen, jonka arvo puolestaan päivittyy automaattisesti, kun liukua siirretään. 44 2014.2 kymmeneen. Ominaisuus placeholderText puolestaan asettaa tekstin, joka näytetään tekstikentän ollessa tyhjänä. Sovelluksen pääsivun Labelja Sliderkomponenttien sisältö. Lisäksi edustajassa voi käyttää ominaisuutta index, joka kertoo data-alkion sijoituksen mallissa. Grid-komponentin avulla napit sijoitetaan ruudukkoon, jossa on kaksi saraketta ja neljä riviä. Koska ruudukossa on yhteensä kahdeksan solua, pitää Grid-komponentilla olla kahdeksan alikomponenttia. Listaus 4. Mallin dataan päästään käsiksi modelDataominaisuuden avulla, jota voi käyttää edustajan määrittelyssä. Repeater-komponentti käytännössä korvaa sen, että painikekomponentti Button olisi toistettu kuusi kertaa hieman erilaisella nopan sivumäärällä. Yleensä sille asetetaan kolme ominaisuutta: leveys, teksti ja suoritettava toiminto, kun painallus havaitaan. Kannessa näytettävät tekstit on toteutettu Label-komponenteilla, jotka puolestaan ovat sijoittelusta vastaavan Columnkomponentin sisällä. Esimerkkisovelluksessa käytetty Qt.ImhDigitsOnly kertoo, että tekstikenttä hyväksyy vain numeroita, joten Sailfish tuo esiin numeronäppäimistön, kun tekstikenttä aktivoidaan. Noppasovelluksessa halutaan kokonaislukuja, joten käytetään IntValidatoria ja määritellään lukualueeksi 2–10 000. Grid sijoittaa alikomponenttinsa järjestyksessä vasemman ylänurkan solusta alkaen. Tässä tapauksessa painalluksen seurauksena kutsutaan funktiota roll_dice, joka arpoo noppien silmäluvut ja sijoittaa arvot Label-komponentteihin. Funktio näkyy listauksessa 5. Ruudukko täytetäänkin Repeaterkomponentin avulla. Sovelluskansi – vuorovaikutteinen kiiltokuva Katsotaan seuraavaksi, miten sovelluskansi toteutetaan. Listauksen alussa määritellään pari ominaisuutta ja signaali, jotka auttavat pyyhkäisytoiminnon toteutuksessa
• Ohjeita kääntämiseen ilman Qt Creatoria: https://wiki.merproject.org/wiki/Platform_SDK_and_SB2. Vaikka artikkelissa käsiteltiin vain QML:ää, kannattaa muistaa, että C++kieli näyttelee vielä merkittävää osaa Sailfish-sovellusten kehityksessä. Toinen CoverAction puolestaan reagoi, kun pyyhkäistään vasemmalle. Sovelluksen voisi periaatteessa julkaista Jollan sovelluskaupassa, sillä siinä on noudatettu kaupan teknisiä sääntöjä. Monimutkaisiin sovelluksiin QML ei ehkä ole riittävä, ja siitä puuttuu joitakin Sailfishjärjestelmän rajapintoja. • Esimerkkiohjelma ”Hello World Pro”, joka täyttää Jollan sovelluskaupan vaatimukset: https://github.com/amarchen/helloworld-pro-sailfish. • Sailfish-projekteja Githubissa: https://github.com/sailfishapps. CoverBackground { id: root property string lastThrow: "" property bool coverThrowEnabled: false signal requestThrow() Column { anchors.centerIn: parent Label { anchors.horizontalCenter: parent.horizontalCenter text: "Last throw:" } Label { anchors.horizontalCenter: parent.horizontalCenter text: root.lastThrow } } CoverActionList { enabled: root.coverThrowEnabled CoverAction { iconSource: "/usr/share/icons/hicolor/86x86/apps/harbour-ropedice.png" onTriggered: root.requestThrow() } } } Listaus 6. Tiedosto harbour-ropedice.qml. Openrepos-julkaisualustalle sen voi lähettää säännöistä välittämättä. CoverPage.qml, sovelluskannen määritys. Jos alikomponentteja on vain yksi, se sijoitetaan keskelle kannen alareunaa, ja triggered-signaali syntyy pyyhkäisyllä kumpaan suuntaan tahansa. Aiemmin esittelimme listauksen 1, josta sovelluskannen määrittely oli jätetty pois. Vaikka sovellus olisi julkaisukunnossa ja kehittäjän mielestä täydellinen, on käyttäjillä kuitenkin ikävä taipumus löytää puutteita. Nopanheittosovellukseen voisi lisätä vielä paljon ominaisuuksia. • Käyttäjien ylläpitämä, hitaasti päivittyvä kooste Sailfish-kehityksestä: https://github.com/hardcodes/developwithsailfishos. •?Nopanheiton tuloksen kopioiminen leikepöydälle, esimerkiksi vetovalikon tai sovelluskannen pyyhkäisytoiminnon avulla (Clipboard, PullDownMenu, MenuItem, CoverActionList). • Muita avoimen lähdekoodin projekteja: https://wiki.merproject.org/wiki/Sailfish_OS_OpenSource_ Apps. •?Itse määritettävän nopan heittäminen virtuaalinäppäimistön rivinvaihtonäppäimellä (EnterKey). Asetetaan sovelluskansi ja yhdistetään se pääsivun toimintoihin. Alla on lueteltu jatkokehitysideoita, joiden avulla myös Sailfish-ohjelmointiin pääsee uppoutumaan syvemmin. • Irc-kanavalta #sailfishos (Freenode) saa vertaistukea. 45 vasempaan alanurkkaan ja toinen oikealle. Pelkällä QML:llä päästiin kuitenkin hyvään alkuun, ja se kyllä riittää paljon pidemmällekin. • Sähköpostilista: https://lists.sailfishos.org/cgi-bin/mailman/ listinfo/devel. Sulkeissa on vinkiksi komponentteja, joista voi olla hyötyä. Jotta keskustelijat eivät kyllästyisi samoihin kysymyksiin, kannattaa vastauksia etsiä ensin lokeista esimerkiksi Googlella: ”<hakusanat> site: http://www.merproject.org/logs/”.. • Avoin julkaisualusta ilman laatuvaatimuksia: https://openrepos.net/. • Usein kysyttyjä kysymyksiä: https://sailfishos.org/develop-faq.html. Esimerkkisovellus on nyt valmis ja näkyy oheisissa kuvissa. Projektin seuraavat vaiheet Artikkelissa käytiin lyhyesti läpi Sailfishsovelluksen kehittämiseen tarvittavat työkalut ja QML-komponentit. Siinä sidotaan kannen ominaisuudet päivittymään pääsivun ominaisuuksien mukaan ja määritellään käsittelijä requestThrow-signaalille. • Tietoa Jollan sovelluskaupasta: https://harbour.jolla.com/faq. • Tietoa sovellusten asennuspakettien tekemiseen: https://sailfishos.org/develop-packaging-apps.html. cover: Component { CoverPage { lastThrow: mainPage.lastThrow coverThrowEnabled: mainPage.diceIsThrown onRequestThrow: { mainPage.roll_dice(mainPage.lastDiceMax); } } } Listaus 7. Valmis noppasovellus virtuaalikoneessa… …ja ikiomassa puhelimessa. Puuttuva koodi on nähtävissä listauksessa 7. Lisää tuulta purjeisiin • Sailfish Silica -komponenttikirjasto: https://sailfishos.org/sailfish-silica/index.html. Käsittelijä asetetaan kutsumaan pääsivun roll_dice-funktiota, ja näin nopanheiton tulos päivittyy kanteen automaattisesti ominaisuuksien sitomisen ansiosta. •?Heittohistorian tyhjennystoiminto varustettuna katumusajastimella (RemorsePopup). •?Erillinen heittohistoriasivu, josta näkee edelliset heitot (ListModel, ListElement, SilicaListView, ListItem). Tämän pohjalta on hyvä jatkaa kohti monimutkaisempia sovelluksia.. Kannen pyyhkäisy oikealle synnyttää ensimmäisen komponentin triggered-signaalin
Juotos on liitoksena huomattavasti varmatoimisempi kuin pelkkään metallikontaktiin perustuvat kytkentätavat, eli erilaiset puristettavat liittimet tai pelkkä johtojen kietominen yhteen. Pieni pala hiomapaperia helpottaa juotettavien pintojen valmistelua. Liitin on numeroitu siten, että kun katsot sitä edestäpäin, nasta 1 on ylävasemmalla, nasta 9 alaoikealla. Saat ohjeet oman laitteesi peliohjaimelle helposti internetin hakukoneella. Kun juotin nostetaan pois, tina jäähtyy ja muodostaa sähköä johtavan liitoksen kahden kontaktipinnan välille. Esimerkiksi MSX:ssä on mahdollista käyttää kahta tulitusnäppäintä, Amigassa vieläkin enemmän. Koska 9-napaisen liittimen nastoja jäi yli, muutamat valmistajat käyttivät niitä omiin tarkoituksiinsa. Juottimen puhdistukseen tarvitaan joko vedellä kostutettu sieni tai metallisäikeistä tehty tyyny. Tarvittavat työkalut. Ilotikun anatomiaa Niin sanottua Atari-liitäntäistä peliohjainta käytti suurin osa kotitietokoneista. Kuva 2. Nimensä se sai Atari 2600 -pelikonsolin mukaan. Juottamisessa ei sinällään ole kyse mystiikasta. 46 2014.2 Rakentelu O mat elektroniikan opintoni rajoittuvat kahteen viikkotuntiin peruskoulun 8. Välineet kuntoon Ilman kunnollisia työkaluja homma loppuu alkuunsa. Jokaista suuntaa vastaa yksi peliohjainliitännän nasta, minkä lisäksi niillä on vielä yhteinen maanasta. Liian kuuma juotin sulattaa myös johtojen eristeet; liian viileä taas ei sulata edes tinaa. Humanistin kolvauskoulu on tarkoitettu sinulle, joka olet aina miettinyt, osaisitko rakentaa jotain. Tarvitset ainakin elektroniikalle tarkoitetun juottimen (mieluiten säädettävän juotinaseman), juotostinaa ja sivuleikkurit tai kuorimapihdit. Kuten 2600 itse, myös sen peliohjain oli hyvin yksinkertainen laite, joka koostui viidestä kytkimestä: ylös, alas, oikealle, vasemmalle ja tulitus. Tarveaineet.. Juottimen eli kolvin avulla lämmitetään juotostinaa niin, että se sulaa halutun liitoksen päälle. Uravalinta vei eri suuntaan, mutta olen silti lähes jatkuvasti huomannut tarvitsevani juottamisen kaltaista perustaitoa. Hakemalla esimerkiksi ”msx joystick pinout” saa eteensä selkeän kuvan tarvittavasta nastajärjestyksestä. Paksu johto ja tina vaativat Humanistin kolvauskoulu Elektroniikka on mukava harrastus, ja sen perusteiden osaamisesta on paljon hyötyä. Teksti: Mikko Heinonen Kuvat: Risto Mäki-Petäys, Mikko Heinonen Kuva 1. ja 9. Juottimen lämpötilan pitää olla sopiva. luokalla yli 20 vuotta sitten. Sähkölaitteiden kanssa on tärkeää, ettei koske mihinkään sellaiseen, jota ei ymmärrä. Se on etenkin juotosten laadun suhteen huomattavasti suurpiirteisempää puuhaa kuin piirilevylle juottaminen. Peliohjaimia on edelleen mahdollista ostaa kaupastakin, mutta niissä on yleensä vain Atarin perustoiminnot. Kouluttamattoman harrastajan on syytä pysyä erossa kaikenlaisesta, mikä liittyy pistorasiasta saatavaan verkkovirtaan. On hyödyllistä osata tehdä vaikkapa erilaisia johtoja, ja usein säästää myös rahaa korjaamalla rikkoutuneita laitteita itse. Tässä esimerkissä rakennan MSXjoystickin, jossa siis kytketään kaksi tulitusnäppäintä. Tärkeää on kuitenkin huomata, ettei tällaista ohjainta kannata liittää Amigaan. Muuten kytkentä on samanlainen kaikissa tietokoneissa. Myös yleismittari kannattaa hankkia, sillä siitä on runsaasti iloa, eikä perusmalli paljon maksa. Siksi aloitamme helposta projektista ja teemme perinteisen digitaalisen peliohjaimen. MSX:n toisen tulitusnäppäimen linja on Amigassa kytketty 5 voltin jännitteeseen, jolloin sitä painettaessa syntyy oikosulku ja Amiga voi rikkoutua. Hyvä peruslämpötila on noin 350 astetta. Kytkemällä maa yhteen tietyn suunnan tai tulituksen kanssa saadaan aikaan haluttu toiminto
Kuvassa 2 näkyvät ohjaimen rakennusaineet. Kirjaa ylös, minkä värinen johto vastaa mitäkin nastaa. Ota yleismittari esiin ja kytke se vastusmittaukselle (merkkinä on oomega). Jos käytössäsi on kunnolliset kuorimapihdit, voit oikaista hieman. Piuhoitus alkaa Laita juotin lämpiämään ja ota ohjainosa käteesi. Voit valita minkä värin tahansa, kunhan muistat, mikä se on. Voitto!. Perustasoinen ohjain maksaa noin 10 euroa, napit pari kolme euroa kappale ja kaapelin hinnaksi muodostuu reilu vitonen. Näin johtoa ei tarvitse katkaista eikä kaikkiin napoihin tarvitse liittää kahta johtoa. Kuori maajohtoa keskeltä, vedä se läpi rei’istä kuorineen ja juota se sitten kiinni kuoritusta osasta. Nastat järjestykseen Koska oikaisemme johdon valmistuksessa, meidän pitää ensin selvittää, miten jatkojohdon nastat on kytketty. Kuori kaikkia johtoja noin 5 cm:n matkalta, kiedo ne yhteen, työnnä läpi kytkimen reiästä ja juota kiinni. NC-navat ovat lepoasennossa kytkettynä, mutta me haluamme juuri päinvastaisen toiminnon. Katkaise jatkojohdon urosliitin (se, jossa on metallisia nastoja, ei sitä, jossa on reikiä) sivuleikkureilla tai kuorimapihdeillä. Ohjaimen voi hyvin koota esimerkiksi rikkoutuneen ulkoisen kiintolevyn koteloon ja nakata itse kiekon SER-keräykseen. Älä pidä juotinta kiinni pinnassa liian pitkään, ettei se johda lämpöä kytkimen sisään. Ennen kuin aloitat juottamista, tee jatkojohtoon solmu suunnilleen 5 cm:n päähän siitä, mistä aloit kuoria ulompaa eristettä. Periaatteessa sen voisi tehdä käyttämällä pelkkiä teollisuuskytkimiä, mutta käyttömukavuuden kannalta suosittelen hankkimaan peliautomaatteihin tarkoitetun ohjaimen rungon ja yksi tai kaksi nappia tarpeidesi mukaan. Kytkimen kontaktipinta on todennäköisesti hapettunut ja siinä on myös varastorasvaa. Jokaisen reiän kohdalla liitä toiseen anturiin johtoja yksi kerrallaan, kunnes löydät sen, jonka kohdalla yleismittari herää eloon (eli näyttää vastusta, virta siis kulkee johdon läpi). Tähän on kaksi syytä. Karhenna pinnat ennen juottamista. Koska maataso tulee kiinni kaikkiin kytkimiin, on mielekästä juottaa kytkimet ensin kiinni toisiinsa ja sitten vasta varsinaiseen liittimeen. Kuori sitten sisempää eristettä kaikkien johtojen päästä 2–3 cm:n matkalta. 47 enemmän lämpöä kuin ohuet. Solmu toimii myöhemmin vedonpoistajana. Se ei ehkä ole järin kaunis, mutta jos tinaa on sekä johdossa että kontaktipinnassa eikä johto irtoa vetämällä, liitos on riittävän hyvä tähän tarkoitukseen. Kuori ulompi eriste pois noin 20 cm:n matkalta. Jos noudatit ohjetta, olet nyt tehnyt ensimmäisen juotoksesi. Juotostina tarttuu erittäin huonosti tällaiseen pintaan. Kuva 5. Käytämme tässä kytkennässä NO-napoja. Yleensä kotona on jokin rikkinäinen laite, josta piuhanpätkän voi hyödyntää. Juotin paikallaan. Kuva 4. Johdon teemme Atari-ohjaimille tarkoitetusta jatkojohdosta. Selvitä sen jälkeen haluamasi ohjaimen nastajärjestyksestä, mihin johdot pitää kytkeä. Kuva 6. Osat voi hankkia vaikkapa nettikaupoista. Ota pieni pala hiomapaperia ja karhenna pinta ennen kuin edes yrität juottaa. Katso, millaisia kytkimiä hankkimasi ohjain käyttää. Taulukossa 1 on esimerkki Ebaysta ostetusta johdosta ja MSX-joystickista. Voit hävittää urosliittimen, sillä käytämme jatkossa vain naaraspäätä ja itse johtoa. Nasta MSX 1 ruskea YLÖS 2 oranssi ALAS 3 harmaa VASEN 4 musta OIKEA 5 punainen 6 keltainen NAPPI 1 7 sininen NAPPI 2 8 valkoinen 9 vihreä MAA Taulukko 1. Yleismittari näyttää, että johdon päät ovat yhteydessä. Lisäksi tarvitset pätkän tavallista, 1-johtimista sähköjohtoa maanastan kytkemistä varten. Lisäksi tulee vielä kotelon hinta, ellet satu jo omistamaan sopivaa muovilaatikkoa. Tinaa ei kannata lisätä tarpeettoman paljon, sillä kontakti ei siitä ainakaan parane. Jos napoja on vain kaksi, ei ole väliä, miten päin ne kytket. Neljänteen kytkimeen on juotettava kiinni myös kaksi muuta johtoa: liittimeltä tuleva maajohto ja tulitusnappien tarvitsema maasignaali. Toisekseen kaupoista saa yleensä vain ruuveilla varustettuja liittimiä, jotka eivät aina mahdu kotitietokoneiden ahtaisiin joystick-portteihin. Vedä sitten johto pinnassa olevan reiän läpi ja asettele se niin, että se pysyy paikallaan pitämättä – tarvitset seuraavassa molempia käsiäsi. Käytän esimerkissä vihreää maajohtoa. Kuva 3. Ensinnäkin 9-napaisen liittimen juottaminen voi olla turhauttava projekti aloittelijalle. Kääri pätkä juotostinaa mittarin toisen anturin ympärille. Erään joystick-johdon nastajärjestys. Kun tina tarttuu johtoon ja karhennettuun pintaan, nosta juotin irti. Kierrä nyt koko ohjain ja juota maajohto kiinni jokaisen kytkimen toiseen napaan. Työnnä sitten juotostinan pätkä jatkojohdon naarasliittimen reikiin yksi kerrallaan, alkaen ylävasemmalta (1) ja päätyen alaoikealle (9). Huolehdi, etteivät johdot kosketa toisiaan. Jos napoja on kolme, ne on merkitty NO (normally open) ja NC (normally closed). Näet sen oikean paikan myöhemmistä kuvista. Paina juotin kiinni kontaktipintaan ja syötä toisella kädellä rullasta juotostinaa juottimen päälle niin, että se sulaa
Etenkin kannattaa varmistaa, ettei ole vahingossa kytkenyt mitään jännitteellisiä napoja (MSX:ssä nasta 5, Amigassa 7). Kuva 12. Kuva 11. Tämä on hyvin oleellista, sillä haluat varmasti pelihahmon tottelevan ohjausta oikein. Tee sitten napeille noin 30 mm:n reiät (koosta riippuen) ja kiristä ne paikalleen. Tässä käyttämäni laitekotelo on iso, ruma ja vaikea työstää, mutta tulin sellaisen jo ostaneeksi, joten jatkamme sen pohjalta. Sulkiessasi kotelon huolehdi, että johtoon aiemmin tekemäsi solmu jää kotelon sisään. Kuva 10. Periaate on sama kuin maajohdon kanssa: kuori, karhenna pinta, pujota johto, juota. Toimintaperiaate on ihan sama. Tee sama muille suunnille ja merkitse suunnat ohjaimen pohjaan. Juota nyt eri ilmansuuntien johtimet kiinni kytkimien napoihin. Tee lopuksi johdolle pieni kolo ulkoseinämään. Reaalielämän vastine ns. Johto kuorittuna keskeltä. Kuva 8. abiko-liittimillä.. Laita toinen anturi maanastaan ja toinen siihen, jota haluat testata. Juota sitten nappeihin niille tarkoitetut signaalijohtimet. Kun saat ohjaimen ja napit kiinnitettyä, vedä aiemmin napeille varattu maajohto niiden toiseen napaan ja juota se kiinni. Tästä ei ole haittaa, koska muut johdot on eristetty. koodariväreille.. Käännä ensin ohjain siten, että sauva näyttää ylöspäin. Päätä sitten, mikä suunta tulee olemaan ylöspäin, ja merkitse se ohjaimeen. Osiksi voi valita laadukkaamman tikun ja napit, ja kotelon voi tehdä vaikkapa puusta. 48 2014.2 Suunnat selville Seuraavaksi pitää selvittää, mihin kytkimiin signaalijohtimet liitetään. Se poistaa vedon kaapelista, jolloin juotokset eivät irtoa, vaikka ohjainta riiputtaisi sen johdosta. Käännä nyt ohjain ylösalaisin ja tarkista, mitä kytkintä sen varsi painaa, kun painat tikkua ylöspäin. Esimerkiksi Thingiversestä löytyy muutamia valmiita malleja. Irrota ohjaimen pallo, poraa varrelle noin 12 mm:n reikä ja pujota varsi läpi siitä. Jos haluat varmistua sähköisestä toiminnasta, käytä nastajärjestyksen mittaamiseen alussa neuvomaani kikkaa – nyt vain tarvitset juotostinan pätkät molempiin yleismittarin antureihin. Kuva 7. Valmista tuli Funktionalistinen peliohjainlootamme on nyt valmis. Napit juotettuina. Kuvassa 11 olen kuorinut maajohdon ensimmäiseltä napilta alkaen, jotta se mahtuu rei’istä läpi. Koska olen muovin työstämisessä vielä vähemmän auktoriteetti kuin juottamisessa, annan tähän vain ylimalkaiset ohjeet. Koteloitumisvaihe Ennen nappien juottamista on hyvä asentaa ohjain koteloon, sillä useimmat napit kiinnitetään alapuolelta. Luonnollisesti voit panostaa ohjaimeen niin paljon kuin haluat. Kiinnitä pallo takaisin ja tee reiät ruuveille, joilla ohjaimen jalusta kiinnitetään. Ja jos et koe vielä olevasi valmis juottamaan, voi liitokset tehdä myös puristettavilla ns. Kuorimapihdit. Voit myös 3D-tulostaa kotelon. Kuva 9. Pyöröviila on hyödyllinen työkalu reikien hienosäädössä, sähkökäyttöinen pieni hiomakone vielä hyödyllisempi. Kolmen johdon liitos. Kytkinten ohjaussuunnat alhaalta päin
Noin 73 000 jäsenellään TEK on Akavan toiseksi suurin jäsenliitto.. Kaipaako CV:si kohennusta tai työsopimuksesi tarkistusta. TEKin JÄSENYYS – TYÖELÄMÄN TOIMIVIN KÄYTTÖLIITTYMÄ YT:t. Paljonko palkkaa. Haluatko verkostoitua alasi ammattilaisten kanssa. Tekniikka&Talous sekä MikroPC sähköisesti tai paperilla • Oikeusturvaja vastuuvakuutus, ryhmäetuvakuutukset • Yrittäjäneuvonta • Lukuisia jäsentapahtumia ja jäsenalennuksia Tekniikan akateemiset TEK on tekniikan alan yliopistokoulutettujen etuja palvelujärjestö. Vai etsitkö urallasi uutta suuntaa. Jäsenet ovat tekniikan, tietojenkäsittelyn, arkkitehtuurin tai luonnontieteiden yliopistotutkinnon suorittaneita ja vastaavissa tehtävissä työskenteleviä korkeakoulututkinnon suorittaneita sekä näiden alojen opiskelijoita. Liity jäseneksi nyt, saat kaiken tämän: • Työttömyysturva IAET-kassasta • Sinulle räätälöity palkkaneuvonta • Oman alasi edunvalvonta • Kattavat työsuhdelakipalvelut • Henkilökohtainen uraneuvonta, uratapahtumia ja CV-klinikka • Ammattilehdet: TEK-lehti ja esim. Uusi duuni haussa. TEK tukee jäseniään työuralla, edistää ammattikunnan osaamista ja yhteisöllisyyttä sekä rakentaa kestävää hyvinvointiyhteiskuntaa. Lähdössä ulkomaille. Kiinnostaako yrittäjyys
Myös Skyrim antaa pelaajalle vapaat kädet toteuttaa unelmansa – pelin sallimissa rajoissa. Säännöt voivat olla vaikkapa seuraavanlaisia: ”pelaaja kuolee osuttuaan viholliseen”, ”pelaajaan ja viholliseen vaikuttaa painovoima”, ”kenttää ei pääse läpi, jos aika loppuu” ja niin edelleen. Kun pelin sääntöinä ja pelikenttänä on todellinen maailma, ollaan niin sanotun ironman-pelin parissa. Esimerkiksi pokeri ja erilaiset urheilulajit joukkuepeleistä yksilösuorituksiin ovat selkeästi määritelmän sisällä. Joskus kentästä selviytymistä vaikeuttaa aikaraja tai vaikkapa yksinkertaiset puzzle-elementit. Määritelmiä on monia, mutta tässä eräs toimiva: peli antaa pelaajalle sekä haasteen että työkalut sen selvittämiseksi. Skyrimissa voi ostaa taloja, mennä naimisiin, käydä kauppaa, valmistaa esineitä ja tehdä paljon muutakin arkipäiväistä. Mukaan voidaan lisämausteeksi laittaa vaarallisia vihollisia, jotka katkaisevat pelaajan etenemisen. Pelimekaniikat muodostavat työkalupakin, joka on annettu pelaajalle pelikentän läpäisemiseksi. Monien tasohyppelypelien idea on yksinkertaisesti haastaa pelaaja kulkemaan pelikentän läpi. Kuitenkin nämä arkisetkin puuhat vaativat pelaajalta paljon työtä ja suunnitelmallisuutta. Teksti: Sami Koistinen Kuvat: Mitol Berschewsky. 50 2014.2 Pelit M ikä oikeastaan tekee pelistä pelin. Pelisuunnittelun filosofiaa, osa 1 Tuoreessa juttusarjassa pohdimme pelikehityksen perusasioita käytännön esimerkkien kautta. Pelejä kaikki tyynni Käyttämämme pelin määritelmä – peli antaa pelaajalle sekä haasteen että työkalut sen selvittämiseksi – ei rajoitu digitaaliseen universumiin. Kaikki tapahtuu pelin määrittelemien sääntöjen puitteissa. Myös monet elämänvalinnat voidaan nähdä saman määritelmän kautta. Vaikkapa pörssimeklarin, urapyrkyrin tai poliitikon tietä kohti vaikutusvaltaa voidaan pitää pelinä – siis joukkona haasteita, jotka on ylitettävä. Esimerkki vapaasti määriteltävän haasteen pelistä on Simcity, jossa pelaaja yrittää rakentaa hienon toimivan kaupungin, ajautumatta konkurssiin. Käytössä on vain yksi elämä, eikä epäonnistumisen jälkeen voi ladata aiemmin tallennettua Mikä on peli. Ensimmäisellä kerralla käsittelyssä on kaikkein pyhin: pelin ydinsilmukka. Peli ei määrittele, millainen kaupungin tulee olla. Myös tällaisissa hiekkalaatikkopeleissä on tarkkaan määritellyt työkalut ja säännöt, joiden puitteissa tavoitellaan itselle asetettuja haasteita. Tasoloikkapelien työkalupakkiin kuuluvat pelihahmon liikuttelu, hyppy ja kasa muita mahdollisia pelimekaniikkoja. Haaste on vapaa Jotkin pelit antavat pelaajan itse keksiä omat haasteensa. Moni suorittaakin vain muutamia tehtäviä, kunnes uusi salainen virtuaalielämä alkaa. Ja kaikki tämä ilman, että pelaaja olisi pakotettu läpäisemään peli. Pelaaja saa päättää tämän aivan itse ja sitten yrittää parhaansa
Kaikessa yksinkertaisuudessaan silmukka on vain lista toimintoja, joita pelaaja suorittaa päästäkseen lähemmäksi pelin tavoitetta. 5. Metapeli: Jokainen maaliin saatu pallo antaa joukkueelle yhden pisteen. Pallo ei saa poistua kentältä. Gradiuksen ydinsilmukka pyörii hyvin lähellä matalan tason pelimekaniikkoja. Haaste: Kentällä on toinenkin joukkue, jolla on samat säännöt, sama pallo ja sama tavoite mutta eri maali. Tavoite, joka pelaajan täytyy saavuttaa sääntöjen puitteissa. Palaute, josta pelaaja tietää, mitä pelissä tapahtuu. (Kuva 2.) On vaikeampaa sanoa, ovatko esimerkiksi keskustelun aloitus, keskusteluvalinnat, hahmon taitojen parantelu tai vaikkapa tähtijärjestelmien välillä liikkuminen ydinmekaniikkoja. Mass Effect -pelien ydinpelimekaniikkoja ovat juokseminen, aseella tähtääminen, ampuminen, erikoistaitojen käyttö, tavaroiden keräys sekä liuta muita ominaisuuksia. Joskus pelikenttä ja sen tapahtumat ovat vain yksi silmukan osa ja itse silmukka pyörii metapelitasolla. Ytimessä silmukka Kaikki pelit sisältävät ydinsilmukan, vaikka joskus sitä voikin olla hankalaa tunnistaa valmiista pelistä. Yleisesti voidaan kuitenkin sanoa, että mitä paremmin pelaaja hallitsee ydinpelimekaniikat, sitä paremmin hän suoriutuu pelin asettamista haasteista.. Sen poimittuaan pelaaja pystyy päivittämään aluksensa aseet parempiin. Kuva 1. Toisaalta ydinsilmukan voi rakentaa myös niin, ettei se ole sidottu näin kiinteästi matalan tason pelimekaniikkaan. Gradiuksessa pelaaja lentää avaruudessa ja ampuu vihollisia. Hyvä esimerkki tällaisesta silmukasta löytyy legendaarisesta avaruusshoot’em up -pelistä Gradius, joka tunnetaan joillakin laitealustoilla nimellä Nemesis. Perinteinen jalkapallo voidaan määritellä yllä olevilla käsitteillä – sääntöjä hieman yksinkertaistaen – vaikkapa seuraavasti. Tavoite: Liikuta pallo maaliin. 2. Suorita tehtävä, niin saat kokemuspisteitä taitoihin sekä uutta tavaraa. Mass Effectin ydinsilmukka koostuu seuraavista toimenpiteistä: 1. Päivitä keräämiesi resurssien avulla pelihahmot ja varusteet. Jalkapallossa esimerkkejä tästä ovat juokseminen ja pallon potkaiseminen. Etsi uusi tehtävä, ja pelin tarina jatkuu. Kaikissa peleissä ydinsilmukkaa ei suoriteta varsinaisen pelikentän sisällä. Joukkueessasi on muitakin pelaajia, jotka saavat liikuttaa palloa samoilla säännöillä kuin sinä. Kun aikaa on kulunut 90 minuuttia, eniten pisteitä kerännyt joukkue voittaa. Kuva 2. 3. Sen sijaan vastustajan kampittaminen ei ole osa ydinmekaniikkaa, vaan sen ympärillä tapahtuva vapaaehtoinen, epäurheilijamainen toiminto. Resurssien keräys ja käyttö tapahtuvat aina pelikentällä, keskellä taistelun tiimellystä. Mitä enemmän sinulla on pisteitä vastustajaasi nähden, sitä parempi on tilanne. Kerää vihollisten jättämät resurssit avaruudesta. Tämä helpottaa tulevien tehtävien suorittamista. (Kuva 1.) Pelaajat suorittavat Gradiuksen silmukan tehtävälistaa järjestyksessä, parhaansa mukaan. Palloon ei saa koskea käsillä. 2. Voit liikuttaa palloa muilla ruumiinosillasi. Pelit sisältävät usein erilaisia resursseja, joita pelaaja voi käyttää pelin edistämiseen. Jalkapallo pelinä Käytännössä kaikki pelit sisältävät seuraavat asiat: 1. Gradiuksen ydinsilmukka koostuu seuraavista toimenpiteistä: 1. Haaste, joka vaikeuttaa tavoitteen saavuttamista ja tekee pelistä mielenkiintoisen. Säännöt, jotka määrittelevät pelin raamit, joiden puitteissa kaikki tapahtuu. 2. Usein resurssit ovat olennainen osa pelin ydinsilmukkaa. Tämä auttaa pelaajaa selviytymään hengissä kentän läpi. Pelitaidot määräävät, kuinka hyvin silmukan eri kohdista suoriudutaan. Palaute: Mitä lähempänä pallo on vastustajan maalia, sitä parempi tilanne on. ” Peli antaa pelaajalle haasteen sekä työkalut sen ylittämiseksi. Korkeammalle tasolle Ydinsilmukan mekaniikat ovat pelin sydän. Säännöt: Pelikentällä on pallo. 3. Metapeli, joka on pelin etenemisen mittari. 51 tilannetta – eli juuri niin kuin Nethackissa. Nämä kaikki tapahtuvat pelikentän sisällä. Ydinmekaniikat ovat luuranko, jonka päälle ripustetaan muita, vähemmän tärkeitä toimintoja. 4. Mitä lähempänä pallo on oman joukkueen maalia, sitä huonompi tilanne on. Jos erotuomari näyttää sinulle punaista korttia, menit soheltamaan kentällä pahasti.. Jotkin tuhotut vihollisketjut ja tietynväriset viholliset jättävät jälkeensä power-up-resurssin eli esineen, jonka voi kerätä talteen. Päivitä resurssien avulla omat aseesi paremmiksi, jotta saat tuhottua vihollisia helpommin. 3. Ydinmekaniikan tunnusmerkki on, että pelaaja joutuu käyttämään sitä jatkuvasti pelin eri vaiheista selvitäkseen. Niitä voivat olla esimerkiksi raha, aseet, lisäaika ja monet muut asiat. Hyviä esimerkkejä tällaisesta ovat vaikkapa Mass Effect -sarjan pelit, joissa pelihahmot saavat tehtävän suorittamisesta palkkioksi pisteitä, joita voi sijoittaa taitoihin. Tuhoa kokonainen vihollisketju tai tietynvärinen vihollinen. Maalin edessä on vahti, joka yrittää estää palloa menemästä maaliin. Ilman niitä peliä ei voi pelata
Ruutupuskuriolioihin voi liittää myös yksiulotteisia tekstuureja, kolmiulotteisten tekstuurien viipaleita tai kuutiotekstuurien sivuja. Tällöin voidaan käyttää renderöintipuskureita (renderbuffer objects) toissijaisten osapuskurien kohteena. Oliotyypin nimi on Framebuffer. Mahdollisuudet ovat rajattomat. Renderöintipuskureita käytetään vain tähän tarkoitukseen, joten OpenGL-ohjelmointi: jälkikäsittelytehosteet Kaikki loppuu aikanaan. Teksti: Mikko Rasa Kuvat: Mikko Rasa, Mitol Berschewsky Koodi. Useimmissa tapauksissa voi myös käyttää yhdistettyä sidontapistettä GL_FRAMEBUFFER, joka sitoo saman olion molempiin sidontapisteisiin. Kaksiulotteinen tekstuuri liitetään ruutupuskuriolioon komennolla glFramebufferTexture2D. Renderöinnin kohteena olevalle tekstuurille kannattaa tehdä pelkkä muistinvaraus, jolloin ei tarvitse turhaan kopioida pikselidataa ohjelman osoiteavaruudesta näytönohjaimelle. Toiminto kohdistuu sidottuun ruutupuskuriin, mutta tekstuurin ei tarvitse olla sidottu. Tässä artikkelissa toteutamme hehkutehosteen. Se parantaa realismia sellaisissa näkymissä, jotka sisältävät erittäin kirkkaita alueita. Monissa tapauksissa tehosteen toteuttaminen vaatii vain väripuskuria, mutta näkymän renderöintiin tarvitaan myös syvyyspuskuri. Jos tekstuuri on peräisin eri näkymästä, voidaan toteuttaa vaikkapa valvontakameran kuva vartiointihuoneen monitorissa tai maaginen portaali toiseen ulottuvuuteen. Jopa valaistuslaskenta on mahdollista siirtää kokonaan jälkikäsittelyyn, jolloin vältetään turhaa laskentaa pikseleille, jotka jäävät piiloon. Niitä kuitenkin tarvitaan harvemmin, joten emme käy tässä läpi yksityiskohtia. Ruutupuskurioliot Ennen kuin käymme itse tehosteen kimppuun, tutustumme yhteen uuteen OpenGL:n käsitteeseen: ruutupuskuriolioihin (framebuffer objects). Renderöinnin tulosta voi sen jälkeen käyttää pintojen teksturointiin tai tehosteiden toteuttamiseen. Esimerkiksi heijastuksissa käytetään näkymästä renderöityä kuvaa heijastavan pinnan teksturointiin. Yleisiä jälkikäsittelynä toteutettavia tehosteita ovat esimerkiksi liikepehmennys, hehku, ympäristön varjostus ja sRGBvärimuunnos. OpenGL-sarjan viimeisessä osassa lisäämme grafiikkaan toden tuntua jälkikäsittelyllä. Liitettävissä puskureissa voi olla väri-, syvyystai sapluuna-arvoja. Nimensä mukaisesti tehosteilla käsitellään kuvaa sen jälkeen, kun kaikki esineet on piirretty. 52 2014.2 Y ksityiskohtaiset mallit ja tarkat tekstuurit ovat 3D-grafiikassa tärkeitä, mutta viimeinen silaus luodaan jälkikäsittelytehosteilla. Kohdepuskurit voivat olla joko tekstuureja tai erityisiä renderöintipuskureita, jotka käsittelemme hieman jäljempänä. Samoja tekniikoita voi käyttää myös muihin tarkoituksiin. Sidontapisteitä on kaksi: GL_DRAW_FRAMEBUFFER toimii piirtokomentojen kohteena ja GL_READ_FRAMEBUFFER lukukomentojen lähteenä. Siihen on liitettävä ainakin yksi kohdepuskuri ennen kuin sitä voi käyttää renderöintiin. Ruutupuskurioliot noudattavat OpenGL:n yleistä oliorajapintaa. Tekstuurille ei tarvitse olla varattu muistia liittämisen aikana, vaan riittää, kun se varataan ennen ruutupuskuriolion käyttöä. Pohjana käytämme viime Skrollissa esiteltyä grafiikkamoottoria. Niiden avulla näkymä voidaan renderöidä tekstuuriin ohjelman ikkunan sijaan. Ruutupuskuriolio on säiliö eikä sellaisenaan kovin hyödyllinen
Fysikaalisesti oikein tehty tehoste on kuitenkin useimmissa tapauksissa lähes huomaamaton, joten usein tehostetta korostetaan levittämällä pehmennys laajemmalle alueelle. Signaalin ei tarvitse edes olla diskreetti eli näytepisteistä koostuva. Renderöintipuskurien oliotyypin nimi on Renderbuffer, ja tarjolla on vain yksi sidontapiste, GL_RENDERBUFFER. Kuvassa renkaita on voimistettu erottuvuuden parantamiseksi. Sen sijaan Gaussin käyrään perustuva gaussilainen pehmennys (engl. Sopivalla skaalauksella päästään hyvin lähelle oikeaa lopputulosta. Pikselien vaikutukset annetaan yleensä matriisina, jota kutsutaan konvoluution ytimeksi (engl. Tulos on OpenGL-standardin mukaan määrittelemätön. Kuvaalue on globaalia tilaa, joten se on parasta asettaa uudestaan aina kun käytössä oleva ruutupuskuri vaihtuu. Sitä ei ole rajattu kuviin, vaan yhtä hyvin sitä voi käyttää myös ääneen tai radiosignaaliin. Jos tekstuuri on liitetty käytössä olevaan ruutupuskuriolioon, sitä ei voi samanaikaisesti käyttää teksturointiin. Toisin kuin joissakin muissa grafiikkarajapinnoissa, ruutukoordinaattien nollapiste on vasemmassa alakulmassa ja Y-koordinaatti kasvaa ylöspäin. Sen ansiosta kuvassa olevat kirkkaat alueet luovat ympärilleen hehkun, joka leviää ympäröiviin tummiin alueisiin. Ruutupuskuriolion osapuskurit voivat olla erikokoisia kuin järjestelmän tarjoama ruutupuskuri ja myös keskenään erikokoisia. Ruutupuskuriolion eheyden voi tarkistaa komennolla glCheckFramebufferStatus. 53 toteutuksella on enemmän vapauksia tehokkaan säilytystavan ja käsittelyalgoritmien valintaan. Kaksiulotteisen konvoluution laskeminen on hyvin raskas operaatio, joten etenkin reaaliaikagrafiikassa pyritään muotoilemaan ytimet niin, että ne voidaan esittää vaakaja pystysuuntaisen konvoluution yhdistelmänä. Valitettavasti Airyn kiekko ei ole separoituva. Tällöin pehmennetty kuva kannattaa sekoittaa alkuperäiseen kontrastien säilyttämiseksi. Gaussilaisen pehmennyksen toteuttavan konvoluutioytimen kaikki poikkileikkaukset ovat Gaussin käyriä ja korkeuskäyrät ovat ympyröitä. Analogisilla piireillä voidaan suorittaa konvoluutiota jatkuville signaaleille. convolution). Konvoluutiota voidaan soveltaa signaalinkäsittelyssä myös yleisemmin. Hehkutehosteen vaiheet.. OpenGL:n ruutupuskuritajapinta Funktiot: void glGenFramebuffers(GLsizei n, GLuint *framebuffers); void glBindFramebuffer(GLenum target, GLuint framebuffer); void glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers); void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLenum glCheckFramebufferStatus(GLenum target); void glBindRenderbuffer(GLenum target, GLuint renderbuffer); void glDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers); void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers); void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); Sidontapisteet: GL_DRAW_FRAMEBUFFER GL_READ_FRAMEBUFFER GL_FRAMEBUFFER Liitospisteet: GL_COLOR_ATTACHMENTi i on nollasta alkava kokonaisluku GL_DEPTH_ATTACHMENT GL_STENCIL_ATTACHMENT Airyn diffraktiokuviossa on keskellä olevan kiekon ympärillä renkaita, joiden kirkkaus heikkenee etäisyyden kasvaessa. Renderöintipuskurin koko ja formaatti asetetaan komennolla glRenderbufferStorage. Tällaisia tapauksia ovat esimerkiksi auringonvaloa tulvivan ikkunan edessä oleva siluetti, pimeydestä lähestyvän auton ajovalot ja seikkailijan kantama soihtu pimeässä luolassa. OpenGL-toteutus ei voi tietää, mitä osaa halutaan käyttää, joten kuvaalue on määriteltävä komennolla glViewport. Hehkutehosteen teoria Pohjimmiltaan hehkutehosteessa on kyse optiikan epätäydellisyydestä. Lisäksi OpenGL-toteutus voi asettaa rajoituksia osapuskureissa käytettyjen formaattien yhdistelmälle. Operaatiota, jossa kukin pikseli vaikuttaa ympäristöönsä, kutsutaan konvoluutioksi (engl. Tämän voi tehdä vain kerran puskurin elinaikana. kernel). gaussian blur) on. Sillä on seuraavanlaisia vaatimuksia: jokaisen osapuskurin täytyy olla eheä, piirtokomentojen kohteena olevan väripuskurin (yleensä GL_COLOR_ATTACHMENT0) pitää olla liitetty ja kaikkien osapuskurien moninäytteistysasetusten on oltava samat. Ollakseen käyttökelpoinen ruutupuskuriolion on oltava eheä. Virheetönkin linssi tuottaa diffraktiokuvion, jota kutsutaan Airyn kiekoksi. Tällaista ydintä kutsutaan separoituvaksi
Jos sen kokoa muutetaan, on muutettava myös silmukassa olevia arvoja vastaavasti. Samalla kuitenkin kuvaan syntyy artefakteja pienten yksityiskohtien ympärille. Tätä varten teemme uuden luokkahierarkian, jonka kantaluokka saa nimekseen PostprocessingEffect. Kirjoittaja vastaa mielellään OpenGL:ää koskeviin kysymyksiin Ircnetissä nimimerkillä tdb, kanavilla #skrolli ja #opengl.fi.. Se laskee lineaarisen interpolaation kahden ensimmäisen parametrin välillä käyttäen kolmatta parametria interpolaatiomuuttujana. Factors sisältää konvoluutioytimen painoarvot. Esimerkkitoteutus on saatavissa Skrollin verkkosivuilta osoitteesta http://www.skrolli.fi/2014.2/ .. Jos sen arvo on 0, käytetään pelkästään alkuperäistä kuvaa. Ytimen koon ja näytepisteiden välisen etäisyyden valinta on kompromissi laadun, vaikuttavuuden ja suorituskyvyn välillä. Strength on sekoitussuhde, jolla alkuperäinen ja pehmennetty versio yhdistetään. Ensimmäisessä vaiheessa suoritetaan vaakasuuntainen pehmennys ja toisessa pystysuuntainen. Koska hehkutehosteessa on kyse suurista kirkkauksista, ei tavanomaisten 8-bittisten värien dynamiikka riitä. Tällöin pikselishaderin tuottamat väriarvot tallennetaan sellaisenaan eikä niitä rajoiteta 0:n ja 1:n välille. Shaderi käyttää sekoitukseen GLSL:n mix-funktiota. Shaderin toiminnallinen osuus laskee näytteistä summan, jossa käytetään konvoluutioydintä painoarvoina. Tehoste on myös yhdistettävä muuhun grafiikkamoottoriin jotenkin. Arvolla 1 käytetään pelkästään pehmennettyä kuvaa. Delta on kahden näytepisteen välinen etäisyys tekstuurikoordinaateissa. Kasvattamalla etäisyyttä pehmennyksen laajuus kasvaa ja tehosteesta tulee voimakkaampi. Kuvakaappaus esimerkkiohjelmasta. Ensimmäisessä vaiheessa tämä on näkymästä renderöity kuva ja toisessa vaiheessa ensimmäisen vaiheen tulos. Mikäli tehosteita on samaan aikaan käytössä useampia, on edellisen tehosteen lopputulos annettava syötteeksi seuraavalle. Niinpä sivuutamme sen ja keskitymme pikselishadereihin, joissa varsinainen tehoste toteutetaan. Uniform-muuttuja source sisältää lähdetekstuurin. Kaksi ensimmäistä vaihetta voidaan toteuttaa samalla shaderilla, joka näyttää seuraavalta: uniform sampler2D source; uniform vec2 delta; uniform float factors[19]; in vec2 texcoord; out vec4 out_color; void main() { out_color = vec4(0.0, 0.0, 0.0, 0.0); for(int i=0; i<19; ++i) out_color += texture2D(source, texcoord+delta*float(i-9) )*factors[i]; } Gaussilaisen pehmennyksen toteuttava pikselishaderi. Se on muotoa (x, 0) tai (0, y) riippuen siitä, kumpaan suuntaan pehmennys tapahtuu. Taulukon koon on oltava pariton, jotta näytteitä on yhtä monta keskipisteen molemmin puolin. Tälläkin voi vaikuttaa tehosteen voimakkuuteen. Uniform-muuttuja source sisältää alkuperäisen kuvan näkymästä, blurred puolestaan pehmennetyn version. Tekstuurikoordinaatteja laskettaessa silmukkalaskurista vähennetään puolet ytimen koosta, jolloin näytteet sijoittuvat tasaisesti käsiteltävän pikselin molemmin puolin. Parempi onkin asettaa kohdetekstuurille liukulukuformaatti, kuten GL_RGB16F. Siihen käytettävä kulmapisteshaderi on hyvin yksinkertainen. Hehkutehosteen aikaansaamiseen tarvitaan kolme vaihetta. uniform sampler2D source; uniform sampler2D blurred; uniform float strength; in vec2 texcoord; out vec4 out_color; void main() { out_color = mix( texture2D(source, texcoord), texture2D(blurred, texcoord), strength ); } Kuvat yhdistävä pikselishaderi. Ytimen on hyvä olla normalisoitu, eli arvojen summan pitäisi olla 1. 54 2014.2 Hehkutehosteen toteutus Jälkikäsittelytehosteet piirtävät yleensä yhden suorakulmion, joka täyttää koko ruudun. Kolmannessa vaiheessa yhdistetään pehmennetty kuva alkuperäiseen. Ytimen kokoa kasvattamalla saadaan vastaava lopputulos ilman artefakteja, mutta näytteitä joudutaan ottamaan enemmän, ja suorituskyky huononee
Koko ryhmä kävi melko nopeasti kirjan kokonaisuudessaan läpi, ja jatko-osaa ehdittiin jo kaipailla. Opetushankkeet ovat ruvenneet poikimaan myös oppikirjoja. Opas testissä Teksti: Toni Kuokkanen Peliohjelmointiopas testattiin myös autenttisella yleisöllä: 9-, 11ja 13-vuotiailla innokkailla. Tekijät ovat selvästikin muistelleet omia alkuaikojaan ja ottaneet niistä vaikutteita. Myös Basicin valintaa kieleksi voidaan pitää varsin perinnetietoisena, vaikkei Small Basic kovin lähellä vanhan ajan basiceja olekaan. Ohjelmointiympäristön valintaa voi myös kritisoida. Lähestymistapa muistuttaa hyvin paljon 1980-luvun mikrotietokonekirjoja aina esimerkkiohjelmia myöten: muuttujien toimintaa harjoitellaan ”Mikä on nimesi?” -ohjelmalla, silmukoita puolestaan ”raketin lähtölaskennalla”. Mahdollisuus tehdä kavereiden laitteissa toimivia pelejä antaisi paljon paremmat eväät uudelle nuorison ohjelmointikulttuurille. Myös muita samansuuntaisia projekteja kannattaa toki pitää silmällä – esimerkiksi lapsille Ruby-kielellä ohjelmointia opettavaa Hello Ruby -kirjaa, jota työstetään paraikaa joukkorahoituksen turvin.. Muutamista ongelmistaan huolimatta Koululaisen pienen peliohjelmointioppaan kaltaiset kirjat ovat hyvin tervetulleita nykyiseen tietokonekulttuuriin. 80-sivuisen kirjan ensimmäisessä puoliskossa paneudutaan kielen ja ohjelmointiympäristön alkeisiin ihan sen asentamisesta alkaen. Kirjan jälkipuoliskossa keskitytään kahden laajemman peliohjelman rakentamiseen. Ensimmäinen näistä on tekstipohjainen seikkailupeli, jälkimmäinen puolestaan graafinen autopeli. Vanhemmat testaajat kritisoivat hiukan sitä, että kirjassa käytiin jotkin asiat läpi liian hitaasti. Eikö jälkimmäisen sijaan olisi ollut hyvä esitellä vaikkapa taulukkotietorakenne, jota molemmat esimerkkipelit hyödyntävät. Ehkä tilaa olisi voinut käyttää myös muutaman rivin mittaisiin esimerkkiohjelmiin, joissa esitellään mielenkiintoisia graafisia ja muita temppuja. Molempien listaukset on painettu kirjaan kokonaisuudessaan, mutta ne ovat sen verran pitkiä, että useimmat päätynevät mieluummin lataamaan ne OHTA-projektin sivustolta. Molemmissa peleissä myös käytetään sellaisia kielen ominaisuuksia, joita ei käsitellä kirjan alkupuolella lainkaan. 55 Koululaisen pieni peliohjelmointiopas Viime vuosina on ilahduttavasti heräilty siihen, että ohjelmointitaito on tärkeää ja että sitä on hyvä opettaa etenkin lapsille ja nuorille. Nopeimmat kerkesivät jo aloittamaan omia kokeilujaan aiheesta. Testiyleisön mielestä asiat käytiin kirjassa läpi riittävän selkeästi ja kädestä pitäen. Small Basic on saatavilla vain Windowsille, jota yhä useamman henkilökohtaisina tietokoneinaan käyttämät tabletit ja puhelimet eivät aja. Opas näyttäisi siis puolenvälin tienoilla muuttuvan äkkiä paljon vaativammaksi. Teksti: Ville-Matias Heikkilä K oululaisen pieni peliohjelmointiopas syntyi osana Kajaanin ammattikorkeakoulun OHTA-hanketta (Ohjelmointi tavaksi), jossa pidettiin ohjelmointikerhoa alueen peruskoululaisille vuosina 2011–2013. Kerhot suunnattiin erityisesti 10–15-vuotiaille ja kielenä käytettiin Microsoftin Small Basicia. Tiimin nuorinkin pääsi mukavasti koodaamisen makuun ja kahlasi kirjan läpi ensimmäisenä kolmikosta. Osa kirjan sisällöstä tuntuu jotenkin irralliselta, esimerkiksi aukeaman mittainen osio tekstiseikkailujen historiasta tai lista Small Basicin tuntemista matematiikkafunktioista. Muistelen itse noin kahdeksanvuotiaana selailleeni ohjelmointikirjoja ja lehtien listauksia etenkin siinä toivossa, että niistä löytyy mielenkiintoisia niksejä. Sivusta seuraavan näkökulmasta esimerkkiautopelin grafiikan ja ominaisuuksien muutteleminen vaikutti olevan hauskinta. Myös pelimusiikista olisi kaivattu omaa osiota. Tämän kritiikin kohteeksi joutuneiden osioiden yli hypittiinkin helposti. Kirjaesittely
Commodore 64:stä mallia ottaen se ei tunne tiedostojen oikeuksien rajoittamista tai ohjelmakoodin suoritustasojen erottelua. Kaikki prosessit suoritetaan täysillä oikeuksilla, jotta harrastelijan ohjelmointi olisi mahdollisimman helppoa. Oraakkelin vastaus voi tuntua tottumattoman silmiin täysin järjettömältä, mutta Davisin mukaan kyseessä on ”kielillä puhuminen”, jonka Jumala koneesta – TempleOS Käyttöjärjestelmä on keskeinen osa jokapäiväistä tietokoneen käyttöä. 56 2014.2 T empleOS on omalaatuinen käyttöjärjestelmä, joka on kehitetty näpertelijän leikkikentäksi. Rukouksesi on kuultu TempleOS:n keskeisimpiä toimintoja on oraakkeli, jolle käyttäjä voi uhrata. Davis mainitsee käyttöjärjestelmän sivuilla järjestelmän saaneen paljon inspiraatiota myös Commodore 64:stä, jolla itse aikanaan ohjelmoi paljon. Kaikki koodi suoritetaan täysillä oikeuksilla ”kernel modessa”. Sarjakuvissa muutamasta viivasta koostuva Mooses-hahmo juttelee yllättävän kyynistä huumoria viljelevän Jumalan kanssa. TempleOS:n kehittäjän Terry Davisin mukaan se on nimensä mukaisesti Jumalalle pyhitetty temppeli, jossa rukoillaan, uhrataan ja joskus saadaan myös vastauksia rukouksiin. Moni ei edes tiedosta käyttöjärjestelmänsä merkitystä, mutta Terry Davisille käyttöjärjestelmä on temppeli – kirjaimellisesti. Bittitemppeli tosiuskoville Davis kertoo TempleOS:n sivuilla sen vaatimusten tulleen Jumalalta. Samaan tapaan kuin Jumala Vanhassa testamentissa antaa Nooalle mitat arkkiin, Davis kertoo Jumalan määränneen TempleOS:n resoluution, äänentoiston, ikkunamallin ja muut ominaisuudet pieniäkin yksityiskohtia myöten. Säveltämisen vaikeutta tosin lisää se, että ainakaan QEMU-virtuaalikone ei suostunut toistamaan ääniä. Davis itse uhraa sarjakuvia ja virsiä, joista osa tulee käyttöjärjestelmän mukana muidenkin nähtäviksi. TempleOS:n mukana tulee omia ohjelmointiprojekteja varten Davisin oma syntaktisella sokerilla makeutettu C++ -mukaelma HolyC, jota TempleOS:n komentotulkkikin tukee. Teksti: Kalle Viiri Kuvat: Manu Pärssinen, Kalle Viiri Softa. Oraakkeli osaa myös vastata ru kouksiin ja uhrilahjoihin valitsemalla Raamatusta otteita tai satunnaisia sanoja käyttäen tietokoneen kelloa satunnaislukugeneraattorina. Sekä virret että sarjakuvat on tehty TempleOS:n omilla työkaluilla, eli käyttäjä pääsee halutessaan itsekin kokeilemaan uhrilahjojen tekoa. Erikoista käyttöjärjestelmässä ei kuitenkaan ole vain sen tietoisesti olemattomat suojaustoimet. Virret piirtyvät ruudulle sanoina kutakuinkin taustalla soivan melodian tahtiin
Davis toteaa koneen kellon olevan vain modernimpi ja helpompi vastine näille. Järjestelmä ei myöskään pysynyt hyvin pystyssä QEMUlla kokeillessa, vaan kaatuili pahimmillaan muutaman minuutin välein. Hartaita harrasteita Oraakkeli ja sarjakuvat ovat osa After Egypt -ohjelmakokonaisuutta, jossa on mukana myös muutama Davisin ohjelmoima Raamatun tarinoihin perustuva peli tai demo. Hengellisen yhteydenkään muodostumisesta ei ole suoranaisia takeita. Tunnetuimpia ja käytetyimpiä näistä on vapaaehtoisvoimin kehitetty Sabily, islaminuskoisille suunnattu versio Ubuntu GNU/Linux -jakelusta. Sabilyn ja Christian Editionin perässä on seurannut joukko muita uskonnollisia Ubuntumuunnelmia sekä parodioita. After Egyptin lisäksi TempleOS:n mukana tulee myös muutama sekulaarisempi pelikokemus: pääpiirteittäin toimivia, mutta kehnoilla grafiikoilla varusteltuja ja tökkiviä kopioita tunnetummista peleistä. ”Alkuperäinen” viitannee Battlezoneen. Uskonto käyttöjärjestelmässä Harva käyttöjärjestelmä väittää TempleOS:n tapaan olevansa suoraan korkeampien voimien tukema. Sabily lisää normaaliin Ubuntuun rukousaikakellon, Koraanin tutkimiseen tarkoitetun zekr-ohjelman, islamilaisen kalenterin, lapsilukon ja muita muslimeille hyödyllisiä ohjelmia. Peleinä on mutkattomia taistelusimulaattoreita, oikeudenkäyntiprosesseja joissa pelaaja saa valita armahtaako vai tuomitseeko rikollisia ja kiven iskemistä sauvalla veden saamiseksi. Pelit ovat yksinkertaisia otteita Israelin kansan vaiheista Egyptin orjuuden jälkeisen erämaavaelluksen varrelta. Davis ei videoillaan peittele menetelmän yksinkertaisuutta tai yritä verhota sitä mystiikkaan. Tie paratiisiin on kivinen Kokonaisuutena TempleOS on erikoinen ja mielenkiintoinen kokemus, mutta varsinkin nykyajan mittapuulla kömpelöön järjestelmään on vaikea tottua ja tutustua. Kyseessä oli kuitenkin vain huiputus, joka onnistui herättämään aikansa huomiota postituslistoilla.. Kristityille suunnattu Ubuntu Christian Edition puolestaan sisältää Raamatun lukemiseen tarkoitettuja ohjelmistoja sekä Sabilyn tapaan lapsilukon. Tavanomaisempia uskonnollisia käyttöjärjestelmiä sen sijaan on monia. Eikä sen tarvitsekaan olla, sillä lähtökohtaisesti sitä käytetään toisen käyttöjärjestelmän rinnalla. Hänen mukaansa Jumalan viestejä voi vastaanottaa niin vanhanaikaisilla Ouija-laudoilla kuin avaamalla kirjoja satunnaisista paikoista. Ainakaan toimittaja ei kokenut valaistuneensa merkittävästi suuntaan tai toiseen.. Jesuxin ominaisuuksiin kuului mm. 57 tulkitseminen ei ole täysin suoraviivaista. Tankkipeli Zone Out jopa julistaa alkuruudussaan olevansa tarkoituksella kehno kopio alkuperäisestä. Vähemmän vakava ajatus uskonnollisesta käyttöjärjestelmästä eli jo 1990-luvulla, jolloin Linuxista oltiin huhujen mukaan kehittämässä uskonnollista Jesux-versiota. ”syntisen termistön” kuten sanojen abort ja daemon vähentäminen sekä sisäänkirjautumisen estäminen sunnuntaisin lepopäivän kunnioittamiseksi. Davis myöntää, että TempleOS ei ole kovin turvallinen ja vakaa
Menestystä tuli, entäs sitten. 58 2014.2 Rauta S egan esi-isä, yhtiö nimeltä Service Games, syntyi Havaijilla vuonna 1940. Vaikkei SMS:kään onnistunut Nintendon valtaasemaa horjuttamaan, se löysi kuitenkin omat ystävänsä etenkin Euroopasta ja Etelä-Amerikasta, eläen aina 90-luvun puolelle asti. Eri versioiden kautta siitä muodostui lopulta Sega Master Systeminä tunnettu konsoli. Yhdistyttyään kilpailijansa Rosen Enterprisesin kanssa yhtiö lyhensi nimensä Segaksi ja huomasi pian muuttuneensa erilaisten viihdelaitteiden maahantuojasta niiden valmistajaksi. Menestys etenkin Amerikassa haluttiinkin tällä kertaa varmistaa. Alle kymmenen vuotta myöhemmin se luopui laitevalmistuksesta kokonaan. Arcadepelien vauhti kuitenkin hyytyi 1980-luvun alussa ja liikevaihdon lasku pelästytti yhtiön amerikkalaiset omistajat. Vanhentuvan NES:n rinnalla Segan pelit näyttivät erityisen upeilta, ja etenkin Amerikassa tästä otettiin irti kaikki mahdollinen markkinointihyöty. Vuoden 1990 puolivälissä Sega of American johtoon nimitettiin Tom Kalinske, joka laittoi tuulemaan. Voidakseen ulosmitata Mega Drivesta kaiken mahdollisen, Sega ryhtyi pian kehittelemään siihen erilaisia laajennuksia. Euroopassakin myynti veti hyvin, ja koko elinkaarensa aikana konsoli myi noin 29 miljoonaa kappaletta. Euroopasta puolestaan ostettiin pelikustantaja Virgin Mastertronic, josta tehtiin Sega Europe. Teksti: Mikko Heinonen Kuvat: Wikimedia Commons -käyttäjä Evan-Amos. Hän keräsi ympärilleen hyvän johtoryhmän, laski koneen hintaa ja käynnisti erityisesti länsimarkkinoille suunnattujen pelien tuotannon. CD-ROM oli kaikkien huulilla, joten CDlisälaite kuulosti varmasti hyvältä ajatukEi näin! SEGOILUA Vuonna 1992 Segalla oli 65 prosenttia USA:n pelikonsolimarkkinoista. Se naula veti, ja Segalla olikin parhaimmillaan hallussaan 65 % Pohjois-Amerikan 16-bittisten pelikoneiden markkinoista. Genesis does what Nintendon’t oli osuvaa sanailua ja puri yleisöön, mutta kauppa kävi alkuun varsin vaatimattomasti: ensimmäisenä vuonna saatiin kaupaksi vain puolisen miljoonaa konetta. Toisen maailmansodan jälkeen perustajat Raymond Lemaire ja Richard Stewart siirsivät toiminnan Japaniin, jonne oli noussut paljon amerikkalaisten sotilastukikohtia. Samalla alettiin tähyillä kuluttajamarkkinoiden suuntaan, ja ensimmäinen pelikonsoli SG-1000 (Sega Game 1000) ilmestyi yhtä jalkaa Nintendo Famicomin kanssa vuonna 1983. Mega Drive ehti markkinoille kaksi vuotta ennen pahinta kilpailijaansa Super Nintendoa. Sen suunnittelu ammensi yhtiön parhaasta osaamisesta. Motorola MC68000:n ja Zilog Z80:n yhdistelmä oli jo aiemmin osoittautunut toimivaksi Segan System 16 -kolikkopeliraudassa, ja vuoteen 1989 mennessä sen hinta oli laskenut massatuotantoon sopivaksi. Miten tällainen temppu tehdään. Service Games toi niihin emämaasta jukebokseja sun muuta viihdykettä. Ja koska eräs tämän juttusarjan perusteemoista on nauraa Atarin möhläilyille, todettakoon että Sega tarjosi Genesistä myös Atarin edustettavaksi, mutta tuli torjutuksi. SG-1000 ei ollut menestys, mutta Sega jatkoi sen kehittelyä. Jättivietti herää Segan ainoa kiistaton menestystuote oli 16-bittinen Mega Drive (USA:ssa Genesis). Kun pelihallibisnes kukoisti 1970-luvulla, Sega kasvoi sen mukana. Tämän myötä oli varmasti helpompi sietää se, että Japanin markkinoilla Mega Drive ei edelleenkään oikein pärjännyt. Määräysvalta alkoi siirtyä Japaniin. Sega oli antanut kenkää markkinoinnista aiemmin vastanneelle leluyhtiö Tonkalle ja rakentanut Sega of American käytännössä tyhjästä, rekrytoimalla alan huippuosaajia
Toisekseen kuluttajat ihmettelivät, miksi heille edes markkinoidaan tällaista, kun oikea uusi konsoli oli tulossa jo muutaman kuukauden päästä myyntiin. Hätäratkaisuna päädyttiin – yllättävän yksimielisesti – Mega Driven turboahtamiseen. 59 selta. CD-laajennuksia myytiin alle kymmenesosa konsoleiden lukumäärästä. Niiden tekniikka oli kuitenkin aivan liian kallista koteihin, joten Sega oli aloittanut Hitachin kanssa projektin uuden RISC-suorittimen kehittämisestä. Tokio oli kuitenkin päättänyt vakaasti, että uusi konsoli tehdään yksin. Samoin puhuttiin, että kun Sony ja Nintendo riitaantuivat Playstationina tunnetun Super Nintendon CD-aseman valmistuksen tiimoilta, olisi Amerikan Sega ollut jo kärppänä neuvottelemassa siitäkin. Varsinainen pommi kuitenkin putosi, kun laitetta oltiin juuri lanseeraamassa. Näiden lisäksi myös Sega itse teki samasta teemasta monia eri muunnoksia, kuten lentokoneisiin tarkoitetun Mega Jetin, mutta yksikään niistä ei saavuttanut kovin korkeita myyntimääriä. Suuri osa peleistä kun oli juuri niitä napin painalluksella ohjattavia suttuisia elokuvanpätkiä, joista kirjoitin Skrolli 2013.4:ssä. SGI lähtikin pian Nintendon kelkkaan. 32-kertainen epäonni Saturnin kehittely oli varsin hidasta, ja muiden valmistajien uudet konsolit kolkuttelivat jo ovella. 32X:n kehitys jäi etupäässä Amerikan Segan vastuulle Japanin keskittyessä Saturnin viimeistelyyn. Segan yllätyshyökkäys meni niin pieleen kuin vain on mahdollista. Peliaseman varjossa Saturnin julkaisupäiväksi Amerikassa oli ilmoitettu toinen syyskuuta 1995, viikko ennen Playstationia. Ainakin Aiwa, JVC ja Pioneer tekivät omat versionsa, joissa oli erikoismausteita. Laajennukset valuivat hetkessä alelaareihin, ja etenkin amerikkalaiset kuluttajat alkoivat jo saada tarpeekseen Segan hyödyttömistä tuoteuutuuksista. Työ oli katkonaista ja kärsi piiripulasta sekä kielimuurista. Muille jälleenmyyjille ei ollut kerrottu koko asiasta, ja monet niistä suuttuivat tempauksesta Segalle ikihyviksi. Amerikassa oltiin alusta asti eri mieltä uuden arkkitehtuurin mielekkyydestä. Aiheena taas oli se, kuinka seuraava sukupolvi otetaan haltuun. Aiwan versio oli samalla radio ja CD-soitin, JVC:ssä oli karaoketoiminto ja Pioneerin Laseractive toisti Laserdisc-elokuvia. Siellä oli kehitetty kolmiulotteista grafiikkaa sisältäneet Virtua-sarjan kolikkopelit, jotka olivat 90-luvun alussa mullistavia. Luotiin suunnitelma, jossa Sega sopi muutaman jakelijan kanssa 30 000 kappaleen ennakkomyynnistä E3messujen yhteydessä toukokuussa 1995. Tötterö tarvitsi oman virtalähteensä mutta käytti emokonsolin ohjaimia ja mahdollista CD-asemaa. Laite oli tarkoitus saada jouluksi 1994 jenkkimarkkinoille kisaamaan 3DO:n, Jaguarin ja kumppaneiden kanssa. Konsolin päälle leivottiin 32X-nimellä tunnettu palikka, joka sisälsi muistia, kaksi SH-2-suoritinta ja muuta oheisrautaa. Japanin Segan hermot kuitenkin pettivät ja kone haluttiin Amerikkaan aikaisemmin, vaikka Genesis itse asiassa kävi vielä jonkin verran kaupaksi. Iso ketjuliike KB Toys irtisanoi myyntisopimuksensa kokonaan. Sega of America oli mahdottoman paikan edessä 32X:n kanssa. Nähtyään Playstationin prototyypin Segan johto päätti silti vielä avata Saturnin designin ja lisätä sen 3Dtehoa. CD-aseman lisäksi se sisälsi myös pieniä grafiikkaparannuksia, mutta suosio ei ollut mainittavaa. Alle 700 000 myytyä konetta ja 40 julkaistua peliä on ehkä tämän pohjalta laskettavissa työvoitoksi, mutta reaalimaailman puolella kyse oli karvaasta ja kalliista pettymyksestä. Ensinnäkin koko laitteesta oli tullut strategian kannalta tarpeeton. Mega-CD (Amerikassa Sega CD) näki päivänvalon vuoden 1991 lopussa. Ristivetoa Saturnuksella Seuraavan tuotteen ongelma on tuttu kaikille menestyneille yhtiöille, mutta harvoin tilanne pääsee kärjistymään aivan niin pitkälle kuin Segan tapauksessa. Harvojen ennakkokonsoleiden ostajille oli tarjolla vain muutama Segan oma peli,. Tehtiinpä sille muutama erityinen Laserdisc-pelikin. Saturnia oltiin tuomassa markkinoille Japanissa jo 22. Voittojen maksimoimiseksi Mega Driven tekniikkaa lisensoitiin muillekin. Vaikka 32X käytti osittain samoja piirejä kuin Saturn, se ei ollut ohjelmallisesti yhteensopiva, eikä Saturnissa ollut mitään porttia 32X:n pelimoduuleille. Pääosin pelit kuitenkin toimitettaisiin moduuleilla. Saturnina tunnettuun koneeseen tulisi kaksi rinnakkaista SH-2-suoritinta sekä koko joukko muita piirejä. Kalinske otti yhteyttä Silicon Graphicsiin ja kyseli apua Saturnin grafiikkapiirin tekemiseen, mutta Japanin pääkonttori torppasi sopimuksen teon. Perinteisesti Segan tekninen osaaminen oli keskittynyt Japaniin. marraskuuta 1994, vuorokausi 32X:n Amerikan-julkaisun jälkeen. Tuloksena oli Nintendo 64, paljon Saturnia menestyneempi laite. Vastakkain olivat Japanin Sega, koko yhtiön kivijalka, ja Amerikan Sega, joka oli juuri tuonut yhtiölle sen suurimman menestyksen
Se saattoi ylipäätään olla eräs parhaiten suunnitelluista konsoleista. Jatkomyynti ei sujunut yhtä hyvin, sillä aiempi ”segoilu” oli karkottanut paitsi osan jälleenmyyjistä, myös Electronic Artsin. Vain Japanissa Sega onnistui nousemaan minkäänlaiseksi peluriksi. Yhdysvaltain julkaisu sujui kuitenkin erinomaisesti, ja Dreamcast piti pitkään hallussaan julkaisupäivänä eniten myyneen koneen titteliä. Jonoja ei siis muodostunut. Tom Kalinske jätti Sega of American kokonaan, ja Japanissa leikittiin muuten vain tuolileikkiä. Alle kymmenen miljoonan kappaleen kokonaismyynti jätti Saturnin selvästi sukupolvensa heikoimmaksi, sillä Nintendo 64 myi kolminkertaisesti, Playstation yli kymmenkertaisesti. Ilman sen vuotuisia urheilupelejä moni kone jäi kauppaan, vaikka Sega yrittikin korvata niitä omilla Sega Sports -tuotteillaan. Monen mielestä se oli viimeinen hardcore-pelikone. Kaikkialle, alle sekunnissa. Dreamcastilla syntyneet omintakeiset pelisarjat saivat jatkoa toisilla koneilla, ja Segakin pääsi viimein jälleen voitolliseksi myymällä pelejään niin Sonyn, Nintendon kuin Microsoftinkin konsoleille. Kunniakas loppu Vanha Sega kaatui saappaat jalassa. 60 2014.2 sillä edes ulkopuoliset kehittäjät eivät tienneet muuttuneista suunnitelmista. Tapahtumista kirjoittaessa on kuitenkin vaikea välttää haikeutta, sillä Dreamcast osoitti, mihin Sega pystyi silloin, kun se ei hukannut resurssejaan osastojen väliseen kissanhännänvetoon. Miltei viaton uhri Saturnin seuraaja Dreamcast oli Segan kehittämistä konsoleista kenties paras. Sega kirjasi Saturnista satojen miljoonien tappiot, ja johtoportaassa oli hetken ajan tuulista. Rahakkaita Japanin markkinoita Sega olisi nimenomaan kaivannut. Saturn oli kuihduttanut Segan kassan, eikä paukkuja vastata Sonyn mediahyök käykseen ollut. Käytännössä peli oli tämän jälkeen selvä. Alkoi olla selvää, että paukkuja olisi enää yhteen yritykseen. Saturn lieneekin siten ainoa konsoli, joka oman epäonnistumisensa lisäksi onnistui näivettämään myös teknisesti paremman seuraajansa.?. Play station tuhosi Saturnin USA:n ja Euroopan markkinoilla. Senkin kehittämiseen liittyi draamaa, kun alun perin yhteistyökumppaniksi kaavailtu 3dfx vuoti suunnitelmat julkisuuteen, mutta tilalle valittu PowerVR2 oli vuonna 1998 kaikin puolin ajantasaista rautaa sekin. Ostavalla yleisöllä ja jälleenmyyjillä oli muutenkin kovin tuoreessa muistissa se, miten Sega-merkkiset konsolit muutamaa vuotta aiemmin happanivat hetkessä käsiin. DC tapettaisiin, ja yhtiö siirtyisi pelkäksi pelijulkaisijaksi. Siksi onkin raadollista, että sillä oli syntymästä asti rasitteenaan myös kaikki Segan vanhat virheet. Kun vielä Sony ilmoitti E3:ssa, että Playstationin julkaisuhinta on 100 dollaria Saturnia alempi, Sega oli nöyryytetty. Viimeisillä voimillaan se kuitenkin pusersi markkinoille sympaattisen joutsenlaulun, josta on vaikeaa olla pitämättä. Kolmen peräkkäisen jättitappiovuoden ja kymmenen miljoonan Dreamcastin jälkeen Sega nosti kädet pystyyn tammikuussa 2001. Saturnin monimutkainen arkkitehtuuri teki pelien kääntämisestä vaikeaa, ja suositut 3D-nimikkeet olivat poikkeuksetta Playstationia kehnomman näköisiä. Samalla Saturnin julkaisu tappoi tehokkaasti Genesiksen jo muutenkin hiipumassa olleen myynnin. Pelkkiä ennakkovarauksia oli yli 300 000 koneesta. Lisäksi Sega toi Dreamcastille mainion valikoiman omia pelejään. Muutamaa vuotta aiemmin Saturn oli saanut päihin Playstationilta, ja nyt pelkkä lupaus seuraajakonsolista riitti hiekoittamaan Segan ontuvan markkinakoneiston rattaat. Ostava yleisö odottaisi Sonyn halvempaa konetta. Pelkät Segan omat pelit eivät pitkälle riittäneet. Jos se ei olisi laittanut Dreamcastiin kaikkia paukkujaan, pelihistoria saattaisi kohdella sitä paljon ankarammin. Euroopassakin syntyi jonkin verran kuhinaa, mutta Japani ei DC:lle lämmennyt. Lopullinen niitti oli, että Sony aloitti rummun lyömisen Playstation 2:sta. Lisäksi Dreamcastista puuttui monen himoitsema DVD-asema
... että jo näinä päivinä saisit kaiken tarvitsemasi tietotekniikan mahtumaan pukusi taskuun?! Aivan! Ai. 61 sarjassamme suuria keksintöjä: Taskuparkki Ihmisen kekseliäisyydellä Ei näytä olevan rajoja! Vai olisitko osannut vielä jokunen vuosi sitten kuvitella, että... Kaikkialle, alle sekunnissa. kun ei ollut taskujakaan. sinuna kehittelisin tuota vielä. Puhut nyt itsestäsi. no en.... ... Tällä mullistavalla tasku-keksinnölläni on edessään mitä loistavin tulevaisuus, vai mitä luulet. Uskottavasti en
Molemmat kielet tuntuivat rakenteeltaan yksinkertaisilta, mutta minun oli aluksi äärimmäisen vaikeaa ymmärtää, miten niillä luodaan omia ohjelmia. Miksi web-ohjelmointi. Useimmat ohjelmoijat ymmärtävät olio-ohjelmoinnin ja proseduraalisen ohjelmoinnin periaatteet, mutta funktionaalinen ohjelmointi voi tuntua mysteeriltä. Toisin sanoen Haskell on aivan mahtava haaste ohjelmoijalle, joka luulee osaavansa jo kaiken! Itse koin haasteen erityisen vaikeaksi siksi, että Haskellin ohjekirjat ovat tavalliselle ohjelmoijalle aivan vieraasta maailmasta kotoisin. Haskellia opetellessa on edessä kuitenkin lannistava kielimuuri. Ainoastaan syntaksi on hieman erilainen. Kannattaako sitä opetella. Poikkeuksiakin onneksi on: paras tapa päästä alkuun on hankkia Miran Lipova?an Learn You a Haskell for Great Good. Haskell on puhtaasti funktionaalinen ohjelmointikieli: mihinkään muuttujiin tai kenttiin ei saa sijoittaa, vaan funktioiden täytyy tuottaa samoille argumenteille aina sama paluuarvo. Tällaisten ohjelmien kanssa ei välttämättä tarvitse Haskell – koeajo webissä Olio-ohjelmoinnin konkari laajensi näköalojaan ja tutustui pahamaineisen teoreettiseen ohjelmointikieleen: Haskelliin. Ne vain olettavat, että lukijalla on valmiiksi hallussaan kaikki Haskellin peruskäsitteet. Käsitteitä ei voi lainata minkään perinteisen ohjelmointikielen piiristä, vaan ne on opeteltava tyhjästä Haskellia varten. Ja voiko sillä rakentaa jotain käytännöllistäkin. Olemme yleensä aloittaneet uramme Basicilla, C:llä, Pythonilla tai vastaavalla ohjelmointikielellä. Haskell on jäänyt suosiossa yleisempien kielten varjoon, ja sillä on akateemisen, epäkäytännöllisen kielen maine. Se avautuu aloittelijalle helposti mutta ei käy tylsäksi kokeneellekaan koodaajalle. Teksti: Kenneth Falck Kuvat: Risto Mäki-Petäys, Mitol Berschewsky 62 2014.2 Koodi. Rajoitusten vastapainoksi Haskellissa on kuitenkin monia hyödyllisiä ominaisuuksia, kuten hahmonsovitus, funktioiden osittaissovellus ja tiukka staattinen tyypitys. Opiskelun edetessä aloin sitten oivaltaa, etteivät tavallisetkaan Haskell-ohjeet ole ihan hepreaa. Esimerkkiohjelmien syntaksi ei tahdo avautua millään, ja niiden pienikin muokkaaminen aiheuttaa loputtomia käännösvirheitä. K un aloitin Haskellin opiskelun, tunsin itseni samalla tavalla voimattomaksi kuin parikymmentä vuotta sitten Lispin alkeita opetellessani. Monet Haskell-projektit varmasti ovatkin erilaisten tieteellisten algoritmien toteutuksia ja teoreettisia kokeiluja. Haskellia syytetään usein siitä, että se sopii vain teoreettiseen ohjelmointiin. Uuden kielen opettelu on helppoa, koska kielet rakentuvat pitkälti samojen käsitteiden varaan. Nyt Haskell-aloittelija kertoo ensivaikutelmiaan kielestä
Niihin voi sijoitella vapaasti mitä tahansa HTML-, CSStai Javascriptkoodia sekä viittauksia tiedostoihin, jotka ladataan Yesodin ulkopuolelta. Se voi vieläpä tarjota sovelluspalvelurajapinnan, jonka kautta muutkin ohjelmat voivat hyödyntää sen toimintoja. Muitakin sovelluskehyksiä on olemassa, mutta Yesod tarjoaa kerralla kaikki nykyaikaisissa web-sovelluksissa tarvittavat toiminnot. Niiden nimissä näkyy Shakespeare-teema: Hamlet, Cassius ja Julius. Halusin tietää, kuinka kieli soveltuu siihen eli mitkä tehtävät ovat helppoja ja mitkä hankalia. Riittää, että kertoo Yesodille tietokannan osoitteen ja tunnistautumistiedot sekä mallintaa halutut taulurakenteet erilliseen tiedostoon. Web-ohjelmointi puolestaan on käytännönläheistä ohjelmistotuotantoa, jossa tarvitaan vähemmän algoritmeja ja enemmän yhteistoimintaa valmiiden kirjastojen ja järjestelmien kanssa. Toisaalta kaipasin myös uusia oivalluksia ja keinoja vanhojen tuttujen ohjelmointiongelmien ratkaisemiseen. murehtia, pystyykö Haskellilla kytkeytymään vanhaan jäämistötietokantaan tai hyödyntämään jotain kipeästi tarvittavaa apukirjastoa. Perinteisissä web-sovelluskehyksissä tällaiset ongelmat huomattaisiin vasta sitten, kun sivua yritetään luoda web-palvelun käyttäjää varten. Websovellus on hyvä esimerkki todellisen elämän projektista. Handler-funktiot ovat tuttuja esimerkiksi Ruby on Railsin kontrollereista: niissä tehdään sivun näyttämiseen vaadittavat tietokantahaut ja loogiset operaatiot. 63. Yesod tarjoaa myös valmiin hakemistorakenteen web-sovelluksen näkymien määrittelyyn. Halutessaan voi siis rakentaa sellaisenkin sovelluksen, joka palvellaan erillisinä Javascript-tiedostoina täysin Yesodista ja Haskellista irrallaan. Sen sijaan Yesodissa HTML, CSS ja Javascript liitetään osaksi Haskell-kääntämistä, mikä tekee sivujen tuottamisesta on kinkkisempää. Perinteisissä web-sovelluksissa HTML-sivut tuotetaan yleensä tiedostoista, jotka on kirjoitettu jollakin sivupohjakielellä. Kaikille kolmelle tiedostotyypille on Yesodissa omat sivupohjakielensä. Muokattuani hieman sen sivupohjia tuli vihdoin aika lisätä uusia tietokantahakuja ja toimintalogiikkaa Handler-funktioihin. CSS-tyylit ja Javascript-koodi jaetaan yleensä sellaisenaan .cssja .jspäätteisinä tiedostoina. Samanlainen virhe tulee, jos CSS-tiedostosta viitataan kuvatiedostoon, jota ei ole olemassa. En voinut enää viivyttää väistämätöntä vaan jouduin viimein kirjoittamaan ihan oikeaa koodia ja Category name Text title Text default='' UniqueCategory name Article name Text title Text default='' body Text category CategoryId UniqueArticle category name Mallitiedostoista tuotetaan niin SQL-skeemoja kuin Haskell-tyyppejäkin. Yesod kytkeytyy suoraan MySQL-, Postgres-, SQLiteja MongoDB-tietokantoihin. Sovelluksen eri URL-osoitteiden näkymät listataan reititystiedostossa ja niitä vastaavat Handler-funktiot toteutetaan Haskell-lähdekooditiedostoissa. Yesodilla voi helposti luoda toimivan esimerkkisovelluksen, johon voi sitten alkaa lisäillä omaa koodiaan. Yesod, sovelluksen perusta Haskell-maailmassa on yksi varteenotettava web-sovelluskehys, Yesod. Tämän vuoksi päätin itse aloittaa Haskellin opiskelun nimenomaan webohjelmoinnista. Se muistuttaa rakenteeltaan hieman Ruby on Railsia. Tämä tekee alkuun pääsemisestä helppoa, sillä kehittäjä ei joudu heti miettimään tietokannan ajurien yksityiskohtia. Käytännössä tämä onkin tärkeää, sillä yleensä web-palvelun keskeiset tiedostot halutaan sijoittaa erilliseen tehokkaaseen palvelimeen tai jakeluverkkoon. Peruskirjastojen ohelle voi määritellä omia tiedostotyyppejä, esimerkiksi Coffeescript-tuen, jonka avulla Yesod osaa kääntää Coffeescript-koodin Javascriptiksi selainta varten. Sivupohjat käännetään Haskelliksi, joten niille tehdään käännösaikaiset tyyppitarkistukset: jos niissä viitataan olemattomaan tai vääräntyyppiseen muuttujaan, saadaan käännösvirhe. Haskellin vahvaa tyyppitarkistusta ei kannata pelätä liikaa, sillä sivupohjat ovat joustavia. Kääntäminen esimerkiksi epäonnistuu, jos pääsovelluksessa viitataan olemattomaan CSS-tiedostoon. /static StaticR Static getStatic /auth AuthR Auth getAuth / HomeR GET /cat/#Text CategoryR GET POST /cat/#Text/#Text ArticleR GET POST Reitityskuvaus varmistaa, että jokaisella sivulla on oikeantyyppinen käsittelijä. Funktioista funktioihin Kun olin lopulta sisäistänyt Yesodin periaatteet, sain ensimmäisen web-sovellukseni pyörimään
Hyvä esimerkki usean parametrin funktiosta voisi olla vaikkapa web-sovelluksen Handler-funktio, joka saa argumentteina sisältökategorian nimen sekä haetun artikkelin tunnisteen ja palauttaa artikkelisivun: getArticleInCategory :: Text -> Text -> Widget getArticleInCategory catName articleName = ... Tunnettu Javascript-guru Douglas Crockford onkin todennut, että kun ohjelmoija kerran ymmärtää monadit, hän menettää samalla kyvyn selittää niitä muille. Valitettavasti Yesodin monadityypit ovat kuitenkin monimutkaisempia ja niiden ymmärtäminen on vaikeampaa. Monadi on Haskellin kaikkein vaikein käsite ja samalla myös vaikeimmin selitettävä. Tämä on kuitenkin Haskellin opiskelussa niin tärkeä asia, että se kannattaa sisäistää heti alussa. Haskell tarjoaa ohjelmoijalle erilaisia työkaluja, joiden ansiosta funktiokutsujen ei tarvitse välttämättä välittää muuttujien monadikuorrutteesta, vaan funktion suorittama operaatio voidaan kohdistaa monadin sisällä olevaan arvoon. Monadi on tapa paketoida arvoja niin, että varsinaiseen arvoon liittyy myös jonkinlainen lisätieto tai asiayhteys. $else <ul> $forall art <articles <li> <a href="@{ArticleR (categoryName cat) (articleName art)}"> #{articleTitle art} Hamlet-sivupohjissa sivun rakenne ilmaistaan sisennystasoilla. Tämä jää yksinkertaisessa web-ohjelmoinnissa helposti huomaamatta, sillä funktioita voi luontevasti käyttää niin kuin ne ottaisivat vastaan useampia parametreja. Se kuitenkin käyttää esimerkkeinä vain melko yksinkertaisia monadeja. do-notaatio on vaihtoehtoinen syntaksi, jolla Haskell-koodin saa näyttämään perinteiseltä imperatiiviselta koodilta, jota suoritetaan lause kerrallaan. Learn You a Haskell -kirja käy monadien idean läpi perusteellisesti ja ymmärrettävästi. tutustumaan Haskellin pimeään puoleen: funktionaalisen ohjelmoinnin outouksiin. Suurin ongelma syntyy siitä, että funktioiden argumenttien ja paluuarvojen tyypit ovat usein yleisluontoisia. Onneksi monadeja voi kuitenkin käyttää, vaikka niitä ei täysin ymmärtäisikään. articleForm :: CategoryId -> Html -> MForm Handler (FormResult Article, Widget) articleForm catId = renderDivs $ Article <$> areq textField "Name" Nothing <*> areq textField "Title" Nothing <*> (unTextarea <$> areq textareaField "Body" Nothing) <*> pure catId Myös lomakkeet määritellään tyyppiturvallisesti. Sama funktio voi siis ottaa vastaan monia erityyppisiä arvoja, ja se voi myöskin palauttaa mo$if null articles <p> There are no articles in this category. Lähin oliomaailman vertauskuva olisi olioviite, joka voi osoittaa olioon tai joka voi olla null. Sitä voi siis kutsua myös yhdellä argumentilla: getProgrammingArticle :: Text -> Widget getProgrammingArticle = getArticleInCategory "programming" Tällöin paluuarvona ei olekaan mikään artikkelisivu vaan ”osittaissovellettu” funktio, joka hakee artikkelin kiinteästä kategoriasta. Eräs outouksista on se, että Haskellissa funktioilla on vain yksi parametri ja yksi paluuarvo. Se on kuitenkin pelkkää harhaa: konepellin alla lauseet muutetaan kryptiseksi sarjaksi sisäkkäisiä funktiokutsuja. Funktiota voi kutsua kahdella argumentilla, jolloin se aivan odotetusti palauttaa halutun sivun: haskellPage = getArticleInCategory "programming" "haskell-tutorial" Oikeasti kyseessä on kuitenkin yksipaikkainen funktio, joka palauttaa toisen yksipaikkaisen funktion. 64 2014.2. Monadeja kuitenkin käytetään Yesodissa kaikkialla, joten yritettävä on. Osittaissovellettua funktiota voidaan kutsua jäljellä olevalla argumentilla, jolloin saadaan sama lopputulos kuin alkuperäisestä kutsusta. Mystiset monadit Oudot funktiokutsut ovat kuitenkin lastenleikkiä verrattuna Haskellin kuuluisimpaan omituisuuteen: monadeihin. Kutsuja voidaan sitten tehdä useampiakin ja eri argumentein: haskellTutorial = getProgrammingArticle "haskell-tutorial" erlangTutorial = getProgrammingArticle "erlang-tutorial" cTutorial = getProgrammingArticle "c-tutorial" Kun idean on omaksunut, saa osittaissovelluksella usein luotua näppäriä apufunktioita kuin itsestään. Monadien ideana on, että ohjelmakoodi voi joko olla kiinnostunut lisätystä kontekstista tai se voi olla kokonaan välittämättä siitä. Esimerkiksi Maybe-monadi luo paketin, jossa voi olla arvo tai se voi olla tyhjä. Haskellin hankaluuksia Näin aloittelijana on todella vaikeaa lukea muiden kirjoittamaa Haskell-koodia. Yesodin Handler-funktiot perustuvat monadeihin, mutta Haskellin do-notaation ansiosta niitä voi käyttää melko helposti
Järkeä vai ei. On tyypillistä, että Haskell-kääntäjästä pitää kytkeä päälle kymmenen eri laajennosta, jotta ohjelma suostuu kääntymään. Kehittyminen on hyväksi, mutta valitettavasti se myös tekee Haskellin opiskelusta monimutkaisempaa. Molemmat tarjoavat julkiseen verkkoon vain sovelluspalvelurajapinnan ja pyörittävät sen takana tehokasta taustajärjestelmäänsä. Tällä tavoin ei mitenkään päästä esimerkiksi Ruby on Railsin käyttömukavuuteen tai Flaskin yksinkertaisuuteen. Tyypit ovat enemmänkin kuin Lego-palikoita, joita voi liittää yhteen monilla eri tavoilla. Nykyaikaiseen nopeatahtiseen webkehitykseen Haskell sopii kuitenkin kehnosti. Saattaa siis käydä niin, että yhtenä päivänä cabal install -komento asentaa kirjastoja ongelmitta ja seuraavana se ei enää toimi ollenkaan. Kentän nimi ei siis voi olla monessa eri paikassa title, vaan sen täytyy olla artikkeleissa articleTitle, kommenteissa commentTitle, kategorioissa categoryTitle ja niin edelleen. Esimerkiksi Mochiweb-mainosverkosto ja CouchDB-tietokanta on kumpikin toteutettu Erlang-kielellä, joka muistuttaa monessa suhteessa Haskellia. Kehityksen kääntöpuolia Haskell on elävä ohjelmointikieli, ja siihen kehitetään koko ajan uusia laajennoksia ja kirjastoja. 65. Ohjelmointi saattaa olla työläämpää kuin dynaamisemmilla kielillä, mutta kun ohjelman on kerran saanut kääntymään, suorituksen aikaisia virheitä ilmenee vain harvoin. Haskellissa on lisäksi ikäviä ominaisuuksia, jotka tekevät lähdekoodin lukemisesta entistäkin vaikeampaa. Kirjastot saattavat olla keskenään yhteensopivia vain tiettyjen versioiden osalta, joten yhdenkin kirjaston päivittäminen voi rikkoa koko sovelluksen. Muutaman kuukauden mittaisen tutustumisen jälkeen en pidä Haskellia mitenkään ihanteellisena ohjelmointikielenä web-sovellusten kehittämiseen. Kun ohjelmakoodissa sitten esiintyy vaikkapa nimi Object tai run, joutuu käymään läpi parikymmentä kirjastoa selvittääkseen, mistä ne oikein tulevat. getBy404 :: (MonadTrans t, PersistUnique (t (HandlerT site IO)), PersistEntity val, PersistMonadBackend (t (HandlerT site IO)) ~ PersistEntityBackend val) => Unique val -> t (HandlerT site IO) (Entity val) Apufunktioita on helppo käyttää, mutta niiden tyyppejä ei kuolevainen ymmärrä. nia erityyppisiä arvoja. Vaikeuksien vastapainona on kuitenkin ohjelmakoodin tehokkuus ja turvallisuus. Turvallisinta onkin eristää Haskell-sovellukset toisistaan niin, että kullakin sovelluksella on omat versionsa kirjastoista. Template Haskell -makrojärjestelmää tarvitaan monessa paikassa, mutta toisaalta koodissa on myös #ifdefdirektiivejä, jotka ajetaan perinteisen C-esikääntäjän läpi. Kielellä on äärimmäisen jyrkkä oppimiskäyrä, sen apukirjastot ovat rajoittuneita ja sillä kehitettyjä sovelluksia on vaikeaa päivittää. Haskellin äärimmäisen tiukka tyyppitarkistus löytää monenlaiset ajatusvirheet ennen kuin ohjelmaa tarvitsee edes käynnistää. Linkkejä • Haskell: http://haskell.org/ • Learn You a Haskell for Great Good: http://learnyouahaskell.com/ • Yesod: http://www.yesodweb.com/ postCategoryR :: Text -> Handler Html postCategoryR catName = do Entity catId category <runDB $ getBy404 (UniqueCategory catName) ((FormSuccess newArticle, _), _) <runFormPost $ articleForm catId _ <runDB $ insert newArticle redirect $ ArticleR (categoryName category) (articleName newArticle) Tietokantaan syöttäminen onnistuu funktionaalisestikin. Nähdäkseni Haskellin tulevaisuus web-kehityksessä liittyy sellaisiin projekteihin, joissa tarvitaan luotettavia ja erikoistuneita taustajärjestelmiä. Haskellin nimiavaruuksien alkeellisuus johtaa myös siihen, että tietokantaan tallennettuja tietorakenteita on kömpelöä määritellä. Esimerkiksi muodon article.comments[0].title sijaan täytyykin kirjoittaa commentTitle (head (articleComments article)) Onneksi tähän kuitenkin tottuu hiljalleen, eivätkä kutsut sitten enää näytä yhtä kummallisilta kuin aluksi. Usein ohjelmat tarvitsevat laajennosten lisäksi myös kymmenittäin apukirjastoja. Esimerkiksi Yesod käyttää kahta erilaista Haskell-lähdekoodin esikäsittelyvaihetta. Pienet muutokset ovat työläitä, sillä ohjelmoija joutuu kirjoittamaan jokaisen uuden funktion nimen kahteen kertaan ja lisäämään uudet moduulit sekä lähdekoodiin että pakettikuvaustiedostoihin. Tietorakenteiden käyttö on muutenkin hankalaa oliokieleen tottuneelle, koska Haskellissa ei ole omaa syntaksia tietuetai taulukkoviittauksille vaan kaikkea käsitellään funktiokutsuilla. Käytännössä jokaisella tietokantakentällä on oltava nimi, joka yksilöi sen globaalisti. Pahinta on se, että ohjelman nimiavaruuteen voi tuoda monien kirjastojen kaikki funktiot. Nopea prototyyppikoodin testailu takkuilee, koska joutuu odottelemaan koodin kääntymistä jokaisen muutoksen välissä. Palkintona vaivannäöstä saa vähintäänkin aivan uudenlaisen näkökulman ohjelmointiin.. Tyyppijärjestelmä ei ole samalla tavalla hierarkkinen kuin oliokielissä, joten sitä ei voi ajatella puurakenteena. Omissa harrastusprojekteissa on kuitenkin mukavaa kokeilla Haskellia tavallistenkin sivustojen toteuttamiseen, ja Yesod tekee siitä kohtalaisen yksinkertaista. Kieltä opiskellessa täytyy pitää varansa, ettei sekoita Yesodin erikoissyntakseja tavalliseen Haskellkoodiin. Laajennokset tekevät kielestä monipuolisemman mutta myös vaikeammin ymmärrettävän
Toisin kuin aiemmin luultiin, aivot jatkavat sopeutumistaan myös aikuisiällä. Ihmisen tappio koneesta sai monissa aikaan tappio mielialan. Vanha vitsi kuuluu, että vasara kädessä kaikki ongelmat näyttävät nauloilta. Norton, 2010) Clive Thompson: Smarter Than You Think: How Technology is Changing Our Minds for the Better (Penguin, 2013). Kasparov liittoutui vihollisensa kanssa: kone laskekoon vaihtoehtoisia siirtoja, ihmisen intuitio valitkoon niistä Tietotekniikka muuttaa meitä ja maailmaa Internetin jatkuva läsnäolo huonontaa muistia ja laiskistaa oppijaa! Tai ehkä ihmisen ja koneen lähentyminen avaakin ihan uusia viestinnän ja osaamisen tapoja. Optimistisempaa koulukuntaa edustaa Clive Thompsonin kirja Smarter Than You Think (2013). Uusia yh teyksiä syntyy tarpeen mukaan, ja vähälle käytölle jääneet osat delegoituvat muihin tehtäviin. Totta onkin, että mikä tahansa käteen otettu työkalu muuttuu aivojen näkökulmasta käden osaksi. Tarina ei kuitenkaan pääty tähän, kuten Thompson kertoo kirjassaan. Jos tietokirjailija Nicholas Carrilta kysytään, olemme tottuneet internetiin liian hyvin. Jokainen työkalu tuo uusia mahdollisuuksia (vasaralla voi iskeä nauloja), mutta toisaalta myös rajoituksia (neulominen vaikeutuu huomattavasti). Ja aivot oppivat nopeasti. W. Kokeile vaikka pitää vasaraa kädessäsi pari tuntia. Teksti: Jussi Määttä Nicholas Carr: The Shallows: What the Internet is Doing to Our Brains (W. Ilmiötä kutsutaan neuroplastisuudeksi. Ihmisen ja koneen hybridi IBM:n Deep Blue -shakkitietokone selätti Garri Kasparovin vuonna 1997. Hänelle ihmisen ja koneen yhdistelmä on parempi kuin kumpikaan yksinään, ja netin viestintämahdollisuudet tuovat valtavia parannuksia monille yksityisen ja julkisen elämän alueille. Thompsonin mielestä uuden teknologian hyödyt ovat moninkertaisesti haittoja suuremmat. Kirjassaan The Shallows (2010) hän esittää, että netti heikentää keskittymiskykyämme, huonontaa muistiamme ja aiheuttaa tarpeetonta rasitusta mielellemme. Uuteen asetelmaan tottuu pian ja arki sujuu, mitä nyt ulkopuoliset saattavat oudoksua. 66 2014.2 Kirjaesittely Teknologia ja aivot Aivot muuttuvat jatkuvasti
Googlen alkuperäisen PageRank-algoritmin menestys perustui linkkien analysointiin. Sen tarkkuus oli väitetysti yhtä hyvä kuin ihmistarkastajien. Thompson huomauttaa myös, että tiedon levittämisellä Youtuben ja Twitterin kaltaisissa palveluissa on eräs merkittävä etu. Kirjalla kestää tovi päästä asiaan, ja tekijä tuntuu kohtuuttoman leipääntyneeltä erityisesti Googleen, mutta kokonaisuus on toimiva ja viesti varmasti tärkeä. Carr itse huomasi netinkäytön verottaneen keskittymiskykyään ja vetäytyi Kalliovuorille pätkivän nettiyhteyden ääreen saadakseen kirjansa valmiiksi. Hieman hämmentävästi hän päätyy vihjailemaan rivien välistä, että Carrin pessimismi on vain yritys näyttää älykkäältä. Aivoissa kaikki tiedonmuruset kytkeytyvät toisiinsa ja järjestyvät jatkuvasti uudelleen synnyttäen ”ahaa-elämyksiä”. Jospa tietokoneet voisivat auttaa tässäkin. Hän kutsuukin lukijan mukaan kapinaan hyperaktiivisuutta vastaan. Tällä tavoin löydetty informaatio kuitenkin harvemmin tallentuu pitkän aikavälin muistiin. Välillä tulisi pitää taukoja informaatiotulvalle altistumisesta ja keskittyä luontoon, kirjoihin ja taiteeseen. Maailma muuttuu bitti kerrallaan Egyptin vuoden 2011 vallankumousta ei ole suotta kutsuttu Facebook-vallankumoukseksi. Aluksi jälkimmäinen ryhmä pärjäsi huonommin, mutta harjoituksen myötä pähkinät alkoivat ratketa ”apuratasryhmää” nopeammin ja vähemmin virhein. Toinen näkökulma löytyy eräästä Carrin kuvaamasta tutkimuksesta, jossa koehenkilöt ratkoivat vaikeaa logiikkapähkinää tietokoneella. Carr siteeraa tunnettua 1800-luvun ajattelijaa: ”Muistamisen taito on ajattelemisen taito.” Aikanaan lausahdus oli itsestäänselvyys. Ei puroakaan yritä kukaan kuiviin juoda, Thompson vertaa. Surkuhupaisa esimerkkinä Carr mainitsee brittiläisen Edexcelin vuonna 2009 lanseeraaman automaattisen ainekirjoitusten arvostelijan. Tavanomaisilla oppitunneilla etenemistahti on osalle aina liian nopea tai hidas. Vaikka statuspäivitykset ovat usein yksinään tarkasteltuina turhia, niitä pidemmän aikaa seuraamalla oppii Thompsonin mukaan tuntemaan toisen tapoja ja ajatusmaailmaa aivan uudella tavalla. Selkeitä vasta-argumentteja ei Thompson juurikaan onnistu esittämään, vaikka opus vaikuttaa tehdyn juuri The Shallowsin haastajaksi. Thompson kuvaa kirjassaan, kuinka monissa kouluissa perinteinen asetelma on käännetty päälaelleen Khan Academy -verkkosivun avulla. Thompson on innoissaan tällaisista keinoista kompensoida aivojen ailahtelua. Wikipediaa lukiessa tulee usein avattua kymmeniä sivuja uusiin välilehtiin. Thompsonkin myöntää rauhallisen, lineaarisen lukemisen merkityksen syvälliselle oppimiselle. Hän kutsuu ilmiötä ihmisten lisääntyneeksi tietoisuudeksi ympäristöstään (engl. Thompsonin Smarter Than You Think on myös mukiinmenevä kirja, joka pyrkii näkemään asiat positiivisesti vastapainona Carrin kaltaisille teknologiapessimisteille. Oppimistulokset näyttävät paranevan, ja oppilaiden motivaatio kohenee. Jos teksti jaetaan useisiin toisiinsa linkitettyihin sivuihin, koehenkilöt ymmärtävän sisällön huonommin ja pitävät tekstiä sekavampana. Mitä fiksumpi ohjelma, sitä tyhmempi käyttäjä. Kokonaiskuva Carrin teoksen The Shallows perimmäinen viesti on, että meidän täytyy oppia näkemään teknologian vaikutukset mieliimme ja toimintaamme. Thompson kertaa kirjassaan ansiokkaasti tapahtumien tätä aspektia. 67 viisaimman. Kansankynttilöiden korvaajat Koulujen ja tietotekniikan pyhästä liitosta on Suomessakin puhuttu jo 1990-luvulta alkaen. Carr puolestaan varoittaa vähättelemästä perinteisen muistamisen merkitystä. Hyperteksti pakottaa lukijan tekemään jatkuvasti päätöksiä: klikatako vai ei. Opettajalla on enemmän aikaa yksilölliseen neuvomiseen. Tietokoneet eivät muista väärin, eikä mitään tarvitse poistaa, kun tallennuskapasiteettia on riittämiin. Muisto vain Unohtuneen faktan salamannopea tarkistaminen netistä on arkisempi esimerkki aivojen ”laajentamisesta” tekniikan avulla. Kyllä voi, sanoo Carr ja pamauttaa tiskiin pinon tutkimuksia. Facebook-ryhmän kautta egyptiläiset huomasivat silti, etteivät olleet yksin tyytymättömyydessään Mubarakin hallintoa kohtaan. ambient awareness). Yrityksiä on silti ollut. Luetun ymmärtäminen heikkenee linkkien määrän kasvaessa. Egyptissä kansa meni kaduille Facebookin kautta. Kaiken kaikkiaan Smarter Than You Think on kuitenkin suositeltavaa lukemistoa aiheesta kiinnostuneille.. ” Nettitekstiä lukemaan tottuneet pystyvät päättelemään hetkessä, miten todennäköisesti haluttu tieto löytyy tietyltä sivulta.. Hyperteksti häiritsee Netti ei olisi netti ilman linkkejä. Suhtautuminen muistiin on muuttunut aikojen saatossa. Ehkä kuitenkin riittää muistaa, mitä tietoa on olemassa ja mistä se löytyy. Yksittäisen ihmisen on vaikea ryhtyä vastustamaan vahvaa vallanpitäjää. Osa heistä sai koneelta apua: esimerkiksi lailliset siirrot osoitettiin visuaalisesti. Tämä kuitenkin edellyttää, että tieto maltetaan ensin siirtää pitkän aikavälin muistiin. He pystyvät päättelemään hetkessä, miten todennäköisesti haluttu tieto löytyy tietyltä sivulta. Nyt se kuulostaa vanhanaikaiselta. Sen seurauksena ihmisten harhaluulot vaikkapa puolituttujen suhtautumisesta vallanpitäjiin karsiutuvat ja kynnys puhua asioista avoimesti laskee. Mutta kuten Thompson huomauttaa, datan taltiointi ei itsestään johda enempään muistamiseen. Allianssi osoittautui voitokkaaksi niin ihmisiä kuin koneitakin vastaan. Linkkien erilainen ulkoasu häiritsee keskittymistä. Ei välttämättä. Jatkuva googletus johtaa muistin heikkenemiseen, mikä taas lisää googletuksen tarvetta. Toinen ryhmä käytti riisuttua ohjelmaversiota ilman helpotuksia. Keskimäärin ohjelma saattaa toimia hyvinkin, mutta päättömyyksiä tai hienoja nyansseja se tuskin tunnistaa kenenkään kirjoitelmista. Investointien todellisesta hyödystä voi olla montaa mieltä, mutta nyt laajamittainen paradigman muutos saattaa olla lähempänä kuin koskaan. Noidankehä on valmis. Matematiikka on kiitollinen oppiaine tietokoneistamisen kannalta, mutta äidinkieli on paljon haastavampi kohde. Thompson lähinnä kannustaa optimismiin: maailma on muuttunut ennenkin ja lopputulema on aina ollut hyvä. Toisaalta Carr myöntää, että nettitekstiä lukemaan tottuneet löytävät pitkästä tekstistä nopeasti etsimänsä. Mutta onko tyypillisempi nettiaktivismi pikemminkin passivismia, jossa pyritään parantamaan maailmaa peukkunappia painamalla. Matematiikan opetusvideot katsotaan kotona ja tehtävät tehdään tunneilla. Ei kai hypertekstistä mitään haittaa voi olla. Niiden käytön estäminen voi vetää barrikadeille aktivistien lisäksi raivostuneita kissavideoiden ystäviä
alv24% Asiakaspalvelu +358 29 70 70700 asiakaspalvelu@jimms.fi Jimm’siltä löytyy nettitilauksiin aina toimituskuluton vaihtoehto! Skrolli_2-2014.indd 1 14.5.2014 11:56:04. Tarkka laser sensori ja säädettävä DPI takaavat varmat osumat! Ominaisuudet: Avago 9800 Laser sensori, 7 ohjelmoitavaa näppäintä, DPI 200 8200, max. Gamer -koneet ovat niittäneet mainetta arvosteluissa ja ovat moninkertaisia lehdistön -testivoittajia! Trance Gamerista poistettiin vanhanaikainen savikiekko ja järjestelmälevyksi asennettiin nopea SSD-asema! Ominaisuudet: Intel i7-4770K 3.5GHz, -prosessori | Intel Z87-piirisarjan emolevy | NVIDIA GTX 770 2Gt -näytönohjain | 120Gt, 2.5”, Sata III -SSD asema | 8Gt (2x4Gt) DDR3 1600MHz, CL9 -keskusmuisti | Cooler Master Silencio 550 Jimm’s Edition -kotelo | Windows 7 Home Premium 64-bit (Suomi) 1259 € CM Storm Mizar Laser pelihiiri Mizar ammentaa inspiraationsa klassisesta oikeakätisestä ja ergonomisesta tyylistä. Sen ergonomisen muotoilun ansiosta saat mukavan otteen hiirestä! Ominaisuudet: Avago 3090 Optinen sensori, DPI 400 4000, max. seurantanopeus 60 ips / 20g 37,90 € 49,90 € Cooler Master Uncompromising Ergonomics Noutopalvelumyymälä Turku Lukkosepänkatu 7 20320 Turku Hinnat €/kpl, sis. seurantanopeus: 150 ips / 30g CM Storm Alcor Optinen pelihiiri Alcor sopii pelaamiseen erinomaisesti kätesi koosta tai grip-tyylistäsi riippumatta. Maukkaat epäonnistujat h Jimm’s Trance Gamer Jimm’s Gamer -sarjan koneet ovat olleet jo pitkään pelaajien suosiossa ja suunnannäyttäjinä