En samling med collection

No Gravatar

Jämför

HashMap<K,ArrayList<V>> things = new HashMap<K,ArrayList<V>>();
private void add(K key, V thing) {
  ArrayList<V> thingsForKey = things.get(key);
  if (!things.containsKey(key)) {
    thingsForKey = new ArrayList<V>();
    things.put(key, thingsForKey);
  }
  thingsForKey.add(thing);
}

med
HashMap<K,ArrayList<V>> things = new HashMap<K,ArrayList<V>>();
private void add_New_Style(K key, V thing) {
  if (!things.containsKey(key)) {
    things.put(key, new ArrayList<V>());
  }
  things.get(key).add(thing);
}

Den första varianten ser man ofta, och jag har själv använt den. Häromdagen upptäckte en kollega och jag att vi, utan att tänka på det, skrivit variant 2. (Vi arbetade testdrivet just där). Snyggare och enklare tycker jag. Ingen stor skillnad iofs, men ändå.

Software Passion

No Gravatar
Hotel Post

Hotel Post

I början av denna vecka hölls den av DFind Redpatch och oss på Squeed ordnade konferensen Software Passion Summit. Det var premiär för den nu i år och platsen var det fina nyrenoverade Hotel Post mitt i centrala Göteborg.

Jag valde tisdagen som konferensdag eftersom den hade flest lockande agaila föredrag.

Keynoten på tisdagen med Gojko Adzic var lättlyssnad med intressant innehåll som var lätt att relatera till. Han sa att han jobbade med software delivery vilket är ett mycket trevligt begrepp. Det är alldeles för lätt hänt att man bara gör software utan att komma till delivery!

Han berättade om företag som trodde att de var agila och körde scrum med iterationer på ett par veckor men som i själva verket inte släppte ut något i produktion mer än var två-och-ett-halfte-år. Det låter lite galet men är inte alltid så långt ifrån verkligheten. Ett bra citat som jag tog med mig var att scrum och kanban bara är speglar där man tydligare ser en del av verkligheten. Men man väljer själv vilket område man vill spegla, och där ligger en stor risk att man sätter spegeln på en del av sin process som ser fin och bra ut, till exempel utvecklingsiterationerna, när man egentligen skulle speglat hela cykeln fram till produktionssättning. Han menade också att enligt forskningen praktiserade de flesta organisationer “water-scrum-fall-metoden”.

Tom Gilb

Tom Gilb

Andra intressanta föredrag ur min synvinkel höll Tom Gilb, Jakob Mattsson och Nick Oostvogels. Tom Gilb trashade det agila manifestet med huvudpoängen att vi ska sträva efter ingenjörsmässigt mätbart värde för intressenter, inte bara leverera fungerande kod. Han kallar sitt koncept för Competitive Engineering som är en iterativ metod där även intressenter omvärderas med jämna mellanrum. Jag gillar detta eftersom han presenterar en metod att arbeta med att fylla på produktbackloggen på ett strukturerat sätt som man kan mata scrum-teamen med.

Soffhörna

Soffhörna

Jakob Mattson är en lokal programmeringsspråknörd — i positiv bemärkelse — som diskuterade på ett närmast filosofiskt sätt om olika programmeringsspråk, främst dynamiska.

Nick Oostvogels från Belgien pratade om Kanban med upplägget att ta död på fem vanliga argument mot detsamma. Han har en blogg som verkar läsvärd.

Flera av föredragen hölls i små lokaler som blev knökfulla så att folk fick stå, men sammantaget var det en bra konferens i härlig miljö och med många tankeväckande föredrag!

Upstart och Tomcat

No Gravatar

Ett sätt att starta Tomcat som en tjänst på en Linuxmaskin med Upstart (Ubuntu, Red Hat EL 6, ev Debian och Fedora). Först installation (utan att verifiera med PGP eller MD5):

$ sudo -s
[sudo] password for your_username:
# useradd tomcat --home=/opt/tomcat --shell=/bin/false
# cd /opt
# curl http://apache.dataphone.se/tomcat/tomcat-7/v7.0.26/bin/apache-tomcat-7.0.26.tar.gz | tar xz
# mv apache-tomcat-7.0.27 tomcat

Och sedan själva Upstart-konfigurationen, /etc/init/tomcat.conf:
# Tomcat config

description    "Apache Tomcat Server"
author         "My Name "

start on runlevel [2345]
stop on runlevel [!2345]

respawn
umask 022

# in case someone plays as root ...
pre-start script
    chown tomcat:tomcat -R /opt/tomcat
end script

exec sudo -u tomcat /opt/tomcat/bin/catalina.sh run

Sedan kan man styra tomcat med (sudo) start|restart|stop tomcat om man skulle behöva, liksom kolla (sudo) status tomcat för att se om om den startats eller ej.

Presentation av Andreas Brink på Javafroum

No Gravatar

Refactoring Toward Deeper Insight

DDD Findings in Batch Processing, a Case Study When I was introduced to the Domain-Driven Design (DDD) approach close to ten years ago, it provided me with some of the missing pieces I needed to implement Object-Orientation in an effective way. And over the years I’ve been coming back to Eric Evans’ very rich and deep book many times to discover something new to help me design better software – thinking tools and practical design advice, in the small and in the large. Over the years Object-Orientation has become less important to me, but DDD is still my default starting point when I am helping teams to refactor their architectures and take control over their code bases. Many teams have already made attempts to implement DDD, but very often they don’t get the effects they were hoping for. It turns out that DDD is hard to get right. In a current project I have been involved in yet another effort to implement DDD on a legacy code base. And I have made some interesting findings. Batch processing scenarios opened up my eyes to some intrinsic problems with the DDD approach. Issues that have been have been nagging me over the years became very clear. And yet again I managed to gain deeper insight in the DDD approach and come up with some quite interesting ways to implement it.

Presentation av Roger Lindsjö på Javaforum

No Gravatar

Out Of Memory – Analyze Your Java Heap

A short introduction on why memory usage might not be what you expect it to be and tools for going deeper. Different ways for acquiring memory snapshots and how to examine them with MAT.

Presentation av Daniel Oskarsson på Javaforum

No Gravatar

Demonstration av ett enkelt open-source-projekt vars idé är att persistera objekt genom att serialisera dem till Json och skriva och läsa Json till och från Sqlite
Daniel Oskarsson, Know IT

Presentation av Mattias Isegran Bergander på Javaforum

No Gravatar

Vår Java VM: Ett långsamt mellanlager och nödvändigt ont eller har vi någon nytta av den sett till prestanda? Vad gör den med allt minne? Varför sysslar den till och med med “de-optimization”?!

Presentation av Martin Sjöblom på Javaforum

No Gravatar

I slutet av 80-talet betydde debugger ett verktyg som gjorde att du kunde se stacken när programmet kraschade, lite välplacerade printf-satser så kunde man kanske ana var problemen uppstod. En bit in på 90-talet kom integrerade debuggers som gjorde att man kunde stega i källkoden och inspektera variabler medan man körde; riktigt lyxigt tyckte man då. (ja, ja riktiga programmerare programmerar i ed och inget annat!) Sedan kom webbrevolutionen och så var man tillbaka till loggfiler och tvåskiktslösningar igen…men så gick ett antal år och så kunde man debugga systemen med källkoden integrerat igen. Nu har ytterligare ett steg tagits med Chronons lösning där man spelar in exekveringen och kan hoppa fram och tillbaka i tiden och se hur exekveringen var då! Presentationen kommer visa hur det fungerar i teori samt praktik.