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 10 december 2012

Insikter under GDCR2012

Den 8:e december anslöt Umejug till Global Day of Code Retreat, en händelse som engagerade tusentals programmerare i Code Retreats på hundratals platser världen över. Det var tredje gången Umejug organiserar en Code Retreatet (tidigare retreats: här och här) och vi känner att vi har hittat ett vinnande format.

På en Code Reatreat får programmerare med vitt skilda bakgrunder samlas runt den gemensamma utmaningen att granska och öva på olika aspekter av sitt hantverk, att inspirera och låta sig inspireras och förhoppningen är att varje deltagare i slutet av dagen i någon utsträckning kommit till insikt:

  1. Vad (om något) har du lärt dig idag?
  2. Vad (om något) överraskade dig idag?
  3. Vad (om något) av det du lärt dig kommer du att fortsätta göra/öva mer på?
Under dagens sista retrospektiv diskuterade vi många mer eller mindre personliga insikter, men några var av mer generell karaktär. Till exempel:
  • I ett automatiserat test kontrollerar man att ett system svarar rätt på en fråga. För att kontrollen ska vara meningsfull behöver man veta vad det rätta svaret är, eller åtminstone någon speciell del av svaret.
  • Det är svårt att kommunicera när man inte får prata. Det är jätteviktigt att man pratar med dem man jobbar med!
  • Genom att använda kortkommandon och stödfunktioner (refaktoreringar, kodgenereringar, visualiseringar osv) i sitt IDE blir man snabbare och får bättre koll på vad man gör. Det är dessutom inte speciellt svårt att lära sig!
  • TDD kan användas för att beskriva ett systems beteende sett ur användarens (klientkodens) perspektiv.
Utöver det fick många tips på kodstil, designmönster och modellering/kravtolkning och sammantaget var det en trevlig och givande tillställning.

Artikel i Infotech: http://www.infotechumea.se/popular-kodardag-lockade-3200
Blogginlägg på coderetreat.org: http://coderetreat.org/profiles/blogs/insights-from-sweden-ume

Precis avslutat tredje sessionen: "No naked primitives", dags för lunch

Session fyra: "No if-s".

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.

onsdag 14 mars 2012

Git with Matthew

Ca 30 pers kom och lyssnade på den mycket passionerade och energirika Matthew McCullough. Det var en mycket intressant och intensiv hangout och vi kunde konstatera efteråt att alla var nöjda och gärna vill köra fler google hangouts. Matthew började övergripande och förklarade skillnaden mellan centrala repos som svn och distribuerade som git, och gick sedan vidare med process, live-demo och intressanta detaljer om bland annat komprimering, hashes, jGit etc.

Matthews slides kan du hitta på https://docs.google.com/open?id=0B4cff4pJTlNuSV9aX2FiQmRUd0N6d0g2eEZQbjExdw

//Jonas


torsdag 23 februari 2012

Eftersnack: Java EE/Glassfish workshop med Arun Gupta

Ca 30 personer kom och lyssnade på Arun Gupta när han gick igenom hur man bygger en webapplikation från scratch med Java EE6 i NetBeans och löpande deploy:ar den i Glassfish. Vi fick bland annat:
- generera entiteter från databasschema
- skapa EJB som ansvarar för entitets-access.
- skapa en enkel servlet som använde EJB:n ovan för att skriva ut entiteter.
- använda JSF och facelets för att skriva ut entiteter snyggt.

Workshop:en var klart uppskattad. Tempot var högt, men de flesta stannade en timme extra, så energi och intresse fanns det gott om. Ett citat som jag tyckte var lite kul var någon som sa ungefär att "såhär celebert besök har vi inte haft sedan Linus Torvalds var här 1998" (med reservation för att både ordval och årtal kan vara fel :)

Mer detaljer kan du läsa på Arun Gupta:s blogg där länk till pdf med labben också finns, samt betraktelser om att besöka ett vintrigt Umeå. Infotech besökte oss också och skrev en artikel
Att ta med Arun på en skidtur var grymt kul både för honom och mig, jag hoppas att vi kan locka fler internationella talare till Umeå framöver.

Några bilder från infotechs artikel:

Arun Gupta
Java-evangelisten Arun Gupta, i mitten, tillsammans med arrangörerna Jonas Andersson och Mattias Sällström från Umeå Java Group.

Arun Gupta
Mycket road visade Arun Gupta hur han under dagen prövat längdskidåkning för första gången i sitt liv. Ett äventyr för en Java-evangelist från San Fransisco.  

söndag 5 februari 2012

Java EE 6/GlassFish workshop with Arun Gupta

Torsdagen den 16:e februari har vi kanonbesök från San Fransisco!
Till vårens första träff får vi besök av Oracles JEE evengelist Arun Gupta. Arun är en välkänd talare vi Java konferenser världen över, han höll bla en teknisk keynote vid JavaOne 2011.

Swedbank sponsrar mat! Om du inte redan anmält dig så maila umejug+ee6workshop@gmail.com för att anmäla dig! (Max 50 deltagare)

Observera att den 16:e är en torsdag, Arun talar på JFokus (13-15:e) och kunde alltså inte komma tisdag :)

Arun kommer att hålla en Java EE 6 och Glassfish workshop motsvarande den på JFokus men förkortad, bio och info därifrån följer. Observera att om du vill vara med och koda så bör du ha en dator med Java och NetBeans installerad, se mer info nedan.

Tutorial: HANDS-ON LAB: Building an end-to-end application using Java EE 6 and NetBeans

The Java EE 6 platform allows you to write enterprise Java applications using much lesser code from its earlier versions. It breaks the "one size fits all" approach with Profiles and extensively improves on the Java EE 5 developer productivity features. Several specifications like CDI, JSF 2, EJB 3.1, JAX-RS, JPA 2, Servlets 3, and Bean Validation make the platform more powerful. It also enables extensibility by embracing open source libraries and frameworks such that they are treated as first class citizens of the platform. NetBeans, Eclipse, and IntelliJ provide extensive tooling for Java EE 6.
This hands-on lab builds a complete end-to-end application using all different technologies of Java EE 6 with NetBeans. You'll learn the tips and tricks to be more effective in your development and deployment cycles. And you'll also learn how to monitor your Java EE 6 applications more effectively. A quick preview of Eclipse and IntelliJ tooling will also be shown.
Please have the following software pre-installed:
JDK 1.6/1.7 (http://www.oracle.com/technetwork/java/javase/downloads/index.html)
NetBeans 7.0+ "All" or "Java EE" version (http://netbeans.org/downloads/index.html)
Arun Gupta

Arun Gupta, Oracle


Arun Gupta is a Java evangelist working at Oracle. Arun has over 15 years of experience in the software industry working in the Java(TM) platform and several web-related technologies. In his current role, he works to create and foster the community around Java EE and GlassFish. He has been with the Java EE team since its inception and contributed to all releases. Arun has extensive world wide speaking experience on myriad of topics and loves to engage with the community, customers, partners, and Java User Groups everywhere to spread the goodness of Java. He is a prolific blogger athttp://blogs.oracle.com/arungupta with over 1200 blog entries and frequent visitors from all around the world with a cumulative page visits > 1.2 million. He is a passionate runner and always up for running in any part of the world.