What else besides sailing?

Web and stufff...

Jan 7

Javascript ja asynkronisuus

Moni on varmasti törmännyt asynkronisen koodin yhteydessä syntyvään spakettiin, joka on usein höystetty calback syltyllä. Ajattelin jakaa omia kokemuksiani tämän asian tiimoilla ja vertailla vähän eriliasia käytössä olevia patterneja.

Perustyökalu pakkiinhan kuuluvat seuraavat patternit:

  1. Callbacks
  2. Events
  3. Promises

Lyhyet esimerkit kustakin:

Tarkoituksena olisi keskittyä kahteen jälkimmäiseen patterniin ja yrittää löytää käyttötapauksia sekä esimerkkijä jossa ne ovat parhaimmillaan, mutta niistä lisää seuraavissa päivityksissä. Jos arvon lukijalla on antaa hyviä vinkkejä yms. tms. niin laittakaa ihmeessä tulemaan.


Mar 6

Dec 31

Checking out http://lanyrd.com/ - why not join me?


Nov 26

I <3 node.js: Alku 1.0

Kaiken muun ohessa täytyy vanhan koiran opiskella uusia juttuja. Niinpä aloitan lyhyen trilogian aiheesta node.js

Monelle node.js on varmaan ainakin jollain tasolla tuttu ja kenelle JavaScript ei olisi tuttua. Allekirjoittanut on aihetta tähän asti vain seuraillut sivusta ja ajatellut että jälleen YAP(C) ja edellinen samakieli (kuka muistaa Jaxer:n?) HTTP:n molemmin puolin oli ihan kiinnostava mutta… Mutta kuinka väärässä olinkaan.

Jotta pääset alkuun kannattaa katsoa alla oleva esitys jonka piti Ryan Dahl JSConf.eu 2010:ssa.

Seuraavassa osassa on tarkoitus käydä läpi node.js:n asennus.


Aug 1

Ensimmäinen päivä Tukholmassa.

Tukholmaan rantauduttiin Viking Line:n kipolla 9:40. Rinkat painoivat sen verran että Taxi tuntui järkevimmältä vaihtoehdolta. Kuljetus Viking Line terminaalista ensimmäisen yön huoltopisteelle Scandic Norra Bantorret:lle kustansi 250 akuankkaa. Ilmeisesti saimme vähän turistilisää hintaan, mutta minkäs teet kun olet turisti.

Iltapäivä kului pakollisen kaupunki kierroksen ja tulevien asuinalueiden katsastus. Vanhassa kaupungissa ja keskustassa oli paljonkin turistia ja muuta menijää. Tunnelbaana kuljetti helposti 30 akun hinnalla T-Centralen asemalta. Kohden asemat olivat Stadshagen( linjojen T10&T11 ) varrella ja Sundbybergs centrum ( linjan T10 ) varrella. Sundbybergs:ssä poikettii Turkkilais-Italialais-Japanilais-Amerikkalais-Thaimaalaiseen mättölään. Sapuskat olivat ok ja maksoivat siinä 60 - 95 akua. Oluet käytiin nauttimassa hevi-baari-pizeriassa. 25 akua 0.45 mitä ilmeisemmin retken ensimmäinen II-olut.

Huomenna olis ohjelmassa asuntojen lunastus ja matkakorttien hankinta. Aamupäivällä kohteeksi siis KTH:n kampus.

KTH:n retket kartalla


Mar 30

Viimeisin projekti pulkassa - TKRekry.fi laajentuminen

On aina mukava saada projekti päätökseen. Viime vuoden lopulla www.tkrekry.fi laajentui koko Tays:n ERVA-alueelle. Eilen tulivat HUS ja Kys mukaan remmiin. Nyt TKrekry.fi työpaikkailmoitukset ja yhteystiedot kattavat hyvän osan terveyskeskuksista ( kts. kartalta Tays HUS Kys ) ja toivottovasti auttaa erityisesti nuoria lääkäreitä huomaamaan että hyviä työnantajia on myös kehäkolmosen ulkopuolella. Vaikket työpaikkaa olisi juuri nyt etsimässäkään löytyy sivulta myös monenlaista muuta tietoa.


Radiant cache ongelma

Perusasetelma on että asiakkaalle haluttiin samanlainen haku toiminto kuin esim. http://areena-beta.yle.fi/haku Jolloin urlit pysyvät siisteinä ja hakukone ystävällisinä. Siitä että onko tämä paraskäytäntö tai tapa ei ole tässä yhteydessä oleellista. (tietenkin jos on vahvoja näkemyksiä niin ihmessä komentteihin ;) ) Eli perus asetelma on: Form + http post -> parse params to url -> Header 303 -> http get: /haku/kissa (cache) -> sivu palautetaan. Jolloin voidaan samaa hakutoimitoa ajaa myös suoraa http get: /haku/kissa . Kakku toimii ja kaikilla on hauskaa. Radiant CMS käyttää versiosta 0.8 eteenpäin implemetaatiota Rack::Cache:sta joka on muuten vallanmainio laitos, mutta siitä ehkä myöhemmin. Normaalista kaikki sujuu ihan hyvin, http get -> cache: etag/max-age= mukaan pyyntö eteenpäin tai palautetaan 304 Mutta http post -> cache: invalidate joka kutsuu restore_response metodia metastore.rb:96 tässä kohtaa saadaa aikaa poikkeus joka johtuu siitä että hakua varten tehdyssä radiant sivutyypissä on muokattu tämä header hyppy ennen kuin pyynnölle luodaa mitää sisätöä (tämä on siis minun tapaukseni, muta samankaltaiseen ongelmaan voi törmätä myös muissa tapauksissa). Tämä ihan vain siitä syystä että on turhaa jauhaa turhia sisältöjä ;) Ongelman voi ratkaista päivittämällä Radint::MetaStore :n metodia restore_response (radiant/lib/radiat/cache.rb) Patch:lla


 - def restore_response(hash, body)
 + def restore_response(hash, body = nil)

Oletettava virhe joka syntyy ja että sitten googlella löydät:


  SQL (0.3ms)   SELECT DISTINCT class_name FROM pages WHERE class_name <> '' AND class_name IS NOT NULL
/!\ FAILSAFE /!\  Thu Aug 13 18:21:48 +0300 2009
  Status: 500 Internal Server Error
  wrong number of arguments (1 for 2)
    /radiant-project/vendor/radiant/vendor/rack-cache/lib/rack/cache/metastore.rb:96:in `restore_response'
    /radiant-project/vendor/radiant/vendor/rack-cache/lib/rack/cache/metastore.rb:96:in `invalidate'
    /radiant-project/vendor/radiant/vendor/rack-cache/lib/rack/cache/metastore.rb:94:in `map'
    /radiant-project/vendor/radiant/vendor/rack-cache/lib/rack/cache/metastore.rb:94:in `invalidate'
    /radiant-project/vendor/radiant/vendor/rack-cache/lib/rack/cache/context.rb:137:in `invalidate'
    /radiant-project/vendor/radiant/vendor/rack-cache/lib/rack/cache/context.rb:68:in `call!'
    /radiant-project/vendor/radiant/vendor/rack-cache/lib/rack/cache/context.rb:50:in `call'
    /opt/local/lib/ruby/gems/1.8/gems/rack-1.0.0/lib/rack/head.rb:9:in `call'
    /opt/local/lib/ruby/gems/1.8/gems/rack-1.0.0/lib/rack/methodoverride.rb:24:in `call'

Mar 30

Hei me otetaan käyttöön.

Käyttöönottoon tuntuu aina liittyvän kaksi asiaa, mahdollisimman hiljainen ajankohta ja odottamattomat yllätykset. Mahdollisimman hiljainen ajankohta tarkoittaa yleensä Suomessa sunnuntai iltaa, etenkin viimeinen riipaisulle eli dns:ien päivitykselle hyvä hetkin tuntuu olevan sunnuntaina kello 19:00 jälkeen. Silloin tapahtuu harvoin mitään tuottavaa. Odottamattomat yllätykset taas voivat olla positiivisia tai negatiivisia. Negatiiviset liittyvät yleensä siihen että jokin ei toimikkaan odotetulla tavalla ja koska on viikonloppu niin ketään ei saa kiinni, eikä näin ollen asiaan eteenpäin tai korjattua. Yleensä tätä negatiivista kokemusta seuraa positiivinen kun plaan B toimii mukavasti. Niin se taisi mennä tälläkin kertaa. Tuntemukset oton jälkeen ovat odottavat, sitä jää jotenkin aina henkisesti odottamaaan ensimmäistä “tässä on virhe” ilmoitus. Niin nyt kannattaa vierailla http://www.tkrekry.fi ja löytää se ensimmäinen “tässä on virhe” ilmoituksen aihe.

Viikonlopun kokemukset

  • Heroku - näytti jälleen hampaansa
  • Ruby gems + shared hosting - aiheuttaa aina odottamattomia ongelmia
  • Iso kiitos P.Rannikolle