2010-03-18
Persisting Rich Domain Models with NHibernate – Torkel Ödegaard
Kvällens tema var NHibernate och vi fick redan från början veta att vi skulle bli Jedis inom området – Torkel Ödegaard hade nämligen valt Star Wars som exempeldomän.
Torkel jobbar på Avega och har diger erfarenhet av NHibernate genom att ha jobbat med det dagligen under ca 4 år. Dock lär han sig, enligt egen utsago, nya saker i NHibernate. Vilket är både uppmuntrande och lite skrämmande – hur stort är det egentligen.
Kvällen började med en historik och en snabb genomgång av de beståndsdelar som NHibernate består av. Men publiken var mycket kunnig och rätt snart fick vi både djup och bredd. Och rätt snart kom vi också till en mängd av kodexempel.
Dessa kodexempel sträckte sig från de mest basic till avancerat men hela tiden guidade Torkel oss och visade på små nyttiga saker och features i ramverket.
Torkel tog upp en hel del av de vanliga fel som man springer in i när man först börjar jobba med NHibernate (har något sett detta t.ex.) vilket var rätt skönt att se – jag är inte själv. Detta lärde jag mig mycket av under kvällen.
En funktonalitet som jag inte har använt tidigare var detattachade objekt och hur NHibernates funktioner Merge() och Lock() kan hjälpa dig att koppla ihop ett deattachat objekt med en annan session.
Hanteringen av arv kände jag till men jag visste inte om de olika typer av arvshantering som stöds av NHibernate
.Vi lärde oss också en hel del om performance t.ex. genom batchning, eager loading och future queries.
Torkel pratade lite grann om session management, som t.ex. i WCF eller ASP.NET.
Slutligen pratade Torkel om en del vaniga problem som man springer in i. Läs mer om det i kodexemplen.
Torkels kunskaper i NHibernate är mycket imponerande. Kvällen innehöll mängder av kodexempel (50+) och demos. Det blev inte många fel – och de få gånger fel uppstod visste Torkel snart vad de berodde på. Det är verkligen inte lätt att koda inför publik – prova det själv någon gång, får du se.
Möjligtvis behöver Torkel se Star Wars filmerna – Han Solo skulle aldrig flyga en Tie Fighter. Men det kanske bara är jag som är nördig ;)
Tack för en mycket bra kväll – jag och många andra lärde oss massor.
Torkels kod exempel kan du hitta här: http://tlo.googlecode.com/svn/trunk/presentations/nhibernate_elevate/
/Marcus Hammarberg
Postad av Elevate
Kommentarer (0)
2010-02-07
Lean Software Architecture med James Coplien
Härom veckan talade James Coplien om Lean Software Architecture på Elevate, Avega Groups föreläsningsserie för medarbetare. Coplien har gjort sig känd som något av en ikonoklast inom agile-världen, inte minst med sitt provocerande ifrågasättande av, för många centrala, praktiker som TDD och onsite customer. Provokationer som han inte drog sig för att upprepa inför det dryga femtiotal åhörare som samlats på Avega Group denna kväll.
Ämnet för den här kvällen var emellertid Lean Software Architecture:
"Agile has long shunned up-front design. When Agilists force themselves to do up-front work, it usually is limited to a symbolic use of User Stories for requirements and metaphor for architecture, with much of the rest left to refactoring. Experience and formal studies have shown that incremental approaches to architecture can possibly lead to poor structure in the long term. This talk shows how to use domain analysis in a Lean way to build an architecture of form that avoids the mass of structure that usually accompanies big up-front design, using only judicious documentation. It will also show how architecture can accommodate incremental addition of features using Trygve Reenskaug's new DCI (Data, Context and Interaction) approach, and how it maps elegantly onto C++ implementations. The talk is based on the forthcoming Wiley book of the same title."
Läs mer om Copliens bok.
Läs mer om DCI Architecture.
Postad av Elevate
Kommentarer (0)
2010-01-19
C# 3.0 och 4.0, SOLID och den funktionella revolutionen med Magnus Lidbom
Ikväll hade drog Elevate igång för säsongen för .NET området. Det var Avegas egna Magnus Lidbom som höll i seminariet. Och ämnet var C# 3.0, 4.0, SOLID och den funktionella revolutionen.
Sammanfattningsvis kan man säga att Magnus visade hur funktionell programmering numera är implementerat i C#, och varför det är intressant för hur vi skriver vår kod.
C#3.0
Först pratade Magnus Lidbom kring vad funktionell programmering är och att det faktiskt numera (sedan C#3.0) är implementerat i C#, genom LINQ.
Därefter visade Magnus på hur vi med hjälp av funktionell programmering kan uppfylla SOLID-principerna. Det är ju lätt att förstå för objekt orientering programmering, där vi ju vet hur man följer SOLID för klasser och objekt.
Men hur gör man med funktioner. De kan bli SOLID med hjälp av funktionell programmering eller stödet som vi har i C#. Magnus menar att för att bli riktigt SOLID så behöver man ta med både OOP och funktionell programmering i beräkningen.
Med ett antal kodexempel visade Magnus på hur man kan använda de nya features som C# 3 och framåt har för att lösa detta.
Magnus visade bl.a. på:
Efter maten gick Magnus vidare och visade på hur alla dessa möjligheter kan kombineras ihop till användbara patterns som ger dig bättre kod som följer SOLID-principerna.
Jag lärde mig en ny term “Coding by wishful thinking”, vilket påminner mycket om Coding by Intention som man talar om i TDD. Rätt kul term som går ut på att man skriver koden som om alla metoder som man kommer att behöva skriva redan fanns, trots att du måste skriva dem sen.
“Vad kul det vore om någon hade skrivit HämtaAllaFilerRekursivt()… Oj – det är ju jag som ska göra det” – ja ni förstår.
C#4.0
Fram till dess hade vi bara talat om C#3. Magnus gick nu vidare och berättade om andra nyheter som kommit i C#4.
Magnus pratade om:
Slutligen visade Magnus hur man kunde använda dessa nya språkfeatures för att komma ytterligare vidare i SOLID-tankarna.
Kvällen var mycket lärorik och väldigt ödmjukande för undertecknad… C# lever verkligen och blir inte mindre direkt. Mycket nyttigt dock för att verkligen komma långt i hur väldesignad din kod är.
Magnus har lovat att göra kodexempel tillgängligt. Du kan nå den här.
Tack så mycket Magnus. Bra gjort och väldigt imponerande kunskaper och presenterat på en mycket avancerad nivå. Jag är officiellt impad!
Postad av Elevate
Kommentarer (0)
Kategorier:
.NET
2009-10-21
S#arp Architecture med Håkan Alexander
Så var det dags för Elevate-kväll igen. Denna gång med Avegas egna Håkan Alexander som föreläsare. Det var riktigt kul att se Håkan “in action” och också att tillfället var välbesökt. Håkan skötte sig riktigt bra och navigerade enkelt mellan högt och lågt samt en del rätt kniviga frågor / kommentarer från en mycket väl initierad publik.
S#arp Architecture är en ramverksarkitekturför .NET som bygger på principerna för DDD (Domain Driven Design), NHibernate och ASP.NET MVC. S#arp Architecture har tagits fram som ett Open Source projekt och är ett av de mer ambitiösa sådana som jag har sett.
En ramverksarkitektur betyder i detta fall att det är en verktygslåda av färdiga komponenter, en massa tillämpade best practices, konventioner och guidelines för hur man bäst jobbar med de använda teknikerna.
S#arp Architecture bygger på en mängd principer för god objektorienterad programmering, och när Håkan drog igenom dem så förstod man att gänget bakom S#arp Architecture har tänkt igenom det de byggt väldigt noga. Följande principer bygger ramverket på
Ja, som ni ser är det idel goda idéer och best practicies som känns välbekanta och korrekta. Och det är också det som imponerar mest på mig med ramverket. Det känns otroligt väl igenomarbetat och noggrant rakt igenom hela. Dessutom är S#arp Architecture helt öppet; både vad det gäller källkod eller möjlighet att plugga in egna ramverk för t.ex. ORM-mappning eller Dependency Injection.
Under kvällen uppkom en del kritik och frågeställningar (IList<T> vs IEnumberable<T>, abstraktion av datakällor, strikthet i implementationen av Value-objekts), men totalt sett så känns det som detaljer eller saker som man kunde ändra på om man verkligen ville.
Bäst känsla för vad ramverket kan ge mig får man då man börjar koda i exempelkoden eller ett nytt projekt. Håkan gjorde en s.k. spike i vilken han introducerade nya domänobjekt i modellen och visade hur den användes rakt igenom hela modellen. Självklart i god TDD-anda med testerna först. Detta exempel kan man följa på S#arp Architektures Wiki här.
Håkan har dessutom sammanställt en mängd länkar som man kan få sig till livs om man ber om dem här. Det är för många för att rymmas på sidan… men skriv en kommentar eller ett mail så ska ni få dem.
Jag tror att många kommer få användning av S#arp Architecture i framtdien. Det är en excellent verktygslåda som bygger på många goda erfarenheter och vanor.
Här finns dessutom en presentation med Billy McCafferty som är ramverkets fader och äger open source projektet. Trots dålig kvalitet på inspelningen är det väldigt intressant att höra det direkt från källan.
Tack så mycket Håkan för en mycket intressant och lärorik kväll. Bra jobbat!
Postad av Elevate
Kommentarer (2)
2009-09-29
Stresshantering med Thomas Tegenmark
När Markus bad mig sammanfatta gårdagens Elevate på ämnet STRESS kände jag svettningarna krypa fram. Hjärtklappningarna och trycket över bröstkorgen som gjorde sig påmind i morse när jag snabbt scannade genom dagens mailskörd gjorde sig raskt närvarande igen. Bröstkorgen hävde sig upp och ner i takt med den överdrivet grunda andhämtningen när jag kände darrningarna långsamt komma krypande i händer och fingrar. Ni känner säkert igen symptomen.
När jag sneglade upp mot föredragshållaren Thomas log han bara sitt breda psykologleende och hänvisade till någon typ av darwinistik ”fight or flight” instinkt som vi ärvt av våra förfäder jägarna. Lejon på savannen. För mig var det Markus i baren…
Han malde på om att detta inte var skadligt utan högst normalt i det korta perspektivet men om man däremot känner på liknande sätt under lång tid kan både psykologiska och fysiologiska symptom infinna sig; minnestörningar, dåligt humör, sömnstörningar, depressiva besvär, muskelspänningar, domningar, svettningar. Ha, den listan känner jag alltför väl till min gode pyskolog tänkte jag när jag effektivt försökte undvika att bli inblandad i någon offentlig demonstration inför gruppen. Hur ska jag kunna ta mig ur detta, jag som troligen har ett diplom i de flesta bokstavskombinationer väntande på mig.
Insikt om situationen verkar vara nyckeln till det mesta, så även här tydligen. Skulle jag vara stressad? Vadå Typ A beteende? Tävlings och konkurrensinriktad? Jag är ju säljare. Lättirriterad och fientlig? Bah! Otålig och känsla av tidspress – ja men det gäller ju att leverera…fast det är klart, det gäller ju att välja sina tävlingar. Man kanske inte alltid måste borsta tänderna och knyta barnens skor på samma gång för att vinna den där extra 5 sekundaren….
Assertiva beteenden – sund självhävdelse känner jag väl till om någon. Våga säga ifrån! Låt dig inte bollas med, ta ingen skit! Jag skulle kunna säga till Markus att den här summeringen fick han allt själv fixa till, det skulle jag kunna. Minsann. Om han bara inte skulle tycka så illa om mig om jag sa nej...
Jag hajjar till ur mina funderingar när Thomas föredragshållare vänligt men bestämt borrar sina hökögon i mig. ”- skulle du vilja berätta om dina sömnproblem som är en vanlig följd av stress?” Jag känner mig träffad, avslöjad och chikanerad. Syndes det så väl? undrar jag för mig själv och gnuggar disen ur ögonen. Mja, jag brukar hålla mig hårt till ett par grundstenar, sammanfattar jag när tankarna samlats. Mörk, tyst och svalt sovrum. Jag går upp inom 15-20 minuter om jag inte lyckas somna för att få en tydlig koppling att sängen är sovplats och inte grubbelplats. Fungerar inte det får jag ta till sömnfönstret, penalistisk stenhård kadaverdiciplin avseende sängtimmarna, det brukar fungera.
Med en gäspning ser jag mina kollegor lämna lokalen när föreläsningen är slut. Ahhh, det var ju riktigt uppiggande tänker jag på bussen hem. I morgon skall jag allt be Markus att han får göra sammanfattningen själv.
Johan Krouthén
Postad av Elevate
Kommentarer (1)
2009-09-17
Be Smart! med Ivar Jacobson
Torsdagen den 17 september hade vi förmånen att få besök från en av IT-världens verkliga giganter, som dessutom är svensk.
Det var Ivar Jacobson som vi hade inbjudit efter en diskussion med utgångspunkt i en artikel i Computer Sweden.
Ivar tog utgångspunkt i att vår industri, IT-branchen, till mångt och mycket är en mode-industri. Vi söker fortfarande efter ett nytt sätt, något fräshare eller det hetaste. Och faktiskt så letar vi tyvärr fortfarande efter en Silverbullet som kan hjälpa oss att bygga system snabbare, billigare och bättre.
Men finns det verkligen? Nej, så klart inte. Varje ny utvecklingsmetod har lagt till lite, bytt namn på något men i stort är det fortfarande samma saker vi gör.
Så det som Ivar Jacobson presenterade är istället för att varje gång en ny trend kommer (må det vara RUP, CMMI, XP eller SCRUM) så bör man istället titta på vilka practices (eller var det praktisar :)) som är bra och se på hur man kan använda dem i sin nuvarande process.
Det är inte lätt att idag plocka ut Use Cases ur RUP t.ex., för det är så integrerat i RUP. Men det finns samtidigt mycket bra att använda i Use Case. Det samma gäller t.ex. User stories, TDD eller SCRUM. Alla har något att bidra med men ingen av dem täcker hela processen på ett bra sätt.
Det som Ivar Jacobson och hans företag jobbar med nu är just att få oss att slippa hänga på dessa trender utan istället koncentrera oss på det som måste vara med. Vad är kärnan av det som vi alltid gör? Vilka practices använder vi? Dessa practices är sedan beskrivna på ett enkelt (ett antal kort) sätt som gör att man inte måste läsa hundratals sidor för att tillgodogöra sig dem. På så sätt kan man plocka ihop de practices som passar bäst i min situation, i mitt företag.
Du kan läsa mer om detta här.
Förutom detta så var det mycket inspirerande och roligt att höra anekdoter och historier från en som varit med och drivit IT-utvecklingen i nästan 50 år. Att vara 70 år gammal, men ha passion för det som man gör som en 25-åring och samtidigt ett halvt sekels erfarenhet är helt unikt och gjorde kvällen till en höjdare för oss som var där.
Därför kunde vi också inte hålla oss från att ställa lite frågor till Ivar. Ämnen varierade från högt till lågt men intressantast var nog att höra Ivars funderingar om hur framtiden kommer att te sig. Vad han sa sparar vi som var där som en hemlighet.
Så än en gång – tack Ivar för en riktigt, riktigt intressant kväll.
/Marcus Hammarberg
Postad av Elevate
Kommentarer (0)
2009-09-15
GWT med Peter Norrhall
Tisdagen den 15:e september var systemarkitekten Peter Norrhall på besök och pratade om GWT (Google Web Toolkit). Hans utgångspunkt var baserad på egna erfarenheter från projekt.
Allt från grunderna upp till tredjeparts bibliotek täcktes.
Det började med en liten simulerad diskussion mellan honom och hans kund. Detta för att påvisa en av drivkrafterna hos GWT, nämligen att det är ett komplett ajaxramverk som drar mycket uppmärksamhet hos kunder.
Förutom att gå igenom de tekniska aspekterna av GWT med dess utvecklingsmiljö, debuggningsmöjligheter osv, så påpekade även Peter det som Google själva vill tydliggöra, men som ibland faller under stolen hos oss ingenjörer. Nämligen att GWT främst är ett ramverk för att kunna skriva web-applikationer som sätter användaren i fokus.
Publiken (ca 35 personer) var ganska livlig i sitt frågande vilket Peter uppskattade och det blev en del intressanta diskussioner. Det som upptog störst intresse var frågor kring tredjeparts ramverk som tex ext-js och SmartGWT. Hur väl dessa är anpassade. Hur integrerar du dem, osv.
Peter poängterade också att när han gjorde valet att använda GWT så var en avgörande faktor att Google själva satsar hårt på teknologin när dom utvecklar sina tjänster. Med andra ord, dom tror själva på vad dom gör vilket är en bra garant för att det dels är bra saker, och dels att verktyget kommer leva kvar och supportas under överskådlig framtid.
Bl. a. använder Google GWT när dom tar fram sin nya applikation 'Google Wave'.
Andreas Källberg
Postad av Elevate
Kommentarer (0)
2009-09-14
Domain Specific Languages med Ayende Rahien
I slutet av augusti gästades Avega av Ayende Rahien, som närmast kan beskrivas som en legendar i .NET-världen. Hans enorma produktivitet, förutom flitigt bloggande är han upphovsman och contributor i en lång rad Open Source-projekt som bland annat Castle ActiveRecord/MonoRail/Windsor, NHibernate, NHibernate Analyzer, mockbiblioteket Rhino Mocks, är upprinnelsen till rykten om att han egentligen är en pseudonym för ett kollektiv eller till och med att han i själva verket är en android. Att Ayende faktiskt är en pseudonym - han heter egentligen Oren Eini - och att han är relativt ung i ett land där fyra år "försvinner" i värnplikt gör de skämtsamma ryktena ännu lättare att ta på allvar.
Men det är alltså inte mer än rykten, vilket Ayende bevisade genom sitt besök på Avega i syfte att undervisa oss alla i hur lätt det är att skriva domänspecifika språk (Domain Specific Language, DSL) i programmeringsspråket Boo, något som också är ämnet för en bok han skriver just nu: Building Domain Specific Languages in Boo
Ayende använder själv Martin Fowlers definition av DSL:
"Domain specific language (DSL) is a computer language that's targeted to a particular kind of problem, rather than a general purpose language that's aimed at any kind of software problem."
SQL och Regular Expressions är två välkända exempel på DSL:er. Väldigt många DSL:er är emellertid okända för de allra flesta helt enkelt därför att de finns för att lösa mycket specifika problem för ett specifikt företag. Här kan man se en tydlig koppling till Domain Driven Design (DDD) som handlar om att jobba fram en för utvecklingsteam och verksamhet/kund/användare gemensam modell av och förståelse för en problemdomän. Det är också i denna gemensamma förståelse som de stora vinsterna med en DSL finns; att uttrycka domänproblem på ett sätt som både utvecklare och användare förstår.
Det har pratas mycket om DSL:er de senaste åren och förutom Ayende har även Martin Fowler en bok på gång i ämnet. För den som är intresserad av att fördjupa sig i ämnet rekommenderar jag gratiskapitlen i Ayendes bok och det stora materialet som finns på Martin Fowlers bliki.
Det jag framför allt tog med mig från Ayendes besök på Avega var hur lätt det verkade vara att använda det Python-inspirerade och flexibla språket Boo för att skriva enkla DSL:er på .NET-plattformen. Jag kommer definitivt att läsa Ayendes bok och om tiden tillåter - man vet aldrig! - experimentera lite med Boo senare i år.
Joakim Sundén
Postad av Elevate
Kommentarer (2)