Loppupuheenvuoro – Antti

Tämä Ohjelmointistudio 1 -kurssi alkaa nyt pikkuhiljaa olemaan paketissa.

Tunnelmat kurssin osalta ovat varsin kaksijakoiset. Lyhyesti sanottuna: idea hyvä, toteutus huono. Aloitetaan toteutuksen käsittelyllä, niin saadaan sitten hyvät asiat jutun loppuun. Varmaankin suurin perisynti johon tämä kurssi kaatui oli tiedon puute. Sekä yleisen tiedotuksen, että tehtävien sisällön osalta. Kun kurssi alkoi, niin selkeää kuvaa siitä mitä oikein pitäisi tehdä ei oikein ollut. Ensimmäisestä olo-sessiosta iso osa meni ihmetellessä sitä, että mitä seuraavaksi ja ensimmäinen itsenäinen tehtävä aiheutti kysymyksen siitä kuin laajasti ja tarkasti aihetta oikeastaan pitäisi tarkastella. Tehtävänä olleen ajatuskartan kuin olisi voinut periaatteessa toteuttaa minkä kokoisena tahansa väliltä 10-1000 kuplaa.

Olo-tapaamisten osalta homma alkoi selkiytymään suuremmilta osin jo toisesta viikosta eteenpäin, mutta jo lähes samantien alkoi ilmaantumaan uusi ongelmailmiö nimeltä ryhmän koon pieneneminen. Lähinnä tämä aiheutti ongelmia sen suhteen, että tapaamisissa käytyjen keskustelujen sisällön laatu putosi varsin nopeasti ainakin omalla asteikollani varsin lähelle perus kaveriporukan käytäväjutustelua, eli aiheesta ei oikein saanut keskusteluissa mitään uutta irti. Samaten joukon pieneneminen aiheutti sen että itsenäisesti valmisteltavien esitelmien aihealueet muuttuivat laajemmiksi ylimalkaisemmiksi ja uuden asian määrä ennalta asiaan tutustuneille laski. Hämmennystä puolestaan taas aiheutti se, että koska portfolioon tulevien töiden määrä ei pienenisi vaikka ryhmäkoko niin teki, niin asia kuulemma otettaisiin huomioon arvostelussa. Nähtäväksi jää, että mitä tämä nyt sitten käytännössä tarkoittaa.

Harjotustyöt taisivat kuitenkin olla kaikista suurin syy siihen, miks niin moni jätti kurssin kesken. Tehtävät olivat monilta osin erittäin haastavia ja ohjeistus huonoa. Esimerkiksi jos nämä tehtävät aiheuttivat huomattavia vaikeuksia ihmiselle joka on ohjelmontia harrastanut 12-vuotiaasta saakka ahkerasti ja suhtautuu koulutehtäviin yleiseti hyvällä motivaatiolla (minä), niin en yhtään ihmettele jos ne monille aiheuttivat ylitsepääsemättömiä vaikeuksia.

Monilta osin asiaa olisi varmasti jo helpottanut se, että olisi annettu muutamia hyviä lähteitä joista asiaa olisi lähtenyt tutkimaan. Assareiden avulla tehtävistä saattoi ehkä kyllä saada pisteitä irti, mutta kuinka paljon tehtävät sitten lopulta oppimista saivat aikaan? Osaltaan tehtävänannoissa esiintyneet tyhjästä ilmaantuvat käsitteet, oletukset asioiden triviaalisuudesta, sekä virheet, joita ei kuulemma ollut tarvetta korjata, eivät varmasti ainakaan parantaneet tilannetta.

Mutta nyt niihin positiivisempiin asioihin, tai no oikeastaan asiaan. Kurssin idea oli nimittäin mielestäni varsin hyvä ja kehittämiskelpoinen. Toteutus olisi voinut onnistua paremmin jos kullekkin aiheelle olisi varattu enemmän aikaa ja asiaa olisi käsitelty jo ryhmässä siten, että se olisi tukenut itsenäistä työskentelyä . Lisäksi harjoitustyöt olisi mielestäni voitu käydä läpi ryhmässä (vaikkakin tehtävien käsittely jälkikäteen tuntuu olevan varsin vieras käsite yliopistomaailmassa) tällöin myös tehtävissä epäonnistuneet olisivat voineet oppia uutta enemmän.

Meille on tämän syksyn aikana muilla kursseilla ja yhteyksissä toitotettu yhteistyön merkitystä. Itse olenkin ehdottomasti sitä mieltä, että tärkein asia, jonka tänä syksynä olen yliopistossa oppinut on juuri yhteistyön voima. Sekä siltä osin miten sen läsnäolo on lisännyt ja helpottanut oppimista, että myös miten sen puutuminen on vastaavasti asioita vaikeuttanut. Siksi minusta yhteistyöllä olisi tästäkin kurssista saanut huomattavasti enemmän irti. Jos se vain olisi sallittu.

P.S. Tämä portfolio ei taida koskaan saavuttaa sisällöllistä täyttymystään.

P.P.S. Kiitos ja anteeksi tuosta portfolion taustakuvasta.

P.P.P.S. Siinä taustakuvan koodissa on oikeasti jotain järkeä!

P.P.P.P.S. Kiitos ryhmälle (myös sille osalle joka ei loppun asti selvinnyt)!

P.P.P.P.P.S. Rymämme lopullinen jäsenmäärä taitaa olla 5, joten siksi P.S x 5  :)))))

Antti Virtanen

Tehtävä 6 – Pienpelit

Viimeisessä harjoitustyössä saimme tehtäväksemme kirjoittaa Scalalla ohjelman, jossa olisi mahdollista päästä pelaamaan kolmea klassista pienpeliä (eng. minigame): ristinollaa, hirsipuuta sekä ping pongia (jota kutsutaan myös pöytätennikseksi). Tehtävään ei meille annettu valmista ohjelmakoodin runkoa, eli meidän tuli kirjoittaa ohjelma itse alusta alkaen. Itselleni tämä oli varsin posiitiivinen seikka, sillä aiemmilla kierroksilla olen ollut vähän ongelmissa nimenomaan valmiiksi annettujen koodinpätkien kanssa.

Kun ensimmäisen pelin kohdalla olin edennyt jonkin matkaa, oli varsin selkeästi huomattavissa, että syksyn aikana kurssien tarjoama “ohjelmointityyli-propaganda” oli tehnyt tehtävästä varsin tehokkasti. Ohjelman eri osien jaoittelu ohjelmakoodiin, kun näytti kumman tutulta verrattuna kursseilla nähtyihin valmiisiin koodinpätkiin.

Suurin uudistus aiempiin tehtäviin nähden oli nyt siis se, siinä missä aiemmin on pitänyt vain toteuttaa yksittäisiä palsia suuremmasta ohjelmakokonaisuudesta, niin nyt piti itse myös suunnitella ohjelman rakenne ja pitää huoli siitä, että lopullisessa ohjelmakoodissa olisi oma paikkaansa ohjelman jokaiselle palaselle.

Suurimman haasteen tehtävässä ainakin itselleni muodosti swing-grafiikkakirjasto. Eritysesti se, että sai ikkunan elementtien asettelun kuntoon tuotti hankaluuksia. Myös paintComponent metodin ylikirjoituksesta näytti seuraavan varsin outoja asioita, jotka toisaalta ymmärrän, mutta taas toisaalta, “miksi ihmeessä asia pitää tehdä oikesti tehdä näin vaikeaksi”  kun monet muutkin ohjelmointikielet ja kirjastot ovat siinä onnistuneet. Ilmeisesti joitakin vaihtoehtoja swing/awt yhdistelmälle olisi tarjolla, mutta täydellinen tiedonpuute asiaan liityen ei juuri houkuttanut siihen, että olisi kokonaan uuden kirjaston käyttöä alkanut opettelimaan.

Tehtävän kaksi pääpainopistettä olivat siis mielestäni ehdottomasti oman ohjelman rakenteen suunnittelu, sekä grafiikkakirjastoihin tutustuminen. Itse pelilogiikoista vaikeuksia tuotti lähinnä vain pingpong -pelin törmäyksien käsittely. Muilla opiskelijoilla tilanne oli ilmeisesti ollut aika samankaltainen, eli vaikeudet olivat lähinnä painottuneet pingpong -pelin logiikoihin.

Toivottavasti kovin monella opiskelijalla tunnelmat eivät kuitenkaan ollet samat, kuin tällä hirsipuussa epäonnistuneella ukkelilla:

ukko

alkuperäinen kuva: http://www.republicofcode.com/tutorials/flash/hangman/

Antti Virtanen

Tehtävä 4 – Web teknologiat

Tässä harjoitustyössä tehtävänä oli kirjoittaa essee web-teknologioista. Aiempien kirjallisten tehtävien tapaan oli tehtävän anto tälläkin kertaa varsin väliä, joten esseen työstäminen oli käytännössä pakko aloittaa aiheen jonkinlaisella rajaamisella. Lähinnä piti siis päättää kuinka laajasti ja miltä osin käsittelisi mitäkin web-teknilogioiden osa-aluetta. Kaikkia osa-alueita kun tovottiin käsiteltävän jollakin tasolla.

Itse päädyin jakamaan aiheen kolmeen osaan: yhteyteen, palvelimeen ja selaimeen. “Nörttikielellä” siis frontend, backend ja mitä siinä välillä tapahtuu. Yhteyttä käsittelin vain lyhyesti. Lähinnä siiltä kannalta, miten palvelin ja selain kummunikoivat keskenään HTTP- , eli nettisivu-liikenteessä ylimällä ja sille tyypillisimmällä tasolla. Tähän kummunikaatioon kun tavallinen kotikoneen käyttäjäkin voi törmätä varsin usein mm. 404-error viestin muodossa.

Toisesta osa-alueesta, palvelimesta kirjottaessani törmäsin ensimmäisen kerran aiheeseen liittyvään käsitetulvaan. Erilaisia käsitteitä (teknologioita, tuotenimiä yms.) kun on valtavasti. Näistä kun jotkin tarkoittavat samaa asiaa, jotkin melkein samaa asiaa ja joitakin käytetään joissakin yhteyksissä väärin, niin yritä siinä sitten päästä selville siitä mikä on se paras käsite juuri tähän kyseiseen kohtaan omaa tekstiäsi. Pääasiassa päädyin käyttämään eri tuotenimiä, sillä niitten määrittely kun on usein varsin yksiselitteinen.

Palvelinmen käsittelyssä koin tärkeimmiksi osa-alueiksi erilaiset kääntäjän sekä tietokannat. Lähinnä koska koin ne suurimmiksi eroavaisuuksiksi selaipuolen teknologioihin nähden.

Selainteknologioiden käsittelyn tiivistin oikeastaan kolmeen käsitteeseen: html, css ja javascript, sekä siihen mikä kunkin tehtävä nettisivulla on. Näiden erilaisista yhdistelmistä (jQuery, Bootstrap jne.) olisi taas tietysti voinut tarinoida vaikka maailman tappiin asti, mutta päädyin pysyttelemään vain kolmessa käsitteessä itsessään.

Henkilökohtaisesti suurimmat oppimis-saavutuksen käpahtuvat varmaankin palvelin puolen käsitteiden tasolla. Muilta osin en näin laaja-alaisessa esseessä oikein päässyt oman vanhan tietämykseni ulkopuolelle. Ehkä tämän työn olennaisin anti myös muille opiskelijoille oli nimeen omaan aiheeseen liityvät käsitteet. Niiden ymmärtäminen kun helpottaa huomattavasti aiheen pariin palaamista tulevaisuudessa. Aika monilta ohjelmoinnin vasta aloittaneilta kun nimenomaan nämä käsitteet ovat hukassa ja sen vuoksi kulloikin aiheeseen liityvän tiedon löytäminen voi olla vaikeaa. Tästä näkökulmasta tehtävänannon jättäminen laaja-alaiseksi oli mielestä hyvä valinta.

 

Antti Virtanen

OLO5-tapauksen avaus

Ryhmämme koko pienenee kuin tietokoneen vapaan muistin määrä, kun siirryimme tietokonegrafiikkaa ja vuorovaikutusta käsittelevän aiheen pariin. Graffinen osuus herätti huomattavasti vuorovaikutusta paremmin keskustelua. Onhan kyseessä ryhmä tietotekniikan opiskelijoita, joten tämä tuskin tuli kenellekkään yllätyksenä.

Keskustelu (oikeastaan pääasiassa kahden ihmisen välinen sellainen) lähti liikkeelle Javan (ja Scalan) swingistä ja awt:stä. Pohdinnan lähtökohtana toimi ajatus 2d-piirrustus ohjelmasta. Pikkuhiljaa tästä lähdettiin ajautumaan ties minne mm. 3d-grafiikan ja animaation maailmaan.

media-20131218Keskustelun ja Post-it stormauksen jälkeen lopullisiksi itse-opiskelu-aiheiksi valikoituivat seuraavat kokonaisuudet

Vuorovaikutus tms. Scalassa – Karri

2d -grafiikka yms. Scalassa – Antti

Animaation ja piirtämisen optimointi – Esa

3d grafiikka yms. – Markus

Vuorovaikutus siis pääsi kuin pääsikin parempien ideoiden puutteessa mukaan joukkoon.

 

Antti Virtanen

 

23.10. OLO3:n purku

Tällä viikolla neljättä olo-tapausta, joka oli siis kuva, oli saapunut purkamaan vain noin puolet ryhmämme vahvuudesta. Lieneekö tenttiviikko sitten tehnyt tehtävänsä vai mikä, mutta muutama aihe kuvaan littyen saatiin kuitenkin käytyä läpi.

Väriavaruus

Väriavaruus on matemaattinen malli siitä, kuinka esittää värejä lukujen avulla. Usein tämä toteutetaan kolmella tai neljällä luvulla, elöi komponentilla. Väriavaruus määrittelee, mitä kaikkia värejä voidaan käyttää – määrä ja määrittely vaihtelee värimallien välillä.

Erilaisia värimalleja ovat esimerkiksi:

  • RGB (Red Green Blue) – tietokonegrafiikassa varmasti yleisin värimalli

  • HSB (Hue Saturation Brightness) – sävyyn, kylläisyyteen ja kirkkauteen perustuva malli. Yleisesti käytetty valo- ja videokuvan käsittelyssä, sillä se mahdollistaa kuvan helpon värikorjauksen.

  • CMYK – tulostukseen tarkoitettu värimalli (värit sekoittuvat eri tavalla kuin tietokoneen näytöllä)

  • Lisäksi mm. PAL-videokuvan YUV, sekä RGB:n johdannaiset sRGB ja Adobe RGB.

Vektorigrafikka

Vektorigrafiikka eroaa rasterigrafiikasta siinä, että kuvaa ei tallenneta kuvapisteinä, vaan matemaattisesti määriteltyinä muotoina, esim. ympyrä ja neliö.

Käytännössä kuvatiedostoon tallennetaan solmujen paikkoja ja tiedot siitä miten mitkäkin solmut yhdistetään. Alla olevassa kuvassa esim. suorilla viivoilla.

vector4

Määritellyt muodot voidaan lopuksi määritellä täytettäviksi jollakin värillä (kuten mallikuvassa keltaisella) tai vaikka rasterimuotoisilla kuvilla, mikä on mahdollista esim. EPS-vektoriformaatissa. Koska kuva on tiedostossa määritelty ainoastaan matemaattisesti, täytyy lopullinen kuva muodostaa joka kerta uudestaan kuvaa näytettäessä. Tästä on tosin hyötynä se, että vektorigrafiikkaa voidaan skaalata loputomasti ilman että sen laatu kärsii. Yleisimpi vektoriformaatteja on  SVG, johon voidaan itse grafiikan lisäksi suoraan tallenetaa myös esimerkiksi animaatiota. SVG on nettisivuilla eniten käytetty vektoriformaatti sillä kaikki uudenaikaiset selaimet tukevat sitä.

HDR (High Dynamic Range) -kuva

  • Kuvantamista, jossa kuvaa käsitellään muodossa, jossa dynamiikkaa enemmän kuin tavalliset monitorit ja tulostimet pystyvät esittämään
  • HDR-kuvan tulostaminen/näyttäminen monitorilla: tavanomaista laajempi kirkkausalue kutistetaan tulostimen/näyttölaitteen kirkkausaluetta vastaavaksi
  • Yksinkertaisin, lineaarinen kutistaminen →kontrastittomat, mitäänsanomattomat kuvat; eivät vaikuta luonnollisilta.
  • Kehittyneemmättonemapping-algoritmit; pyrkivät säilyttämään paikallisen kontrastin

Dynamiika

  • Tarkoittaa sitä, kuinka laaja kirkkausalue voidaan esittää niin, että kuvan yksityiskohdat vielä erottuvat
  • Mitataan yleensä aukkoina →kukin aukko kaksinkertaistaa kirkkauden
  • Korkealla ja matalalla dynamiikkalla ei yksikäsitteistä rajaa
  • Tyypillinen matalan dynamiikan kamera/filmi/monitori toistaa noin 5-9 aukon laajuisen dynamiikka-alueen

HDR -kuvan ottaminen

  • Tyypillisesti valotushaarukoinnilla: samasta näkymästä otetaan useampi valokuva eri valotuksilla
  • Esim. 1/125 s, 1/250 s, 1/500 s, 1/1000 s, 1/2000 s; muut valotusparametrit (aukko, herkkyys) pysyvät samoina
  • Kuvien yhdistäminen: esim. Photoshop, LuminanceHDR →rekonstruoivat eri valotusajoilla otetuista kuvista kameran toistokäyrän, laskevat kullekin pikselilletodellisen kirkkauden

Tallentaminen

  • Yleensä jossakin muodossa, jossa ei ole käytännössä rajoja, esim. EXR
  • EXR-muodossa kunkin pikselinvärikomponentti (RGB, punainen, vihreä sininen) liukuluku →kirkkauden suuruusluokka voi vaihdella huomattavasti, merkitsevien numeroiden määrää vakio
  • Liukulukuina esitetty HDR-kuva tavallaan rekonstruktio siitä, millaiset valoisuuserot maisemassa oli ennen kuin se kuvattiin, lisättynä mahdollisesti kuvantamisvälineen virheillä

Kuvaputkinäyttö

Kuvaputkinäyttö koostuu tyhjiössä olevasta elektrinitykistä, jonka lähettämiä elektroneja ohjataan kaksisuuntaisella magneettikentällä. Elektronit kohdistetaan fosforipintaan siten, että ne muodestavat halutun kuvan. RGB-näytössä elektroneja kohdistetaan erikseen punaista, vihreää ja sinistä valoa emitoiville kohdille fosforipintaa. Yksi kuvaputken erityis-sovelluksista on oskilloskooppi.

Tälläistä siis tällä viikolla OLO-ryhmä #10 purussa.

Antti Virtanen