Blog
"Skeptismi on oppi jonka mukaan ihminen ei voi saavuttaa varmaa tietoa. Skeptismiin kuuluu selitettyjen ilmiöiden teorioiden paikkansapitävyyden kyseenalaistaminen ja epäily jotakin asiaa kohtaan." – Wikipedia
Liityin Skepsiksen jäseneksi vuonna 2009. En muista enää tarkalleen miksi näin päätin tehdä, mutta taustalla taisi olla halu tukea tieteen edistämistä. Olin lukenut paljon Skepsiksen artikkeleita verkosta ja ne tuntuivat hyviltä – kansantajuisilta. Ymmärsin myös ensimmäistä kertaa kunnolla huuhaan ja tieteellisen tutkimuksen eron homeopatia-artikkelien myötä. Vasta jatko-opiskelujen myötä ymmärsin kuitenkin todella, miten tieteellinen tutkimustyö etenee ja mikä merkitys tieteellisen metodin keksimisellä on ollut ihmiskunnalle.
Näin ei kuitenkaan aina ole elämässäni ollut. Aloitin yliopistossa 2004. Olen koko ajan ollut kiinnostunut lähes kaikesta, joten DI-opinnot olivat kuin tehty minua varten. Opintojen aikana piti suorittaa puheviestinnän opintojakso, jossa luonnollisesti piti sitten pitää puhe. Kaverin kanssa pyöriteltiin aiheita ilmassa ja surffailtiin samalla. Ohjelmoinnin opetus? Kuuhun laskeutumiset? Siinä kuumatkailua selatessa vastaan käveli myös Google Videossa ollut dokkari Moon landing hoax, eli kuulaskeutumishuijaus. Se vaikutti mielenkiintoiselta. Vakuuttava esitys siitä, miten kuussa käynti oli mahdotonta. Asiaa tarkemmin googlaillessa kaverin kanssa törmäsimme WTC-iskujen salaliittoteorioihin. Ne imaisivat minut täysin mukaansa ja myöhemmin pidimme esityksemme “kontrolloiduista rakennusten räjäyttämisestä” ja muusta WTC-”iskuihin” liittyvästä asiasta.
Tämän jälkeen tuli luettua asioista enemmänkin ja sopivalla ohjauksella tutustuin niin B17-vitamiinin syöpäsoluja tuhoaviin vaikutuksiin, Kennedyn lavastettuun murhaan kuin ilmastonmuutoshuijaukseen. Luonnollisesti vapaamuurarit ja bilderbergit tulivat tutuiksi. New World Orderistakin (NWO) minulle tarinoitiin, mutta sitä en koskaan sulattanut. Kabineteissa oli kuulemma myös päätetty, että Hillary Clintonista tulee seuraava Yhdysvaltojen presidentti ja kun näin ei käynytkään, niin taisihan siinä olla salaliittoa salaliiton päälle. Rokotteilla haluttiin kuulemma vähentää ihmisiä maapallon päältä ja Yhdysvaltojen armeijalla oli jo olemassa ties mitä laitteita ja vekottimia, joita vasta muualla teollisuudessa kehiteltiin. Loose Change ja The Great Global Warming Swindle tuli katsottua. Kyllä maailmaan mahtuikin “salaista ‘tietoa’”, johon olin päässyt käsiksi! Halusin tietysti jakaa myös tätä “tietoa” eteenpäin!
Jossain vaiheessa tilanne alkoi tuntua siltä, että mikään mitä luemme ei ole totta. Valtamedia kusettaa ihan kaikessa ja tiedemiehet ovat mukana kaikenlaisissa salaliitoissa. Mitä sitten tein tässä vaiheessa elämääni? Tein juuri sen mitä vaikkapa Alex Jones kehottaa kansalaisia tekemään: heräämään ja tutkimaan asioita.
Koska aloin samoihin aikoihin painimaan väitöskirjan kanssa, tuli tieteellisen tutkimuksen lukeminen ja tekeminen osaksi elämänrytmiäni. Rupesin väkisinkin pohtimaan voivatko kaikki tiedemiehet olla mukana salaliitoissa, kun en kerran itsekään ole. Eikä ollut kukaan muukaan ketä tapasin. Eikä edes tuttavan tuttava tai kummin kaiman kissa. Ymmärsin miten tiede toimii ja pystyin tutkimaan asioita kriittisemmin kuin aiemmin.
Nopeasti huomasin, etteivät WTC-iskut olleet lavastettuja, ilmastonmuutos oli kiistaton tosiasia, NWO oli huuhaata, eikä syöpään ollut olemassa mitään ihmelääkkeitä. Tässä vielä aiemmin olin pohtinut, olisiko minun pitänyt jo edesmenneelle äidilleni viedä B17-”vitamiinia”, jotta syöpä olisi voitettu (kyseessä ei oikeasti ole vitamiini vaan pikemminkin myrkky). Tunsin hieman huonoa omaatuntoa siitä, etten ollut jakanut “tietoani”. Onneksi sitten tutustuin lääketieteenkin toimintaan paremmin ja ymmärsin, etten olisi voinut tehdä mitään lääketieteellistä auttaakseni äitiä.
Vaikka tiedemaailmassakin on ongelmansa, sinne eivät kuitenkaan kuulu salaliittoteorioiden maalailemat rahanahneet tutkijat, jotka vääristävät tiedettä saadakseen itselleen omaisuuksia. Ja vaikka näitä välillä ilmeneekin, jäävät he kiinni, sillä tieteen periaatteisiin kuuluu vertaisarviointi ja kokeiden toistaminen. Mikäli mullistavaa tutkimusta ei voida toistaa, on sen paikkansapitävyys vähintäänkin kyseenalaista. Tästä syystä nopeasti opin myös sen, etteivät rokotteet ole vaarallisia, eivätkä ne aiheuta esimerkiksi autismia. Samasta syystä ajatus, että kymmenet tuhannet tutkijat onnistuisivat väärentämään ilmastotutkimuksia, on täysin absurdi. Eikä homeopatian toimivuudestakaan ole sadoista tutkimuksista huolimatta löytynyt näyttöä. Tiede etenee välillä hitaasti, mutta ennen kaikkea johdonmukaisesti. Se ei poukkoile, eikä lupaa ihmeitä.
Tutkimuksessa on tärkeää heittää omat näkemykset sivuun ja tehdä mahdollisimman objektiivista työtä. Tätä pyrin myös arvostamaan ihan tavallisessa elämässä. En halua ryntäillä mitä ihmeellisimpien ruokavalioiden perässä, koska joku niitä kehuu blogissaan. Yksittäinen kertomus ei paljasta asiasta käytännössä yhtään mitään. Vasta kun tilastollinen merkitsevyys on saavutettu, saatan kiinnostua asiasta. Maailmaa pitää usein yrittää katsoa oman pään ulkopuolelta ja vähintäänkin haastaa ja kyseenalaistaa omat ajatukset ja mielipiteet. Se on välillä aivan törkeän vaikeata, mutta siihen pyrin parhaani mukaan.
Keikat takana ja kivaa oli :) Satuin Stadissa olemaan samaan aikaan, kun eduskunta äänesti tasa-arvoisesta (tai sukupuolineutraalista) avioliittolaista, joten videolle tuli siitäkin taltioitua tunnelmia.
Lyhyesti virsi kaunis. Kesän tsygäilyt sujuivat hyvin ja saldona oli maaliskuun, elokuun, syyskuun, lokakuun, marraskuun, yksittäisen kuukauden ja koko vuoden ennätykset. Tänä "kesänä" kasaan tuli 2106 kilometriä.
Alla oleva kuvaaja kertonee, että on tässä vuosien saatossa jotain kehitystä tapahtunut. Tällä nykyisellä ajorytmillä ja -varustuksella ei tästä enää ylöspäin juurikaan pääse. Eikä oikeastaan tarvikaan. Harrastuksena ja kuntoiluna pari tonnia on ihan tarpeeksi :)
Ja sinne Imatralle en päässyt vieläkään... ensi kesänä?
Sain Rosa Liksomin uusimman teoksen Väliaikainen päätökseen ja totean sen olleen taattua Liksomia. Kymmenet pienet tarinat ovat välillä aivan absurdeja, välillä ratkiriemukkaita ja välillä – no, ehkä jopa hieman tylsiä. Kyllä tämän kuitenkin luki ihan mielellään.
Liksomin murtella kirjoittaminen on välillä vähän haastavaa ja jouduin googlaimaan osan sanoista, joita ei käytetä näillä etelän leveysasteilla. Murteen käyttö ei kuitenkaan ollu liian haastavaa, ei edes viimeisessä osiossa (puolet kirjasta), jossa se eroaa eniten kaakkoismurteista, joiden parissa sattaisin kuvitella pärjääväni.
Täytynee varmaan kaivella jostain lisää Liksomin vanhempaa 80-luvun tuotantoa ja jatkaa sillä eteenpäin.
Yliopiston käytävillä (sekä fyysisillä että virtuaalisilla) kuului alkuviikosta legendaa jonkun keksineen ohjelmointiongelmaksi kirjoittaa koodi, joka piirtäisi ruudulle joulukuusen. Tämä tehtävä suoritetaan siis tekstinä, jolloin kuusta voidaan mallintaa vaikkapa #-merkeillä.
#
###
#####
###
#####
#######
#####
#######
#########
Ohjelmalle tulee siis kertoa, kuinka monta kerrosta puuhun halutaan ja tämän jälkeen se piirtää halutun kokoisen kuusen. Ongelma ei ole mikään maailman vaikein ja sen pystyy suorittamaan ihminen, joka on käynyt, esimerkiksi, jonkin ohjelmoinnin perusteet -kurssin. Ohjelmoinnin hauskuus on siinä, että ratkaisuja on rajaton määrä. Toiset ovat nopeita, toiset hitaita. Toiset selviä, toiset kryptisiä. Ennen kaikkea jotkin ratkaisut ovat lyhyempiä kuin toiset. Ohjelmoinnin (leikkimieliset) kilpailut keskittyvät moniin asioihin, mutta useasti kyse on siitä kuka pystyy kirjoittamaan lyhimmän koodin ratkaisemaan ongelman X. Esimerkiksi, Brainfuck-tulkki pystytään C-kielellä koodaamaan alle kahdellasadalla merkillä.
Koodin lyhyyttä voidaan mitata yleisesti merkkimäärällä, mutta myös koodirivien määrää käytetään. Jälkimmäinen on kuitenkin huonompi mittari, sillä monet ohjelmointikielet sallivat, että koko ohjelma on periaatteessa koodattu yhdelle riville. Ei siinä ole mitään järkeä, mutta se on mahdollista.
Tällä kertaa joulukuusi piti kuitenkin ohjelmoida Pythonilla, joka ei salli tällaista yhdelle riville kaiken kirjoittamista – periaatteessa. Vaikken itse tehnytkään ensimmäistä versiota, niin heitän sen tähän alkuun kuitenkin. Se on niin pitkä ja huono :)
1. level = 15
2. counter = 1
3. i = 1
4. while True:
5. s = ""
6. for j in range(0, 10 - round(i/2) - counter % 2):
7. s += " "
8. for j in range(0, i):
9. s += "#"
10. print(s)
11. if counter % 3 != 0:
12. i += 2
13. else:
14. i -= 2
15. counter += 1
16.
17. level -=1
18. if not level:
19. break
Itse tykkään koodailla PHP:llä, joten olin jo kerennyt unohtaa Pythonin monet hienoudet ja erikoisuudet, joten välilyönnit ja #-merkit oli tulosteltu ruudulle for-silmukoilla vaikka “#”*x olisi ollut huomattavasti simppelimpi vaihtoehto. Ratkaisin ongelman niin, että piirsin kuusta koko ajan leventäen, kuitenkin niin, että mikäli rivi oli kolmella jaollinen, mentiinkin kapeammaksi. Oma ratkaisuni oli siis noin 20 riviä koodia. Suht selkeää ja yksinkertaista, mutta niin pitkää…
Timo oli itse asiassa ensimmäinen, joka ongelman ratkaisi, mutta seuraavassa on hänen ratkaisunsa numero kaksi.
1. def makeString(length, chars):
2. s = ""
3. s = s+ chars*"#"
4. for i in range(0, (length-chars)/2):
5. s = " " + s + " "
6. return s
7. trees = 15
8. rows = trees*3
9. l = [1, 3, 5]
10. while len(l) < rows :
11. l += [x for x in range (l[len(l)-2], l[len(l)-1]+2+1) if not x%2==0 ]
12. for i in l:
13. print makeString(rows, i)
Kuten huomaamme, on koodia vähemmän, noin 15 riviä. Timon ratkaisussa piirrettävän rivin rakentaminen ja kuusen rivien erot on eriytetty kahdeksi erilliseksi ongelmaksi. Ratkaisu on erilainen ja vähintäänkin lyhyempi. Toisaalta huomataan myös, että rivi 11 on pituudeltaan jo pidempi kuin yksikään ensimmäisen ratkaisun rivi. Sen minkä toisaalla voittaa, toisaalla menettää. Seuraavan ratkaisun tarjosi Jussi. Ohjelman pituus oli pudonnut kolmasosaan, sillä ratkaisumalli oli jälleen aivan erilainen. Jussi lähti liikenteeseen ajatuksesta, että puu kasvaa koko ajan alaspäin ja kerralla piirretään kolme kerrosta puusta. Tämän jälkeen ei tarvitse murehtia puun muodosta eikä kolmella jaollisuudesta, joten koodista tuli huomattavasti lyhyempi ja se on silti edelleen suht luettava.
1. def main(offset = 15, charset = 1, cutoff = 0):
2. while offset > cutoff:
3. print(" "*offset+"#"*charset+"\n"+" "*(offset-1)+"#"*(charset+2)+"\n"+" "*(offset-2)+"#"*(charset+4))
4. charset = charset + 2
5. offset = offset - 1
6. main()
Pekka katseli asiaa hetken ja totesi, että nuoremmille pitää nyt näyttää vähän mallia ja lyhensi koodia muuttamalla puun kasvatuksen toistorakenteeseen.
1. def main(offset = 15, cutoff = 0):
2. for x in range (offset,cutoff,-1):
3. print(" "*x+"#"*((offset+1-x)*2-1)+"\n"+" "*(x-1)+"#"*(((offset+1-x)*2-1)+2)+"\n"+" "*(x-2)+"#"*(((offset+1-x)*2-1)+4))
4. main()
Yllätys ei liene suuri, että rivin pituus alkoi näissä ratkaisuissa jo kasvaa entisestään. Ratkaisu oli kuitenkin lyhyempi kuin mikään edellisistä.
Tämä ei kuitenkaan Timoa tyydyttänyt, vaan hän lähti vielä yhdeksi illaksi liikenteeseen “challenge accepted” -asenteella ja tarjosi aamulla ratkaisuksi seuraavaa.
1. (lambda trees=8, l=[1, 3, 5]: print( "\n".join( [ ( lambda length, chars: "".join([" " for i in range(0, int((length-chars)/2)) ]) + chars*"#" ) (trees*3, x) for x in (lambda: l if [ ( lambda : l.extend([ x for x in range(l[-2], l[-1]+3) if not x%2==0 ]) ) () for y in range(0, trees) ] else None) () ] ) ) ) ()
Eli loppujen lopuksi kuusen piirtämiseen Pythonilla vaadittiin kuin vaadittiinkin vain yksi rivi koodia. Timo oli pessyt tohtorit ja tutkijat. Toisaalta, jos koodin luettavuus ja selkeys olisi kriteereissä korkeammalla, niin ehkä tässä koodissa voisi olla jotain sanomista. Mutta oli miten oli: Timon ratkaisu oli lyhin. Siis riveissä. Merkeissä voiton vei Pekka.
Mitä tästä opimme? Ohjelmointi on mukavaa puuhaa ja leikkikenttää on käytössä rajattomasti :)