1. Är fredagskoden också fin?

    Funderar på vad som är vackrast, bäst och lättlästast (eller mest lättläst):

    if (supportingClassNotConfigured(thingToSupport)) {       // ---A
    if (!supportingClassConfigured(thingToSupport)) {         // ---B
    if (supportingClassConfigured(thingToSupport) == false) { // ---C
        performNoMagic();
    } else {
        performYesMagic();
    }

    Min personliga preferens förordar alternativ A pga att jag tycker den är lättast att läsa och ta till sig – där finns inget litet tecken som man kan missa (!) och man behöver inte vända på uttrycket i huvudet för att inse om man går in i blocket (== false).

    Jag har dock deltagit i diskussioner kring detta fler än en gång, och då försökt argumentera för att man aldrig skall använda negationer (på samma sätt som null i ett API inbjuder till NullPointerExceptions). Koden ovan borde enligt det argumentet skrivas om så att man frågar efter det icke-negerade tillståndet och låter det utföras i if-satsens block:

    if (supportingClassConfigured(thingToSupport)) {
        performYesMagic();
    } else {
        performNoMagic();
    }

    Ah – jag går och skriver om nu medsamma! :)

  2. final new static mock

    Jag måste säga det – Mockito smakar väldigt bra. Tidigare använde jag EasyMock och jMock och idag läste jag mig in på JMockit, som skriver:

    Design considerations for production code

    The problem with imposing restrictions on the design of production code is that there are good reasons for making classes final, for directly obtaining instances of collaborators with the new operator, and for using APIs based on static methods. There is nothing inherently wrong with using these three Java language keywords, after all.

    Fine. Jag kan köpa det. Men sedan går man vidare och säger

    The JMockit mocking API is simple, consistent, and minimal.

    Nu börjar det bli jobbigt att hålla med :) Låt oss ta deras exempelkod:

       public void testDoOperationAbc(final DependencyXyz mock)
       {
          new NonStrictExpectations()
          {
             AnotherDependency anotherMock;
    
             { anotherMock.doSomething("test"); result = 123; }
          };
    
          new ServiceAbc().doOperation("some data");
    
          new Verifications()
          {{
             mock.complexOperation(true, anyInt, null); times = 1;
          }};
       }

    och så jämför vi med samma sak i Mockito:

        public void testDoOperationAbc(final DependencyXYZ mock) {
            when(anotherMock.doSomething("test")).thenReturn(123);
            new ServiceAbc().doOperation("some data");
            verify(mock.complexOperation(eq(true), anyInt(), eq(null)));
        }

    eller BDD-style:

        public void doOperationCallsComplexOperation(final DependencyXYZ mock) {
            // GIVEN
            given(anotherMock.doSomething("test")).willReturn(123);
    
            // WHEN
            new ServiceAbc().doOperation("some data");
    
            // THEN
            verify(mock.complexOperation(eq(true), anyInt(), eq(null)));
        }

    I min värld är Mockito det mockningsramverk som är minst i vägen. För nyskriven kod vet jag vad mitt val faller på. Det är inte lika ”komplett” eller kraftfullt som andra ramverk, men så är det också inte i vägen. Måste man prompt använda final och static eller mocka privata metoder kan PowerMock hjälpa till.

  3. Thread.sleep gör stor skillnad

    Jag har varit uppe alldeles för sent många nätter i mitt liv (min mamma kan intyga detta). På senare år har jag dock sett till att bara acceptera och utnyttja de timmar under vilka jag verkligen upplever en kreativ boost, för att sedan tvinga mig till sömns på olika sätt. Orsaken är att jag helt enkelt inte känt att jag presterat på normal nivå dagen efter.

    En undersökning från 2003 bekräftar detta och sammanfattar:

    Conclusions: Since chronic restriction of sleep to 6 h or less per night produced cognitive performance deficits equivalent to up to 2 nights of total sleep deprivation, it appears that even relatively moderate sleep restriction can seriously impair waking neurobehavioral functions in healthy adults. Sleepiness ratings suggest that subjects were largely unaware of these increasing cognitive deficits, which may explain why the impact of chronic sleep restriction on waking cognitive functions is often assumed to be benign.

    Jag använder zenity och cron enligt följande:

    # m h  dom mon dow   command
    */10  21    * * 0-4 /home/ceda/bin/go-to-bed.sh
    */5   22-23 * * 0-4 /home/ceda/bin/go-to-bed-late.sh
    
    #!/bin/sh
    DISPLAY=`w | egrep "ceda.*x-sess" | tr -s ' ' | cut -d ' ' -f 3`
    if test -n "$DISPLAY" ; then
    /usr/bin/zenity --display $DISPLAY --info --text="Det e dags att dricka upp ditt te och sova nu!"
    fi
    

    go-to-bed-late.sh ser likadan ut fast använder en mindre vänlig formulering i dialogrutan. :)

    PS. zenity stödjer bara ASCII-tecken. DS

  4. Responsive Design med Kent Beck

    Det händer mer den här SDC2010-veckan än bara de två konferensdagarna tisdag-onsdag. Flera Open Events har också gått av stapeln. Många företag inser att det är väldigt praktiskt att passa på att arrangera kurser och workshops i samband med konferensen.

    En som passade på att hålla en workshop igår, torsdag, var den inte helt okände utvecklings-Gurun Kent Beck. Jag, Iptor-kollegorna Tomas och Emily, och sex andra intresserade passade på att gå på denna workshop. (Läs mer…)

  5. Koda i bubblor

    Snubblade över en länk till denna sida.

    Codebubble

    Kanske är det såhär vi kommer koda i framtiden? Ser onekligen rätt häftigt ut!

  6. Programmering är enbart Design

    Har du eller någon du känner någonsin försökt jämställa mjukvarubranschen med byggbranschen? Visst är det väl så att vi, precis som dem, bygger saker och då borde arbetssätt och metodik vara densamma? Eller?

    Jag tänker här lämna över ordet till Joakim Holm som har skrivit ett underbart blogginlägg som öppnar ögonen på en:

    Programming Is All Design

    http://jockeholm.wordpress.com/2010/01/29/programming-is-all-design/Programm
  7. Studie om testdriven utveckling

    Emellanåt ställs frågan om det påvisats att testdriven utveckling verkligen kan ge några konkreta, positiva resultat utanför skolprojekt, dvs i industrin. ”Ja, men det finns inte jättemånga som jag känner till”, är det svar jag brukar ge. IBM och Microsoft har publicerat en studie där man sett att TDD minskat antalet buggar med mellan 40 och 90 procent. De skriver:

    Test-driven development (TDD) is a software development practice that has been used sporadically for decades. [...] However, little empirical evidence supports or refutes the utility of this practice in an industrial context. Case studies were conducted with three development teams at Microsoft and one at IBM that have adopted TDD. The results of the case studies indicate that the pre-release defect density of the four products decreased between 40% and 90% relative to similar projects that did not use the TDD practice. Subjectively, the teams experienced a 15–35% increase in initial development time after adopting TDD.

    På tisdag kör vi igång en ny omgång av JDojo där vi genom övningar övar upp TDD-färdigheterna. Utöver JDojon  kommer vi också i vår genomföra motsvarande koncept ute hos kund i deras lokaler.

  8. Blob med metadata i molnet

    En vän till mig har skapat en applikation skriven i C++ som körs lokalt på en maskin. För att programmet skall vara användbart behöver den sparade ”banor”, vilket representeras av binärblobbar. I programmet kan man sen spela dessa banor och vid varje speltillfälle skapas det sedan en logg på vad man gjort. Denna logg representeras också av en binärblob.

    Nu till problemet. Binärblobbarna (både banorna och loggarna) tillsammans med lite metadata skall lagras på en central server någonstans på internet. Hur skall då serversidan byggas upp för att på enklaste sätt få det att fungera smidigt?

    (Läs mer…)

  9. Intervju med gurun Adam Bien

    Adam Bien, som ju kommer till Scandinavian Developer Conference, i mars finns intervjuad på java.net. Läs hans kommentarer om Java EE 6, closures mm.

  10. XPDay London har startat

    Årets upplaga av XPDay har dragit igång och Gojko Adzic är inte sen att blogga om detta. Måste säga att det är intressant att Google byggt verktyg som utvärderar test, genom att titta på om ett fallerande test ledde till att kod ändrades eller lades till – vilket är bra – eller om testet i sig ändrades – vilket är dåligt (bl a pga underhållskostnader). Ca 100 miljoner dollar läggs årligen på automatisering av test och det finns potential att spara in 160 miljoner om buggar kan upptäckas tidigare i utvecklingscykeln, enligt Gojkos återrapportering.

    Konferensen hålls i två dagar där hela den andra dagens program utgörs av Open Space.

  11. Helgtips: FSCONS

    Inget att göra i helgen? För endast 20 € (en spottstyver jämfört med t ex Øredev och SDC2010) så bjuder FSCONS i år på bland annat Erlang, Perl 6 – the last programming language (med Jeremiah Foster!), Writing Jabber/XMPP Software, PostgreSQL (med Magnus Hagander!), Midgard2: Content repository for your PHP application och Workshop: Git in Debian packaging.

    schemat för konferensen finns även: Workshop: Embedding Qt, GTK+ 3.0, Step by step, eForensics: The traces we leave behind and how to find them, The Maemo platform – or how to commercialize debian, eller om man är lite mer hard-core Workshop: How to write a Linux device driver.

  12. Undersökning om agil utveckling

    VersionOne ligger bakom en undersökning som de kallar State of Agile Development (2008). Jag vet inte hur de gjort sitt urval för vilka som får delta, men jag tyckte att det var intressant att se vad VersionOne anser vara agila delar/komponenter/kännetecken. Se t ex denna lista:
    (Läs mer…)

  13. HTML 5

    I min förra post skrev jag om XUL och Mozilla JetPack, två plattformspecifika tekniker för att använda webbläsaren som applikationsmiljö.

    En annan sak som är väl värd att lägga ögonen på är HTML 5. Standarden, som Tim Berner-Lee kallar för en helt ny plattform. HTML 5 kommer på bred front nu, och innehåller en massa rejäla fixar för problem som funnits i den tolv år gamla version 4.

    En skön sak är att (Läs mer…)

  14. Python på steroider

    Unladen Swallow heter ett Google projekt att snabba upp Python och göra det minst 5x snabbare. Google använder Python väldigt mycket i sin verksamhet och det är en av de tre viktigaste språken de har. Youtube är den sidan som ligger på plats #2 i antalet sökningar som är gjorda på en sajt och Youtube är helt skrivet i Python. Det finns mycket pengar att tjäna på att göra Python mycket fortare, eftersom det innebär att man kan minska användandet av hårdvara alternativt fler användare per cpu.
    (Läs mer…)

  15. Tack AJAX: Explosion av javascriptverktyg

    För några år sedan stötte jag ofta på ett förakt mot javascript. Kodare verkade hata detta och det var inte konstigt då många skrev kod i editorer utan något stöd och debugging skedde med alerts. Så kom ordet AJAX på allas läppar och helt plötsligt började verktygen förbättras och folks inställning blev mer positiv. Nu finns en hel uppsjö av riktigt bra verktyg både för att skriva kod, debugga och testa javascript. Webbutvecklaren Nathaniel T. Schutta har gjort en trevlig sammanställning, läs den.

Nästa sida