Sunnuntailukemista: Ruby in a Nutshell, Ruby Cookbook

Lueskelin sunnuntaina huvikseni hieman Rubya. Ei niinkään että haluaisin ryhtyä käyttämään sitä, mutta ymmärtääkseni millaisia ajatuksia ja malleja kielessä on.

Ruby in A Nutshell ei sinällään herättänyt mitään rakastavia tunteita, vaan tuntui jälleen yhdeltä skriptikieleltä muiden joukossa. Ruby Cookbook avasi kielen idiomeja paremmin ja joissain kohdissa jo melkeinpä ajattelin että tuohon on kätevää.

Python on kuitenkin edelleen kauniimpi ja mukavampi kieli.

Tallennettu aiheeseen programming. Jätä kommentti »

O’reilly OSCON Conference-esitykset

Tallennettu aiheeseen programming, technology. 1 kommentti »

Buddhist roleplaying game

Tallennettu aiheeseen life. 1 kommentti »

Audible.com – kuunneltavaa lenkeille: Blue Ocean Strategy

Olen jo jonkun aikaa käyttänyt pelkän musiikin sijaan lenkeillä viihdykkeenä audiokirjoja Audible.com:sta ja olen ollut positiivisesti yllättynyt siitä miten piristävää on juoksun lomassa saada virikkeellisiä ajatuksia. Haittapuolena on toki että audiokirjasta ei voi yhtä helposti selata takaisin kiinnostavaan kohtaan ja tarkistaa miten asia oli, mutta toisaalta tavallista kirjaa ei voi pitää lenkillä mukana ja lukea samalla kun kuntoilee.

Blue Ocean strategy on ollut nyt usealla lenkillä mukana ja kertakaikkiaan sopivaa kevyttä kuunneltavaa lenkillä, sillä ajatukset ovat loppujen lopuksi riittävän yksinkertaisia että niitä pystyy käsittelemään ajatuksissaan ilman että näkee itse tekstiä ja pystyy käsittelemään informaatiota myös visuaalisesti. Asiat pystyy sisäistämään, mutta niiden palauttaminen mieliin on hankalampaa – ellei löydä hyvää tiivistelmää tai itse kirjoita ylös tiettyjä avainasioita, joiden ympärille on helppo kytkeä asioiden muistaminen.

Blue Ocean strategystä löytyy onneksi hyviä tiivistelmiä mm. Slidesharesta: http://www.slideshare.net/kkjjkevin03/blue-ocean-strategy-81049

Blue Oceanin teema on yksinkertainen ja joiltain osin maalaisjärkeä, mutta silti erittäin hyödyllinen työkalu oman ajattelun tarkisteluun. Kirjan kantava teema liittyy hyötyinnovointiin ( value innovation ), eli kuinka asiakkaille voidaan luoda merkittäviä parannuksia tuotteesta tai palvelusta kokemaan hyötyyn ( leap in value ), sensijaan että omaa tarjontaa verrataan ja parannetaan vain suhteessa kilpailijoiden tarjontaan.

Kirja esittelee muutaman hyvän työkalun oman strategian tarkasteluun ja suunnitteluun, ja tarjoaa hyvin käytännönläheiset periaatteet joiden puitteissa miettiä omaa strategista suuntautumistaan.

Erityisesti strategiakanvas vaikutti hyvältä idealta, sillä siihen piirretyt hyötykäyrät tekevät visuaalisesti selväksi eri pelureitten painotukset eri kilpailutekijöiden suhteen. Tunnistamalla asiakkaiden kannalta oleelliset markkinoiden kilpailutekijät, antaa strategiakanvas mahdollisuuksia tutkia ja muokata omaa tarjontaa sellaiseksi että se erottuu kilpailijoista ja tarjoaa asiakkaille oleellisesti suurempaa hyötyä pienemmillä kustannuksilla.

Kirjassa on paljon pieniä hyviä oivalluksia ja anekdoottimaisia tarinoita, jotka pakottavat katsomaan omia olettamuksiaan uudestaan ja joissain kohdissa myös hylkäämään tiettyjä perinteisiä viisauksia. Esimerkiksi puhuttaessa markkinatutkimuksista ja asiakkaiden haastattelemisesta, huomioitiin kirjassa että olemassaolevien asiakkaiden sijaan kannattaisi kuunnella enemmän niitä jotka eivät ole asiakkaita.

Olemassaolevat asiakkaat voivat olla jo jumiutuneita markkinoiden olemassaolevaan tapaan katsoa asioita, eivätkä välttämättä pysty tuottamaan uutta ajatusta tai näkemystä siihen miten luoda uutta lisäarvoa. Tarjoamalla entistä enemmän entistä halvemmalla ei ole kovin innovatiivinen lähestyminen, eikä kovin turvallinen strateginen asema. Ne jotka eivät vielä ole markkinoiden asiakkaita (noncustomers) : joko tietoisesti valitsemalla toisin, tai jotka eivät ole edes harkinneet ko. markkinoiden palveluita – voivat sensijaan tuoda tärkeitä huomioita siihen mitä palveluiden pitäisi olla, jotta ne kiinnostaisivat uusia asiakasjoukkoja.

Suosittelen.

Tallennettu aiheeseen life, sport. Jätä kommentti »

Sturm und Drang: Learning to rock

Sukkahousuhevi eläköön!

Siinä missä Ari Koivusen Fuel for Fire ei jaksanut herättää minussa suurempia intohimoja – ja saikin jäädä iTunesissa ostamatta – kolahti Sturm Und Drangin ensilevy kuin korkeajännitys ja saa vielä useankin kuuntelukerran jälkeen hymyn huulille. Pakko on ihailla poikien intoa ja soittoa, ja toivoa parasta nuorille joilla on vielä monta vuotta edessä isompien ja pienempien stagejen hallinnassa.

Sturm Und Drang on erittäin tyylipuhtaasti soitettua sukkahousuheviä ja sellaisenaan myös hemmetin nautittavaa. Kitarariffit toimivat ja vokalistilla on pelottavan hyvä ääni metallisointeihin. Vaikka lavaesiintyminen ei vielä pari kuukautta sitten Virgin Oil Companyssä ollut maailmaa mullistavaa, oli ilmeet ja eleet kuitenkin jo kohdillaan – joten rutiinien ja kokemuksen kerääntyessä on odotettavissa todella toimivaa ja tiukkaa vetoa myös livenä.

Levyn tärppejä:
– Talking to silence: hienot sahaavat kitarariffilit ja tiluliluttelua joka saa soittamaan ilmakitaraa vaikka lentokoneessa.
– Rising Son: hittibiisi joka toimii tuhannenkin soittokerran jälkeen. Tarttuva perusriffi ja upeat vokaalit.
– Learning to Rock: perusveto joka hetkittäin saa mieleen sankareita aina Iron Maidenista saakka
– Mortals: glamrockahtava vääntö jonka kitarariffit saavat mieleen väkisinkin Darknessin
– Miseria: mahtipontisen komea rock-balladi

Levyn jokaisesta biisistä olisi jotain hyvää sanottavaa, ja varsinkin rock-musiikin suurkuluttajat löytävät tästä levystä paljon tuttua ja turvallisen hyvää. Eihän tässä ole mitään mitä ei olisi koskaan aikaisemmin tehty, mutta juuri siksi Sturm Und Drangin vääntö onkin niin ilahduttavan hyvää ja raikasta, siinä on sitä tekemisen iloa ja yksinkertaisuutta!

“Lost in darkness, like a shadow there I was”

Tallennettu aiheeseen life. Jätä kommentti »

docs.sun.com ja Glassfish dokumentaatio

Sunin dokumentaatiopalvelu on nopeutunut huomattavasti ja on jo jopa aivan käytettävä.

Jos käytät Glassfishia, kannattaa ehdottomasti tutkia Sun ApplicationServerin dokumentaatio ko. palvelusta:

http://docs.sun.com/app/docs/coll/1343.4

Erityisesti klusterointi ja High Availablitity-ominaisuudet ovat sellaista asiaa, jota ei muuten tulisi kokeilleeksi ja selvittäneeksi.

Tallennettu aiheeseen programming, technology. Jätä kommentti »

TestDriven ja Selenium

Lasse Koskelan loistavasta TestDriven-kirjasta tuli juuri ulos loputkin kappaleet, ja siitä innostuneena päätin tehdä päivän hyvänteon ja demota muille kuinka Selenium toimii, ja miten sillä voidaan tehdä testitapauksia verkkosovelluksille. Testaaminen ja testitapauksien tekeminen ei ole koskaan helppoa, mutta hyvät työkalut tekevät siitä onneksi helpompaa ja hauskempaa. Isompi kysymys on aina oman ajattelun ja koodaustavan muuttaminen sellaiseksi, että testaaminen on helppoa. Lasse käsittelee näitä asioita loistavasti kirjassaan – tiivistäen samalla kertaa teorian ja konkretisoiden asiat käytännössä- ja siksi suosittelenkin kirjan lukemista kaikille asiasta kiinnostuneille.

Kirjassa käsitellään jonkin verran yleisiä testaustyökaluja, mutta www-sovelluksien tekijöille ehdoton huipputyökalu Selenium jää lähes kokonaan käsittelemättä. Täyttääkseni tätä rakoa nopea tutustuminen Seleniumiin ja lopuksi vielä videodemo siitä, miltä testien tekeminen ja ajaminen Seleniumissa tuntuu.

Selenium on Thoughtworksissa kehitetty testausframework, joka on kehitetty hyväksymistestien tekemiseen. Se toimii suoraan selaimessa browser-tekniikoita hyväksikäyttäen, perustuen DOM-puun käsittelyyn ja sitä kautta sivujen sisällön tutkimiseen ja muokkaamiseen. Testien tekemiseen on muutama loistava työkalu, tärkeimpinä SeleniumIDE - Firefox-laajennus testien tallentamiseksi suoraan selaimessa, ja Selenium RemoteControl - joka mahdollistaa testien ajamisen ohjelmallisesti esimerkiksi Java-unit -testistä.

Seleniumin käyttöönottaminen on aluksi tuntunut pelottavalta ja monimutkaiselta, mutta käytännössä sen perusteiden oppiminen vie vain muutaman minuutin aikaa – minkä jälkeen isompi työ onkin palauttaa mieliin kunnolla miten DOM-puusta kannattaa xpathilla kysessä asioita, tai millaisia regexpejä annattaa patternien tunnistamista varten kirjoittaa. Niiden kanssa pähkäily tuntuu kuitenkin pieneltä siinä vaiheessa kun Selenium on onnistuneesti asennettuna koneella – ja tietää että seuraavat vaiheet ovatkin jo itse testien kirjoittamista sovellusta varten.

Video esittelee miten käytännössä SeleniumIDE:ä ja Selenium RemoteControlia käytetään:


http://s3.amazonaws.com/huimanet/seleniumdemo-large.mov

Huomiota remote-control -testin tekemisestä:

Selenium-serverin käynnistäminen: java -jar selenium-server.jar -proxyInjectionMode -browserSessionReuse

Java-projektiin pitää kopioida classpathiin sekä java-driver -luokat, että java-server-luokka. Eclipsessä projektiin pitää myös lisitä JUnit4.

Käytettävä Java-koodi, suoraan Seleniumin oman Google-demo -koodin pohjalta:


package net.huima.selenium;

import junit.framework.*;

import org.openqa.selenium.server.*;

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;

public class SeleniumTest extends TestCase {

private Selenium selenium;

public void setUp() throws Exception {
String url = "http://www.google.com";
selenium = new DefaultSelenium("localhost", SeleniumServer.getDefaultPort(), "*custom /Applications/Firefox.app/Contents/MacOS/firefox-bin -P testprofile", url);
//HUOM! *custom - selitän siitä tarkemmin alla
selenium.start();
}

protected void tearDown() throws Exception {
selenium.stop();
}

public void testGoogle() throws Throwable {
selenium.open("http://www.google.com/webhp");

assertEquals("Google", selenium.getTitle());

selenium.type("q", "Selenium OpenQA");
assertEquals("Selenium OpenQA", selenium.getValue("q"));
selenium.click("btnG");
selenium.waitForPageToLoad("5000");
assertEquals("Selenium OpenQA - Google Search", selenium.getTitle());

String[] links = selenium.getAllLinks();
System.out.println(" Sivulla " + links.length + " linkkiä ");

System.out.println(" Sivun sisällön koko on " + selenium.getBodyText().length());

}

}

*custom -kohdassa määritetään minkä selaimen – ja miten – Selenium aukaisee. Tässä tapauksessa avataan Firefox, mutta Firefoxille määritetään default-profiilin sijaan toinen profiili. ( Profiileita pääsee muokkaamaan ja luomaan käynnistämällä Firefoxin -Profilemanager flägin kanssa)

Profiiliin on lisätty Certificate Authorityksi Seleniumin sivuilta löytyvä VAARALLINEN CA, jota ei saisi vahingossakaan laittaa omaan käyttämäänsä profiiliin. Profiilissa on myös laitettu proxy-tiedoiksi localhost 4444 kaikille protokollille, jotta yhteydet menisivät Selenium-serveriin, joka proxyttaa ne eteenpäin oikein.

Firefoxissa proxy-asetukset voi tehdä kohdassa Preferences -> Advanced -> Network -> Settings

Ja Certificate Authorityn kohdassa Preferences -> Advanced -> Encryption -> View Certificates -> Authorities. Siellä sitten lataamallesi tiedostolle import.

Seleniumin pääsivu

SeleniumIDE


Selenium RemoteControl


Ohjeita Selenium Coren käyttämisestä

Reference-dokumentaatio

Lyhyt XPAth-tutorial muistin virkistämiseksi

Tallennettu aiheeseen java, programming. Jätä kommentti »

Amazon S3

Testasin tänään ensimmäistä kertaa Amazon S3-tiedostopalvelua – ja rekisteröidyin samalla Elastic Cloud 2-käyttäjäksi, mutta en ehtinyt vielä kokeilla palvelun käyttöä. Amazon S3:n otin sensijaan suoraan käyttöön isojen tiedostojen jakelupalveluna – jotta poloinen kotipalvelimeni ei ihan tukehtuisi kuorman alle.

Käytössä huomasin erittäin käteviksi seuraavat työkalut:
https://addons.mozilla.org/en-US/firefox/addon/3247
http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609&categoryID=88

Kyseessä on Firefox-laajennukset S3:n ja EC2:n käyttöön Firefoxista, käteväntuntuisen XUL-käyttöliittymän kautta.

Laskin käytön arvioimiseksi: http://s3.amazonaws.com/calculator/calc5.html

Tutorial Java-ohjelmoijille:
http://developer.amazonwebservices.com/connect/entry.jspa?externalID=848&categoryID=55

Ja Java-kirjasto rajapintojen käyttöön helposti: https://jets3t.dev.java.net/

Seuraavana ohjelmassa tutustua tarkemmin jets2t:n käyttöön – ja rakentaa pienet työkalut toimintojen tueksi.

Mitä ohjelmoija tarkoittaa sanoessaan että jokin on vaikeaa?

Eilen sattui silmään Redditissä mielenkiintoinen linkki siitä mitä me ohjelmoijat tarkoitamme kun sanomme että jokin on triviaalia, ei-triviaalia tai vaikeaa. Käsitteiden yhteneväisyys muiden kanssa ei ole aivan selkeää, ja onkin pakko tunnustaa että olen itsekin kävellyt samaan ansaan sanoessani jotain asiaa triviaaliksi – vaikka sen suorittaminen tulee triviaaliudestaan huolimatta vaatimaan viikon työn.

To a programmer, a problem is trivial if there is a clear solution, and the only thing that needs to be done is to implement it.

The only caveat is that triviality refers to how hard the problem is to solve, not how hard it is to implement the solution. So there is no necessary relation between a task being trivial, and how long it takes. To the programmer, once the plans for the bridge have been drawn up, the materials chosen properly and the model tested for how it would survive wind, traffic and earthquakes, actually building the bridge is trivial.

Money quote ( of a quote ):

When an engineer says something is “non-trivial,” it’s the equivalent of an airline pilot calmly telling you that you might encounter “just a bit of turbulence” as he flies you into a cat 5 hurricane.

Tallennettu aiheeseen technology. Jätä kommentti »

Rosetta-ohjelmien crashaaminen OS X:ssä Quicktime updaten jälkeen

http://www.macfixit.com/article.php?story=20070713094450677

Pelästyin hemmetisti kun Tinderbox ( http://www.eastgate.com/Tinderbox/ ) ei enää yllättäen käynnistynytkään koneessani – kuten eivät muutkaan Rosetta-sovellukset. Logia katselemalla löytyi virheilmoituksia, mutta edes Google ei antanut apua.

Vasta kun katsoin kalenterista mitä viimeaikoina on tapahtunut ja vertasin sitä software updaten logeihin, huomasin että en ollut viimeisimmän Quicktime-päivityksen jälkeen käyttänyt aikaisemmin Tinderboxia. Tätä kautta pääsin oikeille jäljille ja löysin tuon avun.

Tallennettu aiheeseen java, technology. Jätä kommentti »