tiistai 16. tammikuuta 2018

Välilevy

Kesällä 2015 sain ensimmäisen diagnoosin välilevyn pullistumasta. Tarkkaa paikkaa en tiedä, koska selkää ei ole koskaan kuvattu, mutta todennäköisesti L4/L5-välissä, sillä tämä on yleisin ns. iskiasvaivan lähde.  Tuolloin kuntouduin parissa kuukaudessa niin, että kipu oli käytännössä kadonnut kahdeksan viikon jälkeen.

Tammikuussa 2017 vaiva uusiutui, kun olin menossa Maakuntakomppanian koulutukseen. Jälleen, noin kahden kuukauden kuluttua vaiva oli ohi.

Vaiva palasi syksyllä 2017 asteittain. Säteilykipua ei ensin tullut lainkaan, mutta selkä tuntui "väärältä" useaan otteeseen. Kyykyssä en kyennyt vuoden 2017 aikana kertaakaan parantamaan kesällä 2016 tekemääni ennätystä, ja maastavedossakin tulokset pysyivät samana koko vuoden. Tällä kertaa ei tullut akuuttia vaihetta jossa kipu olisi ollut kova, vaan se paheni pahenemistaan.

Kipu ei ole kova; se ei häiritse muuta elämää juurikaan. Mutta se haittaa nostamista, ja siksi se on äärimmäisen haitallista.  Kävin lääkärillä viime viikolla -- en tietenkään odottanut että se mitään auttaisi. Kävin kuitenkin, koska tämä potentiaalisesti vaikuttaa työkykyyni pitkällä aikavälillä, ja kun asia tulee raportoiduiksi riittävän monesti, niin jossain vaiheessa sitten arvioidaan erinäisiä vaihtoehtoja.

Kun sanon vaihtoehtoja, en kuvittele että jossain olisi maaginen pilleri tai esimerkiksi kirurginen operaatio joka korjaisi ongelman. Lähinnä informaatiota siitä, missä kohtaa välilevyjen degeneroitumista ollaan. Jossakin kohtaa ne ovat kuluneet siihen pisteeseen että selkä ei enää kuntoudu. Tämä on hyväksyttävä, mutta treenimotivaatioon vaikuttaa tieto siitä, onko se päivä jo kohta, vai vasta parinkymmenen vuoden päästä.

Nyt kuitenkin aloitan taas toipumiseen tähtäävän harjoittelun. Tai pikemminkin jatkan sitä. Kyykkypainot ovat maltilliset -- viimeisin oli 87.5kg -- ja maastaveto tänään rajoittui neljään sarjaan 70-85 kilolla.  Näitä voi verrata penkkipunnerrukseen, jossa tein viiden toiston sarjan 90 kilolla ja neljä 95 kilolla "huvikseen".

Ohjelmaan tulisi varmaankin ottaa liikkeitä jotka kuntouttavat selkää. Olen nyt jo integroinut "virallisten" suositusten mukaiset venytykset ja osan ns jumppaliikkeistä lihashuoltooni. En ole kovin toiveikas näidenkään suhteen, sillä näyttö näiden tehosta on erittäin heikkoa. En usko että selkäni koskaan tulee enää kivuttomaksi, enkä usko että se pitkällä aikavälillä paranee tai edes pysyy samana -- degeneraatio on etenevää. Mutta voin ehkä hidastaa sitä minkä voin.

Kun 600mg ibuprofeeni tai 30mg kodeiini ei enää auta, niin ehkä 9mm parabellum auttaa.

perjantai 5. tammikuuta 2018

Meltdown & Spectre

Viime päivien uutisissa on ollut paljon melua kahdesta tietoturvaan liittyvästä bugista, Meltdownista ja Spectrestä. En ole yksityiskohtaisesti perehtynyt näiden bugien sisältöön, mutta olennaista niissä kaikissa on se, että kun mikroprosessori suorittaa useita operaatioita rinnakkain, ja kun operaatioiden suoritusjärjestys ei ole fiksattu, syntyy tilanteita joissa tietynlainen periaatteessa kielletty operaatio saadaan suoritettua ja tulos luettua.

Esimerkiksi Meltdown toimii (karkeasti ja hiukan liikaa yksinkertaistaen) näin: Luetaan tietoa muistista johon ei oikeasti ole pääsyä. Teoriassa, ja tavallaan myös käytännössä, tämä kyllä huomataan, mutta suoritus ehtii etenemään jonkin matkaa ennen kuin asia huomataan. Tietoa itseään ei anneta eteenpäin, mutta vihamielinen prosessi on voinut laskea tiettyjä laskutoimituksia joiden tulos riippuu tuosta kielletystä muistista, ja näiden laskutoimituksen tuloksia jää välimuistiin. Vihamielinen prosessi pystyy selvittämään missä välimuistin osoitteessa nämä tulokset ovat, ja näin lukea (pienen määrän) jonkun toisen prosessin muistia.

Spectre puolestaan perustuu siihen, että prosessori "ennakoi" tilannetta jossa suoritus haarautuu. Esimerkiksi, ohjelman suorituksessa voi olla ehto "Jos X niin tee näin, muuten tee noin", ja ennen kuin tiedetään onko X totta vai ei, prosessori laittaa ennakoivasti joko "näin" tai "noin" suoritettavaksi. Tämä nopeuttaa keskimäärin suoritusta paljon, kunhan prosessorin arvaus on suurimmaksi osaksi oikein; jos arvaus on väärin, niin se huomataan ja ennakoivasti suoritetun laskennan tulos vain heitetään menemään.  Nyt, vihamielinen prosessi huijaa prosessorin arvaamaan väärin, ja suorittamaan ennakoivasti koodia joka lukee kiellettyä muistialuetta. Tämäkin huomataan ja suoritus peruutetaan ennen pitkää, mutta ennakoidun suorituksen tulos on laitettu välimuistiin, josta se ehditään lukea ennen kuin asiaa korjataan.

Tämä näin karkealla tasolla; huomautan että asia ei ole aivan noin yksinkertainen, ja esimerkiksi Spectren kohdalla on käsittääkseni mahdollista tehdä samankaltainen temppu ilman välimuistia. Myöskään mainitsemani välimuistin lukeminen ei ole mikään triviaali temppu. Olisikin varsin yllättävää, jos näin triviaalin kuuloinen ongelma olisi prosessorien suunnitteluvaiheessa jäänyt huomaamatta.

Suhteeni näihin ongelmiin on vähän ambivalentti. Jos olisin vielä erittäin innostunut aiemmasta tutkimuksestani, niin näiden tapausten esiintulo saisi minut toteamaan "mitä minä sanoin", ja vaatimaan tutkimukselleni lisää rahaa. Voisin jopa hyödyntää tätä hypeä ja paniikkia, ja hakea tutkimushanketta jossa vastaavia ongelmia etsitään lisää. Osaamiselleni on näiden ongelmien myötä varmasti enemmän kysyntää. Toisaalta en todellisuudessa usko että formaalin verifioinnin olemassaolevilla tai edes vähän kehittyneemmillä menetelmillä -- jotka olisivat olemassa jos rahaa olisi annettu aiemmin -- olisi näitä virheitä löydetty alunperinkään. Nyt kun ne tunnetaan, epäilemättä moni verifiointitutkimusryhmä virittää työkalunsa niin, että he voivat jälkiviisaasti todeta että olisivat pystyneet havaitsemaan nämä virheet. Ja kuka tietää, ehkä tämän virittelyn myötä keksitään jotain uusia kikkoja tai jopa laajempia teoreettisia näkökohtia tai abstraktioita joilla voidaan jatkossa estää vastaavien virheiden synty jo suunnitteluvaiheessa.

"Happamia, sanoi kettu", voisi joku sanoa. En ole kuitenkaan mitenkään katkera. Ihmisen kyky huomata virheitä on aina vähän jäljessä ihmisen kykyä tehdä niitä. Näin se vain on. Virheistä oppii, ja ehkä tästä opitaan jotain. Ehkä. Minä olen tosin jo pikku hiljaa siirtynyt toisiin aiheisiin.

tiistai 2. tammikuuta 2018

Apokalypsis 2018

Vuosi vaihtui, ja sen myötä tuomiopäivän pasuunat soivat. Puhun tietenkin apokalyptisestä kauhusta, joka seuraa kun päivittäistavarakaupassa saa myydä alkoholijuomia joiden alkoholipitoisuus on korkeintaan 5.5 tilavuusprosenttia, mukaan lukien juomia joita ei ole valmistettu yksinomaan käymisteitse.  Tämä tietenkin johtaa tapainturmelukseen ja rappioon sellaisella kiihtyvällä tahdilla, että mikään ei enää estä lopullista yhteiskunnan tuhoa.

Kävin aamulla kaupassa ostamassa Valio Plus- maitokaakaojuomaa, jota olen perineteisesti käyttänyt palautusjuomana. Aloitin nyt vuoden alusta HST-tyyppisen "kehonrakennus"-harjoittelun, joskaan en pyri kovin suureen massanlisäykseen kevätkaudella. tarkoituksena on pikemminkin totuttaa kehoa laktaatin tuottamiseen.

Oppikirjamainen HST-harjoittelu lähtee yleensä varsin suurista toistomääristä, esimerkiksi 15 toistosta, ja etenee progressiivisesti kuormaa lisäämällä ja tarvittaessa toistomäärää pienentämällä, kuitenkin niin että alle viiden toiston sarjoihin ei mennä. Perusajatus on, että lihasproteiinisynteesi joka treenillä saadaan aikaan, kestää noin 48 tuntia. 48 tunnin jälkeen toipumista toki tapahtuu edelleen, mutta se on pääosin muunlaista metabolista adaptaatiota kuin proteiinisynteesiä, joten lihasta pyritään rasittamaan 48 tunnin välein. Käytännössä tämä tarkoittaa kolmea kertaa viikossa, jotta treeni voidaan toteuttaa viikko-ohjelmana.  Koska kuitenkin muunlaista "toipumisvelkaa" kerääntyy, täytyy ylikunnon välttämiseksi pitää treenitauko aika-ajoin. Lisäksi treenitauossa on hieman bro-science- tyyppinen idea "strategic deconditioning", eli kun tauko on riittävän pitkä (esim 2 viikkoa), niin lihas reagoi seuraavaan sykliin taas paremmin. Tämä kuulostaa bullshitiltä.




Oli miten oli, aloitin lauantaina "herättelemällä" lihakset kymmenen toiston sarjalla ja tänään tein 3x12 toistoa kyykkyä. Käytin painona 70kg, mikä on hieman alle puolet maksimipainoistani. Tavoitteean on kasvattaa painoa 2.5kg per treenikerta niin kauan että 3x12 toistoa ei enää onnistu. Olisin voinut aloittaa ehkä raskaamminkin, mutta kolme kertaa viikossa painon lisääminen tuo seinän vastaan hyvinkin pian: Kahden viikon jälkeen ollaan lisätty jo 15 kiloa. Hieman outoa kyllä, 3x12 toistoa 60 kilolla penkkipunnerruksessa ei tuntunut ollenkaan niin raskaalta kuin kyseinen kyykky. Mutta kun ajattelen asiaa tarkemmin, kyykyssä on aina mukana myös kehon paino, jolloin oikeastaan painon puolittaminen kyykyssä vähentää lihasten kuormitusta paljon vähemmän kuin painon puolittaminen penkkipunnerruksessa.


Päätemplate on seuraavanlainen, ensi viikosta alkaen:
  • Ma: Kyykky 3xN, Penkki 3xN, Kulmasoutu 3xN, Sekalainen käsipainoliike 3xN
  • Ke: Kyykky 3xN, Pystypunnerrus 3xN, Leuanveto 3xN, Maastaveto 1xN
  • Pe: Kyykky 3xN, Vinopenkki 3xN, Talja 3xN, Käsipaino 3xN
N on alkuun nyt 12 toistoa, lineaarinen progressio. Tässä systeemissä kyykyn paino etenee selvästi nopeammin kuin muissa koska se tehdään kolmesti viikossa. On riski, että tämä johtaa nopeasti ylikuntoon, ja olen varautunut tähän sillä, että kun ylikunto uhkaa, pudotan kyykyn kertaan viikossa 3xN, ja teen muut samalla painolla mutta huomattavasti pienemmällä toistomäärällä. Kyykkyyn panostaminen on tässä minulla prioriteetti kuitenkin, sillä se kärsii aina eniten juoksemisesta yms kesäharjoittelusta, ja tavoitteena on "valmistella" kehoa jo pikku hiljaa kesää varten.

Kalorimäärät pidän melko maltillisina. Painoni ylitti 90 kiloa joulukuussa, mikä tarkoittaa noin painoindeksiä 26.5, eli minua vaivaa "lievä lihavuus".  Minulla ei ole varsinaista tavoitepainoa, mutta karkeasti arvioisin että nykyisellä painollani ja hieman alhaisemmalla rasvaprosentilla olisin aika sopivissa lukemissa. Tiedän että painoni putoaa kuitenkin muutaman kilon kesän aikana kun treenaan taas juoksua, joten pienestä noususta vielä kevään aikana ei ole mitään erityisempää haittaa.

torstai 21. joulukuuta 2017

Make the Yuletide gay

Vuosi lähestyy loppuaan. Sunnuntaina on jo jouluaatto. Sain eilen viimeiset tämän vuoden tentit korjattua ja kirjattua, loppuviikon teen "oikeaa" työtä yksityiselle sektorille -- vaikka aikamoista konstailua tämäkin on, ei mitään konkreettista vaan palvelua. Jokainen taloudesta jotain ymmärtävä tietää, että ainoastaan kaivostoiminta ja maanviljelys ovat oikeaa työtä, palvelut vain kuluttavat yhteiskunnan varoja ja mikään julkiselle sektorille tehty työpanos ei ole minkään arvoinen eikä hyödytä ketään koskaan millään tavalla, ja kansakunnan hyvinvoinnin määrää se, paljonko kuninkaan kirstussa on kultaa.

Näissä merkantilistisissa tunnelmissa on hyvä laskeutua joulunviettoonkin, sillä kuten tiedämme, Joulun tärkein sanoma on kuluttaminen, eli se että ostamme lahjoja -- mieluiten itsellemme, mutta myös mahdollisesti lapsille. Tärkeintä on, että lahjat on tehty muovista tai metallista, kaikenlaiset aineettomat lahjat ovat arvottomia eivätkä hyödytä ketään millään tavalla. Yksi pahimmista kaikista ovat tietokonepelit, jotka ovat pelkkiä bittejä. Lisäksi tietokoneilla pelaaminen kuluttaa sähköä, jota voisi käyttää paperitehtaassa paperikoneen pyörittämiseen,  valimossa metallin sulattamiseen, tai konepajalla hitsaamiseen.  Saunan lämmitys ja kinkun paisto tosin ovat suomalaisia perinteitä, ja koska perinteet ovat tärkeitä, niihin sähköä saa käyttää.

Huumori sikseen. Noin vuosi sitten kirjoitin ostikolla "Annus Mirabilis" vuodesta 2016, ja siitä että miten ns uusi elämäni oli lähtenyt käyntiin ja miten vointini oli parempi kuin pitkiin aikoihin. En koe pettyneeni tähän kuluneeseen vuoteen suhteessa edelliseen. Siinä missä vuodet 2015 ja 2016 olivat massiivisten myllerrysten vuosia, tämä on ollu varsin tylsä -- hyvässä mielessä.

Yksi pettymys täytyy kuitenkin heti paljastaa. En vetänyt tänä vuonna maasta kahtasataa kiloa, vaan ainoastaan 172.5 kiloa, ja senkin maaliskuussa. Viime viikolla 165 kiloa ei noussut polven yläpuolelle. Selkä on reistaillut nyt enemmän kuin aiemmin, ikä ei tule yksin. Myös kyykkytulos on pakittanut tämän vuoksi. Tiistaina jäi 130 kiloa uskon puutteen vuoksi räkkiin; otin sen harteille ja totesin että selässä tuntuu sen verran ikävälle, etten uskalla, ja laskin sen takaisin. Eilen tosin punnersin penkistä 107.5kg, eli kehitystä on tullut tuo 7.5kg vuodessa. Otan jokaisen voiton vastaan.

Tämä vuosi tulee jäämään mieleeni eräänlaisena välivuotena. Mitään kovin ihmeellistä ei tapahtunut, mutta otin silti ensi askeleet seuraavaan vuoteen. Otin riskin, kun lähdin uuteen työhön -- vaikkakin vain toinen jalka edellä ensin. Ammuin ensi kertaa liki kolmeenkymmeneen vuoteen haulikolla viime viikkolla. Vedin kesällä ensi kertaa kahteenkymmeneen vuoteen sellaiset kännit että oksensin, joskin vahingossa: Menin serkkuni luo kylään ja hänellä oli vodkapullo avoinna, joten päätin ottaa yhden. Ja toisen. Ja kolmannen. Ja sitten käytin induktiota kunnes tuli ns ylivuoto. Vaikka siitä on nyt jo kohta puoli vuotta, minulla on vieläkin fyysinen pahoinvointi kun ajattelenkin juopottelua.

Ostin tietokoneen pelkästään pelaamista varten itselleni ensimmäistä kertaa kahteenkymmeneen vuoteen. Uin Välimeressä ensi kertaa kolmeenkymmeneen vuoteen. Olin hakemassa uutta koiraa kennelistä -- vaikkakaan en itselleni -- ensi kertaa neljääntoista vuoteen. Tein monta asiaa, joita en ollut pitkään aikaan tehnyt. Osa oli hyviä, osa huonoja asioita.

En hanki joulukuusta enkä jouluruokia kotiin. Ulkoistan nämä muille. Olohuoneeni suurella ruokapöydällä on aseteltuna Next War- Korea. (Ks tilanne) Odotan uusinta painosta WiF:istä saapuvaksi alkuvuodesta. Olen hyväksynyt itseni sellaisena kuin olen. Olen pelaaja; pelaan lautapelejä ja tietokonepelejä. Näen asiat melkein poikkeuksetta sääntöinä ja algoritmeina.

maanantai 18. joulukuuta 2017

Poliittinen monisto

Erinäisiä poliittisia kompasseja ja karttoja on esitetty vuosien saatossa, jotta ihmiset voisivat asemoida itsensä poliittisesti. Perinteisempi vasemmisto-oikeisto- jaottelu on osoittautunut riittämättömäksi jo pitkään. Myös konservatiivi-liberaali- asteikko on jossain määrin epätyydyttävä.

Tyypillinen tällainen jaottelu perustuu yhteen tai useampaan dimensioon jossa ajatellaan olevan ääripäät, tms, jonkinlaiset puhtaaksiviljellyt arkkityypit erilaisista poliittisista ideologioista tms. Esimerkiksi perinteinen talouspoliittinen vasen/oikea ja sosiaaliliberaali/konservatiivi- jaottelu antaa mahdollisuuden luokitella ihmiset karkeastiottaen kahdeksaan kategoriaan. Koordinaatit kuuluvat neliöön jonka kulmapisteinä ovat (-1,-1), (1,1) (Koska kyse on neliöstä, muut kulmat määräytyvät näistä). Olennaiset pisteet ovat seuraavat:

  • (-1,-1)- kulmassa ovat ultraliberaalin vasemmiston edustajat, henkilöt joita olen yleensä nimittänyt makkaratukiksi. Tonni kuussa käteen kaikille, porvareille 120% verot, huumeita ja homoseksiä kaikille ilmaiseksi.  Äänestävät vasemmistoliittoa tai vihreitä.  Eivät käy töissä. Näiden kaveriksi pääsee kun pistää päälle Che Guevara-paidan ja ryhtyy vegaaniksi.
  • (1,1)-kulmassa ovat tiukkaa kuria edustavat ns "oikeistolaiset". Kannattavat sääty-yhteiskuntaa, homoseksuaalisuuden kriminalisointia, irtolaisten pakkosterilisaatiota ja kuningasvaltaa. Ja (aateliston) verovapautta.  Äänestävät KD:ta tai kokoomusta. Äänestäisivät Persuja muuten mutta kun ne ovat liian rahvaanomaisia. Jos ovat töissä, niin työskentelevät puolustusvoimissa tai poliiseina, tai Kansaneläkelaitoksessa.  Näiden kaveriksi pääsee kun perii miljoonaomaisuuden  tai käy kadettikoulun.
  • (-1,1)- kulmassa ovat perinteiset stalinistit. Äänestävät SKP:tä.  Ovat eläkkeellä nykyisin kaikki, lähes kuolleet sukupuuttoon.  Näiden kaveriksi pääsee jos kertoo sytyttävänsä Stalinille tuohuksen.
  • (1,-1)-kulmassa ovat libertaarit, joiden mielestä verotus on murhaa ja joiden mielestä Margaret Thatcher ja Ronald Reagan olivat ihan samanlaisia sosialisteja kuin kaikki muutkin. Eivät äänestä, vaan vetävät huumeita, pelaavat tietokoneella. Työskentelevät mikrotuessa tai ohjemoijina. Tai elävät sossun tuilla.  Näiden kaveriksi ei oikein pääse, koska he eivät pidä ihmisistä.
  • (-1,0)- reunassa ovat tavalliset sosialistit. Äänestävät SDP:tä ja työskentelevät raskaassa teollisuudessa tai julkisella sektorilla.  Myös aika paljolti kuolleet sukupuuttoon.
  • (0,1)-reunassa ovat Persut. Kirjava, edustava otos kansasta työpaikkojen (tai sellaisen puutteen) ja mielipiteiden osalta. Yhdistävä tekijä on lähinnä pelko siitä että jonain aamuna heräävät ja maailma on muuttunut islamilaiseksi.  Nämä hyväksyvät kaverikseen kaikki ja kannattavat jokaista mielipidettä, kunhan se alkaa sanoilla "En ole rasisti, mutta..."
  • (0,-1)-reunassa ovat "oikeistovihreät".  Saattavat äänestää kokoomusta tai vihreitä, riippuen siitä, mistä ovat kotoisin. Koiranpillinä toimivat ilmaisut "Sosiaaliturvajärjestelmä on rikki" tai "työehdoista pitäisi sopia paikallisesti", tai "Suomea uhkaa työvoimapula". Toimivat erilaisissa asiantuntijatehtävissä ja uskovat että ihminen kuuluu työväenluokkaan jos hänen tulonsa ovat noin 5 tonnia kuussa. Hiukan poliittisesta suuntauksesta riippuen ovat usein kasvissyöjiä (poislukien juottovasikan sisäfile, kaviaari ja foie gras). 
  • (1,0)-reunassa ovat "maltilliset oikeistolaiset". Äänestävät tyypillisesti kokoomusta. Ovat sitä mieltä että parkkimaksut ovat sosialismia ja oopperan subventio on vain kohtuullinen korvaus siitä että he kuitenkin maksavat niin paljon veroja.  Ihailevat USA:n republikaaneja ja irtisanoutuvat rasismista kovaan ääneen. Tyypillisesti miehiä. 
En ota kantaa näihin kahteen dimensioon tai niiden järkevyyteen (tai sen puutteeseen). Sensijaan ehdotan että otetaan (vähintäänkin) kolmas akseli eli ns. metaliberaalius. Tarkoitan tällä sitä, kuinka hyvin henkilö sietää mielipiteitä jotka poikkeavat omista. Henkilö jolla on matala metaliberaaliuden aste, ei hyväksy mielipiteitä jotka eroavat hänen omistaan. Henkilö jolla se on korkea, ei kauhistu ihmisten mielipiteistä riippumatta siitä, mitä nämä ovat.

Omassa tuttavapiirissäni huomaan ainakin sen, että perinteisemmillä mittareilla mielipide-erot eivät juurikaan selitä sitä, millaisia ihmisiä tuttavapiiriini kuuluu. Sensijaan metaliberaalius selittää voimakkaastikin. Tähän ehkä tarvittaisiin vielä toisen asteen metaliberaalius, koska ihmisissä on eroja myös sen suhteen kuinka hyvin he sietävät sitä kuinka huonosti ihmiset sietävät eriäviä mielipiteitä. Itse siedän jopa tätä aika hyvin, joskaan en aivan niin hyvin kuin siedän itse mielipide-eroja.

It is the mark of an educated mind to be able to entertain a thought without accepting it.

maanantai 11. joulukuuta 2017

Kuplista

Tämän kirjoitushetkellä Bitcoinin hinta on $16615.81, eli noin 15k€. En ota varsinaisesti kantaa siihen, onko Bitcoinin hinta "liian korkea". Moni epäilee näin, sillä sen arvo on noussut huimasti viimeisen vuoden aikana. Hiukan suoraksi mutkia vetäen, sen hinta on noin 16-kertaistunut vähän alle vuodessa. Alaspäin arvioiden, hinnan tuplaantumisväli on ollut noin kolme kuukautta, mutta syyskuusta alkaen nousu on nopeutunut.

Myönnän että olen hivenen harmissani. Noin vuosi sitten eräs internet-tuttavani pyysi minua bulvaaniksi hankkimaan hänelle muutamalla sadalla eurolla bitcoinia, ja sain muutaman kympin välityspalkkiota. Silloin ajattelin että voisin muutaman satasen ihan huvin vuoksi sijoittaa Bitcoiniin ja katsoa mitä tapahtuu. En kuitenkaan koskaan saanut aikaiseksi. Jos olisin tuolloin ostanut suunnittelemani 200 euron edestä Bitcoinia, sen arvo olisi nyt noin 4000€, eli noin 20-kertainen, sillä hinta oli tuolloin noin 800 euron paikkeilla per bitcoin. 

Eräs toinen tuttavani kertoi että hän ei varsinaisesti ole sijoittanut BC:iin, mutta omistaa sitä pienen määrän ja myy pois tipoittain sitä mukaa kun sen hinta nousee. Tämä sai minut miettimään asiaa laajemmin eräänalaisena sormiharjoituksena.

Oletetaan että meillä on jokin varallisuuden laji, esimerkiksi bitcoin tai jokin osake tms. Oletetaan että tiedämme että sen hinnassa on meneillään kupla. Nyt on syytä hieman huomauttaa rahoituksen teoriasta ja yleisemmin markkinataloudesta. Nimittäin, on melko tavallista olettaa ns. Efficien Market Hypothesis, tai ainakin jokin sen muoto. EMH:n variantteja tunnetaan myös nimellä "No money on the Table",  tai TANSTAAFL (there ain't no such thing as a free lunch). Nämä kaikki sanovat tavalla tai toisella, että vapailla markkinoilla ei ole mahdollista tehdä helppoja voittoja myymällä ja ostamalla.

Kirjoitan EMH:n tahallani tuolla tavalla, sillä se voidaan ymmärtää monella tavalla lähtökohtaisesti. Vahvin EMH:n muotoilu on että "vapailla markkinoilla kaikki hinnat ovat aina oikeita". Tämä siis tarkoittaa että kaikki tieto joka on julkista, on hinnoissa mukana niin, ettei esimerkiksi aitoja kuplia voi syntyä ilman että vallitsee yleinen väärinymmärrys,  tai joku huijaa tai pimittää informaatiota. Tämä vahvin muotoilu on uskoakseni väärä, koska on helppo osoittaa peliteoreettisesti että voi syntyä tilanne jossa kaikki uskovat että jonkin tietyn arvopaperin hinta on liian korkea mutta riittävän monet myös uskovat että se vielä nousee jonkin verran; Tällöin meneillään on eräänlainen mustapekka-peli, jossa ihmiset lyövät vetoa siitä, koska kupla puhkeaa, tietäen että se puhkeaa ennen pitkää.

En väitä nyt, että Bitcoinin kohdalla kyse on tästä. Koko Bitcoin-markkinan arvo on tällä hetkellä 281 miljardia dollaria. Tämä ei globaalin valuutan kokonaisarvona ole kovin suuri. Mutta se on paljon rahaa, joten on ymmärrettävää jos moni uskoo että BC romahtaa jossain vaiheessa esimerkiksi kymmenesosaan (tai alle) nykyisestä.

Tehdään yksinkertaisehko malli. Oletetaan että meillä on kupla, joka alkaa paisua ajanhetkellä t=0. Alussa arvopaperin hinta on 1 yksikkö, ja hinta kasvaa eksponentiaalisesti tahtia e^(ta), missä a on jokin positiivinen vakio. Käytännössä niin, että t_d = log(2)/a on arvon tuplaantumisaika, eli a = log(2)/t_d Esimerkiksi jos oletamme että BC tuplaantuu kolmessa kuukaudessa (eli 1/4 vuodessa), niin a on noin 2.77.

Kupla kestää jonkin aikaa, mutta emme tiedä kuinka kauan; oletetaan että kupla puhkeaa äkillisesti ja arvo putoaa nollaan. Oletetaan lisäksi että markkinahinta on hivenen kohinainen, eli hinnassa on kohinatermi joka aiheuttaa pieniä laskuja ja nousuja lyhellä välillä, mutta niistä ei tarvitse välittää tässä analyysissä. Oletamme siis, että kun t kasvaa, e^(ta) on koko ajan parempi approksimaatio suhteellisesta hinnasta ajanhetkellä t verrattuna ajanhetkeen 0 (jolloin hinta on 1). Kuplan puhkeamisen ajankohta olkoon b, ja oletamme että se tapahtuma joka on olennaisilta osin poisson-jakautunut mutta emme tunne sen jakaumaa.  Olennaista on vain se, että emme voi päätellä puhkeamisen ajankohtaa siitä, kauanko aikaa on jo kulunut.

Puhkeamisen ajanhetkellä arvopaperin arvo on siis e^(ba), mikä on siis maksimaalinen arvo. Paras sijoitusstrategia olisi tietenkin se, että ostaisi paperin hetkellä t=0 ja myisi sen ajanhetkellä t=b-epsilon, eli mahdollisimman lähellä puhkeamisen ajankohtaa. Emme kuitenkaan tiedä puhkeamisen ajankohtaa, joten emme voi varautua tähän.

Oletetaan että voimme joka ajanhetki myydä (tai ostaa) kyseistä arvopaperia ilman transaktiokustannuksia mielivaltaisen pienissä erissä. Tämä oletus on toki vahva, mutta tutkitaan sitä nyt jotta saadaan jonkinlainen kuva asiasta.. Oletetaan lisäksi että ajanhetkellä t=0 pidämme hallussamme yhtä yksikköä arvopaperia, ja sitä mukaa kun arvopaperin arvo kasvaa, kevennämme salkkuamme niin, että meillä on hallussamme kullakin ajanhetkellä k(t) yksikköä. Ideaalitilanteessa k(t) = 1, kun t < b ja k(t)=0 kun t = b, sillä myymme kaiken pois juuri ennen romahdusta.

Tehdään kuitenkin lisäoletuksia. Ensinnäkin, oletetaan että k(t) on jatkuvasti äärettömän monta kertaa derivoituva, eli että se on analyyttinen, ja että k'(t) < 0 kaikilla t > 0.  Jos lyhykäisyyden vuoksi merkitään hintaa v(t), niin kokonaiskassavirta jonka kuplan kasvun aikana ulosmitataan on integraali -k'(t)v(t) dt, missä t käy nollasta b:hen. Haluamme maksimoida tämän, mutta huomionarvoista on, että me emme voi tietää mikä b on; meidän on etsittävä sellainen muoto k(t):lle, jossa b ei esiinny lainkaan.

Eräs ystäväni ehdotti sellaista strategiaa, jossa k(t)*v(t) -- eli siis hallussa olevan arvopaperin markkina-arvo -- kasvaa kuplan mukana noin suhteessa hinnan neliöjuureen. Tällöin strategia on, että k(t) = 1/sqrt(v(t)). Tällöin -k'(t)*(v(t)) = v'(t)/(2*sqrt(v(t))), eli kassavirta on sqrt(v(b)) - 1. Jos v(t) = e^(at), kuten oletimme, niin tämä on e^(ab/2) - 1. Tällä strategialla pääsee omilleen, jos e^(ab/2) > 2, eli jos hinta ehtii nelinkertaistumaan alkuperäisestä.

Voidaanko pärjätä paremmin? Kuvitellaan strategiaa, jossa portfolion arvo pidetäänkin koko ajan vakiona, jolloin sitä mukaa kun hinta nousee, hinnanousu ulosmitataan kokonaisuudessaan. Tällöin k(t)*v(t) = 1, eli k(t) = 1/v(t), ja -k'(t) = v'(t)/v(t)^2, ja -k'(t)v(t) = v'(t)/v(t), jonka integraali on log(v(t)). Kassavirta on kokonaisuudessaan siis yksinkertaisesti ab. Tässä pääsee omilleen jos ab > 1. Tämän tulkitseminen on jo vähän vaikeampaa, mutta esimerkissämme a=2.77, jolloin b > 0,361, eli hieman yli neljä kuukautta, so. kun hinta on hieman yli tuplaantunut.

Tämä on esimerkki niinsanotun variaatiolaskennan ongelmasta. Ns. Euler-Lagrange-yhtälö on muotoa, jossa etsimme funktiota q(t) siten, että meillä on annettuna funktio L(t, q(t), q'(t)) ja etsimme funktionaalin S(q) = integraali L(t, q(t), q'(t)) dt stationaarista pistettä, eli pistettä jossa S(q + ez) < S(q) kaikilla ei-triviaaleilla funktioilla z ja pienillä e>0. Tässä ez on q:n variaatio, eli jokin pieni muunnelma q:sta. Intergaali tässä on määrätty integraali jollakin annetulla välillä; esimerkissämme se on 0:sta b:hen.

Variaatiolaskennassa on monta eri tapaa lähestyä ongelmaa, ja en nyt ala tässä niitä käsitellä. Jos kuitenkin rajoitumme eksponenttifunktioiden perheeseen, eli k(t) = e^(ct), niin k'(t) = ce^(ct), ja yleinen muoto integroitavassa funktiossa on -ce^((a+c)t), niin tulos on (hiukan hankalasti tulkittava) muotoa - c(e^(c(a+b)) - 1)/(a+b). Jos katsomme, milloin tässä pääsee omilleen, niin merkitsemällä tämän suuremmaksi kuin 1, saamme -ce^(c(a+b)) > a+b+1, mistä nyt ei tule mitään kovin kilttiä funktiota. Jos meillä on arvio a:sta ja jokin uskomus b:stä, niin voimme asettaa c:n siten, että tämä toteutuu.

En edes esitä että tällä olisi mitään todellista sovellusta. Ongelma vain on mielenkiintoinen.


perjantai 8. joulukuuta 2017

Reiluus

Reiluus (engl. fairness) viittaa rinnakkaisten järjestelmien teoriassa suunnilleen sitä, että järjestelmän mallissa otetaan huomioon vain sellaiset äärettömät suoritukset, joissa kaikki komponentit etenevät jossain vaiheessa. Esimerkiksi, jos meillä on kaksi toimijaa, jotka tahtovat käyttää jotain jaettua resurssia (esimerkiksi tulostin, jolla kahdelta eri koneelta tulostetaan) jatkuvasti, niin järjestelmä on reilu, jos molemmat pääsevät halutessaan lopulta tulostamaan.

Käsite on intuitiivisesti ensialkuun selkeä, mutta analysoitaessa tarkemmin, se hajoaa käsiin. Käytetään esimerkkiä jossa kahdelta eri tietokoneelta tulostetaan samalla tulostimella.  Protokolla on seuraavanlainen: Koneelta tulee yksi pyyntö kerrallaan tulostaa paperi. Tulostin valitsee jomman kumman pyynnön ja palvelee sitä. Toinen pyyntö jää voimaan ja tulostamisen jälkeen tulostin valitsee uudelleen. On kuitenkin mahdollista, että ensimmäinen kone on tällä aikaa päättänyt pyytää uuden paperin tulostamista, ja tulostin valitsee sen jäälleen. Toisen koneen pyyntö on koko ajan voimassa, mutta sitä ei koskaan toteuteta. Niin sanottu heikko reiluus sanoo, että jos jokin toiminto on koko ajan mahdollinen, järjestelmä lopulta todella suorittaa sen, eli että järjestelmässä ei ole sellaista ääretöntä suoritusta, jossa pyyntö olisi koko ajan (teoriassa) mahdollista toteuttaa, mutta sitä ei toteuteta.


Todellisuudessa kuitenkin pyyntö menee tulostimen jonoon. Tulostin ottaa jonosta pyynnön ja tulostaa sen. Jos jono toimii niin, että sinne mahtuu "paljon" pyyntöjä, ja ne käsitellään aina järjestyksessä, ongelmaa ei juurikaan ole. Mutta oletetaan että jonoon mahtuukin vain yksi pyyntö (tai jokin pieni määrä). Jos jonossa on yksi pyyntö, tulostin ottaa sen käsittelyyn ja jono tyhjenee (tai sinne mahtuu yksi lisää).  Nyt kuitenkin ensimmäinen kone ehtii tulla takaisin pyytämään ja laittaa oman pyyntönsä jonoon ennen kuin toinen ehtii sitä esittää. 


Nyt siis pyynnön esittäminen ei ole mahdollista silloin, kun jono on täynnä.  Vaikka jokainen todella esitetty pyyntö tulee käsitellyksi, toinen koneista ei pääse esittämään pyyntöään koska se ei ole mahdollista välillä. Järjestelmä ei intuitiivisesti katsottuna ole reilu, mutta heikko reiluus ei tätä mahdollisuutta tavoita. Vahva reiluus taas sanoo, että jos jokin tapahtuma on äärettömän usein mahdollinen (vaikka se välillä olisikin mahdoton), niin se lopulta tapahtuu. Eli vaikka jono välillä on täynnä eikä pyyntöjä voi esittää, vahvasti reilu järjestelmä takaa että toinenkin kone lopulta pääsee esittämään pyyntönsä.

Reiluuden ongelmana on, että se on erittäin hankala mallintaa, ja se on kiusallinen laskennallisesti, verrattuna sellaisiin ominaisuuksiin kuten turvallisuus ja lukkiumat. Turvallisuus viittaa siihen, että esimerkiksi pyynnöt eivät mene sekaisin, eli ei tapahdu tilannetta jossa molemmat koneet kuvittelevat tulostavansa samanaikaisesti (ja esimerkiksi sivulle tulisi kahta eri tekstiä päällekäin tms). Turvallisuusrikkomus voidaan havaita jos järjestelmä päätyy tilaan jossa molemmat koneet kuvittelevat tulostavansa.

Myös lukkiumat ovat helppo todeta; lukkiuma on järjestelmän tila, jossa se ei pääse lainkaan etenemään. Jos esimerkiksi tulostimen ja koneiden välinen jono menee rikki niin, että kumpikin kone näkee jonon olevan täynnä (ja näin jää odottamaan että saisi laittaa sinne pyynnön), ja tulostin kuvittelee että jono on tyhjä (ja näin odottaa pyyntöjä), järjestelmä lukkiutuu. 

Ajatellaan nyt protokollaa joka hoitaa jonkin tällaisen järjestelmän toimintaa. Siinä ei ole jonoa, mutta siinä on eräänlainen "odotushuone". Jokainen joka haluaa päästä tulostamaan -- nimitetään tätä asiakkaaksi -- ilmaisee halunsa tulostaa laittamalla "lipun" päälle. Kummallekin asiakkaalle on oma lippunsa.  Kun asiakas on laittanut lipun päälle, tämä menee "välitilaan"  kirjoittamaan "nimikirjaan" toisen asiakkaan nimen. Tämä tapahtuu riippumatta siitä, mitä nimikirjassa luki. Tämän jälkeen asiakas menee odottamaan. Odottaessaan asiakas tarkastaa, onko nimikirjassa tämän oma nimi vai joku muu. Jos kirjassa on oma nimi, niin asiakas pääsee tulostamaan. Jos siinä ei ole omaa nimeä, asiakas tarkastaa onko kenelläkään lippu päällä. Jos lippuja ei ole päällä, asiakas pääsee myös tulostamaan. Tulostettuaan asiakas laittaa lipun alas.

Tässä järjestelmässä asiakas ei voi "etuilla" muita. Jos joku muu on esittänyt pyynnön, niin kun asiakas esittää pyynnön (eli laittaa lipun päälle), hän samalla antaa vuoron toiselle. Asiakkaat eivät voi estää toisiaan laittamasta lippuja päälle. He voivat viivästyttää toista ainoastaan jäämällä välitilaan jossa lippu on laitettu päälle mutta nimikirjaan ei ole kirjoitettu mitään.  Järjestelmä ei kuitenkaan vaadi edes heikkoa reiluutta, ainoastaan oletuksen, että kumpikaan ei vapaaehtoisesti pysähdy välitilaan, odottamaan, tai tulostamaan.

Me tiedämme että tämä järjestelmä toimii ilman reiluusoletuksia. Vaan entä jos järjestelmä onkin rikki?

Kuvitallaan että asiakas ei tarkastakaan toisen lippua, vaan jää vain odottamaan, että toinen asiakas antaa vuoron. Tällöin asiakas jää odottamaan kunnes toinen asiakas on antanut vuoron ja siirtynyt itse odottamaan. On selvää, että tällainen järjestelmä ei toimi kunnolla -- kuvittele järjestelmä jossa voit tulostaa ainoastaan jos joku muu yrittää myös tulostaa.  Jos kuitenkin mallinnamme järjestelmän niin, että kukaan ei jää odottamaan minnekään, se näyttää toimivan oikein, koska kumpikin yrittää tulostaa uudelleen ja uudelleen. Me toki tiedämme että jos sallimme asiakkaan jäädä paikoilleen alkutilaan, niin virhe paljastuu.

Yleisemmin, ominaisuus joka tässä yleensä tarkastetaan on, että lopulta pyyntöön vastataan. Mutta tämä rikkinäinen järjestelmämme näyttää oikealta jos emme osaa huomioida sitä, että asiakas saattaa alkutilassa jäädä paikoilleen.  Heikko reiluuskaan ei auta suoraan, mutta me voimme saada virheen kiinni, jos laitamme alkutilaan silmukan, jossa asiakkaan on lupa junnata paikallaan. Tällöin saamme aikaan äärettömän suorituksen, jossa pyyntö on esitetty, mutta siihen ei ole mahdollista vastata (koska toinen asiakas pyörii loputtomiin eikä koskaan pyydä mitään), ja olettamalla että reiluus koskee vain välitilaa, odotusta, ja tulostamista. Tämä on kuitenkin varsin hankala mallintajalle, koska mallintajan täytyy ikään kuin tietää missä tilassa virhe voi syntyä ennen kuin hän edes sitä lähtee etsimään.

Ongelma tässä on se, että järjestelmän alkuperäinen malli näyttää oikealta, koska asiakkaalle ei olla mallinnettu muuta mahdollisuutta kuin se, että tämä jatkuvasti esittää pyyntöjä. Huomattavasti luontevampi malli olisi sellainen, jossa asiakas voi todeta että "olen saanut tarpeekseni" tulostettuaan, ja tämä siirtyy tilaan jossa ei enää voida tehdä mitään. Tällöin toki järjestelmä saattaa lukkiutua, mutta lukkiutumisen kohdalla riittää spesifioida erikseen se, onko lukkiuma sallittu vai ei. Eli, jos annamme asiakkaalle mahdollisuuden päättää "nyt loppui" ja parkkeerata itsensä, meidän pitää sallia sellainen lukkiuma (ja vain sellainen) jossa kaikki asiakkaat ovat lopettaneet tyytyväisinä.

Tämä siksi, että on intuitiivisesti selvää ettei asiakkaan pyyntöihin vastaamisen ehtona pitäisi olla se, että toinenkin asiakas pyytää jotain. Jos teemme näin, niin huomaamme, että kun toinen asiakas lopettaa tyytyväisenä, toinen on tuomittu jumittamaan odotustilaan; löydämme lukkiuman joka ei ole sallittu ja virhe paljastuu. Alkuperäisessä järjestelmässä näin ei käy, koska odottava asiakas näkee että toisen asiakkaan lippu on alhaalla, ja pääsee tulostamaan kaikessa rauhassa.

Kun tutkimme jonkin pyynnön toteutumista, nimitämme tällaista ominaisuutta ei-pakotetuksi pyynnöksi (unforced request). Se tarkoittaa, että asikkaalla tulisi olla mahdollisuus kieltäytyä esittämästä pyyntöjä, ja järjestelmän oikeellisuus tulisi säilyä. Pääsemme näin eroon reiluudesta ainakin tässä nimenomaisessa tapauksessa.

Kuvitellaan nyt että rikomme jo rikkonaista protokollaa lisäksi niin, että asiakas ei muistakaan kirjoittaa mitään nimikirjaan. Tällöin siis asiakas vain laittaa lipun päälle ja menee tarkastamaan onko nimikirjassa oma nimi. Nimikirjassa on jonkun nimi, ja tämä joku pääsee loputtomiin käsiksi resurssiin, mutta koska kukaan ei sitä muuta, toinen asiakas puolestaan jää odottamaan loputtomiin.  Huomaisimme tässä kyllä virheen, mutta tehdään lisäoletus: Kun asiakas päättää ettei se enää halua palvelua, se parkkeeraa itsensä, ja vasta sitten kirjoittaa nimikirjaan toisen asiakkaan nimen.

Tällöin käy niin, että niin kauan kun kumpikin asiakas haluaa resurssia, ensimmäinen saa sen käyttöönsä loputtomiin kun taas toinen ei saa sitä lainkaan. Vasta kun ensimmäinen lopettaa, toinen saa vuoron. Tässä kohtaa emme saa virhettä kiinni pelkästään lukkiumia ja turvallisuusominaisuuksia tarkastelemalla, mutta järjestelmällä on kuitenkin ääretön suoritus jossa toinen prosessi odottaa. Reiluutta ei kuitenkaan tarvita mihinkään, ainoastaan oletus että kumpikaan asiakas ei odota loputtomiin.

Nimitämme tällaista ominaisuutta englanninkielisellä ilmaisulla eventual access (en keksinyt hyvää suomennosta). Se tarkoittaa että spesifioimme tilapredikaatteja jotka eivät saa olla voimassa äärettömässä suorituksessa. Emme siis oleta mitään reiluudesta tässä kohtaa, vaan yksinkertaisesti sanomme että "ei ole lupa jättää asiakasta odottamaan äärettömästi". Tämä on hieman samanlaista kuin reiluus, mutta se on eri roolissa; Reiluus on oletus joka tehdään jotta voidaan erottaa aidot virheet silmukoiden alispesifioinnin tuottamista "artefakteista".

Rikkinäisessä järjestelmässä on eventual-access rikkomus, sillä niin kauan kun ensimmäinen asiakas hakee palvelua, tämä saa sitä loputtomiin ja toinen asiakas ei saa mitään. Vasta kun ensimmäinen lopettaa, toinen pääsee resurssiin. Käytännössä tämä näkyy niin, että järjestelmällä on silmukka jossa toinen asiakas odottaa.

Jos siis spesifioimme että järjestelmälle on spesifioitu sallitut lukkiumat, turvallisuus (eli se, ettei resurssia käytetä yhtä aikaa) sekä eventual access- ominaisuus ja varmistamme että mallinnoksessa on huomioitu unforced request, niin voimme saada kaikki em. virheet kiinni ilman mitään erillisiä reiluusoletuksia.

Tämä artikkeli on nyt kirjoituksen alla.