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 då antingen via vår googlegroup eller maila. UmeJUGs kalendern hittar du här.

torsdagen den 11:e april 2013

Lego Hack Night

Kvällens övning gick ut på att programmera en bil byggd av ett Lego Mindstorm med Lejos firmware. Målet var att ta bilen runt en oval bana där mitten var svart, vänster sidan vit och höger sida röd. Till det behövde vi en bil och eftersom tiden var knapp och det var programmeringen som stod i fokus så var bilarna byggda i förväg. Det enda som återstod var att montera färgsensorn som skulle se till att bilen höll rätt kurs.
Copyright (©Erik Olofsson, Dohi Sweden
Copyright (©Erik Olofsson, Dohi Sweden
Efter att alla fått lite pizza och dryck i sig gick Johan Ekblad igenom vad Lejos är och hur det fungerar att programmera mot. Vi fick lära oss att Lejos är ett open source projekt som har tagit stora delar av jvm:en till Legos Mindstrom, garbage collection är dock en sak som saknas. Man programmerar mot en pilot som det finns olika varianter av, bla OmniPilot som kan styra en fordon med så kallade omnihjul, imponerande. API:et är på en relativt hög nivå men tyvärr så lämnar dokumentationen en del att önska. Nedan ett exempel på kod för att styra bilen.


        while (!Button.ENTER.isDown()) {  
                Color color = sensor.getColor();  
                if (color.getColor() == Color.WHITE) { // White  
                     speed = defaultSpeed;  
                     radius = 40f;  
                     pilot.arcForward(radius);  
                     continue;  
                }  
                if (color.getColor() == 0) { // Red  
                     speed = defaultSpeed;  
                     radius = -40f;  
                     pilot.arcForward(radius);  
                     continue;  
                }  
                if (color.getColor() == Color.BLACK) {  
                     radius = 0f;  
                     speed += 0.1f;  
                     pilot.setTravelSpeed(speed);  
                     pilot.forward();  
                     radius *= 1.10f;  
                     if (radius > 100)  
                     continue;  
                }  
                if (radius != 0f) {  
                     radius *= 0.95f;  
                     if (radius < 10) {  
                          radius = 10f;  
                     }  
                     pilot.arcForward(radius);  
                }  

Efter presentationen bildades snabbt tre stycken team som genast började programmera sin robot. Glada tillrop blandades med grymtningar om hårdvarufel och skit bakom spakarna. Allteftersom tiden gick ökade antalet provkörningarna på den officiella banan och inofficiella testbanor tejpades upp. Strax efter 22 så var det då dags att mäta sina krafter. En och en, tre varv runt banan på tid var det som gällde och efter ivriga hejarop och många skratt kunde en vinnare utses. Monika, Martin och Markus fick dock inte mottaga något annat än äran och en rungande applåd.

Fram emot halv elva var den längsta träffen i UmeJUGs historia avklarad och vi skiljdes åt med ett leende på läpparna och en önskan att göra om det men då som RobotWars! Överlag en mycket lyckad kväll.

Vi tackar Omegapoint som stod för mat och dryck,  Dohi Sweden som stod för lokal och Johan Ekblad, Omicron som vår Lejos-mentor

Copyright (©Erik Olofsson, Dohi Sweden

Copyright (©Erik Olofsson, Dohi Sweden

Copyright (©Erik Olofsson, Dohi Sweden
Copyright (©Erik Olofsson, Dohi Sweden

söndagen den 10:e februari 2013

Gradle, App Engine, Arkitektur och Jfokus

Program för UmeJugs minikonferens 12/2 2013

Pass 1: "Event-driven arkitektur" I Umeå byggs världens mest moderna studieadministrativa system. Mikael kommer att berätta om arkitekturen generellt och hur man löskopplat olika interna tjänster. (Mikael Berglund, ITS)

Pass 2: "App Engine: Features, verktyg, demo"
Kort genomgång av Google App Engine (koncept, viktiga egenskaper, prismodell) samt exempel på hur man implementerar och publicerar en REST-ig CRUD-backend. (Markus Örebrand, Omegapoint)

Pass 3: "Gradle - Ta ditt byggsystem från stenåldern till 2013"
En kort introduktion och demo. (Mårten Hedborg, Omegapoint)

Avslutning: "Spaning från Jfokus"
Paneldebatt om trender och teman som snappades upp på JFokus förra veckan.

måndagen den 10:e 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åndagen den 26:e 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

tisdagen den 9:e 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...