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. Helios Eclipse på 5 sekunder

    Läste via The Tired Architect följande citat:

    I tested the Helios Eclipse Java development package on my desktop computer, which is running Ubuntu 10.04 and has a six-core i7 980X. The new version of Eclipse takes roughly five seconds to start up on this system and uses several hundred megabytes when idle.

    I mina ögon intressant:

    • ny version av Eclipse ute, bara att tanka hem
    • five seconds – fem, verkligen fem? Eller är det tills han får upp splash-bilden? :)
    • desktop computer – varför skilja på desktop och laptop (enda skälet som jag ser det är att det är enklare att köra tre skärmar från en stationär än en laptop)
    • several hundred megabytes – minne är fortfarande kung
    Eclipse Helios Is Here

    Eclipse Helios Is Here

  3. Android på väg om Windows Mobile

    Det var naturligtvis väntat, men Androidplattformen går i skrivande stund om Windows Mobile som mobilt operativsystem.

    För oss som tvingats skriva klientkod i java på Windows Mobile är detta goda nyheter. Handhållna mobila klienter med trådlöst internet är en fantastisk idé. I synnerhet som det är en billig sak att förse dem med ytterligare en sensor eller gadget: pekskärm, tangentbord, streckkodsläsare, två kameror, lampa, GPS, kompass, gyroskop, WiFi, 3G…

    När ett operativsystem finns som stödjer alla dessa funktioner, och det operativet hyfsat enkelt låter sig programmeras med java, så finns det helt enkelt en god affär.

    Aldrig har det varit så enkelt och billigt att göra sina verksamhetskritiska applikationer mobila som nu.

  4. Java 4-ever

    JavaZone 2010 går av stapeln den 8-9 september och inför detta har man släppt en trailer som värmer hjärtat på alla oss Java utvecklare. Se trailern på deras hemsida och njut!

    Java 4-ever

  5. 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.

  6. Bra verktyg för dåliga test?

    Jag sprang idag över denna demo av SpryTest – ett verktyg med vilket man kan få hjälp att skriva test som masserar legacy code (dvs kod som inte täcks av test). Nej, jag ser verkligen inte detta som en silver bullet och är tveksam till att använda det över huvud taget.

    (Läs mer…)

  7. WikiMedia får ett lyft – äntligen

    All heder åt wikis, men varför finns ingen wiki som hängt med i web 2.0-teknikväxlingen? Nu har äntligen både WikiMedia (motorn) och WikiPedia fått sig ett litet lyft men jag saknar ännu den wiki där man gränslöst växlar mellan läsnings- och redigeringsläge. På en företagswiki är man troligtvis i 90 % av tiden ute efter att läsa. Att göra småjusteringare (fixa sökvägar, typos, lägga till en länk till något närbesläktat) borde verkligen inte kräva att man skall lära sig en ny syntax, vänta på att sidan laddar om, välja preview, och sedan spara sidan – cykeln är helt enkelt för lång och för mycket ”i vägen”.

    (Läs mer…)

  8. Google Native Client SDK Preview

    En preview av google’s native client SDK finns nu att ladda ner. Native Client SDK ger dig möjligheten att skriva dina web applikationer i C/C++. Binärfilerna körs inte i en virituell maskin men innan dom exekveras så verifieras så att dom bara innehåller dom instruktioner som är tillåtna samt ser till vilket minne som skall vara tillgängligt för applikationen. Detta öppnar upp för möjligheten kunna exekvera kod i en web läsare med lika bra prestanda som om det vore en lokal native applikation. Det blir också lättare att porta existerande applikationer till web applikationer.

    Läs mer här och titta på denna video som berättar lite om NaCl och dess möjligheter.

  9. Borde Flash överges?

    IE6 har äntligen gått i graven, amen! (Tas till och med upp i Tech Radar från Thoughworks!) Hur är det då med Flash?

    Nu när vi har HTML5, video, canvas, geoloc, animationer och kraftfullt CSS (även om det borde vara mer objektorienterat som tidigare diskuterat av bl a Nicole Sullivan) kan man fråga sig om Flash kommer överleva, eller kanske varför det skulle få stanna kvar. Steve Jobs bloggar sällan men har i 1700 ord gett sig på Adobes Flash och han hävdar att deras sandbox är ett problem (läs Techcrunchs sammanfattning)

    Jag gissar att det är just pga denna sandbox som Flash inte kommer dö ut. Tänk bara all reklam som cirkulerar på världens webb. Vem vill släppa lös ett JavaScript-monster som petar på hela DOMen och springer runt och skräpar ner på sin sida, bara för att man vill tjäna pengar genom reklam? Jag gissar att reklamfinansierad media älskar Flash pga att det kommer i någon form av sandlåda som är begränsad till de pixlar de får.

  10. Tiobe höjer C över Java

    För första gången på fyra år är inte längre Java det mest populära språket på Tiobes popularitetslista. Överst på tronen står åter C som tog ett ganska stort kliv framåt – själv väntade jag mig att det berodde på alla dynamiska språk som jag tycker ökar i popularitet och faktiskt användande.

  11. Stäng efter dig när du går

    Java är ett snällt språk som tar hand om skräpsamling för oss. Vi behöver inte tänka på att avallokera minnet efter vi använt det.. jättesmidigt! Dock verkar det som att denna automatiska skräpuppsamling har gjort oss lata och glömmer bort att vi faktiskt måste städa upp efter oss ibland!

    Strömmar av alla olika slag är nämligen väldigt viktiga att stänga. Framförallt strömmar till filer är viktiga, eftersom en öppen ström mot en fil tar upp systemresurser. Om man inte stänger filströmmarna efter sig, kommer ditt Java-program äta upp systemresurser tills minnet tar slut, eller tills operativsystemet sätter stopp för att du har öppnat för många filer (känns felmeddelandet ”Too many open files” igen?). Om du kör ditt program på en Linuxmaskin räknas både filer och TCP-anslutningar som filkopplingar. Detta gör att om du öppnar för många filer på disk, så kommer det heller inte att gå att öppna nya sockets.

    Det finns många sätt att stänga sin ström på, men vad är då det mest korrekta sättet?
    (Läs mer…)

  12. On top putting

    Jag vet inte vem som gör översättningarna åt Google, men det brukar leta sig in ganska grava/roliga fel emellanåt. Grava i meningen att de missar att kommunicera själva konceptet. Idag såg jag ett nytt exempel på detta i Google Calendar. Jag kollade inställningarna för mina kalendrar, och mer specifikt – de som jag prenumererar på. Rubriken över dessa, dvs andra kalendrar, löd: ”Kalendrar som bara jag kan visa”. Den riktiga översättningen borde vara i stil med ”Kalendrar jag endast/bara kan se/läsa [men inte skriva eller ändra i]”.

    Endast läsa

    Only View - Endast läsa

    Ett annat sådant exempel är Google Books där man kan välja att se en virtuell hylla i sitt bibliotek, antingen som en lista, Listvy (List view), eller som framsidor, Täckt vy (Cover view). Borde givetvis ha varit Omslagsvy eller motsvarande.

    Cover View - Täckt vy

    Cover View - Täckt vy

  13. Fler committers

    I London har precis eventet ”Graduate Open Source Jumpstart London 2010” avslutats. IBM bjöd in ett antal öppen källkodsprojekt att hjälpa intresserade komma igång att bidra. Tanken är att varje ”graduate” vid slutet av dagen skall ha bidragit konkret till det projekt de deltagit i, t ex genom att ha fått committa kod, skriva use case, förbättra dokumentation eller bara rapportera buggar. Målet är att få dem alla att känna att de kommit igång och kan fortsätta bidra på egen hand nästa dag, och dagen efter det osv.

    (Läs mer…)

  14. Testiversum

    Det här är nästan som när man plockade fram alla mjukdjur, plastsoldater, playmobil och barbiedockor, och ägnade en lycklig eftermiddag åt att fantisera ihop en helt ny värld.

    Det finns en skola inom testvärlden som säger att alla tester ska innehålla sin egen omgivning. När testet laddas så laddas även just det testets alla beroenden, och när testet är avslutat tas beroendena bort. Allt blir tomt.

    Det är bara det att det inte är så agilt alla gånger. Du vill köra testerna kontinuerligt så du har inte tid med att sätta upp och plocka ner omgivningen hela tiden, du vill testa på data i en databas och inte på mock-objekt eftersom inspect-and-adapt kräver riktiga grejer, och du vill testa på något som liknar verkligheten.
    (Läs mer…)

  15. Java 7 – Just nu!

    Hittade en sida med en summering av läget för Java 7 just nu. Kolla in den utmärkta sammanfattningen här:

    Java 1.7 – What’s new? Release date, code examples and performance

Nästa sida