Välkommen till Umeå Java User Group, en grupp för alla som är intresserade av java och angränsande ämnen. Vi träffas andra tisdagen 18.00 varje månad.

  1. JUG-mötena handlar om nätverkande framför sälj och rekrytering

  2. JUG präglas av individer framför företag

  3. JUG handlar om kunskapsutbyte framför envägsinlärning


Låter det här intresant anmäl dig till vår meetup eller maila oss.

måndag 26 november 2012

Clojure med Tim Berglund

Sent omsider kommer här en rapport från Umejugs senaste sammankomst. Tim Berglund var med oss på länk från Littleton Colorado och jag måste säga att det är lika fascinerande varje gång att se hur bra Google Hangout fungerar. Tim Berglund jobbar på Github, har skrivit en bok om Gradle och är en uppskattad talare på konferenser. 12 st nyfikna hade slutit upp till Tripple Helix i Samverkanshuset på universitetet och det blev en mycket lyckad träff.

Ämnet för kvällen var Clojure och ClojureScript. Clojure är ett dynamiskt och funktionellt programmeringsspråk som kompileras till Java bytekod och som kan köras i JVM:en. Det är en dialekt av Lisp och har tillgång till Javas klasser och programbibliotek. Clojure har fått en hel del uppmärksamhet som ett av de mest innovativa språk som går att köra på JVM. 

Tim började med att gå igenom Clojure och dess REPL med oss. En REPL, på inget vis unikt för Clojure, är en exekveringsmiljö direkt i shellet vilket gör det mycket lätt att prova sig fram och utforska ett språk. Tim visade oss syntaxen för Clojure bla variabler, collections och hur man definierar funktioner.

Efter en kort rast var det dags för ClojureScript som är en dialekt av Clojure som kompilleras till JavaScript-kod och körs i webbläsaren. ClojureScript har tillgång till webbläsarens objektmodell och drar nytta av Google Closure Compiler för att optimera prestandan. Lite förvirrande då Clojure och Closure uttalas på samma sätt. Med ClojureScript erbjuds dessutom en naturlig integration med Clojure som körs på serversidan.

Tim använde exempelprojektet hello (clojurescript/samples/hello) som grund till sin demo och visade hur en clojurefunktion kan summera alla värden i en array och visa svaret i en javascript alert. I demo nummer 2 modifierade han DOM:en på sidan genom att lägga in text i en tom rubrik.

Tim var noga med att påpeka att ClojureScript än så länge är lite kantigt, det finns inte så mycket dokumentation och det är lite besvärligt att installera. Vi har dock fått instruktioner för att installera ClojureScript på MacOS, tyvärr så klarar inte Blogger av att rendera Markdown i en inkluderad gist. Jag hoppas att ni kan stå ut med raw markdown :)

Avslutningsvis nämnde han lite om hur man kör Clojure i en webapp på serversidan med hjälp av ramverket Ring: https://github.com/ring-clojure/ring.

Länkar:


Några bilder.



Inbjudan: GDCR2012


Den 8:e december deltar Umeå i det världsomspännande eventet “Global Day of Code Retreat”. Under dagen kommer vi att under sex sessioner att utmana våra programmeringsvanor på ett socialt och gemytligt sätt.

Tid: 08:30-17:00 den 8 december 2012
Plats: Döbelnsgatan 19, Umeå (Sogetis lokaler)
Programmeringsspråk: Valfritt (överraska oss!)
Medtag: Egen dator, förberedd med utvecklingsmiljö
Anmälan: http://gdcr2012umea.eventbrite.com/

Christina Skaskiw är dagens värd och Markus Örebrand kommer att facilitera aktiviteterna.

Frukost, lunch och efter-kod-förfriskningar bjuds av våra sponsorer: Acino, Sogeti och Omegapoint.

Global Day of Code Retreat: http://globalday.coderetreat.org/
Artikel från GDCR2011: http://www.infotechumea.se/pa-coderetreat-med-90-stader

tisdag 9 oktober 2012

Extreme Programming Live med Johannes Brodwall

Kvällens JUG med Johannes Brodwall var mycket lyckad. Johannes satt i Oslo, och vi använde först Netviewer och sedan google hangout för att se och höra honom och hans skärm.

Johannes började berätta om virtual pairing och presenterade sedan minefield kata. Tillsammans med Jonas Andersson i Umeå utfördes sedan katan under ca 30 minuter. Vi använde
IDE Eclipse
Screen share Netviewer
File share Dropbox
Language Java
Test framework JUnit 4
A coding task Minefield.
Mer information om setup och hur vi utförde virtual pairing.

Efter katan visade Johannes acceptance-style startpunkt för vår "hemuppgift", att testdriva en "bare knuckles" web-applikation för minefield. Mer info finns på virtual pairing, eller gå direkt till github.

Vi hade sedan en mycket intressant frågestund med Johannes där han bland annat berättade om sitt bare knuckles-concept, hur man väljer nästa test, whitebox vs blackbox TDD, andra språk på Java VM etc.

Johannes rekommenderade Primefactor som enkel kom-igång kata och Cakes and diesel fuel - What every developer needs to know about application security från Javazone 2012, video finns på vimeo.

Virtual Pairing

Would you like to be able to pair with your buddy who's miles away? Here's how!

Basic scenario

Hen and Shen would like to do some ping pong TDD, but both have sleeping kids at home and noone to babysit so they have to stay at their own homes.

What you need

IDE, screen share and file share. For example:
IDE Eclipse
Screen share Netviewer, google hangout (hangout has lower res and no fullscreen)
File share Dropbox
Language Java
Test framework JUnit 4
A coding task Minefield. Feel free to use https://github.com/umejug/ExperienceAgile.git as a starting point.

Setting up file share

Hen will share her SharedCode directory to Shen. Shen accepts and then creates a new project in Eclipse
  1. Create Java Project, name it minesweeper
  2. Unclick ”Use default location”, instead choose <path to dropbox>/SharedCode/minesweeper

  3. Make sure both Hen and Shen has the same name of execution environment JRE, if not rename one of them so they are the same!
  4. Click Finish
Dropbox now immediately syncs all files to Shens computer, and Shen now also chooses New Project and points it to the Dropbox minesweeper directory. Eclipse will use the existing files and Hen and Shen is now sharing the same project!

Eclipse settings

To be able to quickly ”talk a code reference”, enable line numbers; Go to Preferences > General > Editors > Text Editors and check Show line numbers.

To make code updates work even better, go to Preferences > General > Workspace > Refresh On Access. The files will automatically get updated in eclipse on a dropbox sync.

Start coding!

After connecting the screen share, Hen first shares screen, and continues to create the test class MinefieldTest.java, while Shen is watching.

Since Hen hadn't added JUnit 4 to the build path, nows the time to do that. She uses a Mac, so hits Cmd-1 on @Test and chooses ”Add Junit 4 library to the build path”.

Acceptance-type high-level test

First off Hen creates a high-level test that defines when they're done:



This test will fail, and Hen continues to add @Ignore, because this is too large a step to take at this time.
Shen now shares screen, and starts typing the first low-level test (possible after hitting F5 if automatic update hasn't been setup). It is now Hens turn to view the shared screen. Hen and Shen now takes turn writing implementation a new test, then new implementation and new test, and so forth until they think they're done.
If they are, the high-level test should succeed!

When the minefield is done...

Completing the minefield should take 20-60 minutes. Since Hen and Shen completed it in 20 they still got time for another task. Switching to the webtest-start branch of https://github.com/umejug/ExperienceAgile.git they got a failing acceptance-style test for bringing the minefield to the web old-school-server-side-wise. Hen types "git checkout webtest-start",  re-imports the maven project into eclipse and they are good to go... 

onsdag 9 maj 2012

Open Space med blixttal

På gårdagens träff testade vi OpenSpace med blixttal på 10 minuter.

Den här gången var det fem blixttal som tilläts dra ut lite på tiden. Förutom väldigt intressanta blixttal så blev det mycket bra diskussioner runt varje ämne, och vi kommer definitivt göra detta igen!

Här följer anteckningar från talen.

Smärta i enhetstesterna är symptom på sjuk design

Av: Markus Örebrand
Mer info: podcast - Sustainable TDD, avsnitt: Test reflexology
Bad Design != Good Design

Stor fixtur

Symptom: För hög koppling till beroende, high coupling.
Åtgärd: Gruppera med fasad eller aggregatrot, förenkla, bryt isär

Komplex fixtur

Symptom: Svart magi (reflection t.ex.) behövs i fixtur.
Sjukdom: Creation and usage not separated, cohesion problem.
Åtgärd: DI, ServiceLocator

Conditioning

Symptom: SUT (bil måste köra i 30 för att kunna testa varning)
Sjukdom: Business rule in wrong place, not explicit, Cohesion
Åtgärd: Make business rule explicit.

Överbeskyddande test

Symptom: Klass 50 rader, test 200 rader. Kombinationer
Sjukdom: SUT är både databas och sökmotor, SRP-violation, cohesion.
Åtgärd: Bryt isär.

Test coverage strategi - testpyramiden

Av: Jonas Andersson


Hur köteori kan eliminera planeringsbehovet

Av: Christina Skaskiw
Mer info:
The principles of product development flow, av Donald Reinertsson (motiverar Kanban ekonomiskt)
Kanban, av David Andersson

(Se även Naked Planning från Agile Toolkit Podcast)

Planering

Planering = Push, i motsats till Pull = Flow
Tar tid = waste, inte värdeskapande
Gissar
Tråkigt

Syfte: Förutsägbarhet

Kanban kan mha historik ge oss orsak till varianser
Historik är mycket mer vetenskapligt

Köteori

Start 1909 av Copenhagen telephone company
Cost of delay, i motsats till utilization, utnyttjandegrad, beläggningsgrad
Hög utilization → lite slack → längre ledtider
Ledtid (cycle time)
Ställtid
Mål: Sänk utnyttjandegraden, mer slack, mindre varians, mer förutsägbart flöde

Flow

Hur mycket blir klart / tid = flöde
Hur lång tid / grej = cycle time

Kanban i förvaltning

Av: Jonas Andersson

(Inga anteckningar)

Exception handling with ejb:s

Av: Jonas Andersson

 Exception handling basics

1. If you can't handle an exception, don't catch it.
2. If you catch an exception, don't swallow it.
3. Catch an exception as close as possible to its source.
4. Log an exception where you catch it, unless you plan to rethrow it.
5. Structure your methods according to how fine-grained your exception handling must be.
6. Use as many typed exceptions as you need, particularly for application exceptions.

EJB Specifics

 - Catch exceptions at EJB-boundary
   - ApplicationException
       - Caller's fault
       - No implicit rollback
       - If caught → Log at DEBUG and rethrow
   - System exception
       - Unrecoverable checked or unchecked exception.
  - Log at ERROR,  wrap in EJBException.

Checked vs Unchecked

- if there isn't anything you can do about an exception, it's a system exception
  and it should be thrown as an unchecked exception




torsdag 12 april 2012

Robocode aka "Umejug is going ballistic"

Explosioner, förvirring och tillknycklad metall var temat för mars månads Umejug-träff.



Samuel Moritz och Markus Örebrand handledde prototypandet av sju Robocode-robotar, där grupper om två eller tre programmerade sin robot till att navigera slagfältet och skjuta på motståndare.

Robocode är ett spel som går ut på att låta deltagarna programmera beteendet på robotar, företrädesvis i Java. Robotarna möts sedan i ett alla-mot-alla-slag där roboten med högst poäng tar hem segern.

Inledningsvis hade robotarna ganska primitiva beteenden, till exempel: "Kör rakt fram, sväng höger ett halvt varv, skjut om något råkar dyka upp på radarn". Innan kvällens slut fick några robotar mer avancerade beteenden för bland annat målsökande och flykt/kringflackande.

Två skarpa slag utspelades under kvällen. Första slaget vanns av roboten "SuperRobot", andra slaget vanns av "TheKiller". Vinnarna fick ta emot applåder och priser mot att de avslöjade vilken strategi de valt.

Sogetis wifi och git-servern på Samuels laptop gick heta under kvällen, och innan kvällen var slut hade vi lärt oss en del nya saker om både git och trådlösa nätverk.

Gitrepot finns tillgängligt på github för den som vill ta vid där kvällen slutade:
https://github.com/umejug/umerobo

Inställningar för att dra in projektet i Eclipse finns i bilden till höger.