Blogg
Här finns tekniska artiklar, presentationer och nyheter om arkitektur och systemutveckling. Håll dig uppdaterad, följ oss på LinkedIn
Här finns tekniska artiklar, presentationer och nyheter om arkitektur och systemutveckling. Håll dig uppdaterad, följ oss på LinkedIn
För 18:e året arrangerades utvecklarkonferensen Jfokus i Stockholm. Jag var som vanligt på plats som scenvärdsanvarig men hade tid att vara med på Universitetsdagen på måndagen och se många bra tal under två fantastiska dagar. Här kommer några reflektioner och en liten topplista över de presentationer som jag rekommenderar att man tittar på.
I år presenterade sig Stockholm från sin bästa vintersida för de som rest hit för att vara med som talare, deltagare eller frivilliga på årets Jfokus. Över 2000 personer var med i år, vilket borde vara rekord.
Min uppgift före och under konferensen är att hantera de scenvärdar som hjälper talarna under dagen och ser till att allt flyter på smidigt. Totalt är vi 24 scenvärdar jobbar under 3 dagar. Men det är inte bara jobb. Jag hinner med att titta på en hel del talare också.
Måndagen är vikt för halvdagssessioner och praktiska laborationer. Förmiddagen spenderade jag med Chris Richardson som gjorde en djupdykning i hur man designar mikroservicar med hjälp av mörk enerigi och mörk materia.
Chris använder dark energy som en metafor för enkla komponenter, självständiga team, snabba driftsättningar, support för multipla teknikstackar och egenskapssegregering och dark matter som en metafor för enkla interaktioner, effektiva interaktioner, ACID före BASE och minimala beroenden. Astrofysiskt används dark energy för att förklara varför universum expanderar och dark matter som en form av osynlig massa som skapar ökad gravitation.
På samma sätt är det med de egenskaper som påverkar om man ska bryta ner något i en mindre bit, alltså dark energy eller om man ska hålla samman funktionaliteten, alltså dark matter.
Metaforerna är inte helt perfekta, vilket Chris själv är snabb att påpeka, men de fungerar bra som stöd i diskussioner om nedbrytning av komponenter i en mikroservicearkitektur. En reflektion som gjordes under den efterföljande lunchen bland några av oss som varit på den här djupdykningen är att i de flesta fall fokuserar man väldigt mycket på dark energy och bryter ner sitt system för mycket. Vi var alla överrens om att speciellt när det gäller transaktioner (ACID före BASE) så ska man tänka efter före.
Chris har bloggat om ämnet på https://microservices.io/post/microservices/2021/11/30/dark-matter-dark-energy.html.
På eftermiddagen blev det en mer praktisk session. David Vlijmincx guidade oss från tradionella Java-trådar till de “nya” virtuella trådarna som introducerades i Java 21 (de finns från Java 17, men man måste konfigurera lite då).
Hela hans workshop finns att på https://github.com/davidtos/virtual_thread_workshop och är lätt att följa med i. David blandade korta teoretiska presentationer som gav bra underlag till nästa övning med insiktsfulla demos och svar på våra frågor.
Det är mycket enklare och effektivare att göra vissa typer av parallella uppgifter i Java med virtuella trådar.
Jag rekommenderar varmt att man gör den här workshoppen, då den ger en bra känsla för hur man kan använda virtuella trådar. Bonusuppgifterna är utmanande och roliga.
Efter att Mattias och Helena öppnat konferensen och använt sina Javatarer för att få med allt praktiskt så öppnade George Saab med att prata om hur man har gått från att leverera “som man trodde att var rätt på 90-talet” till att släppa en ny release var 6:e månad. Det var intressant att höra hur det har förändrat sättet man skapar ny funktionalitet och hur det har påverkat stabiliteten hos Java.
Eftersom man inte längre riskerar att behöva vänta “flera år” till nästa release, gör man hellre sin funktionalitet helt klar innan den släpps officiellt. Exempel på det är Lambda och Virtual Threads som fanns som “experimental” om man vet hur man kan aktivera dem i flera versioner tidigare än vad de officiellt har support för.
En stor förändring som är på gång i språket är att mycket av den kod som är boilerplate idag kommer man att kunna strunta i. JEP-445 är ett förslag på hur man kan göra det enklare att komma in i Java som språk utan att bli överväldigad av alla “extra” saker som behövs för att gör en Java-klass.
T.ex kommer den klassiska HelloWorld.java att kunna gå från:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
till
void main() {
println("Hello, World!");
}
För att göra det enklare för speciellt nya programemrare att komma in i språket finns numera Java Playground. Den är värd att kika på men inte lika utvecklad som t.ex Kotlin Playground.
I slutet av Georges keynote fick han sällskap av Chad Arimura och Sharat Chander från Oracle som delade ut ett “Lifetime achievement award” till Mattias Karlsson. Mycket välförtjänt och det var lite roligt att se Mattias med en liten tår i ögat.
Nästa keynotetalare var Lize Raes från LangChain4j som pratade om hur AI kan hjälpa oss som utvecklare och vilka verktyg som finns att tillgå redan idag. Lize demade att antal olika funktioner med LangChain4j som gör det enkelt att interagera med olika AI-modeller.
Jag var även på Lizes andra presentation, där hon dök djupare i vad LangChain4j kan göra.
Se hennes keynote:
och om LangChanin4j:
Från AI bytte jag spår för att se en för mig helt ny talare, Marit van Dijk från Jetbrains. Marit talade om hur viktigt det är att inte bara skriva kod utan även att läsa andras kod. Det finns en dedikerad site för att starta en kodläsningsklubb.
Det jag i huvudsak tar med mig från den här presentationen är hur viktigt det är att faktiskt prata om kod och hur mob-sessioner kan fungera som ett bra verktyg för att läsa och förklara andras kod.
En av mina favorit-talare, Ivar Grimstad, gick igenom vad som kommer i Jakarta EE 11 som planeras att släppas någon gång i sommar eller tidig höst.
Det som står ut är att CDI Lite får en minor-release för att stödja Records fullt ut.
Vi får äntligen en Data 1.0 som ger oss standardiserade mönster för data-access, liknande de som finns i Spring Data. Det nya Data-API:et innehåller bl.a. en del “convention magic” så som findbyName(String name) och som gör @Repository kod mycket enklare att hantera.
ManagedBeans är borta (ÄNTLIGEN) och istället är det CDI som gäller.
Man har gjort @Deprecate på SecurityManager vilket kommer att påverka en hel del i framtiden. Samtidigt väljer man också at ta bort alla Optional features så som SOAP, XML Binding och liknande. Eller man gör dem snarare till fullvärdiga medlemmar i Jakarta EE eller gör dem till fristående komponenter. Men det finns inte längre några Optionals i Jakarta EE.
En sak jag själv råkat ut för under senare tid är förändringen från javax.* till jakarta.* namespaces. Om man har kontroll på koden så är det ju enkelt att göra en ny release, men så är inte alltid fallet. Lyckligtvis finns det ett antal bra Bytecode Transformers som gör att man kan byta ut referenserna på jar-nivå.
Jag gillar att mäta saker, så som statisk kodanalys, hur effektiv kod är och liknande. Men jag har av någon anledning inte tittat på verktyget CodeScene.
Därför var det givande att höra Adam Tornhill berätta om hur man inte bara kan mäta kodkvallitet utan även hur de socio-tekniska aspekterna spelar en viktigt roll. Vem är det som skriver den viktigaste koden? Vilka moduler är det som alla är inne och petar i och som kan klassificeras som “god-modules”?
I koden som vi skriver syns inte organisationen som bygger koden. Det gör det mycket svårare att förstå vilken kod som är den mest komplexa egentligen. Genom att t.ex titta på och analysera hur många olika personer som gör ändringar i samma kod och om dessa tillhör samma team eller olika kan vi bygga upp en bild över var i vår kodbas vi har mest teknisk skuld och var det finns mest risker om någon blir överkörd av en buss (eller om utvecklare lämnar företaget).
Onsdag förmiddag tillbringades i samma rum, då jag hade mitt scenvärdskap då. Det hade ändå varit mitt försthandsval.
Vi kickade igång dagen med Marcus Hellberg från Vaadin, som gjorde en lite bredare översikt över andra AI-bibliotek än LangChain4j så som Semantic Kernel och Spring AI (som det kanske inte ens heter officiellt ännu). Bra översikt och mycket givande.
Nästa på tur var Peter Knuts från SBAB, som premiärtalade på Jfokus. Peter och jag har jobbat tillsammans tidigare och ämnet är ett jag är väl insatt i.
Peter gjorde en mycket bra presentation som var på en grundläggande nivå men som ändå gav mig som erfaren arkitekt ett par nya sätt att beskriva händelsestyrda system. SBAB har skapat ett ramverk för att bygga ett system som är event-drivet och med event-store. Denna hittar ni här.
Passande följdes det upp med en presentation av Marc Klefter om hur man säkrar att rätt personer och system får tillgång till rätt events.
Om Peters presentation var på en grundläggande nivå så var Marcs avsevärt mer avancerad. Det finns många små godbitar i Marcs presentation men den viktigaste jag tar med mig är att “access till aggregerande funktioner är inte lika viktigt som access till resultatet”. Idag görs mycket för att förhindra användare att starta aggregeringarna, men mindre att hindra dem från att få access till resultatet. Det gör tyvärr att information läcker då den som har tillåtelse att starta aggregeringen inte alltid har möjlighet att skydda accessen till genererad data.
Har jag sagt att jag gillar att mäta saker? Kanske inte helt förvånande så gick jag och tittade på Nicolas Frankel som pratade om hur man praktiskt introducerar OpenTelemetry i sina system.
Nicolas tal kan sammanfattas med följande punkter:
Nicolas var även med på den efterföljande Jfokus Speakers Conference så jag tillbringade en hel del tid i både bussen och under konferensen med att diskutera vårt favoritämne.
Vi börjar så sakta runda av Jfokus och jag lyssnade på Kevin Dubois från Red Hat som pratade om nästa generation CI/CD.
Det som var nytt i den här presentationen var hur man med Argo CD och Argo Rollouts kan använda sig av progressiv utrullning. Vi har gjort Blue/Green och Canary deployer tidigare, men med Kubernetes och dess funktioner så kan vi nu öven göra regelbaserade utrullningar genom att använda inbyggda metriker. (Har jag sagt att jag gillar att mäta saker? ;) ).
Avslutningsvis tittade jag på Rustam Mehmandarov som gjorde en Quickie om hur man tar sig ur utvecklares mardrömmar.
Titta på hans 15 minuter långa tal här. Den är kul och intressant och perfekt för en gemensam kafferast.
Det finns inte en chans att hinna gå och se allt som man skulle vilja se. I år hade jag minst två, oftast tre olika presentationer som gick parallellt som jag hade velat se. Lyckligtvis spelas allt in och det finns 78 videos med över 50 timmar innehåll att titta på på här.
Det här är min top-5-lista att titta på:
Trots att Jfokus har växt och i år hade mer än 2000 besökare så känns ändå inte Waterfront direkt jättetrångt. Det märks att Waterfront är vana med stora arrangemang och saker som mat och kaffe flyter på som det ska. Det som slår mig varje år är hur sessionerna fortsätter utanför föreläsningssalarna. Det är lätt att närma sig inbjudna talare och andra deltagare och diskutera det man just har sett. De väl tilltagna rasterna är starkt bidragande till den fina atmosfären.
Jfokus börjar närma sig 20-årsjubileum, något jag ser fram emot.