1. JavaForum Q3 2010

    Det är dags för nästa Javaforum-möte i Göteborg – torsdag den 9:e September drar det igång med mackor och mingel kring 16:30.

    Plats: IT-Universitetet, Forskningsgången 6, Lindholmen, Göteborg
    Det är nu 92 anmälda till mötet. Lokalen rymmer 170 platser. Först till kvarn gäller, så dröj inte för länge med din anmälan.

    Agenda
    16:30 Macka & mingel
    17:00 Intro
    17:10 Building Software Using Rich Client Platforms – Rikard Thulin
    18:00 PAUS
    18:30 TDD genom coding dojos – Fredrik Wendt och Emily Bache
    19:20 Flexklient med Spring / Hibernate / Java backend – Olov Andersson
    20:00 Squeed bjuder på JavaPub

    Givetvis finns en flyer för Javaforum Q3 2010 för den som vill dekorera fikarum eller anslagsplatser.

  2. Ä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! :)

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

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

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

  6. Optimera Stockholm

    FS-data såg till att jsolutions.se var nere ett par dagar (inte första gången) så jag plitade ner mina anteckningar (på min egen blog) från .SE:s heldag om webboptimering, kallad Optimera Stockholm.

    Tänkte bara komplettera med att videos och presentationer nu lagts ut. Trimlabb höll en presentation om webbplatsoptimering som budskaps- och innehållmässigt var väldigt väldigt likt det jag presenterade på dotNetForum och JavaForum i februari – rekomenderas varmt alltså ;)

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

  8. 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…)

  9. Kort om FOSDEM10

    FOSDEM är stort. Mängder med folk trängs på en liten yta och varannan människa är expert på XMPP, PosgreSQL, SIP, Gnome, Mozillas byggmiljö, hur dålig Javas type inference är … Här kommer halvt uppstädade anteckningar, i väntat på att presentationerna läggs ut.

    Groovy

    Luca höll en väldigt enkel introduktion till Groovy (med tanke på den extremt kunniga publiken i Free Java-rummet). Min behållning var att se hur Groovys closure syntax ser ut, t ex såhär:

    alist = ['hej','på','dej']
    alist.sort{ element ->
     element[-1]
    }
    // sorterar på sista bokstaven i varje element
    // (en sträng hanteras som en lista av tecken, precis som i Python t ex)
    
    20.times { attr ->
     println("This is iteration ${attr}")
    }
    // man verkar använda särskilda metoder som tar closure som argument
    
    alist = alist.collect{ el ->
     el + "\o/"
    }
    // finns grep också
    println al

    Efterföljande presentation i samma rum (Free Java) började med att säga ”So, I know a way to make Groovy closures work at least 20 times faster” :)

    Lamba + JSR 292

    Genast åkte kompetensnivån upp i taket – precis som tidigare år. Har man inte koll på hur JVM:en egentligen fungerar (eller iaf har läst Java Lang Specen), och kan läsa det jad eller annan dekompilator spottar ur sig så börjar man känna sig utanför. Inte pga tonen mellan folk (Javafolk är i allmänhet tvärtom väldigt trevliga och ödmjuka), utan helt enkelt pga att det är på den nivån som många argumenten ligger (om inte rent av de flesta).

    Remi gick iaf igenom förslagen för hur lambda kan komma att implementeras, både vad gäller syntax, scope-frågan och även hur det skulle kunna implementeras i språket.

  10. 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…)

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

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

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

  14. 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…)

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

Nästa sida