<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-20103956</id><updated>2011-11-28T00:20:21.215+01:00</updated><category term='Bok'/><category term='Professionalism'/><category term='English'/><category term='MIX06'/><category term='Avega'/><category term='AJAX'/><category term='ALT.NET'/><category term='OOPSLA'/><category term='Web2.0'/><category term='Verktyg'/><category term='JAOO2007'/><category term='.NET3.0'/><category term='OO'/><category term='SOA'/><category term='Agila Sverige'/><category term='ASP.NET'/><category term='Arkitektur/Design'/><category term='MIX07'/><category term='Bästa praxis'/><category term='TDD'/><category term='Agile'/><category term='Developer Summit'/><category term='Lösningar'/><category term='Mac'/><category term='Bloggtips'/><category term='Humor'/><category term='Personligt'/><title type='text'>Joakim Sundén</title><subtitle type='html'>"Remember, code is your house, and you have to live in it" - Michael Feathers</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default?start-index=101&amp;max-results=100'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>164</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-20103956.post-4625615734536345517</id><published>2008-11-21T22:42:00.005+01:00</published><updated>2008-11-21T22:59:22.273+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='English'/><title type='text'>Now in English</title><content type='html'>Det har varit bråda dagar med två veckors konfererande i USA (OOPSLA och Microsoft PDC), en kort paus och sedan Øredev som jag nu är på väg hem i från. Jag hade tänkt blogga en del om PDC, men istället lade jag min tid på att installera och komma i gång med Wordpress med vilket jag har börjat blogga på engelska på &lt;a href="http://www.joakimsunden.com/"&gt;http://www.joakimsunden.com/&lt;/a&gt;. Jag vet inte om jag kommer att fortsätta blogga på svenska också. Vad tycker du?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-4625615734536345517?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/4625615734536345517/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=4625615734536345517' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/4625615734536345517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/4625615734536345517'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/11/now-in-english.html' title='Now in English'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-9008894727967666874</id><published>2008-10-24T18:15:00.004+02:00</published><updated>2008-10-24T18:35:01.572+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOPSLA'/><title type='text'>OOPSLA, dag 5</title><content type='html'>Fit, &lt;a href="http://en.wikipedia.org/wiki/Framework_for_Integrated_Tests"&gt;Framework for Integrated Test&lt;/a&gt;, är ett acceptanstestramverk som jag länge velat använda i mitt arbete. Ramverket är skapat av ingen mindre än &lt;a href="http://en.wikipedia.org/wiki/Extreme_Programming"&gt;XP&lt;/a&gt;- och &lt;a href="http://en.wikipedia.org/wiki/Object-oriented_programming"&gt;OO&lt;/a&gt;-gurun &lt;a href="http://en.wikipedia.org/wiki/Ward_Cunningham"&gt;Ward Cunningham&lt;/a&gt; och sedan vidareutvecklat, i form av &lt;a href="http://fitnesse.org/"&gt;FitNesse&lt;/a&gt;, av &lt;a href="http://blog.objectmentor.com/articles/category/uncle-bobs-blatherings"&gt;Robert C. Martin ("Uncle Bob")&lt;/a&gt;. Så även om &lt;a href="http://www.lindarising.org/"&gt;Linda Risings&lt;/a&gt; "Project Retrospectives" lockade var det inget svårt val att som sista tutorial på OOPSLA välja "Accept Automated Acceptance Testing - Using FitNesse in the Real World" med &lt;a href="http://www.coldewey.com/index.en.html"&gt;Jens Coldewey&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Med Fit kan domänexperter själv mata in tester, eller i alla fall testvärden, i ett Excel-dokument som sedan exekverar och testar produktionskoden med hjälp av "fixtures" som utvecklaren kodar för att koppla ihop tester och produktionskoden. FitNesse använder sig av Fit men tillhandahåller en Wiki för att skriva testerna i tabellform. Något förenklat kan man säga att man uttrycker testerna i form av tabellrader där varannan kolumn är en beskrivande text och varannan en parameter till ett test. Ett exempel:&lt;br /&gt;&lt;br /&gt;| check | Client | John Doe | deposits | 50.00 | and the new balance is | 50.00 |&lt;br /&gt;| check | Client | John Doe | withdraws | 30.00 | and the new balance is | 20.00 |&lt;br /&gt;&lt;br /&gt;Det första ordet "check" har en särskilt innebörd i Fit, men efter det gäller varannan text, varannan parameter, så att t.ex. "Client" och "deposits" är texter medan "John Doe" och 50.00 är parametrar. I wikisidan anger man också vilken klass testerna ska bindas mot. Klassen måste implementera någon av Fits olika fixture-basklasser. Så som testet är skrivet ovan kommer FitNesse att förvänta sig att klassen har två metoder:&lt;br /&gt;&lt;br /&gt;public double ClientDepositsAndTheNewBalanceIs(string clientName, double amount)&lt;br /&gt;public double ClientWithdrawsAndTheNewBalanceIs(string clientName, double amount)&lt;br /&gt;&lt;br /&gt;Egentligen är det bara metodnamnen den förväntar sig ska se ut exakt som ovan eftersom de byggs ihop med hjälp av texten i testerna. Vad parametrarna heter är ointressant, det är bara ordningen på dem som är viktig. När testet nu exekveras kommer sista kolumnen i raden att antingen färgas grön om det lyckas eller röd om det misslyckas. I det senare fallet kommer det också att visas vad det faktiska värdet som returnerades är. Implementationen av testmetoderna kanske ser ut ungefär så här:&lt;br /&gt;&lt;br /&gt;Account account = new Account(clientName);&lt;br /&gt;account.Deposit(amount);&lt;br /&gt;return account.Balance;&lt;br /&gt;&lt;br /&gt;För att testerna ska fungera ihop måste förstås account vara en instansvariabel, annars kommer man att göra en "withdraw" på ett annat objekt. Men svårare än så här är det egentligen inte. Sedan finns det förstås ett antal nyckelord och olika sorters tabeller och fixtures man kan använda; det är exempelvis inte alla tester som låter sig uttryckas enligt mönstret ovan.&lt;br /&gt;&lt;br /&gt;Det som lockar mig med FitNesse är att det faktiskt är ett verktyg där domänexperterna själva kan läsa och många gånger även ändra i testerna och lägga till nya rader. Med viss övning är det till och med möjligt för dem att skriva egna tester som utvecklaren sedan ser till att få gröna genom att implementera dels fixtures, dels produktionskod. När man inleder en sprint/iteration eller börjar på en ny story kan utvecklare, testare och domänexpert sätta sig tillsammans och börja skapa testerna i FitNesse, något som är ett utmärkt tillfälle för att utveckla den gemensamma modellen och förfina det gemensamma domänspråket.&lt;br /&gt;&lt;br /&gt;Sist ut av keynote-talarna var &lt;a href="http://en.wikipedia.org/wiki/Mark_Jason_Dominus"&gt;Mark Jason Dominus&lt;/a&gt;, bl.a. känd som &lt;a href="http://en.wikipedia.org/wiki/Perl"&gt;Perl&lt;/a&gt;-expert, som talade om "Atypical Types" och vad vi kan lära oss från framför allt Haskells typsystem. Dominus lär tydligen normalt vara en mycket underhållande och uppskattad talare - och visst fanns det humoristiska guldkorn här också - men innehållsmässigt var hans föredrag en salig blandning mellan mycket grundläggande och tämligen komplicerat. Den största delen var en sorts argumentation för varför &lt;a href="http://en.wikipedia.org/wiki/Type_system#Strong_and_weak_typing"&gt;starka typer&lt;/a&gt; är bra i ett språk, så om man först trodde han skämtade när han inledde med att säga att detta var ett gammalt föredrag för Perl-utvecklare från 1999, började man nu förstå att det faktiskt var sant. Starka typer var kanske kontroversiellt för Perl-utvecklare på den tiden, men knappast på OOPSLA 2008.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-9008894727967666874?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/9008894727967666874/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=9008894727967666874' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/9008894727967666874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/9008894727967666874'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/10/oopsla-dag-5.html' title='OOPSLA, dag 5'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2023195937392073710</id><published>2008-10-24T17:54:00.003+02:00</published><updated>2008-10-24T18:13:37.290+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOPSLA'/><title type='text'>OOPSLA, dag 4</title><content type='html'>Onsdag morgon var det dags för &lt;a href="http://www.wirfs-brock.com/rebeccasblog.html"&gt;Rebecca Wirfs-Brocks&lt;/a&gt; keynote: "What Drives Design?" Denna genomgång av X-Driven Design/Development motsvarade inte alls mina, förvisso ganska högt ställda, förväntningar. Det var huvudsakligen en mycket översiktlig genomgång av sådant som &lt;a href="http://en.wikipedia.org/wiki/Domain_driven_design"&gt;Domain Driven Design&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test Driven Development&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Behaviour_driven_development"&gt;Behaviour Driven Development&lt;/a&gt;, &lt;a href="http://www.artima.com/intv/contest.html"&gt;Contract Driven Development&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Feature_Driven_Development"&gt;Feature Driven Development&lt;/a&gt; och så vidare, cirka en eller två slides per område. Visst var det en hyfsad kartläggning, men som en OOPSLA-keynote måste det ha varit en gäspning för många.&lt;br /&gt;&lt;br /&gt;Förmiddagen fortsatte med en panel kring &lt;a href="http://en.wikipedia.org/wiki/Domain_Specific_Language"&gt;domänspecifika språk (DSL, Domain Specific Language)&lt;/a&gt;: "DSLs: The Good, The Bad, and the Ugly" Den samlade erfarenheten kring DSL:er hos paneldeltagarna var imponerande. Finländske &lt;a href="http://www.metacase.com/jpt.html"&gt;Juha-Pekka Tolvanen&lt;/a&gt; hade till exempel varit med och implementerat ett hundratal DSL:er. Han refererade till undersökningar som visade på produktivitetsvinster på hundratals procent när företag ersatt sina tidigare utvecklingsmetoder med ett DSL. &lt;a href="http://www.research.att.com/viewPage.cfm?PageID=46"&gt;Kathleen Fisher &lt;/a&gt;från telefonbolaget AT&amp;amp;T vittnade om enorma besparingar på hundratals miljoner dollar som hade möjliggjorts genom införandet av ett DSL för att programmera system som förhindrar telefonbedrägerier (nummerkapning). Kod som tidigare upptagit över 30 sidor fick nu plats på en sida och med ett språk som domänexperterna kunde begripa och verifiera.&lt;br /&gt;&lt;br /&gt;Flera av panelmedlemmarna underströk att en viktig förutsättning för ett lyckat DSL är att det behandlar ett tillräckligt specifikt område. Tolvanen gick längst och menade att de största vinsterna hos företagsinterna DSL:er och de mest framgångsrika sådan hör vi väldigt lite om därför att de helt enkelt är en enorm konkurrensfördel.&lt;br /&gt;&lt;br /&gt;Dagens tutorial blev "Web API:s on Rails: Using Ruby on Rails for Web APIs Development and Mashups" med &lt;a href="http://blog.maximilien.com/"&gt;E. Michael Maximilien&lt;/a&gt; från IBM. Tanken var alltså att vi skulle skapa en webbsajt som använde sig av exempelvis Flickrs och Amazons webtjänster för att leverera innehåll. Tyvärr räckte inte tiden riktigt till för det, något som tyvärr inträffade flera gånger på OOPSLA. Det var uppenbart att materialet egentligen var framtaget för en längre session, typ en heldag. Vi hann därför bara gå igenom Ruby och Rails och flera övningar fick stryka på foten, men det var trots detta väldigt intressant och jag fick ännu en chans att kicka i gång med Ruby och Rails. Ruby är verkligen ett tilltalande språk och Rails är ett coolt ramverk för att otroligt snabbt sätta upp webbprojekt baserade på goda designprinciper som &lt;a href="http://en.wikipedia.org/wiki/DRY"&gt;DRY&lt;/a&gt; och &lt;a href="http://en.wikipedia.org/wiki/Separation_of_Concerns"&gt;Separation of Concerns&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2023195937392073710?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2023195937392073710/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2023195937392073710' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2023195937392073710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2023195937392073710'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/10/oopsla-dag-4.html' title='OOPSLA, dag 4'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-8023355743294611217</id><published>2008-10-24T10:54:00.000+02:00</published><updated>2008-10-24T17:54:23.535+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOPSLA'/><title type='text'>OOPSLA, dag 3</title><content type='html'>På tisdagen inleddes själva konferensdelen av OOPSLA, tidigare dagar innehöll bara workshops och tutorials. Inte för att det är så stor skillnad eftersom OOPSLA inte har traditionella konferenspass a 45-60 min, utan istället en keynote varje förmiddag och eftermiddag och däremellan (och parallellt för den delen) ett stort utbud tutorials, demonstrations, workshops, presentation av papers, &lt;a href="http://en.wikipedia.org/wiki/Lightning_Talk"&gt;lightning talks&lt;/a&gt; m.m.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Först ut var egyptologen/arkeologen &lt;a href="http://www.aeraweb.org/"&gt;Mark Lehner&lt;/a&gt; med föredraget "Social Programming A Pyramid, and possibly other large projects". Titeln antydde intressanta paralleller mellan pyramidbyggen och mjukvaruprojekt, men höll knappast vad den lovade i detta avseende. Det betyder emellertid inte att den var ointressant, men det intressanta var pyramidernas historia och det arkeologiska arbetet med &lt;a href="http://www.aeraweb.org/"&gt;utgrävningarna av "den förlorade staden"&lt;/a&gt;. Och även om det inte fanns så många direkta paralleller tycker jag det är ett bra initiativ att bjuda på oväntade ämnen som inte är direkt relaterade till mjukvaruutveckling; förutom att det är kul med variation uppstår det ofta intressanta korsbefruktningar mellan områden och tankegångar där man minst anar det.&lt;br /&gt;&lt;br /&gt;OOPSLA presenterar varje år en essä som valts ut av en kommitté som mottagit bidrag under året. Detta års essä var "Designed as Designer" av LISP-experten &lt;a href="http://en.wikipedia.org/wiki/Richard_P._Gabriel"&gt;Richard Gabriel&lt;/a&gt; och var en sorts replik på &lt;a href="http://en.wikipedia.org/wiki/Fred_Brooks"&gt;Fred Brooks&lt;/a&gt; keynote på förra årets OOPSLA. Brooks jämförde designerns arbete i ett mjukvaruprojekt med konstnärers arbete och menade att de senare alltid har jobbat ensamma eller på sin höjd i par. Mjukvarudesign har mer och mer kommit att bli teamwork. Gabriel, som på gamla dagar börjat skriva poesi, invände mot detta och lyfte istället fram hur varje konstnär bygger vidare på tidigare generationers arbete och hur allt konstnärligt arbete egentligen är en sorts kommunikation med konsten och samhället. Föreläsningen var ganska annorlunda, med långa bildspel med musik, inspelade bokuppläsningar och mycket poesi. Det är märkligt att inte fler föredragshållare drar nytta av modern teknik eller åtminstone jobbar mer med sina slides och presentationer. Jag har inte sett många vackra eller innovativa presentationer här på OOPSLA, men den här var ett vackert undantag.&lt;br /&gt;&lt;br /&gt;På eftermiddagen var det dags för tutorials igen, närmare bestämt Introducing New Ideas into Your Organization med &lt;a href="http://www.lindarising.org/"&gt;Linda Rising&lt;/a&gt;. Jag äger sedan tidigare hennes bok "Fearless Change: Patterns for Introducing New Ideas" men har bara bläddrat i den tidigare. Tillsammans med sin medförfattare Mary Lynn Manns samlade Rising under tio års tid ihop olika mönster för hur man introducerar nya idéer i en organisation. Ett exempel på ett mönster är det grundläggande Evangelist; för att införa nya idéer måste du ha en passion för dem som kan smitta av sig på andra. Andra mönster är Brown Bag, använd lunchtid för att skapa en bekväm och avslappnad plats för att berätta om idén; Bridge-Builder, para ihop dem som accepterat den nya idén med sådana som inte har det; Do Food, bryt bröd tillsammans med dem du vill övertyga om din idé.&lt;br /&gt;&lt;br /&gt;För många som är intresserade av agila metoder och praktiker, men som jobbar i en miljö där vattenfall är modellen, är Risings mönster naturligtvis mycket intressanta. Jag får ofta frågan hur man introducerar mer agila metoder, t.ex. TDD, på sin arbetsplats och med Risings tutorial har jag fått flera bra idéer och dessutom namn på sådana som jag redan använder mig av.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-8023355743294611217?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/8023355743294611217/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=8023355743294611217' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8023355743294611217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8023355743294611217'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/10/oopsla-dag-3.html' title='OOPSLA, dag 3'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-8981375213202602120</id><published>2008-10-22T22:46:00.002+02:00</published><updated>2008-10-22T23:16:10.673+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOPSLA'/><category scheme='http://www.blogger.com/atom/ns#' term='Humor'/><title type='text'>Till och med hotellen är "test infected" på OOPSLA...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Ti2PCm6M_uI/SP-X7bChZgI/AAAAAAAAAAc/qLe2NKlLPXE/s1600-h/TDDatFrontDesk.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_Ti2PCm6M_uI/SP-X7bChZgI/AAAAAAAAAAc/qLe2NKlLPXE/s400/TDDatFrontDesk.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5260089936918439426" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-8981375213202602120?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/8981375213202602120/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=8981375213202602120' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8981375213202602120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8981375213202602120'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/10/till-och-med-hotellen-r-test-infected-p.html' title='Till och med hotellen är &quot;test infected&quot; på OOPSLA...'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Ti2PCm6M_uI/SP-X7bChZgI/AAAAAAAAAAc/qLe2NKlLPXE/s72-c/TDDatFrontDesk.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-71445757627359299</id><published>2008-10-22T15:42:00.004+02:00</published><updated>2008-10-22T16:23:28.275+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOPSLA'/><title type='text'>OOPSLA, dag 2</title><content type='html'>Andra dagen på &lt;a href="http://www.oopsla.org/oopsla2008/"&gt;OOPSLA&lt;/a&gt; inleddes med en introduktion till &lt;a href="http://en.wikipedia.org/wiki/F_Sharp_programming_language"&gt;F#&lt;/a&gt;. För att vara en introduktion var den ganska avancerad, vilket också förstärktes av en kunnig publik med intressanta frågor utifrån erfarenheter från andra funktionella språk som t.ex. &lt;a href="http://en.wikipedia.org/wiki/Haskell_programming_language"&gt;Haskell&lt;/a&gt;. F# är ett sorts hybridspråk med stöd för såväl objektiorienterad som funktionell programmering. I funktionell programmering bygger man programmen med matematiska funktioner, d.v.s. en mekanism som konsekvent levererar rätt utvärde när man matar den med ett invärde. Detta innebär bl.a. att funktionell programmering är tillståndslös (stateless) med oföränderlig (immutable) data, något som gör att det lämpar sig väldigt väl för parallell programmering. Det sistnämnda är förmodligen en stor anledning till varför F# och funktionell programmering är så populära just nu: i en värld med multipla processorer är det naturligtvis intressant med programmeringsspråk som enkelt kan dra nytta av detta.&lt;div&gt;&lt;br /&gt;&lt;div&gt;Även om det var en mycket intressant genomgång är F# inte ett språk jag kommer att kasta mig över; det har inte samma omedelbara attraktionskraft (på mig) som t.ex. Ruby. Medan Ruby känns som ett väldigt spännande alternativ som "förstaspråk" upplever jag att F# snarare är ett bra verktyg att ha till hands för t.ex. just parallell programmering.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Eftermiddagen tillbringade jag på &lt;a href="http://blog.andreasbrink.se/"&gt;Andreas Brinks&lt;/a&gt; "Test-Driven Development - Hands On!" som han egentligen skulle ha hållit tillsammans med sin kollega &lt;a href="http://niclasnilsson.se/"&gt;Niclas Nilsson&lt;/a&gt; som tyvärr blev tvungen ställa in p.g.a. sjukdom. Det var just p.g.a. Niclas frånvaro som jag satt med på denna tutorial för att eventuellt kunna hjälpa till om det skulle ha blivit många frågor under övningarna. Nu valde emellertid alla att genomföra övningarna i Java istället för C# och det var väldigt lite frågor, förmodligen därför att de flesta redan fuskat lite med enhetstester eller t.o.m. TDD. Andreas och Niclas har satt ihop en bra samling övningar och en bra blandning mellan teori (25%) och praktik (75%). Deltagarna kanske inte precis blir fullfjädrade TDD-praktiserare på drygt tre timmar, men jag tror att en sådan här övning kan vara en bra inspiration för att komma i gång med TDD i sin vardag.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-71445757627359299?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/71445757627359299/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=71445757627359299' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/71445757627359299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/71445757627359299'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/10/oopsla-dag-2.html' title='OOPSLA, dag 2'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2565661811936474332</id><published>2008-10-20T06:15:00.002+02:00</published><updated>2008-10-20T06:39:04.900+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOPSLA'/><title type='text'>OOPSLA, dag 1</title><content type='html'>Efter en lång resa befinner jag mig nu i Nashville för att närvara vid &lt;a href="http://www.oopsla.org/oopsla2008/"&gt;OOPSLA&lt;/a&gt;, Object-Oriented Programming, Systems, Languages, and Applications conference. Första dagens förkonferens är nu till ända och jag har hunnit med två tutorials: iPhone SDK kickstart och The Art of Telling Your Design Story.&lt;br /&gt;&lt;br /&gt;Att programmera mot iPhone SDK var kul och även om &lt;a href="http://sv.wikipedia.org/wiki/Objective-C"&gt;Objective-C&lt;/a&gt; knappast lär bli mitt favoritspråk var det roligt att se hur snabbt man kan komma i gång med att skriva applikationer för sin iPhone. Och nu när jag installerat all nödvändig programvara och faktiskt skrivit ett par enkla applikationer är det inte helt omöjligt att det blir lite iPhone-programmering framöver.&lt;br /&gt;&lt;br /&gt;Rebecca Wirfs-Brock, kvinnan bakom &lt;a href="http://www.wirfs-brock.com/Design.html"&gt;Responsibility-Driven Design&lt;/a&gt;, lärde oss konsten att berätta design-stories. Egentligen handlar det rätt mycket om berättarkonst överhuvudtaget och mycket av det hon tog upp var mer eller mindre självklara saker som man kanske inte tänker på, men som nu när de formaliserats kan bli lättare att komma ihåg och använda på ett mer strukturerat sätt. Det gäller allt från sådant som att anpassa sin story efter åhörare till hur man bör organisera sin berättelse beroende på vad det är man vill uppnå (buy-in, feedback, utbilda etc).&lt;br /&gt;&lt;br /&gt;Jag börjar känna av en viss jetlag så det är väl bäst att runda av här så att jag är utvilad inför morgondagens &lt;a href="http://en.wikipedia.org/wiki/F_Sharp_programming_language"&gt;F#&lt;/a&gt;-tutorial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2565661811936474332?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2565661811936474332/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2565661811936474332' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2565661811936474332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2565661811936474332'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/10/oopsla-dag-1.html' title='OOPSLA, dag 1'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2623834091546269336</id><published>2008-09-24T20:15:00.007+02:00</published><updated>2008-09-24T21:04:50.357+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ALT.NET'/><title type='text'>ALT.NET Unconference</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Ti2PCm6M_uI/SNqN4DZQuJI/AAAAAAAAAAU/tCPoEnJ6P8c/s1600-h/altnetunconf.jpg"&gt;&lt;img style="width: 658px; height: 156px;" src="http://1.bp.blogspot.com/_Ti2PCm6M_uI/SNqN4DZQuJI/AAAAAAAAAAU/tCPoEnJ6P8c/s400/altnetunconf.jpg" alt="Foto:Ola Lindberg" id="BLOGGER_PHOTO_ID_5249664309777184914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Foto: Ola Lindberg&lt;br /&gt;&lt;br /&gt;Lördagen den 13 september arrangerade svenska ALT.NET-gruppen en "&lt;a href="http://en.wikipedia.org/wiki/Unconference"&gt;unconference&lt;/a&gt;" baserad på &lt;a href="http://en.wikipedia.org/wiki/Open_Space_Technology"&gt;Open Space Technology&lt;/a&gt; i &lt;a href="http://www.avega.se/"&gt;Avegas&lt;/a&gt; lokaler i centrala Stockholm. Ett trettiotal personer träffades utan att egentligen veta vad som skulle komma att avhandlas under dagen. Vi hade minst fyra olika mötesplatser till vårt förfogande under fem tidspass på ca 45 minuter vardera. I praktiken blev det ungefär tre ämnen per tidspass.&lt;br /&gt;&lt;br /&gt;Några av de ämnen som diskuterades var &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;TDD&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development"&gt;BDD&lt;/a&gt;, NHibernate, &lt;a href="http://en.wikipedia.org/wiki/Model-view-controller"&gt;MVC&lt;/a&gt;, Agile och SOA, "Slightly ALT.NET", anti-patterns, JQuery och andra script-bibliotek, Continuous Integration, Dependecy Injection/Inversion of Control, huruvida WCF uppmuntrar en anemisk domänmodell, om objektorienterad programmering är död och alternativa språk på .NET-plattformen. Ungefär hälften av deltagarna fortsatte sedan konversationen över en bit italiensk mat på Vapiano.&lt;br /&gt;&lt;br /&gt;För min del var det en mycket trevlig och givande dag och det verkar jag ha varit långt i från ensam om att tycka. Förhoppningsvis blir det fler liknande tillställningar och fler coding dojos framöver. Håll ett öga på &lt;a href="http://groups.google.se/group/sweden-altnet"&gt;Sweden ALT.NET Google Group&lt;/a&gt; så kan du vara med när det händer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2623834091546269336?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2623834091546269336/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2623834091546269336' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2623834091546269336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2623834091546269336'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/09/altnet-unconference.html' title='ALT.NET Unconference'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Ti2PCm6M_uI/SNqN4DZQuJI/AAAAAAAAAAU/tCPoEnJ6P8c/s72-c/altnetunconf.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-4385359392865054377</id><published>2008-09-05T16:40:00.003+02:00</published><updated>2008-09-24T21:04:29.192+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ALT.NET'/><title type='text'>ALT.NET Unconference, lördagen den 13 september</title><content type='html'>Lördagen den 13 september har &lt;a href="http://groups.google.se/group/sweden-altnet"&gt;svenska ALT.NET-gruppen&lt;/a&gt; en kostnadsfri s.k. "&lt;a href="http://en.wikipedia.org/wiki/Unconference"&gt;unconference&lt;/a&gt;". Vi träffas kl 11 på &lt;a href="http://www.avega.se/"&gt;Avega&lt;/a&gt; och kör i gång öppna forum enligt &lt;a href="http://en.wikipedia.org/wiki/Open_Space_Technology"&gt;Open Space Technology&lt;/a&gt; där alla ämnen är välkomna. Temat är &lt;a href="http://altnetpedia.com/"&gt;ALT.NET&lt;/a&gt; i bred bemärkelse, d.v.s. kontinuerlig inlärning/förbättring, vad kan vi lära oss från Java/Ruby/agile/lean/Open Source/dagisverksamhet/tårttillverkning/whatever, alternativa verktyg och tekniker o.s.v. En mer precis tolkning av ALT.NETs kärna har &lt;a href="http://martinfowler.com/bliki/AltNetConf.html"&gt;levererats av Martin Fowler&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"The alt.net mind-set is one that is very familiar to me. It has that mix of agile + object-orientation + patterns + TDD + DDD which is very much the school of software development that I favor. (Lacking a proper name for it, I'm inclined to call it the OOPSLA school of software development.) There is certainly a belief that there is a mainstream Microsoft orthodoxy at the moment, one that doesn't fit the OOSPLA school. And there's some frustration with that. But the point here is that it's not that the alt.net community thinks that the perceived mainstream Microsoft route should be erased, but that the Microsoft world is big enough for different approaches."&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://www.avega.se/"&gt;Avega&lt;/a&gt; sponsrar med kaffe och macka, vi håller på till ca 17:00 och sedan går vi ut och käkar på en restaurang tillsammans. För mer information och anmälan, se &lt;a href="http://www.altdotnet.se/"&gt;http://www.altdotnet.se/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Välkommen!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-4385359392865054377?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/4385359392865054377/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=4385359392865054377' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/4385359392865054377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/4385359392865054377'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/09/altnet-unconference-lrdagen-den-13.html' title='ALT.NET Unconference, lördagen den 13 september'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-3218558618513248945</id><published>2008-06-09T20:21:00.002+02:00</published><updated>2008-06-09T20:23:06.373+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agila Sverige'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Du kodar väl på svenska?</title><content type='html'>&lt;p&gt;På &lt;a href="http://agilasverige.se/"&gt;Agila Sverige&lt;/a&gt;, Sveriges första agila konferens med blixttal och "&lt;a href="http://en.wikipedia.org/wiki/Open_space"&gt;Open Space&lt;/a&gt;"-möten, höll jag ett blixttal (max 10 minuter långt) om att koda på svenska. Mina slides (finns det ett bra svenskt ord för detta?) ser du nedan via eminenta tjänsten &lt;a href="http://www.slideshare.net/"&gt;Slideshare&lt;/a&gt;.&lt;/p&gt;  &lt;div id="__ss_438884" style="width: 425px; text-align: left"&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=agilasverige2008-1212218981888831-8" width="425" height="355" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always"&gt;&lt;/embed&gt;    &lt;div style="font-size: 11px; padding-top: 2px; font-family: tahoma,arial; height: 26px"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin-bottom: -5px; border-left: 0px; border-bottom: 0px" alt="SlideShare" src="http://static.slideshare.net/swf/logo_embd.png" /&gt;&lt;/a&gt; | &lt;a title="View Du kodar väl på svenska? on SlideShare" href="http://www.slideshare.net/JoakimSunden/du-kodar-vl-p-svenska?src=embed"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload?src=embed"&gt;Upload your own&lt;/a&gt;&lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Dessa slides är inte så innehållsrika eftersom jag föredrar att publiken lyssnar på vad jag har att säga istället för att försöka hinna läsa vad som projiceras på en duk. För den som är intresserad av vad jag sa kommer här istället mitt manusutkast i mer eller mindre oredigerad form.&lt;/p&gt;  &lt;p&gt;Slide 1 - "Du kodar väl på svenska?"  &lt;br /&gt;Hej!   &lt;br /&gt;Jag heter Joakim Sundén och kommer från konsultbolaget Avega. Jag tänkte prata lite om att koda på svenska.&lt;/p&gt;  &lt;p&gt;Slide 2 - "Working together"  &lt;br /&gt;“Business people and developers must work together daily throughout the project.” Det är en av principerna bakom &lt;a href="http://www.agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;I agila utvecklingsprocesser jobbar utvecklarna nära domänexperterna under hela projektets livstid. Man förfinar hela tiden design och domänmodell allt eftersom den gemensamma förståelsen för hur mjukvaran ska fungera ökar. För att det här ska fungera är det viktigt att kommunikationen mellan utvecklare och domänexperter fungerar bra. Man behöver ett gemensamt språk.&lt;/p&gt;  &lt;p&gt;Slide 3 - "Ubiquitous language"  &lt;br /&gt;Eric Evans är en av de som bäst formulerat detta behov med sitt begrepp “ubiquitous language”, allestädes närvarande språk, som vi här kallar gemensamt språk. &lt;/p&gt;  &lt;p&gt;Enligt Evans har ett projekt allvarliga problem när dess språk är splittrat. Domänexperter använder sin jargong medan tekniska teammedlemmar har sitt eget språk för att diskutera design. Terminologin i det dagliga diskussionerna blir bortkopplad från terminologin i koden. Till och med samma person kanske använder olika språk i tal och skrift och då går man kanske miste om några av de skarpaste uttrycken för problemdomänen. &lt;/p&gt;  &lt;p&gt;För att komma till rätta med de här problemen bör man använda domänmodellen som grund för ett gemensamt språk och få teamet att använda det språket konsekvent i all kommunikation inom teamet och i koden. &lt;/p&gt;  &lt;p&gt;Det är särskilt viktigt att använda det gemensamma språket när man pratar eftersom vår hjärna verkar vara specialiserad på att hantera komplexitet i det talade språket. Att leka med ord och fraser och experimentera med språket förbises ofta i modelleringsarbete.&lt;/p&gt;  &lt;p&gt;Slide 4 - "Varför svenska?"  &lt;br /&gt;Om vill få till stånd ett gemensamt språk som genomsyrar allt från kod till samtal i en svensk verksamhet där domänexperterna talar svenska, borde det vara självklart att använda svenska i koden? Vi vill väl knappast tvinga resten av verksamheten att börja tala engelska?&lt;/p&gt;  &lt;p&gt;Jag har jobbat en del i försäkringsbranschen på sistone och där kodade vi på svenska i problemdomänen. Att sitta och översätta termer som fribrevshavare, tiotaggare och skuggvärde till engelska hade försvårat samtal med domänexperter och kravanalytiker. Det var svårt redan på svenska att lära sig och komma ihåg vad de olika termerna betydde. Men det var ovärderligt att koden och verksamhetstermerna var samma när man satte sig tillsammans med en domänexpert för att försöka förstå olika affärsregler.&lt;/p&gt;  &lt;p&gt;Men frågan i rubriken här är egentligen felaktigt ställd; lika lite som vi frågar oss varför vi ska prata och skriva på svenska i resten av verksamheten, lika lite borde vi fråga oss varför vi ska använda svenska i koden. Den fråga vi istället borde ställ oss är - varför inte?&lt;/p&gt;  &lt;p&gt;Slide 5 - "Varför inte?"  &lt;br /&gt;Vad finns det egentligen för skäl att inte välja svenska? Annat än att “det är så vi alltid har gjort”? För engelsktalande som Eric Evans tycks det självklart att man kodar på verksamhetens språk, oavsett om det är engelska, spanska eller svenska. Men bland svenska utvecklare verkar det ofta närmast otänkbart; även bland de som arbetar agilt eller t.o.m. säger sig ha en DDD-approach. &lt;/p&gt;  &lt;p&gt;Hur kommer det sig? Finns det särskilda svårigheter med att koda på svenska som engelskatalande har svårt att se? Eller är det bara födsel och ohejdad vana som håller svenska utvecklare tillbaka? Vilka är egentligen invändningarna mot svenska?&lt;/p&gt;  &lt;p&gt;Slide 6 - "Men om vi ska outsourca då?"  &lt;br /&gt;Outsourcing, offshoring, eventuell sammanslagning med eller uppköp av andra företag, engelska som koncernspråk etc. Visst finns det många goda skäl att välja engelska, men de här skälen är knappast relevanta för annat än en minoritet av svenska utvecklingsprojekt. I många fall måste det också bli en bedömningsfråga där sannolikheten för t.ex. outsourcing till annat land får vägas mot kostnaden för ett försvårande av det gemensamma språket. &lt;/p&gt;  &lt;p&gt;Att däremot reflexmässigt välja engelska bara "utifall att" innebär i många fall spekulativ övergeneralisering som komplicerar arbetet utan att ge några uppenbara fördelar. Här kan man verkligen tala om YAGNI - “You Aint Gonna Need It!”&lt;/p&gt;  &lt;p&gt;Slide 7 - "Det känns konstigt"  &lt;br /&gt;Det här verkar vara ryggradsreflexen för många... &lt;/p&gt;  &lt;p&gt;"Det känns konstigt..."  &lt;br /&gt;"Det känns helt fel. Skitjobbigt!"&lt;/p&gt;  &lt;p&gt;Har man jobbat ett tag med svenska i koden inser man ganska snabbt att det är en vanesak. Jag har träffat utvecklare som bara kodat på svenska som tycker det är obegripligt att det finns folk som sitter och översätter svenska verksamhetsbegrepp till engelska i koden.&lt;/p&gt;  &lt;p&gt;Slide 8 - "Svengelska"  &lt;br /&gt;Det går inte att koda på svenska. Programmeringsspråken är ju på engelska. Man måste ju skriva if(försäkringSaknas). Jo, så är det. Men är det verkligen ett problem? Det är för domänmodellen vi vill ha ett gemensamt språk, inte för infrastruktur, den tekniska domänen eller så låg nivå som if-satser och for-loopar. Det är inte på den nivån domänmodellen mejslas ut. &lt;/p&gt;  &lt;p&gt;(Hur många utvecklare som diskuterar en while-loop säger för övrigt "while försäkring saknas kommer koden att do X men bara if lönen samtidigt är över Y"?) &lt;/p&gt;  &lt;p&gt;Men även för domänmodellen blir det ju svengelska, eller ska man översätta Exception och Factory o.s.v.? Annars blir det ju FörsäkringException och FörsäkringFactory? En del personer tycks initialt ha problem med det. “Det är inte estetiskt”, “det har inte samma visuella känsla” eller “det ger en sämre helhetskänsla”. Jag vill inte påstå att sådana känslor är helt irrelevanta, men kan det verkligen vara mer än en vanesak? Kan det vara en tillräckligt stark invändning mot svenska för att börja översätta dröjsmålsränta och fribrevshavare? &lt;/p&gt;  &lt;p&gt;Själv tycker jag att det inte tog särskilt lång tid att tycka att FöräkringFactory och FörsäkringException inte är konstigare än hedgefond, kundworkshop, trekkingskor, bilens airbag eller e-mailprogram.&lt;/p&gt;  &lt;p&gt;Slide 9  &lt;br /&gt;Enligt min erfarenhet är valet att koda på engelska allt som oftast ett icke-val. Det har helt enkelt inte föresvävat personen i fråga att svenska är möjligt. Och när man presenterar det som ett alternativ blir den ryggradsmässiga reaktionen att “nej, men går det verkligen” eller “det blir konstigt”. Men det ÄR en vanesak. Prova! Det finns fördelar med att ha samma språk i koden som i skrift och konversationer i teamet, med domänexperter. &lt;/p&gt;  &lt;p&gt;Om vi tror att det är fördelaktigt att använda samma språk och termer i koden som i det vardagliga samtalet - att i sanning ha ett gemensamt språk - och vi inte kan se några reella problem med att använda svenska i koden - då borde vi väl också koda på svenska?&lt;/p&gt;  &lt;p&gt;  &lt;br /&gt;Lustigt nog stötte jag kort därefter på mitt första problem med svenska tecken i koden när det visade sig att &lt;a href="http://nvelocity.sourceforge.net/"&gt;NVelocity&lt;/a&gt; vägrar känna igen variabler och metoder som innehåller åäö. :-) Det blir väl till att försöka fixa det helt enkelt, men att NVelocity använder CVS och inte verkar vara uppdaterat sedan januari 2003 gör ju inte att man känner sig helt sugen...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-3218558618513248945?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/3218558618513248945/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=3218558618513248945' title='6 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3218558618513248945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3218558618513248945'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/06/du-kodar-vl-p-svenska.html' title='Du kodar väl på svenska?'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-544786235694940578</id><published>2008-06-09T13:43:00.001+02:00</published><updated>2008-06-09T13:45:43.516+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Avega'/><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>Detta har hänt</title><content type='html'>&lt;p&gt;En lång föräldraledighet börjar snart gå mot sitt slut (nåja, i slutet på augusti i alla fall). Man kan lätt få för sig att jag under denna tid helt kopplat bort allt vad jobb heter, särskilt när man ser till antalet inlägg på denna blogg. Och visst hade det varit trevligt om det var på det viset, men det har stundtals varit ganska hektiskt. Så jag tänkte här ta tillfället i akt och samla ihop lite information om vad som hänt på sistone och lite om vad framtiden har i sitt sköte.&lt;/p&gt;&lt;p&gt;Som jag &lt;a href="http://blogg.joakimsunden.se/2008/04/yrkesetik-inom-mjukvaruutveckling-vad.html"&gt;tidigare bloggat om&lt;/a&gt; höll jag en presentation om yrkesetik på &lt;a href="http://developersummit.se/"&gt;Developer Summit&lt;/a&gt; i början av april som uppmärksammades bl.a. av &lt;a href="http://www.idg.se/2.1085/1.155502"&gt;Computer Sweden&lt;/a&gt; och av &lt;a href="http://buzzfrog.blogs.com/zabrak/2008/04/msdn-radio-23-a.html"&gt;MSDN Radio&lt;/a&gt; som intervjuade mig.&lt;/p&gt;&lt;p&gt;I början av maj hade hela &lt;a href="http://www.avega.se/"&gt;Avega&lt;/a&gt; en fantastisk konferens på Island där jag, framröstad av mina kollegor, utsågs till Årets Avegan med följande värmande motivering: "Joakim får priset för sitt genuina, brinnande intresse för både människa och teknik härligt inpackat i ett ödmjukt, intelligent och underhållande paket. Joakim har både förmågan och lusten att dela med sig av sina kunskaper." Det var verkligen ett sant nöje och en stor ära!&lt;/p&gt;&lt;p&gt;Och knappt hade jag hunnit hem från Island förrän Computer Sweden publicerade sin &lt;a href="http://www.idg.se/2.1085/1.159412"&gt;lista&lt;/a&gt; över Sveriges 75 "skarpaste utvecklare och arkitekter" där &lt;a href="http://www.idg.se/2.1085/1.159414"&gt;jag återfanns&lt;/a&gt; på en hedersam &lt;a href="http://cskarriarc.idg.se/bloggar/teknikbloggen/entry.jsp?messid=181"&gt;44:e plats&lt;/a&gt;. På denna lista hamnar enligt Computer Sweden de som:&lt;/p&gt;&lt;p&gt;"…har en prestigelös och pragmatisk hållning till sitt arbete.&lt;/p&gt;&lt;p&gt;…som har stor erfarenhet och blivit rekommenderade av andra som är duktiga.&lt;/p&gt;&lt;p&gt;…som kan förklara kluriga problemställningar och kommunicera med omvärlden"&lt;/p&gt;&lt;p&gt;Jag har även hunnit med att ge ett &lt;a href="http://en.wikipedia.org/wiki/Lightning_Talk"&gt;blixttal&lt;/a&gt; på &lt;a href="http://agilasverige.se/"&gt;Agila Sverige&lt;/a&gt;: &lt;a href="http://www.slideshare.net/JoakimSunden/du-kodar-vl-p-svenska/"&gt;Du kodar väl på svenska?&lt;/a&gt; Agila Sverige var en riktigt rolig konferens med massor av intressanta människor och blixttal. Jag kan verkligen rekommendera nästa års konferens redan nu!&lt;/p&gt;&lt;p&gt;I november kommer jag att tala på den internationella konferensen Øredev tillsammans med en lång rad storheter som Robert Martin, Ted Neward, Eric Evans, Ayende Rahien m.fl. Ämnet är &lt;a href="http://oredev.org/topmenu/program/tracknet/joakimsunden.4.2c4b8bee11a31fca49e8000995.html"&gt;"ALT.NET - Are You Ready For the Red Pill?"&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;"Many, if not most, Microsoft shops use whatever tools and practices Microsoft push out, living in blissful ignorance of the many alternatives out there. The path of least resistance is an easy one. There is, however, a minority of shops and developers, not content with swallowing the 'blue pill'. ALT.NET, ('Alternative.NET'), is a movement that challenges the mainstream Microsoft orthodoxy and reach outside the mainstream to adopt the best of any community: Open Source, Agile, Java, Ruby, etc. If you are comfortable with the blue pill, the story ends here. If you are curious about the red pill, you should come to this session."&lt;/p&gt;&lt;p&gt;Det ska verkligen bli roligt! &lt;a href="http://altdotnet.org/"&gt;ALT.NET&lt;/a&gt; hoppas jag få tid att skriva mer om på denna blogg. Kom gärna med i den &lt;a href="http://groups.google.se/group/sweden-altnet"&gt;svenska ALT.NET-gruppen&lt;/a&gt; vi startade för en tid sedan; vi hade en &lt;a href="http://www.codingdojo.org/"&gt;coding dojo&lt;/a&gt; för ett par veckor sedan för att ta fram sajten altdotnet.se med MVC-ramverket &lt;a href="http://www.castleproject.org/monorail/index.html"&gt;MonoRail&lt;/a&gt;. Vi är långt i från klara så kom gärna och hjälp till!&lt;/p&gt;&lt;p&gt;I höst ser det ut att bli besök på två riktigt stora konferenser i Nordamerika: &lt;a href="http://www.oopsla.org/oopsla2008/"&gt;OOPSLA&lt;/a&gt; den 19-23 oktober och &lt;a href="http://microsoftpdc.com/"&gt;Microsofts PDC&lt;/a&gt; den 26-30 oktober. Men där nöjer jag mig med att vara besökare. I år i alla fall... ;-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-544786235694940578?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/544786235694940578/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=544786235694940578' title='4 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/544786235694940578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/544786235694940578'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/06/detta-har-hnt.html' title='Detta har hänt'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-8544278503207698829</id><published>2008-04-13T18:30:00.003+02:00</published><updated>2008-04-15T15:57:16.221+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Professionalism'/><category scheme='http://www.blogger.com/atom/ns#' term='Developer Summit'/><title type='text'>Yrkesetik inom mjukvaruutveckling: Vad utmärker en professionell</title><content type='html'>&lt;p style="font-weight: bold;"&gt;Uppdaterad den 15 april 2008, se längst ned.&lt;/p&gt;&lt;p&gt;Tidigare i veckan höll jag en presentation med titeln &lt;a href="http://www.expertzone.se/dev08/arkitektur.aspx"&gt;"Yrkesetik inom mjukvaruutveckling: Vad utmärker en professionell utvecklare?"&lt;/a&gt; på &lt;a href="http://www.expertzone.se/dev08/"&gt;Developer Summit&lt;/a&gt; i Stockholm inför ca 60-70 personer. Eftersom jag av flera personer fått frågan vad presentationen handlade om och eftersom en kort &lt;a href="http://www.idg.se/2.1085/1.155502"&gt;artikel&lt;/a&gt; i Computer Sweden dessutom har väckt &lt;a href="http://www.idg.se/2.1085/1.155502?articleRenderMode=listpostings"&gt;en del debatt&lt;/a&gt; tänkte jag här kort summera vad jag egentligen pratade om på konferensen.&lt;/p&gt;&lt;p&gt;Årets upplaga av Developer Summit hade "värdeskapande applikationsutveckling" som tema; hur bygger vi "värdeskapande system, system som stöttar kundens affärer och organisation" (från konferensens &lt;a href="http://www.expertzone.se/dev08/"&gt;webbplats&lt;/a&gt;). Det gör vi utvecklare framför allt genom att skriva kod som skapar funktionalitet som uppfyller någon sorts önskemål eller specifikation från kunden. Lyckas vi med det skapar vi värde för kunden.&lt;/p&gt;&lt;p&gt;Problemet är att vi inte alltid lyckas med det. Ganska ofta beter sig mjukvara inte som kunden önskat. Då säger vi att den har defekter. Vi bör inte tala om "buggar" eftersom det lätt för tankarna till föreställningar om oförklarlig eller mystisk uppkomst när det i själva verket handlar om att defekter introduceras av människor. Jag gav exempel på defekter som orsakat stor materiell skada, nämnde att de ibland tar människoliv, berättade om statistik som uppskattade kostnaden för defekter i USA till 60 miljarder dollar årligen och om undersökningar som visade att nära hälften av alla användarprogram har icke-triviala defekter. Enligt &lt;a href="http://my.safaribooksonline.com/0735619670/ch21"&gt;en undersökning&lt;/a&gt; introducerar utvecklare i snitt 5-8 defekter per timme vi kodar!&lt;/p&gt;&lt;p&gt;Givet den stora kostnaden för defekter och det faktum att det verkar finnas så gott om dem: finns det verkligen ingenting vi kan göra för att undvika defekter? Jo, det finns många tekniker som kan hjälpa utvecklare att inte införa defekter: &lt;a href="http://en.wikipedia.org/wiki/Design_by_contract"&gt;Design by Contract&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Testdriven utveckling (TDD)&lt;/a&gt;, formella kodinspektion (även kallade "&lt;a href="http://en.wikipedia.org/wiki/Fagan_inspection"&gt;Fagan inspections&lt;/a&gt;"), &lt;a href="http://en.wikipedia.org/wiki/Pair_programming"&gt;parprogrammering&lt;/a&gt;, m.fl. Tekniker som bland annat tvingar dig att noga tänka igenom specifikationen för vad som ska göras och koden för att uppfylla den; som leder dig bort från komplexitet genom att exempelvis tvinga dig att dela upp programmet i små och verifierbara delar.&lt;/p&gt;&lt;p&gt;Defekter kan också uppstå på grund av dåligt uttryckta krav, dålig återkoppling från kund eller användare, dålig kommunikation och andra saker som vi inte alltid förknippar med utvecklarrollen i ett team eller ett projekt. Eftersom jag befann mig på en utvecklarkonferens och hade begränsat med tid valde jag att fokusera på mjukvarukonstruktion i snäv bemärkelse. Det betyder inte att de andra delarna är mindre viktiga eller att utvecklarna inte ska bry sig om dessa saker - tvärtom! Men jag var tvungen att dra gränsen någonstans.&lt;/p&gt;&lt;p&gt;Att "uppfylla specifikationen" är emellertid inte allt. Att det fungerar är viktigt, men det ska också gå lätt att arbeta vidare med koden utan att riskera att introducera defekter och utan att produktiviteten lider. Därför bör vi undvika dålig kod (eller "&lt;a href="http://susning.nu/Fulkod"&gt;fulkod&lt;/a&gt;"). Dålig kod kännetecknas framför allt av att den är svårt att förstå och svår att förändra, till exempel på grund av att den har långa och omständliga klasser och metoder, obegripliga metod- och variabelnamn, duplicering av logik och hårda beroenden.&lt;/p&gt;&lt;p&gt;Vi vet hur man skriver bra kod. Vi vet hur man undviker defekter. Så varför gör vi inte det?&lt;/p&gt;&lt;p&gt;Okunskap är en ursäkt. Den kan inte godtas mer än i början av en yrkeskarriär eftersom det faktiskt går att bli bättre på de här sakerna; även om de är svåra att bemästra är de lätta att lära sig. Tidsbrist är en annan ursäkt. Uppskruvat tempo - av oss själva eller andra - gör att vi gärna tänker att koden kan bättras på och tester skrivas &lt;span style="font-style: italic;"&gt;senare&lt;/span&gt;. Men senare blir ofta detsamma som &lt;span style="font-style: italic;"&gt;aldrig&lt;/span&gt;. Kan verkligen brådska vara ett acceptabelt skäl att skriva dålig kod och riskera att introducera defekter? Vad skulle du säga om du var läkare och en patient krävde att du skulle strunta i att tvätta händerna innan en operation för att hon hade bråttom? Eller om du var patient och &lt;span style="font-style: italic;"&gt;läkaren&lt;/span&gt; struntade i det därför att &lt;span style="font-style: italic;"&gt;hon&lt;/span&gt; hade bråttom?&lt;/p&gt;&lt;p&gt;Det kanske är någon annans fel? Chefen har satt upp orimliga tidsramar eller kunden vill inte betala för kvalitet? De flesta chefer och kunder vill faktiskt ha bra och defektfri kod även när de är besatta av tidsplaner och budgetar. Men det är deras jobb att passionerat försvara tidsplan och budget. Det är ditt jobb som utvecklare att försvara koden med samma passion! Du måste använda din kompetens för att förklara vad konsekvenserna av dålig kod och inga tester/kodinspektioner/etc blir.&lt;/p&gt;&lt;p&gt;Vi måste helt enkelt sätta ned foten och säga som det är: alla sätt att producera kod är inte lika bra. Vi behöver en "yrkesetik" eller en sorts kollektiv yrkespraktik som definierar vår profession, vårt yrke. Med den kunskap och erfarenhet vi har samlat på oss de senaste 50 åren kan det inte längre vara den enskilde utvecklarens ensak hur hon producerar sin kod. Vi utvecklare borde kunna vara överens om vad det är som skiljer oss från vem som helst med en dator och en kompilator. Vi behöver en gemensam uppfattning om vad som är professionellt och vad som inte är det. Slarv och ursäkter som tidsbrist och okunskap är bara möjliga i en kontext där undermåligt utfört arbete tolereras och där ingen ställer krav på vad som är fackmässigt godtagbart.&lt;/p&gt;&lt;p&gt;Professionalism handlar inte om att använda en viss sorts språk eller en viss sorts verktyg. Det handlar om praktiker och tänkesätt. Det handlar också om att sätta stolthet i det man gör och om att visa omtanke. Omtanke om kunder, användare, medarbetare, kod, affärsvärde o.s.v.&lt;/p&gt;&lt;p&gt;Resten av presentationen ägnade jag åt att gå igenom ett antal praktiker som jag och många andra anser utmärka en professionell utvecklare. Praktiker som TDD, parprogrammering, kontinuerligt lärande med mera. Jag avslutade med en förhoppningsvis inspirerande apell om varför man ska bry sig och om att förändring börjar med dig själv.&lt;/p&gt;&lt;p&gt;Det skall sägas att mitt snäva fokus på kodens kvalitet och mjukvarans korrekthet med rätta kritiserades av Peter Tallungs som anser att det måste vara användaren vi framförallt ska "svära" att skydda med vår yrkesetik. Detta är något jag borde ha tagit upp i min presentation, även om fokus som sagt var på utvecklaren och dennes "kärnverksamhet" denna dag. Vill man se det från den positiva sidan finns det utrymme för förbättring i fall jag skulle få för mig att hålla en liknande presentation i framtiden. :-)&lt;/p&gt;&lt;p&gt;De "slides" jag visade under presentationen kan du &lt;a href="http://varia.nu/joakim/JoakimSunden-Professionalism-DeveloperSummit080409.pdf"&gt;ladda ned här&lt;/a&gt;. Jag kommer förhoppningsvis att inom kort skriva ett par bloggposter där jag lägger ut texten kring några av de ämnen jag tog upp under presentationen. Om du har kommentarer eller frågor eller vill veta mer om något från min presentation får du gärna lämna en kommentar här på bloggen eller använda e-postadressen högst upp i högerspalten.&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Uppdatering den 15 april 2008&lt;/span&gt;: Ibland går det för fort, särskilt när man ska sammanfatta något, vilket Henrik Engströms kommentar nedan påminner mig om. Något jag tog upp på Developer Summit - och som jag hoppas framgick där - var att det inte finns några universella best practices, precis som &lt;a href="http://www.infoq.com/articles/better-best-practices"&gt;Dan North underströk&lt;/a&gt; i sin utmärkta presentation dagen därpå och som även &lt;a href="http://www.satisfice.com/blog/archives/27"&gt;James Bach förklarat&lt;/a&gt; på ett förtjänstfullt sätt. De jag lyfte fram är en skola och det finns andra, t.ex sådana som trycker mer på de andra tekniker jag tog upp, så som formella kodinspektioner och prototyping. Robert Martin, som inspirerat mig och som jag lånat mycket från, jämför med kamsporter ("martial arts") där man sällan påstår att någon kampsport är odiskutabelt "bättre" än alla andra, men när man väl valt sin skola så agerar vi som om dess tekniker är de rätta och försöker förfina dem till perfektion. Martin Fowler skrev &lt;a href="http://www.martinfowler.com/bliki/SchoolsOfSoftwareDevelopment.html"&gt;något liknande&lt;/a&gt; häromdagen.&lt;/p&gt;&lt;p&gt;För övrigt var en av de praktiker jag lyfte fram att använda rätt verktyg för rätt uppgift och inte bara samma gamla verktyg som man råkar känna till (eller som Microsoft ger dig, som det ofta fungerar i .NET-världen).&lt;/p&gt;&lt;p&gt;Jag kanske helt enkelt får lov att göra en uttömmande bloggpost om &lt;span style="font-style: italic;"&gt;allt&lt;/span&gt; jag pratade om...&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-8544278503207698829?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/8544278503207698829/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=8544278503207698829' title='6 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8544278503207698829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8544278503207698829'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/04/yrkesetik-inom-mjukvaruutveckling-vad.html' title='Yrkesetik inom mjukvaruutveckling: Vad utmärker en professionell'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-8845159590631255355</id><published>2008-03-02T16:20:00.001+01:00</published><updated>2008-03-02T16:20:34.895+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bästa praxis'/><category scheme='http://www.blogger.com/atom/ns#' term='Bok'/><title type='text'>Varför läsa böcker?</title><content type='html'>&lt;p&gt;M&amp;#229;nga har reagerat p&amp;#229; min sista bloggpost 2007, d&amp;#228;r jag bland annat gick igenom det mesta av den jobbrelaterade facklitteratur jag l&amp;#228;ste f&amp;#246;rra &amp;#229;ret, totalt 26 titlar. &amp;quot;Oj vad m&amp;#229;nga&amp;quot; och &amp;quot;hur hinner du l&amp;#228;sa alla b&amp;#246;cker&amp;quot; &amp;#228;r de vanligaste kommentarerna. P&amp;#229; ett s&amp;#228;tt &amp;#228;r det en ganska konstig reaktion med tanke p&amp;#229; att jag huvudsakligen l&amp;#228;ser p&amp;#229; v&amp;#228;g till och fr&amp;#229;n jobbet, ca 25 minuters resv&amp;#228;g enkel v&amp;#228;g. Och jag har alltid gr&amp;#228;mt mig &amp;#246;ver att jag l&amp;#228;ser s&amp;#229; l&amp;#229;ngsamt. Det borde allts&amp;#229; inte vara sv&amp;#229;rt att upprepa &amp;quot;bedriften&amp;quot; om man nu &amp;#228;r intresserad av att l&amp;#228;sa b&amp;#246;cker f&amp;#246;r att utvecklas i sitt yrkesut&amp;#246;vande.&lt;/p&gt;  &lt;p&gt;Samtidigt &amp;#228;r det egentligen inte alls en f&amp;#246;rv&amp;#229;nande reaktion eftersom jag vet att jag, i j&amp;#228;mf&amp;#246;relse med m&amp;#229;nga utvecklare jag tr&amp;#228;ffat, l&amp;#228;ser ovanligt mycket facklitteratur. Jag f&amp;#246;rst&amp;#229;r att alla inte har samma passion f&amp;#246;r sitt jobb och att det &amp;#228;r mycket annat som konkurrerar om de f&amp;#229;tal timmar dygnet st&amp;#228;ller till f&amp;#246;rfogande. Och hur viktigt &amp;#228;r det egentligen att l&amp;#228;sa en massa b&amp;#246;cker? Beh&amp;#246;ver man verkligen det? Kan man inte h&amp;#229;lla sig ajour med vad som h&amp;#228;nder genom att l&amp;#228;sa en artikel eller tv&amp;#229; p&amp;#229; webben d&amp;#229; och d&amp;#229;? Nja, inte om man &lt;a href="http://tech.groups.yahoo.com/group/testdrivendevelopment/message/16373"&gt;talar med Bob Martin&lt;/a&gt; (OO- och TDD-guru, initiativtagare till &lt;a href="http://agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt;) i alla fall:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;Then you don't intent do be a programmer for very long. To be a programmer you have to be an avid reader and studier. If this has to be done on your own time, so be it.&lt;/p&gt;    &lt;p&gt;Our profession is one of the most volatile professions in existence. It is changing all the time. There is no way to remain active in this profession if you don't stay up on those changes. An hour per day is not too long to spend on this.&amp;quot; (&lt;a href="http://tech.groups.yahoo.com/group/testdrivendevelopment/message/16373"&gt;TDD Mailing List, 17 maj 2006&lt;/a&gt;)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Eller om man hellre talar med Steve McConnell, f&amp;#246;rfattaren till bland annat den moderna klassikern &lt;a href="http://blogg.joakimsunden.se/2006/12/code-complete-practical-handbook-of.html"&gt;Code Complete&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;Specific features of the technical environment change every 5 to 10 years. If you aren't curious enough to keep up with the changes, you might find yourself down at the old-programmers' home playing cards with T-Bone Rex and the Brontosaurus sisters.&amp;quot; (&lt;a href="http://blogg.joakimsunden.se/2006/12/code-complete-practical-handbook-of.html"&gt;Code Complete&lt;/a&gt;, s. 822)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Man kan tycka att Martins och McConnells krav p&amp;#229; en programmerare &amp;#228;r v&amp;#228;l h&amp;#246;ga, men det &amp;#228;r d&amp;#228;rf&amp;#246;r att verkligheten st&amp;#228;ller h&amp;#246;ga krav p&amp;#229; oss. Visst, det tycks stundtals r&amp;#228;cka att f&amp;#229; in en fot i branschen och sitta av n&amp;#229;gra &amp;#229;r f&amp;#246;r att h&amp;#229;lla sig kvar i programmeraryrket livet ut, s&amp;#228;rskilt med den senaste tidens bristande &amp;#229;terv&amp;#228;xt. Eftersom erfarenhet n&amp;#228;stan alltid f&amp;#246;refaller m&amp;#228;tas kvantitativt snarare &amp;#228;n kvalitativt s&amp;#229; beh&amp;#246;ver man knappast utvecklas alls f&amp;#246;r att efter n&amp;#229;gra &amp;#229;r mer eller mindre vara garanterad f&amp;#246;rs&amp;#246;rjning som programmerare livet ut. Men om man inte &amp;#228;r bel&amp;#229;ten med att bara f&amp;#246;rs&amp;#246;rja sig, utan verkligen vill h&amp;#228;nga med i utvecklingen, ha koll p&amp;#229; det man jobbar med och kunna g&amp;#246;ra ett bra jobb m&amp;#229;ste man aktivt l&amp;#228;sa och studera.&lt;/p&gt;  &lt;p&gt;Att h&amp;#229;lla sig uppdaterad om utvecklingen &amp;#228;r inte enda sk&amp;#228;let att l&amp;#228;sa b&amp;#246;cker, kanske inte ens det fr&amp;#228;msta. Inom mjukvaruindustrin har vi nu ett antal decenniers erfarenheter bakom oss och vi har hunnit g&amp;#246;ra v&amp;#228;ldigt m&amp;#229;nga misstag, om och om igen dessutom. Vi har ocks&amp;#229; l&amp;#228;rt oss av dessa misstag och uppt&amp;#228;ckt s&amp;#228;tt att undvika dem. Det &amp;#228;r n&amp;#228;rmast oansvarigt att inte tillgodog&amp;#246;ra sig de erfarenheter som ackumulerats genom &amp;#229;ren. Billy McCafferty &lt;a href="http://devlicio.us/blogs/billy_mccafferty/archive/2007/11/12/standing-on-the-shoulders-of-giants.aspx"&gt;uttrycker det s&amp;#229; h&amp;#228;r&lt;/a&gt; p&amp;#229; sin blogg:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;Although there is no single best practice, practices do exist which embody the lessons learned from years of painful experiences and hard won insight. This is not to say that all the practices described are not subject to critique and improvement, but they do serve as a confident starting point for engaging in our own daily practice. Ignoring them outright, which is almost a norm within the world of software development, is an injustice to the science in which we say we engage ourselves.&amp;quot;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Steve McConnell g&amp;#246;r en intressant j&amp;#228;mf&amp;#246;relse med andra yrkesgrupper:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;The software-engineering field makes extraordinarily limited use of examples of past successes and failures. If you were interested in architecture, you'd study the drawings of Louis Sullivan, Frank Lloyd Wright, and I. M. Pei. You'd probably visit some of their buildings. If you were interested in structural engineering, you'd study the Brooklyn Bridge; the Tacoma Narrows Bridge; and a variety of other concrete, steel, and wood structures. You would study examples of successes and failures in your field.&amp;quot; (&lt;a href="http://blogg.joakimsunden.se/2006/12/code-complete-practical-handbook-of.html"&gt;Code Complete&lt;/a&gt;, s. 823)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Den sj&amp;#228;lvklara motsvarigheten i mjukvaruindustrin &amp;#228;r f&amp;#246;rst&amp;#229;s att studera andras kod, design och arkitektur. En av f&amp;#246;rdelarna med konsultyrket &amp;#228;r just den m&amp;#246;jlighet det ofta erbjuder att f&amp;#229; en inblick i m&amp;#229;nga olika l&amp;#246;sningar, arbetss&amp;#228;tt m.m. Har man inte den m&amp;#246;jligheten finns det gott om publierad kod, man kan exempelvis b&amp;#246;rja med n&amp;#229;got av alla &amp;quot;Open Source&amp;quot;-projekten p&amp;#229; &lt;a href="http://www.codeplex.com/"&gt;Codeplex&lt;/a&gt; och &lt;a href="http://sourceforge.net/"&gt;Sourceforge&lt;/a&gt;. Lyckligtvis finns det ocks&amp;#229; m&amp;#229;nga som samlat sina erfarenheter i just b&amp;#246;cker:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;The first step that each of us can take to better the integrity of our science and assist with its advancement is to pick up a book. Although not all are equal, key texts infuse in us the wisdom of many years of development and the expert knowledge garnered from many mistakes.&amp;quot; (&lt;a href="http://devlicio.us/blogs/billy_mccafferty/archive/2007/11/12/standing-on-the-shoulders-of-giants.aspx"&gt;McCafferty&lt;/a&gt;)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;McCafferty presenterar ocks&amp;#229; en lista med b&amp;#246;cker &lt;a href="http://devlicio.us/blogs/billy_mccafferty/archive/2007/11/12/standing-on-the-shoulders-of-giants.aspx"&gt;i sin bloggpost&lt;/a&gt;, &amp;quot;a minimal course of reading for infusing such knowledge&amp;quot;, som inneh&amp;#229;ller m&amp;#229;nga bra titlar v&amp;#228;l v&amp;#228;rda att studera.&lt;/p&gt;  &lt;p&gt;Slutligen kan det ocks&amp;#229; vara direkt v&amp;#228;lg&amp;#246;rande f&amp;#246;r din karri&amp;#228;r att l&amp;#228;sa b&amp;#246;cker och som Steve McConnell skriver i &lt;a href="http://blogg.joakimsunden.se/2006/12/code-complete-practical-handbook-of.html"&gt;Code Complete&lt;/a&gt; beh&amp;#246;ver du inte ens l&amp;#228;sa s&amp;#228;rskilt mycket f&amp;#246;r att utm&amp;#228;rka dig:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;Pat yourself on the back for reading this book. You're already learning more than most people in the software industry becausse one book is more than most programmers read each year (DeMarco and Lister 1999). A little reading goes a long way toward professional advancement. If you read even one good programming book every two months, roughly 35 pages a week, you'll soon have a firm grasp on the industry and distinguish yourself from nearly everyone around you.&amp;quot; (&lt;a href="http://blogg.joakimsunden.se/2006/12/code-complete-practical-handbook-of.html"&gt;Code Complete&lt;/a&gt;, s. 824)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;35 sidor i veckan. Det &amp;#228;r fem sidor om dagen. Det &amp;#228;r v&amp;#228;l ingen bedrift?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-8845159590631255355?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/8845159590631255355/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=8845159590631255355' title='3 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8845159590631255355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8845159590631255355'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/03/varfr-lsa-bcker.html' title='Varför läsa böcker?'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-6976496340016482520</id><published>2008-02-24T21:08:00.001+01:00</published><updated>2008-02-24T21:08:09.163+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAOO2007'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Jim Coplien vs Bob Martin om TDD och professionalism</title><content type='html'>&lt;p&gt;Det pratades &lt;a href="http://blogg.joakimsunden.se/2007/12/summering-av-det-gngna-ret.html"&gt;som sagt&lt;/a&gt; en hel del p&amp;#229; JAOO 2007 om Jim Copliens p&amp;#229;hopp p&amp;#229; testdriven utveckling (TDD) (&lt;a href="http://community.ative.dk/blogs/ative/archive/2007/09/28/the-tdd-controversy-jaoo-2007.aspx"&gt;&amp;quot;ruins your architecture&amp;quot;&lt;/a&gt;) under hans session om &amp;quot;Scrum Architecture&amp;quot;, n&amp;#229;got som resulterade i fortsatt debatt mellan Coplien och bl.a. &lt;a href="http://weblogs.asp.net/rosherove/"&gt;Roy Osherove&lt;/a&gt; under Scrum Open Spaces senare under dagen. Bob Martins inledningsanf&amp;#246;rande f&amp;#246;r konferensen handlade bland annat om att man inte kan kalla sig professionell utvecklare om man inte praktiserar TDD, s&amp;#229; det fanns goda sk&amp;#228;l att anta att det skulle vara intressant att s&amp;#228;tta dessa tungviktare framf&amp;#246;r en kamera f&amp;#246;r att debattera &amp;#228;mnet. Det &amp;#228;r lyckligtvis precis vad &lt;a href="http://www.infoq.com/"&gt;InfoQ&lt;/a&gt; gjorde och resultatet har nu &amp;#228;ntligen publicerats p&amp;#229; deras sajt:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.infoq.com/interviews/coplien-martin-tdd"&gt;Coplien and Martin Debate TDD, CDD and Professionalism&lt;/a&gt; (InfoQ)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-6976496340016482520?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/6976496340016482520/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=6976496340016482520' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/6976496340016482520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/6976496340016482520'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/02/jim-coplien-vs-bob-martin-om-tdd-och.html' title='Jim Coplien vs Bob Martin om TDD och professionalism'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-3977708195757707597</id><published>2008-02-20T12:10:00.001+01:00</published><updated>2008-02-20T12:10:07.573+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bästa praxis'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Testa först eller testa sist?</title><content type='html'>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Den senaste tiden har jag b&amp;#229;de f&amp;#246;ljt och sj&amp;#228;lv deltagit i diskussioner kring huruvida man b&amp;#246;r skriva sina automatiserade tester f&amp;#246;rst eller om det g&amp;#229;r lika bra att skriva dem efter att man skrivit koden. F&amp;#246;r den som inte &amp;#228;r bekant med TDD, testdriven utveckling (&lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test Driven Development&lt;/a&gt;), kanske det l&amp;#229;ter v&amp;#228;ldigt fr&amp;#228;mmande att skriva ett test f&amp;#246;r koden innan man skriver sj&amp;#228;lva koden som uppfyller testet (l&amp;#228;s i s&amp;#229; fall lite mer &lt;a href="http://blogg.joakimsunden.se/2007/06/joakim-holm-hos-avega-tdd-i-praktiken.html"&gt;h&amp;#228;r&lt;/a&gt;). F&amp;#246;r andra kan det verka som h&amp;#229;rklyverier eller &amp;#229;tminstone reducerbart till en smaksak vilket s&amp;#228;tt man v&amp;#228;ljer.&lt;/p&gt;  &lt;p&gt;De flesta som arbetar testdrivet (vilket jag &amp;#229;tminstone i denna text betraktar som synonymt med &amp;quot;testa f&amp;#246;rst&amp;quot; och TDD) &amp;#228;r emellertid &amp;#246;verens om att det faktiskt &amp;#228;r av stor betydelse att skriva testet f&amp;#246;rst. N&amp;#228;r man redan innan koden skrivs &amp;#228;r tvungen att t&amp;#228;nka p&amp;#229; hur den ska anropas blir det gr&amp;#228;nssnitt/API man utvecklar tydligare och f&amp;#229;r en b&amp;#228;ttre design. Om testet skrivs f&amp;#246;rst kan man ocks&amp;#229; vara s&amp;#228;ker p&amp;#229; att koden man skriver faktiskt kommer att vara testbar, n&amp;#229;got som kan vara nog s&amp;#229; sv&amp;#229;rt att &amp;#229;stadkomma i efterhand p&amp;#229; grund av beroenden till andra klasser, initialisering av r&amp;#228;tt testdata o.s.v. Dessutom undviker man den i m&amp;#229;nga sammanhang &amp;#246;verh&amp;#228;ngande risken med att skriva testerna sist: att de inte blir skrivna alls p&amp;#229; grund av tidsbrist, l&amp;#228;ttja etc.&lt;/p&gt;  &lt;p&gt;Standardiseringsorganisationen &lt;a href="http://www.ieee.org/"&gt;IEEE&lt;/a&gt; publicerade nyligen en rapport i en av sina tidskrifter, &amp;quot;&lt;a href="http://iit-iti.nrc-cnrc.gc.ca/publications/nrc-47445_e.html"&gt;On the Effectiveness of Test-first Approach to Programming&lt;/a&gt;&amp;quot;, som j&amp;#228;mf&amp;#246;rde produktiviteten hos team som skrev testerna f&amp;#246;rst med team som skrev dem sist. Slutsatsen fr&amp;#229;n den studien &amp;#228;r att de som jobbar testdrivet tenderar att skriva fler tester och att de som skriver fler tester i regel &amp;#228;r mer produktiva. F&amp;#246;rfattarna bakom studien f&amp;#246;rklarade den h&amp;#246;gre produktiviteten f&amp;#246;r de testdrivna teamen med ett antal synergieffekter hos detta angreppss&amp;#228;tt:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;B&amp;#228;ttre f&amp;#246;rst&amp;#229;else f&amp;#246;r uppgiften eftersom utvecklarna m&amp;#229;ste uttrycka funktionaliteten otvetydigt i form av ett test innan de b&amp;#246;rjar programmera.&lt;/li&gt;    &lt;li&gt;B&amp;#228;ttre fokus p&amp;#229; uppgiften eftersom man m&amp;#229;ste bryta ned uppgifterna i sm&amp;#229; och l&amp;#228;tthanterliga delar n&amp;#228;r man skriver testet f&amp;#246;rst.&lt;/li&gt;    &lt;li&gt;Snabbare inl&amp;#228;rningsprocess d&amp;#229; f&amp;#246;r grova improduktiva nedbrytningar av funktionalitet snabbt &amp;#246;verges f&amp;#246;r mer produktiva finkorniga s&amp;#229;dana f&amp;#246;r att kunna testas.&lt;/li&gt;    &lt;li&gt;Mindre omarbetning eftersom problem uppt&amp;#228;cks direkt n&amp;#228;r testerna k&amp;#246;rs varje g&amp;#229;ng man lagt till eller &amp;#228;ndrat i kod och man d&amp;#229; vet att det man precis gjorde introducerade problemet. Felaktigheter &amp;#228;r billiga att &amp;#229;tg&amp;#228;rda direkt d&amp;#229; problemet och koden fortfarande &amp;#228;r f&amp;#228;rska i utvecklarnas minne.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Okej, s&amp;#229; det finns en hel del goda sk&amp;#228;l att skriva testerna f&amp;#246;rst, att driva designen med tester. Varf&amp;#246;r skulle man d&amp;#229; vilja skriva testerna sist ist&amp;#228;llet? Ett vanligt sk&amp;#228;l &amp;#228;r att man helt enkelt inte har f&amp;#246;rst&amp;#229;tt f&amp;#246;rdelen med TDD &amp;#228;nnu och att det, i det vattenfallst&amp;#228;nk som fortfarande tycks dominera mjukvaruutvecklingen, verkar mer naturligt att f&amp;#246;rl&amp;#228;gga testerna till slutet av projektet eller iterationen som ett sorts &amp;quot;sluttest&amp;quot; f&amp;#246;r att allt fungerar som det &amp;#228;r t&amp;#228;nkt.&lt;/p&gt;  &lt;p&gt;Bland annat denna dominerande f&amp;#246;rest&amp;#228;llning om vad tester &amp;#228;r och n&amp;#228;r och hur de b&amp;#246;r genomf&amp;#246;ras, liksom den traditionella uppdelningen mellan testare och utvecklare i olika roller och personer, har gjort att m&amp;#229;nga b&amp;#246;rjat s&amp;#246;ka efter andra s&amp;#228;tt att f&amp;#246;rklara TDD. Ist&amp;#228;llet f&amp;#246;r &amp;#8221;tester&amp;#8221; talar man om &amp;#8221;exempel&amp;#8221; eller &amp;#8221;specifikationer&amp;#8221; eftersom det egentligen s&amp;#228;ger mer om arbetss&amp;#228;ttet och g&amp;#246;r det l&amp;#228;ttare att f&amp;#246;rst&amp;#229; varf&amp;#246;r man skriver dem f&amp;#246;rst och vilka f&amp;#246;rdelar det kan ha. Detta alternativa syns&amp;#228;tt kallas ofta BDD, &lt;a href="http://behaviour-driven.org/"&gt;Behaviour Driven Development&lt;/a&gt;, men dessa intressanta fr&amp;#229;gor f&amp;#229;r v&amp;#228;nta till en senare bloggpost.&lt;/p&gt;  &lt;p&gt;Ett annat argument mot att skriva testerna f&amp;#246;rst &amp;#228;r att man d&amp;#229; skriver f&amp;#246;r m&amp;#229;nga tester. F&amp;#246;rutom att det d&amp;#228;rmed kr&amp;#228;vs en st&amp;#246;rre arbetsinsats och att det blir mer kod att &amp;#246;verblicka, kan man hamna i en situation d&amp;#228;r testkoden h&amp;#229;ller produktionskoden &amp;#8221;gisslan&amp;#8221; (tack f&amp;#246;r den metaforen &lt;a href="http://danielbrolund.wordpress.com/"&gt;Daniel Brolund&lt;/a&gt;!) genom att en f&amp;#246;r&amp;#228;ndring i koden leder till v&amp;#228;ldigt m&amp;#229;nga brutna tester och d&amp;#228;rmed f&amp;#246;r&amp;#228;ndringar i &amp;#228;ven dessa tester. D&amp;#229; f&amp;#229;r man pl&amp;#246;tsligt motsatsen till ett av de &amp;#246;nskade resultaten: koden blir mer komplex och sv&amp;#229;rare att &amp;#228;ndra.&lt;/p&gt;  &lt;p&gt;Ett motargument &amp;#228;r att bara d&amp;#229;ligt utf&amp;#246;rd TDD skapar s&amp;#229;dan intim koppling mellan enhetstesterna och produktionskoden att detta blir ett stort problem. Naturligtvis kommer du vara tvungen att &amp;#228;ndra testerna n&amp;#228;r du &amp;#228;ndrar produktionskoden, men s&amp;#229; &amp;#228;r det oavsett n&amp;#228;r du testar och det &amp;#228;r dessutom n&amp;#229;got positivt: testerna visar dig att existerande funktionalitet p&amp;#229;verkas.&lt;/p&gt;  &lt;p&gt;Men om man skriver testerna sist g&amp;#229;r man ju miste om f&amp;#246;rdelar som den positiva effekten p&amp;#229; design och b&amp;#228;ttre fokus genom sm&amp;#229; steg? Kanske inte, TDD passar inte n&amp;#246;dv&amp;#228;ndigtvis alla och det finns s&amp;#228;kert utvecklare som har l&amp;#228;ttare f&amp;#246;r att f&amp;#229; fram god design och bra kod p&amp;#229; andra v&amp;#228;gar, s&amp;#228;rskilt om man har god erfarenhet av att ha jobbat framg&amp;#229;ngsrikt p&amp;#229; andra s&amp;#228;tt. Och bara f&amp;#246;r att man skriver testerna efter koden inneb&amp;#228;r det inte att man m&amp;#229;ste jobba med stora steg och skriva alla tester vid slutet av en iteration. M&amp;#229;nga som jobbar med enhetstester men inte med TDD beskriver en arbetsprocess d&amp;#228;r de skriver kod och tester &amp;#8221;samtidigt&amp;#8221; och inte g&amp;#229;r vidare med n&amp;#228;sta klass eller metod f&amp;#246;rr&amp;#228;n tester &amp;#228;r p&amp;#229; plats.&lt;/p&gt;  &lt;p&gt;Kanske &amp;#228;r det ocks&amp;#229; h&amp;#228;r en del av problemet ligger i debatten kring testa f&amp;#246;rst eller testa sist; man j&amp;#228;mf&amp;#246;r g&amp;#228;rna sin valda metods f&amp;#246;rdelaktiga sidor med den andra metodens misslyckanden. TDD-evangelister utg&amp;#229;r ofta fr&amp;#229;n att den som ska &amp;#246;vertygas inte jobbar med enhetstester &amp;#246;verhuvudtaget och kanske att de producerar kod med mindre god design som &amp;#228;r sv&amp;#229;rtestad och full med beroenden (och varf&amp;#246;r skulle de inte det med tanke p&amp;#229; hur det ofta ser ut :-)). Eller s&amp;#229; tittar man p&amp;#229; hur arbetet med enhetstester traditionellt sett ut och ser d&amp;#229; att de skrivs alldeles f&amp;#246;r sent, riskerar att inte bli skrivna o.s.v. De som vill testa sist har i sin tur kanske sett misslyckade exempel p&amp;#229; omoget inf&amp;#246;rande av TDD i ett projekt med l&amp;#229;ng inl&amp;#228;rningstid och med underm&amp;#229;liga tester som h&amp;#229;llit koden gisslan.&lt;/p&gt;  &lt;p&gt;H&amp;#228;r skulle jag, kanske n&amp;#229;got resignerat, kunna avsluta texten med att &amp;#8221;bra utvecklare kommer alltid att skriva bra kod oavsett metod&amp;#8221; och &amp;quot;v&amp;#228;lj det som passar b&amp;#228;st i den specifika situationen&amp;quot;. Det ligger naturligtvis en hel del sanning i dessa klich&amp;#233;er och de kan dessutom t&amp;#229;las att upprepas s&amp;#229; att man &amp;#228;n en g&amp;#229;ng p&amp;#229;minns om att vara &amp;#246;dmjuk inf&amp;#246;r andras erfarenheter och val. Jag tror dock att testa f&amp;#246;rst &amp;#228;r det b&amp;#228;sta arbetss&amp;#228;ttet helt enkelt d&amp;#228;rf&amp;#246;r att det uppmuntrar dig att f&amp;#246;lja annan god praxis. Visst, du kan &amp;#229;stadkomma god design och bra API:er utan TDD, du kan bryta ned program i sm&amp;#229; testbara delar och minimera beroenden utan TDD, du kan skriva bra enhetstester i efterhand, du kan k&amp;#246;ra testerna kontinuerligt och refaktorisera din kod utan TDD och du kan ha disciplin nog att aldrig fuska och spara testerna till senare. Men varf&amp;#246;r chansa? Varf&amp;#246;r inte anv&amp;#228;nda ett arbetss&amp;#228;tt som mer eller mindre tvingar dig att g&amp;#246;ra allt detta? Om det sedan inte &amp;#228;r helt l&amp;#228;tt att l&amp;#228;ra sig, ja d&amp;#229; beror det kanske p&amp;#229; att de goda praktiker som det i sin tur tvingar fram inte heller &amp;#228;r helt l&amp;#228;tta att l&amp;#228;ra sig, men n&amp;#228;r du v&amp;#228;l har gjort det kommer du att vara en b&amp;#228;ttre utvecklare.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-3977708195757707597?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/3977708195757707597/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=3977708195757707597' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3977708195757707597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3977708195757707597'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/02/testa-frst-eller-testa-sist.html' title='Testa först eller testa sist?'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-8350211194700324143</id><published>2008-01-16T11:24:00.001+01:00</published><updated>2008-01-16T11:33:18.184+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>Otrohet och uppbrott</title><content type='html'>&lt;p&gt;För bara några månader sedan hade jag aldrig trott att det skulle kunna hända. Jag borde ha vetat bättre eftersom det faktiskt hade hänt &lt;a href="http://en.wikipedia.org/wiki/PowerBook_Duo"&gt;ett&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Power_Macintosh_6200"&gt;par&lt;/a&gt; gånger tidigare. Det kändes bara så avlägset att jag knappt kom ihåg att det hänt. Aldrig mer hade jag sagt. Men så hände något i slutet av förra året. Alla pratade om hur fantastisk hon var och det &lt;a href="http://www.apple.com/se/getamac/windows.html"&gt;behövde inte nödvändigtvis sluta med otrohet&lt;/a&gt; även om man valde att ta steget. Och hon var ju så vacker och &lt;a href="http://en.wikipedia.org/wiki/Think_Different"&gt;annorlunda&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Kanske var det nyår och känslan av nystart som slutligen fick mig att ta steget. Det första jag gjorde när jag var tillbaka i Stockholm var nämligen att söka upp henne. Och där låg &lt;a href="http://www.apple.com/se/macbookpro/"&gt;hon&lt;/a&gt;, i ett &lt;a href="http://www.macoteket.se/"&gt;skyltfönster&lt;/a&gt; i Sundbyberg, smal och elegant, men ändå utrustad med 2,4 GHz Intel Core 2 Duo, 4 GB RAM och en 200 GB 7200 RPM hårddisk... &lt;a href="http://www.apple.com/se/macbookpro/"&gt;Apple MacBook Pro&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Jag vet att förälskelsens rus kommer att gå över och att vardagens bekymmer kommer att tära även på vårt förhållande, men jag är övertygad om att vi kommer att ha en stark relation även efter att nyhetens behag har lagt sig. Än så länge är allt fantastisk och hon överraskar mig hela tiden med små hjälpsamma saker som ett &lt;a href="http://www.apple.com/se/macbookpro/design.html"&gt;tangentbord&lt;/a&gt; som lyser upp och en skärm som ändrar ljusstyrka beroende på belysningen i rummet, omsorgsfulla innovationer som den &lt;a href="http://www.apple.com/se/macbookpro/design.html"&gt;magnetiska sladden&lt;/a&gt; som gör att hon inte faller i golvet när barnen snavar på den och vackra detaljer som den pulserande lampan när hon vilar så sött på bordet. Jag saknar nästan inte alls min gamla Zepto, men det börjar kanske bli dags att köra Windows Vista snart; Visual Studio finns inte för OS X tyvärr...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-8350211194700324143?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/8350211194700324143/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=8350211194700324143' title='3 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8350211194700324143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8350211194700324143'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2008/01/otrohet-och-uppbrott.html' title='Otrohet och uppbrott'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-898924837349048044</id><published>2007-12-31T23:22:00.001+01:00</published><updated>2008-01-01T01:11:21.662+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><category scheme='http://www.blogger.com/atom/ns#' term='JAOO2007'/><category scheme='http://www.blogger.com/atom/ns#' term='Bok'/><title type='text'>Summering av det gångna året</title><content type='html'>&lt;p&gt;Snart är 2007 till ända och det har i många avseenden varit ett händelserikt år för min del, särskilt nu på slutet eftersom jag avvecklat många åtaganden inför den föräldraledighet som tar vid efter nyår. Många böcker som jag läst, frågor jag funderat på och aktiviteter jag deltagit i och som jag tänkt blogga om har inte hunnits med. Jag tänkte därför ägna denna bloggpost åt en liten summering av böcker, föredrag och konferenser från det gångna året. Om du händelsevis skulle vilja veta mer om något av det jag här skriver om får du gärna lämna en kommentar om vad eller skicka ett mejl (se adress till höger) så kan jag återkomma med en mer ingående text.&lt;br /&gt;&lt;/p&gt;&lt;h5&gt;Böcker&lt;/h5&gt;&lt;p&gt;Det har blivit några böcker lästa under året, många nya men också några omläsningar.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1198882680&amp;amp;sr=1-1"&gt;Domain-Driven Design: Tackling Complexity in the Heart of Software&lt;/a&gt; av Eric Evans. En i många stycken underbar bok om objektorienterad analys och design med fokus på modellering av kärndomänen och ett &lt;a href="http://blogg.joakimsunden.se/2007/03/jimmy-nilsson-hos-avega-eller-svenska.html"&gt;allestädes närvarande språk&lt;/a&gt;. Rekommenderas varmt.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420/ref=pd_bbs_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1198882680&amp;amp;sr=1-3"&gt;Patterns of Enterprise Application Architecture&lt;/a&gt; av Martin Fowler. Fowler har samlat ett 40-tal återkommande mönster för applikationsarkitektur gällande allt från skiktning ("layering") till &lt;a href="http://blogg.joakimsunden.se/2006/05/or-mapping-vad-r-det.html"&gt;O/R-mapping&lt;/a&gt; till &lt;a href="http://en.wikipedia.org/wiki/Model-view-controller"&gt;Model-View-Controller&lt;/a&gt;. Boken innehåller dessutom en mycket intressant vägledning till hur man använder olika mönster när man utvecklar en enterpriseapplikation, hur man gör avvägningar mellan olika mönster, varför vissa mönster är mer lämpade för .NET än för Java m.m.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Head-First-Object-Oriented-Analysis-Design/dp/0596008678/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1198885168&amp;amp;sr=8-1"&gt;Head First Object-Oriented Analysis and Design&lt;/a&gt; av Brett D. McLaughlin, Gary Pollice och Dave West. Jag gillade Head Firsts &lt;a href="http://blogg.joakimsunden.se/2007/02/head-first-design-patterns.html"&gt;bok om designmönster&lt;/a&gt; och tänkte att den här skulle vara lika intressant, men de grepp jag upplevde som tydliga och pedagogiska när det gällde designmönster blev i den här boken övertydlighet och upprepningar. Kanske har det att göra med att ämnet för denna bok är mer bekant och mindre tekniskt komplicerat. Möjligtvis mer intressant för OO-nybörjare.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1198885242&amp;amp;sr=8-2"&gt;The Pragmatic Programmer: From Journeyman to Master&lt;/a&gt; av Andrew Hunt och David Thomas. Pragmatiska programmernas bok är redan en klassiker och en ovärderlig följeslagare för den som vill ta steget från gesäll ("Journeyman") till mästare. Boken är fullspäckad med fina råd och praktiker hämtade från Andys och Daves långa karriärer som mjukvaruutvecklare; designprinciper, vilka verktyg man bör använda, sätt användarna i fokus, så bygger du ett framgångsrikt team, automatisera mera, lär dig ett nytt programmerinsspråk varje år och mycket mera. Principer och filosofi blandas med handfasta och konkreta tips.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Writing-Effective-Cases-Software-Development/dp/0201702258/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1198885284&amp;amp;sr=8-1"&gt;Writing Effective Use Cases&lt;/a&gt; av Alistair Cockburn. En bibel för många kravanalytiker och intressant läsning för alla intressenter i ett mjukvaruutvecklingsprojekt. Cockburn (uttalas co-burn) har en pragmatisk och agil syn på användningsfall som ett (av många) praktiskt arbetsdokument, snarare än som en heltäckande kravspecifikation med detaljnivå motsvarande en användarmanual.&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogg.joakimsunden.se/2007/05/uml-distilled-brief-guide-to-standard.html"&gt;UML Distilled: A Brief Guide to the Standard Object Modeling Language&lt;/a&gt; av Martin Fowler. Bra introduktion till UML och objektorienterad analys och design som jag skrivit mer om &lt;a href="http://blogg.joakimsunden.se/2007/05/uml-distilled-brief-guide-to-standard.html"&gt;här&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1198885401&amp;amp;sr=8-1"&gt;Software Estimation: Demystifying the Black Art&lt;/a&gt; av Steve McConnell. Författaren till &lt;a href="http://blogg.joakimsunden.se/2006/12/code-complete-practical-handbook-of.html"&gt;Code Complete&lt;/a&gt; avmystifierar här tidsuppskattningens svarta konst och visar att realistiska tidsuppskattningar faktiskt är möjliga. Framför allt innehåller boken bra tekniker och tillvägagångssätt för att förbättra ditt projekts och dina egna tidsuppskattningar.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Peopleware-Productive-Projects-Tom-DeMarco/dp/0932633439/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1198885456&amp;amp;sr=8-1"&gt;Peopleware: Productive Projects and Teams&lt;/a&gt; av Tom DeMarco och Timothy Lister. Vad gör vissa projekt och företag mer framgångsrika än andra? Mycket talar för att det överhuvudtaget inte handlar om teknik och processer, utan om människor. Peopleware sätter människorna i fokus och visar med hårda data hur man bäst organiserar arbetsmiljöer och team för att få fram det bästa av dessa människor. En mycket viktig och bra bok!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Principles-Patterns-Practices-Robert-Martin/dp/0131857258/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1198885497&amp;amp;sr=8-2"&gt;Agile Principles, Patterns, and Practices in C#&lt;/a&gt; av Robert C. Martin. Bob Martin, även kallad "Uncle Bob", var en av initiativtagarna till &lt;a href="http://www.agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt; och en förgrundsfigur inom objektorientering och testdriven utveckling (TDD). Med boken "Agile Software Development, Principles, Patterns, and Practices" (2002) förde Bob Martin fram designprinciper som &lt;a href="http://en.wikipedia.org/wiki/Single_responsibility_principle"&gt;Single Responsibility Principle (SRP)&lt;/a&gt; och &lt;a href="http://en.wikipedia.org/wiki/Dependency_inversion_principle"&gt;Dependency Inversion Principle&lt;/a&gt; (DIP), TDD, desinmönster och agil utveckling, framför allt till en Java- och C++-publik. Förra året (2006) gav han ut den här nya utgåvan anpassad, tillsammans med sonen Micah Martin, för C# och .NET. Förutom nämnda principer och mönster är boken full av konkreta kodexempel. En riktigt bra bok om god design, särskilt objektorienterad sådan.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Technology/dp/0201485672/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1198885538&amp;amp;sr=8-1"&gt;Refactoring: Improving the Design of Existing Code&lt;/a&gt;, Martin Fowler. Ännu en modern klassiker av Fowler med stöd från bl.a. XP-grundaren Kent Beck. Boken innehåller bl.a. en mycket omfattande katalog med olika refaktoriseringar (sätt att förbättra kodens struktur och design utan att förändra dess beteende), en genomgång av så kallade "code smells" för att identifiera dålig design och en kort introduktion till enhetstester. Boken är en guldgruva med goda designprinciper, inte minst för ett objektorienterat angreppssätt.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Software-Configuration-Management-Patterns-Integration/dp/0201741172/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199095664&amp;amp;sr=1-1"&gt;Software Configuration Management Patterns: Effective Teamwork, Practical Integration&lt;/a&gt; av Stephen P. Berczuk och Brad Appleton. En mycket bra introduktion till configuration management med många bra mönster för versionshanteringssystem, till exempel Branching, Codeline Policy, Release Line och Private Workspace.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Working-Effectively-Legacy-Robert-Martin/dp/0131177052/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199096186&amp;amp;sr=1-1"&gt;Working Effectively with Legacy Code&lt;/a&gt; av Michael Feathers. Det är egentligen underligt att det inte finns fler böcker som behandlar samma ämne som detta banbrytande verk: hur man steg för steg städar upp legacy-kod (i detta sammanhang liktydigt med dålig design, snårig kod och avsaknad av enhetstester) och ger den struktur och god design. Feathers bok innehåller en stor mängd tekniker för hur man åstadkommer detta och får sin legacy-kod testbar. Under resans gång lär man sig en hel del om god design och Feathers har dessutom ett mycket inspirerande tonfall i sin bok; det han föreskriver är inte bara möjligt, det är nödvändigt. Den här boken och &lt;a href="http://blogg.joakimsunden.se/2007/06/mer-frn-developer-summit.html"&gt;Andreas Brinks föredrag och workshop&lt;/a&gt; under &lt;a href="http://blogg.joakimsunden.se/search/label/Developer%20Summit"&gt;Developer Summit&lt;/a&gt; var vad som fick mig att faktiskt börja skriva enhetstester och använda TDD i legacy-projekt. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/xUnit-Test-Patterns-Refactoring-Addison-Wesley/dp/0131495054/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199096749&amp;amp;sr=1-1"&gt;xUnit Test Patterns: Refactoring Test Code&lt;/a&gt; av Gerard Meszaros. Förutom en avsevärd samling mönster för automatiserade enhetstester innehåller den här boken också en rad "test smells" (jmf Fowlers "Refactoring" ovan) och en vägledning för hur man organiserar sina tester och för olika avvägningar mellan olika mönster (jmf Fowlers "Patterns of Enterprise Application Architecture" ovan). Det är den definitiva guiden till automatiserade enhetstester och därmed en oumbärlig bok för alla utvecklare.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Pair-Programming-Illuminated-Laurie-Williams/dp/0201745763/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199097225&amp;amp;sr=1-1"&gt;Pair Programming Illuminated&lt;/a&gt; av Laurie Williams och Robert Kessler. En heltäckande introduktion till parprogrammering som med stöd i såväl forskningsdata som anekdoter från erfarna utövare berättar om förtjänsterna och fallgroparna i parprogrammering. Boken innehåller också gott om råd för hur man inför parprogrammering i en organisation, hur man (inte) parar ihop olika individer, hur man tar itu med olika problem förknippade med parprogrammering och, sist men inte minst, hur man parprogrammerar.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Test-Driven-Development-Addison-Wesley-Signature/dp/0321146530/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199097508&amp;amp;sr=1-1"&gt;Test Driven Development: By Example&lt;/a&gt; av Kent Beck. Introduktion till testdriven utveckling av mannen som kan sägas ha uppfunnit tekniken (och Extreme Programming). Det är roligt att se hur Kent Beck faktiskt testdriver fram utvecklingen av JUnit och samtidigt använder det han skapar för att automatisera sina tester, men jag kan tyvärr inte säga att det är någon bra introduktion till TDD för nybörjare.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Refactoring-Workbook-Addison-Wesley-Object-Technology/dp/0321109295/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199097848&amp;amp;sr=1-1"&gt;Refactoring Workbook&lt;/a&gt; av William Wake. En bra följeslagare till Fowlers "Refactoring" (se ovan), fylld med olika exempel och övningar. Lämpar sig väl för t.ex. en studiecirkel eller för den som läst Fowlers bok men behöver mer konkreta exempel för att bättre förstå hur man jobbar på det sättet. Boken är också en bra repetition av Fowlers bok eftersom den omformulerar flera motiveringar och code smells samt inför några nya. Bra om goda designprinciper mellan raderna.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Refactoring-Patterns-Addison-Wesley-Signature-Kerievsky/dp/0321213351/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199098110&amp;amp;sr=1-1"&gt;Refactoring to Patterns&lt;/a&gt; av Joshua Kerievsky. Den som lärt sig designmönster genom böcker eller utbildningar blir ofta "pattern happy" och vill tillämpa sin nyvunna kunskap var helst det ser ut att vara möjligt. Resultatet blir ofta en onödigt komplicerad design. Den här boken visar hur det istället bör gå till; den lär dig identifiera problem ("code smells") där designmönster kan vara en bra lösning och visar dig hur du kan refaktorisera din kod till denna lösning.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Continuous-Integration-Improving-Addison-Wesley-Signature/dp/0321336380/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199098448&amp;amp;sr=1-1"&gt;Continuous Integration: Improving Software Quality and Reducing Risk&lt;/a&gt; av Paul Duvall, Steve Matyas och Andrew Glover. En komplett vägledning till &lt;a href="http://martinfowler.com/articles/continuousIntegration.html"&gt;Continuous Integration&lt;/a&gt; med allt från nyttan för olika intressenter till kodexempel för hur man faktiskt sätter ihop hela processen. Gott om råd för olika kodanalysverktyg, notifieringsmekanismer (som &lt;a href="http://www.ambientdevices.com/cat/orb/orborder.html"&gt;Ambient Orb&lt;/a&gt;) och annat som kan användas för att öka nyttan med CI.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Agile-Retrospectives-Making-Teams-Great/dp/0977616649/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199098845&amp;amp;sr=1-1"&gt;Agile Retrospectives: Making Good Teams Great&lt;/a&gt; av Esther Derby och Diana Larsen. Derby och Larsen har omsatt sin omfattande erfarenhet av retrospektiv i ett ramverk och en bok full med olika tekniker och tips för ett lyckat retrospektiv. Jag hade förmånen att deltaga i en hel dags tutorial om Agile Retrospectives med Esther Derby på JAOO; läs mer om den &lt;a href="http://blogg.joakimsunden.se/2007/09/jaoo-dag-0-agile-retrospectives.html"&gt;här&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Pragmatic-Unit-Testing-NUnit-2nd/dp/0977616673/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199099174&amp;amp;sr=1-1"&gt;Pragmatic Unit Testing in C# with NUnit, 2nd edition&lt;/a&gt; av Andrew Hunt, David Thomas och Matt Hargett. Den här boken är en god introduktion till automatiserade enhetstester i C# med att bra fokus på hur och vad man bör testa. Den ger dig allt du behöver för att komma i gång med NUnit och innehåller även en del mer avancerade koncept. Tyvärr har boken ett svagt TDD-fokus och tycks reducera frågan om huruvida testerna ska skrivas först eller sist till en smaksak. Lite överraskande med tanke på att "pragmatiska programmerarna" i andra sammanhang starkt förordar TDD.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Software-Craftsmanship-Imperative-Pete-McBreen/dp/0201733862/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199099643&amp;amp;sr=1-1"&gt;Software Craftsmanship: The New Imperative&lt;/a&gt; av Pete McBreen. McBreens bok är en uppgörelse med tunga processer och synen på mjukvaruutveckling som en industri där utvecklarna är utbytbara kuggar i en process där de mekaniskt implementerar systemanalytikernas ritningar. Hans alternativ är ett system där mjukvaruutveckling erkänns som ett hantverk och där kunskap och erfarenheter traderas från mästare till gesäll till lärling. En sådan utvecklare tar ett stort ansvar för kvalitet och genomförande, men ställer också krav på vilka kunder hon väljer att arbeta med och hur arbetet kan gå till (här bekänner sig McBreen, om än inte uttryckligen, till de agila metoderna). En mycket intressant och tankeväckande bok.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Fit-Developing-Software-Framework-Integrated/dp/0321269349/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199100220&amp;amp;sr=1-1"&gt;Fit for Developing Software: Framework for Integrated Tests&lt;/a&gt; av Rick Mugridge och Ward Cunningham. Jag har länge sneglat på &lt;a href="http://fit.c2.com/"&gt;Fit&lt;/a&gt; men aldrig kommit till skott eftersom jag inte jobbat i projekt där det varit möjligt/lägligt att automatisera acceptanstesterna. Kanske är det just det sistnämnda som gjort mig allt mer övertygad om att detta är vägen man måste gå, om än inte nödvändigtvis med just Fit. Efter att ha läst den här boken och tittat lite på Fit och Fitnesse kommer jag emellertid att slåss med näbbar och klor för att få använda det i nästa projekt. Fit är ett utmärkt sätt att involvera verksamhetspersoner i test- och utvecklingsarbete och därigenom få fram ett &lt;a href="http://blogg.joakimsunden.se/2007/03/jimmy-nilsson-hos-avega-eller-svenska.html"&gt;allestädes närvarande språk&lt;/a&gt; ("ubiquitous language") och en domänmodell (se &lt;a href="http://blogg.joakimsunden.se/2007/01/applying-domain-driven-design-and.html"&gt;DDD&lt;/a&gt;). Rekommenderas varmt, särskilt för dig som är intresserad av agil utveckling och DDD.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Implementation-Patterns-Addison-Wesley-Signature-Kent/dp/0321413091/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199100776&amp;amp;sr=1-1"&gt;Implementation Patterns&lt;/a&gt; av Kent Beck. Jag hade höga förväntningar på den här boken och måste tyvärr säga att jag blev en smula besviken. Vissa av bokens implementationsmönster är mycket banala, t.ex. mönstret "Class" som säger att det är bra att placera data och beteende som hör ihop i en klass. På andra ställen ges mer komplicerade mönster mycket fåordiga förklaringar som gör det svårt att följa med i Becks tankegångar. Denna ojämnhet gör det svårt att bestämma en lämplig publik för boken: riktar den sig till nybörjare eller till mer erfarna utvecklare? Ingen av dem skulle jag säga. (När jag skulle klistra in länken för denna bok från Amazon.com ser jag att en recensent fångat samma känska som jag på ett &lt;a href="http://www.amazon.com/review/R38L59DV7Q8SWK/ref=cm_cr_rdp_perm"&gt;mycket bra sätt&lt;/a&gt;.) Bokens största värde för mig ligger i att man i vissa mönster och motiveringar ändå får en inblick i filosofin bakom vissa goda designprinciper och en inblick i hur en riktigt duktig objektorienterad utvecklare tänker.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Practices-Agile-Developer-Pragmatic-Programmers/dp/097451408X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199101390&amp;amp;sr=1-1"&gt;Practices of an Agile Developer: Working in the Real World&lt;/a&gt; av Venkat Subramaniam och Andy Hunt. Bra samling agila praktiker och principer, kärnfullt och bra sammanfattade i en rad korta kapitel. Mer för den agile nybörjaren än för den som redan praktiserat korta iterationer, Continuous Integration, TDD, o.v.s. i några år.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0321278658/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199101475&amp;amp;sr=1-1"&gt;Extreme Programming Explained: Embrace Change (2nd edition)&lt;/a&gt; av Kent Beck och Cynthia Andres. Becks moderna klassiker i ny och helt omarbetad utgåva. En bra introduktion till agil utveckling och mycket bra om de principer och värderingar som vägleder många som fastnat för agila metoder. Gott om värdefulla tips och praktiker även för den som inte vill ta till sig allt i XP.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Managing-Agile-Projects-Kevin-Aguanno/dp/1895186110/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199101553&amp;amp;sr=1-2"&gt;Managing Agile Projects&lt;/a&gt; av Kevin J. Aguano (editor). Intressant, om än något spretig, sammanställning av olika agila metoder ur framförallt ett "icke-utvecklarperspektiv", vilket inte på något sätt betyder att det är ointressant för utvecklare. En intressant del är det XP-kritiska kapitlet i slutet av boken, som även om det i sin tur stött på stark kritik är tankeväckande då även de agila metoderna naturligtvis behöver utmanas även i "de egna leden".&lt;br /&gt;&lt;/p&gt;&lt;h5&gt;Föredrag och konferenser&lt;/h5&gt;&lt;p&gt;Jag har tidigare rapporterat från Developer Summit och JAOO. När det gäller den sistnämnda har jag bara haft tid att ta upp de första dagarna så jag tänkte i korthet nämna några höjdpunkter från resten av dagarna här.&lt;/p&gt;&lt;p&gt;&lt;a href="http://jaoo.dk/aarhus2007/conference/"&gt;JAOO, 23-28 september i Århus, Danmark&lt;/a&gt;. Jag har tidigare rapporterat från de första dagarna på JAOO, fram till och med tisdag förmiddag, så jag tänkte här i korthet nämna några av höjdpunkterna från resten av konferensen.&lt;/p&gt;&lt;p&gt;Tisdag eftermiddag bjöd på en av de presentationer jag mest sett fram emot, Eric Evans om "Strategic Design: Making Models Work in Large Projects". Evans presentation infriade mina förväntningar. Jag blev omedelbart mycket förtjust i hans lågmälda och eftertänksamma framtoning och sätt att presentera. Han framstår verkligen som en underfundig och djupsinnig man. Jag hade även förmånen att åtnjuta en hel dags tutorial med Evans under rubriken "Domain Driven Development" på JAOOs sista dag (dag 5, fredag). Tyvärr överlappade denna tutorial delvis föredraget, även om han gick mer på djupet i dessa frågor under heldagen. Eric Evans förtjänar förstås en egen bloggpost, men tills vidare kan jag inte annat än starkt rekommendera någon av hans presentationer eller kurser.&lt;/p&gt;&lt;p&gt;Under tisdagen bevittnade jag även upprinnelsen till vad som skulle bli en stor "&lt;a href="http://community.ative.dk/blogs/ative/archive/2007/09/28/the-tdd-controversy-jaoo-2007.aspx"&gt;konferens-snackis&lt;/a&gt;" - Jim O. Copliens påhopp på TDD: "[it] will deteriorate your design". Dagen avslutades med en intressant analys av hur LINQ kan användas för DDD, förtjänstfullt utförd av Jimmy Nilsson och Kim Harding Christensen. De viktigaste slutsatserna var att LINQ to SQL är ett steg i rätt riktning och troligtvis kommer att göra att fler får upp ögonen för DDD, men presentatörerna saknade stöd för Value Objects.&lt;/p&gt;&lt;p&gt;Dag 3, onsdagen, spenderade jag till stor del på Bob Martins spår "Professional Developer" som innehöll många intressanta presentationer, bl.a. den alltid lika underhållande Kevlin Henney ("With Economy and Elegance") och Michael Feathers ("The Ethics of Error-Prevention"), en av mina favoritförfattare (se ovan). Jag hann också med en intressant case study från Guardian.co.uk där ThoughtWorks &lt;a href="http://blogg.joakimsunden.se/2007/06/erik-doernenburg-simple-is-too-simple.html"&gt;Erik Dörnenburg&lt;/a&gt; varit involverad i ett intressant projekt som inbegrep bl.a. DDD, Spring, AJAX och AOP. Dagen avslutades med två paneldiskussioner: en med den föga utmanande frågan "Does Architecture Quality Matter?" och en avslutande paneldiskussion under ledning av Martin Fowler där Erik Meijer, Eric Evans, Erik Doernenburg ("the three Eriks") och Esther Derby fick välja var sin höjdpunkt från JAOO att samtal vid. Av någon anledning kom mycket av samtalet att kretsa kring JavaScript, kanske lite oväntat med tanke på deltagarna.&lt;/p&gt;&lt;p&gt;Den fjärde dagen (torsdag) ägnade jag åt en hel dags tutorial med Kevlin Henney och Frank Buschmann: "Pattern-Oriented Software Architecture". Förvisso intressant, men på en lite väl abstrakt och hög nivå för att ge mig något mer direkt användbart. Jag kommer emellertid definitivt att läsa &lt;a href="http://www.amazon.com/Pattern-Oriented-Software-Architecture-Distributed-Computing/dp/0470059028/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1199136832&amp;amp;sr=8-1"&gt;Henneys och Buschmanns bok&lt;/a&gt; och de andra i &lt;a href="http://www.amazon.com/s/ref=nb_ss_gw/002-7467334-1064036?url=search-alias%3Daps&amp;amp;field-keywords=patterns+of+software+architecture"&gt;POSA-serien&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Femte dagen deltog jag som sagt i en tutorial med Eric Evans om "Domain Driven Development".&lt;/p&gt;&lt;p&gt;Förutom själva konferensen var det en trevlig fest på måndagen och ett lopp man kunde delta i under tisdageftermiddagen med efterföljande jazzkväll där vem som ville kunde gå upp och spela. Bland annat Roy Osherove (egenkomponerat) och Bob Martin (Jonathan Coultons "&lt;a href="http://www.jonathancoulton.com/2006/04/14/thing-a-week-29-code-monkey/"&gt;Code Monkey&lt;/a&gt;") gjorde framträdanden.&lt;/p&gt;&lt;p&gt;En rolig detalj som Johan Lindfors &lt;a href="http://blogs.msdn.com/johanl/archive/2007/09/27/jaoo-inte-vad-jag-hade-v-ntat-mig.aspx"&gt;redan bloggat om&lt;/a&gt; är att han, Senior Developer Evangelist för Microsoft i Sverige, fick en lite Duke (Javas maskot) rakt i huvudet när Matt Thompson, som leder Suns "technology evangelism efforts worldwide" slängde ut dessa under sin keynoye på tisdagkvällen.&lt;/p&gt;&lt;p&gt;Något som verkligen hörde till höjdpunkterna på JAOO var min torsdagkväll. Efter dagens tutorial på SAS Scandinavian Center stötte jag i hotellbaren ihop med Bob Martin och en trevlig spanjorska som var volontär på konferensen. Efter ett par timmars drinkintag gick vi tillsammans med ytterligare en volontär vidare till uteserveringen på en italiensk restaurang som jag rekommenderat. Precis när vi skulle beställa mat kom plötsligt Michael Feathers gående och beslutade sig för att göra oss sällskap (han arbetar, från Florida, på Bob Martins Chicago-baserade företag &lt;a href="http://www.objectmentor.com/"&gt;ObjectMentor&lt;/a&gt;). Efter middagen vidtog en pubrunda där så småningom även Erik Dörnenburg anslut. Jag bombarderade dem naturligtvis med frågor under hela kvällen och försökte lära mig så mycket som möjligt från dessa erfarna utvecklare. Dessutom hade vi väldigt roligt också...&lt;/p&gt;&lt;p&gt;"How hard can it be?" med Andy Hunt. Valtech bjöd in till ett mycket underhållande föredrag med pragmatiska programmeraren Andy Hunt. Han hade precis varit på &lt;a href="http://www.oredev.se/"&gt;Öredev&lt;/a&gt; och passade på att dra samma presentation i Stockholm. Jag fick tyvärr aldrig chansen att prata med Andy under minglet efteråt, jag hade gärna frågat honom om de stora likheterna mellan hans föredrag och Erik Dörnenburgs och Dan Norths "&lt;a href="http://blogg.joakimsunden.se/2007/06/erik-doernenburg-simple-is-too-simple.html"&gt;How Simple Is Too Simple?"&lt;/a&gt; - bara en slump därför att de verkar inom samma område eller har de sneglat på varandra?&lt;/p&gt;&lt;p&gt;"SOA &amp;amp; Web Services" med Ole Matzura och Niclas Reimertz, &lt;a href="http://www.eviware.com/"&gt;Eviware&lt;/a&gt;. Det här är killarna bakom Open Source-verktyget soapUI. Det var ett intressant föredrag som däremot befästa mina fördomar (?) om att Java-världen i många sammanhang har en mindre mogen syn på vad SOA innebär som mestadels handlar om antingen web services och SOAP eller middleware som t.ex. Enterprise Service Bus (ESB).&lt;/p&gt;&lt;p&gt;"DDD, O/RM och lite TDD" med Jimmy Nilsson, factor10,  som du kan läsa mer om &lt;a href="http://blogg.joakimsunden.se/2007/03/jimmy-nilsson-hos-avega-eller-svenska.html"&gt;här&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;"Dependency Injection och Aspektorienterad programmering (AOP)" med Niclas Nilsson, factor10, som jag tidigare skrivit om &lt;a href="http://blogg.joakimsunden.se/2007/05/niclas-nilsson-hos-avega-dependency.html"&gt;här&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;"Scrum i praktiken" med &lt;a href="http://www.crisp.se/henrik.kniberg/"&gt;Henrik Kniberg&lt;/a&gt;, Crisp, som skrivit gratisboken "&lt;a href="http://www.infoq.com/minibooks/scrum-xp-from-the-trenches"&gt;Scrum and XP from the Trenches&lt;/a&gt;". Bra och hands-on om Scrum och XP. Rekommenderas.&lt;/p&gt;&lt;p&gt;"Windows Workflow Foundation" med Fredrik Gunne, f.d. Microsoft, som du kan läsa om &lt;a href="http://blogg.joakimsunden.se/2007/05/fredrik-gunne-hos-avega-windows.html"&gt;här&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;"Pragmatic SOA" med Objectware (halvdag med olika presentatörer). Peter Tallungs nya bolag verkar onekligen intressant. På denna halvdag på Berns visade de ett moget SOA-tänk och väldigt intressanta implementationer på .NET-plattformen som såg ut att hålla en kvalitet man onekligen inte är bortskämd med: fullt med enhetstester och genomtänkt domänmodell. Och detta i en mycket väl genomförd SOA-lösning. Verkligen intressant och jag ser fram emot fler seminarier från Objectware.&lt;/p&gt;&lt;p&gt;"TDD i praktiken" med Joakim Holm som jag tidigare berättat om &lt;a href="http://blogg.joakimsunden.se/2007/06/joakim-holm-hos-avega-tdd-i-praktiken.html"&gt;här&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;"Learning from Legacy" med Andreas Brink, factor 10, som på mitt initiativ besökte Avega. Innehållet var ungefär &lt;a href="http://blogg.joakimsunden.se/2007/06/mer-frn-developer-summit.html"&gt;detsamma som på Developer Summit&lt;/a&gt; men lite mer och ännu mer diskussion.&lt;/p&gt;&lt;p&gt;"Spelutveckling på DICE" med Henrik Karlsson, DICE. Otroligt intressant inblick i spelprogrammeringens heta värld. Henrik Karlsson berättade ingående om nya Battlefield och visade i en utvecklarversion av spelet för X-Box hur det han pratade om i teorin gestaltades i praktiken. Hur konstigt det än kan låta är jag dock relativt ointresserad av spelutveckling på utvecklarnivå - alldeles för mycket lågnivåprogrammering för min smak - jag föredrar faktiskt utveckling av affärsapplikationer. Men jag beundrar det arbete andra lägger ned; jag kan knappt förstå att de någonsin blir klara med ett spel med tanke på hur många detaljer det är att tänka på.&lt;/p&gt;&lt;p&gt;"MSF 4 Agile" med Michael Herkommer, Inexor. Jag var med och arrangerade en &lt;a href="http://www.swenug.com/"&gt;SweNug&lt;/a&gt;-sammankomst på Avega där Herkommer höll en intressant och engagerad presentation av hur man kan använda MSF 4 Agile med Team Foundation Server och Visual Studio Team System.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Det är allt jag hinner med just nu. Nu ska jag gå och ta fram champagneflaskan och göra mig redo för tolvslaget. Och för ett nytt år fyllt av nya böcker, föredrag och konferenser, spännande uppdrag, roliga hobbyprojekt och en hel del bloggande. Och föräldraledighet förstås...&lt;/p&gt;&lt;p&gt;Gott nytt år!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-898924837349048044?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/898924837349048044/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=898924837349048044' title='6 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/898924837349048044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/898924837349048044'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/12/summering-av-det-gngna-ret.html' title='Summering av det gångna året'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2141186020588927905</id><published>2007-11-05T22:36:00.001+01:00</published><updated>2007-11-05T22:36:53.933+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Avega'/><title type='text'>Välkommen till Avega!</title><content type='html'>&lt;p&gt;Sedan några dagar tillbaka kan du bli delägare i Avega: den 1 november börsintroducerades &lt;a href="http://www.avega.se/"&gt;Avega&lt;/a&gt; på Stockholmsbörsens First North. Samma dag kunde man läsa i ett pressmeddelande&amp;nbsp;på Avegas nya webbsajt att vi startar ett nytt dotterbolag inom verksamhetsområdet Business Intelligence. För knappt en månad sedan startade vi ett&amp;nbsp;annat dotterbolag, &lt;a href="http://www.qurio.se/"&gt;Qurio AB&lt;/a&gt;, med specialistkonsulter inom SAP. Avega är alltså inne i en mycket spännande och expansiv fas just nu&amp;nbsp;och&amp;nbsp;jag är väldigt nyfiken på att få lära mig mer om våra nya verksamhetsområden. De nya bolagen kommer att vara ganska fristående från Avega, ha egna kontor och så vidare, något jag tror kan vara positivt för fortsatt fokus på att vara ledande inom systemarkitektur, integration och IT-ledning för "Avega Classic".&lt;/p&gt; &lt;p&gt;Nu kan vem som helst ta del av den spännande utvecklingen genom att bli aktieägare i Avega. Är du dessutom en erfaren konsult, kanske specialist inom något av våra verksamhesområden, kan du förstås&amp;nbsp;ta en än mer aktiv del av utvecklingen genom att arbeta på Avega. Om du vill veta mer om detta eller bara undrar hur det är att arbeta på vårt företag kan du alltid höra av dig till mig på &lt;strong&gt;blogg&lt;/strong&gt; snabel-a &lt;strong&gt;joakimsunden&lt;/strong&gt; punkt &lt;strong&gt;se&lt;/strong&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2141186020588927905?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2141186020588927905/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2141186020588927905' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2141186020588927905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2141186020588927905'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/11/vlkommen-till-avega.html' title='Välkommen till Avega!'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-7142307070501146053</id><published>2007-11-05T21:38:00.001+01:00</published><updated>2007-11-05T21:39:45.502+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bloggtips'/><category scheme='http://www.blogger.com/atom/ns#' term='JAOO2007'/><title type='text'>JAOO, dag 2: Castle ActiveRecord med Ayende</title><content type='html'>&lt;p&gt;Efter &lt;a href="http://blogg.joakimsunden.se/2007/10/jaoo-dag-2-democratizing-cloud-erik.html"&gt;Erik Meijers keynote&lt;/a&gt; kändes det på något sätt&amp;nbsp;ännu mer som dagen efter festen och den korta introduktionen på spåret Architecture Quality väckte inte mitt intresse tillräckligt för att jag skulle vilja stanna kvar på det spåret. Jag tänkte att något mer handgripligt skulle få i gång mig och bestämde mig för att istället besöka spåret "Enterprise Application Frameworks" och presentationen "Painless Persistance with Castle ActiveRecord". &lt;a href="http://www.castleproject.org/activerecord/"&gt;Castle ActiveRecord&lt;/a&gt; är en NHibernate-baserad implementation av &lt;a href="http://en.wikipedia.org/wiki/Active_record"&gt;ActiveRecord&lt;/a&gt; pattern för .NET. ActiveRecord är ett vanligt designmönster när man jobbar med &lt;a href="http://blogg.joakimsunden.se/2006/05/or-mapping-vad-r-det.html"&gt;O/R-mappers&lt;/a&gt; och definieras på följande sätt i Martin Fowlers &lt;a href="http://martinfowler.com/books.html#eaa"&gt;Patterns of Enterprise Application Architecture&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Den stora fördelen med att använda Castle ActiveRecord, istället för bara NHibernate, är att det är betydligt enklare att komma igång, du får ytterligare en abstraktionsnivå som gör att du slipper mappningsschemat i NHibernate och annan komplexitet. Castle ActiveRecord låter dig enkelt via attribut&amp;nbsp;specificera vilka objekt och egenskaper som ska mappas och hur de ska mappas. Det finns även en generell basklass man kan ärva från och på så sätt få en hel del standardoperationer, t.ex. CRUD, gratis. Priset du betalar är förstås mindre flexibilitet i mappningen, men om du inte har en mycket komplicerad databasstruktur eller särskilda behov är sannolikheten stor att du inte behöver denna flexibilitet.&lt;/p&gt; &lt;p&gt;Presentatörerna Hamilton Verrissimo och Oren Eini var inga namn jag direkt kände igen, men det visade sig snart att Oren Eini i bloggvärlden är mer känd under namnet &lt;a href="http://www.ayende.com/Blog/"&gt;Ayende Rahien&lt;/a&gt; vars blogg jag följt till och från under en längre tid. Att jag gjort det till och från beror inte på ojämn kvalitet utan på att Ayende är så produktiv att det ibland har varit svårt att hinna med att läsa alla hans inlägg. Förutom denna bloggproduktivitet är han alltså medarbetare i Castle ActiveRecord, men också&amp;nbsp;upphovsman till&amp;nbsp;NHibernate Analyzer, mockbiblioteket Rhino Mocks och&amp;nbsp;MVC-ramverket MonoRail (jmf Ruby On Rails). Han är dessutom medarbetare/bidragsgivare i NHibernate, Python-liknande CLI-språket Boo m.fl. På sin blogg skriver han mycket om dessa ämnen, samt om TDD, DDD, agil utveckling, Open Source för .NET och mycket annat intressant. Ayende är också konsult på israeliska företaget We! och på JAOO deltog han i totalt fyra presentationer. En ganska produktiv person med andra ord. Lägg till detta att han är 26 år gammal och för blott två år sedan muckade från en fyra år lång isrealisk värnplikt!&lt;/p&gt; &lt;p&gt;För den som vill veta mer om Castle ActiveRecord och alla andra spännande "Open Source"-projekt Ayende/Oren är involverad i kan jag varmt rekommendera &lt;a href="http://www.ayende.com/Blog/"&gt;hans blogg&lt;/a&gt; som jag i och med denna presentation lägger till i min &lt;a href="http://blogg.joakimsunden.se/search/label/Bloggtips"&gt;blogglista&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Även Hamilton Verrissimo har ett blogalias, &lt;a href="http://hammett.castleproject.org/"&gt;Hammett&lt;/a&gt;, och är liksom Ayende djupt engagerad i Open Source för .NET, inte minst genom &lt;a href="http://www.castleproject.org/"&gt;Castle Project&lt;/a&gt;. Detta projekt är en samling verktyg, där bland annat Castle ActiveRecord och MonoRail ingår, som ska underlätta utveckling av enterprise- och webbapplikationer.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-7142307070501146053?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/7142307070501146053/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=7142307070501146053' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7142307070501146053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7142307070501146053'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/11/jaoo-dag-2-castle-activerecord-med.html' title='JAOO, dag 2: Castle ActiveRecord med Ayende'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-7186340864840675472</id><published>2007-10-18T23:18:00.001+02:00</published><updated>2007-10-18T23:19:26.886+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAOO2007'/><title type='text'>JAOO, dag 2: Democratizing the Cloud (Erik Meijer)</title><content type='html'>&lt;p&gt;Erik Meijer är arkitekt på Microsofts SQL Server Division och jobbar där med dataintegration i programmeringsspråk tillsammans med språkdesignteamen för Visual Basic och C#. På JAOO fick han den otacksamma uppgiften att väcka deltagarna efter måndagkvällens fest. Man skulle kunna tro att han psykedeliska t-shirt - den innehöll förmodligen alla färger människan kan uppfatta och sedan ytterligare några - var ett knep han tog till för att lyckas, men han verkar jämt gå runt i den, så jag vet inte riktigt. Nåväl, tröjan till trots lyckades han inte riktigt med sin uppgift; det var svårt att se den röda tråden i hans keynote och med tanke på att hinkarna vid utgången innehöll många röda och gula lappar verkar det inte gälla bara mig (på JAOO utvärderar man sessionerna direkt vid utgången genom att lägga en grön, gul eller röd lapp i en hink).&lt;/p&gt; &lt;p&gt;Föredragets titel var "Democratizing the Cloud" och redan där verkade han tappa många åhörare som tydligen aldrig sett skisser där molnet används för att illustrera Internet. Den utmaning Meijer ville ta itu med var hur man löser "the Multi-Tier Application Problem"; hur kan vi, i en allt mer distribuerad och serviceorienterad värld,&amp;nbsp;underlätta utvecklingen av distribuerade applikationer? Ja, inte genom att uppfinna något nytt i alla fall ("Stop inventing stuff!"). Vi bör istället göra det möjligt att återanvända gamla beprövade metoder: "stretch the current single-tier client applications design patterns to cover the Cloud". Det innebär att vi vill avvakta med oåterkalleliga beslut om våra distribuerade applikationer till sista möjliga anvsvarsfulla ögonblick (jmf &lt;a href="http://en.wikipedia.org/wiki/You_Ain't_Gonna_Need_It"&gt;YAGNI&lt;/a&gt;). Om Meijer får som han vill utvecklar vi snart våra applikationer utan en tanke på om de ska vara distribuerade eller ej och om behovet uppstår kan vi relativt enkelt genom successiva, verktygsstödda refaktoriseringar partitionera om den till en distribuerad flerskiktad applikation.&lt;/p&gt; &lt;p&gt;Det ska dessutom gå att köra applikationerna på vilken server eller klient som helst, utan att behöva ladda ned annat än applikationskoden. Ett sätt att åstadkomma detta är att utnyttja JavaScript. Meijers team har implementerat en inbäddning av MSIL i JavaScript för just detta syfte. Han visade bland annat hur de med hjälp av JavaScript och CSS gjort det möjligt att rendera 3D-grafik i alla webbläsare med stöd för JavaScript.&lt;/p&gt; &lt;p&gt;Den teknik Meijer talade om är inte alls långt borta, det är nämligen &lt;a href="http://blogg.joakimsunden.se/2006/02/linq-den-felande-lnken-mellan-oo-och.html"&gt;LINQ&lt;/a&gt; 2.0. Det verkar onekligen intressant och Meijer &amp;amp; Co har säkert tänkt igenom modellen noga. Jag kan dock inte skaka av mig min skepsis till själva grundtanken:&amp;nbsp;är det verkligen klokt att använda samma programmeringsmodell för distribuerade applikationer som för ickedistribuerade? Abstraherar man inte bort en skillnad som det i själva verket&amp;nbsp;ofta är högst relevant att hänsyn till? (Se t.ex.&amp;nbsp;Martin Fowlers &lt;a href="http://www.ddj.com/architect/184414966"&gt;First Law of Distributed Object Design&lt;/a&gt;.)&amp;nbsp;Det ska bli intressant att se om och hur Microsoft besvarar dessa frågor i LINQ 2.0.&lt;/p&gt; &lt;p&gt;&lt;a href="http://research.microsoft.com/~emeijer/"&gt;Meijers webbplats&lt;/a&gt; har en hel del intressant material om LINQ 2.0 och de ämnen han berörde i sin keynote. En bra introduktion för den som vill veta mer är just &lt;a href="http://research.microsoft.com/~emeijer/Papers/LINQ20.pdf"&gt;"LINQ 2.0: Democratizing the Cloud"&lt;/a&gt;&amp;nbsp;(PDF).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-7186340864840675472?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/7186340864840675472/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=7186340864840675472' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7186340864840675472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7186340864840675472'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/10/jaoo-dag-2-democratizing-cloud-erik.html' title='JAOO, dag 2: Democratizing the Cloud (Erik Meijer)'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-1819006371071514178</id><published>2007-10-01T23:08:00.001+02:00</published><updated>2007-10-01T23:09:09.167+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAOO2007'/><title type='text'>JAOO, dag 1: Domain Specific Languages, Database Testing, Beautiful Code and Debugging</title><content type='html'>&lt;p&gt;Det första spåret jag besökte på JAOO var "The Programming Experience". Sessionerna i detta spår handlade om hur vi kan ta oss an de stora utmaningar vi ser i dag: komplexa domäner, Multi Core CPUs, utvecklarproduktivitet och allt större och mer komplexa system. Det var i alla fall de utmaningar spårets värd Markus Völter såg, men det kan också ha att göra med att sessionerna i hans spår presenterade lösningar på just dessa problem.&lt;/p&gt; &lt;p&gt;Först ut var &lt;strong&gt;Charles Simonyi&lt;/strong&gt;, mannen som gav oss Word, Excel och ungersk notation (strName, intValue etc). Simonyi har nu företaget Intentional Software Corporation som tillverkar en mjukvara, Intentional Domain Workbench, som låter dig tillverka Domain Specific Languages (DSL). Domänspecifika språk är med &lt;a href="http://martinfowler.com/articles/languageWorkbench.html"&gt;Martin Fowlers ord&lt;/a&gt; "a limited form of computer language designed for a specific class of problems". För en del handlar dessa språk om att realisera den urgamla drömmen om att domänexperterna själva ska kunna utveckla sina egna lösningar. Redan COBOL sågs av somliga som en revolution som skulle göra programmerare överflödiga eftersom man nu kunde använda ett naturligt språk för att instruera sin datamaskin. För andra handlar det snarare om att domänexperter och mjukvaruteam ska prata samma språk (jämför Domain-Driven Design) och man är på det klara med att det fortfarande är programmerarna som kommer att tillämpa språket i fråga.&lt;/p&gt; &lt;p&gt;Man skulle kunna säga att Intentional Domain Workbench hamnar någonstans mittemellan dessa. Rubriken på Simonyis session var &lt;strong&gt;"Democratizing Software Creation"&lt;/strong&gt; och tanken är någonstans att domänexperterna har sin representation av koden och utvecklarna en annan (fortfarande kod). Med hjälp av Intentional Domain Workbench skapar utvecklarna ett domänspecifikt språk tillsammans med domänexperterna och i verktygets "projectional multi-view editing" kan man sedan representera den producerade domänkoden på olika sätt, anpassade efter rätt publik och sammanhang. Istället för WYSIWYG får vi WYNISWYG - What You &lt;em&gt;Need&lt;/em&gt; Is What You Get.&lt;/p&gt; &lt;p&gt;Tycker du att det låter luddigt? Ja, det kan bero på att det var lite för abstrakt för min smak; inte ens när de visade verktyget greppade jag riktigt hur det fungerade... Men om du tycker det låter intressant kan du säkert läsa mer på &lt;a href="http://www.intentionalsoftware.com/"&gt;Intentionals webbplats&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Simonyi höll för övrigt en party keynote som avslutning på dagen, innan festen skulle ta vid. Under en timmes tid&amp;nbsp;visade han bilder från och pratade om sin senaste semesterresa. Låter det ointressant? Det kunde det kanske ha varit om det inte var så att hans senaste resa gick till en rymdstation! I april i år blev Charles Simonyi den femte civilpersonen i rymden någonsin. Det var faktiskt riktigt spännande att höra om allt från de medicinska undersökningarna hos ett 50-tal olika läkare till de åtta månader långa förberedelserna till livet på en rymdstation. Simonyi var mycket nöjd med sin resa och kan varmt rekommendera rymdsemester för den som har råd. Om man tycker det är för dyrt kan man alltid göra som han gjorde innan rymdresan&amp;nbsp;och bjuda in sina tjugo närmaste vänner&amp;nbsp;till tyngdlöshet på&amp;nbsp;en &lt;a href="http://en.wikipedia.org/wiki/Vomit_comet"&gt;"parabolic flight"&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Min nästa session var &lt;strong&gt;"What Makes&amp;nbsp;Code Beautiful?"&lt;/strong&gt; med &lt;strong&gt;Marcel Molina Jr&lt;/strong&gt;, en litteraturstuderande med smak för vackert språk som sadlat om till programmerare. Det lockade så klart mig som gjort en liknande resa (från idé- och lärdomshistoria till programmering ungefär). Molina tyckte länge att det var viktigt att skriva vacker kod men hade ingen teoretisk grund för att rättfärdiga sin inställning. Han studerade därför olika filosofers och tänkares tankar om skönhet och fastnade för Thomas av Aquinos tre utgångspunkter: proportion, integritet och tydlighet. Molina menar att dessa tre måttstockar fungerar som ett system av "checks and balances" för att utvärdera vad som är vackert; man kanske kan hävda en av dem framför de andra från fall till fall, men alla tre bitar måste finnas på plats för att vi ska uppleva något som vackert.&lt;/p&gt; &lt;p&gt;Molina visade sedan exempel på Ruby-kod som i varierande grad uppfyllde hans kriterier. Det var intressanta resonemang, men jag tycker inte att han nådde riktigt ända fram. För mig handlar kodens skönhet om hur ändamålsenlig koden är och då handlar det uteslutande om fungerande kod som är tydlig. "Fungerande" handlar förvisso om integritet och jag föredrar också att uttrycka lösningarna i så lite kod som möjligt (proportioner), men då är det snarare så att dessa principer tjänar den övergripande - den om tydlighet. Molina ger oss i alla fall verktyg att diskutera varför vi tycker viss kod är vacker och annan inte. Den efterföljande diskussionen var också intressant med postmodern kritik av Molinas klassiska skönhetsideal, resonemang kring symmetri som skönhetskriterum med mera.&lt;/p&gt; &lt;p&gt;Senare under dagen besökte jag en session med rubriken &lt;strong&gt;"Beautiful debugging"&lt;/strong&gt; med professor &lt;strong&gt;Andreas Zeller&lt;/strong&gt; från Saarland. Han hade en något annan utgångspunkt än Molina för vad som är vackert när det kommer till debugging. Zeller tycker nämligen att den vackraste debuggingen är ingen debugging alls och slog ett slag för automatisk debugging. I korthet kan man något förenklat&amp;nbsp;säga att han skapat ett program som tar kod med en bugg och kör alla tänkbara varianter av koden, d.v.s. tar bort en rad här och en rad där till dess att samma bugg upptäcks och programmet kan spotta ut vad skillnaden var. Något som imponerade var att hans handledare hade påstått att det var omöjligt och att programmet i slutändan var mindre än en sida!&lt;/p&gt; &lt;p&gt;Zeller har också bedrivit en hel del forskning kring debugging och givit ut en bok med titeln &lt;a href="http://www.whyprogramsfail.com/"&gt;"Why Programs Fail: A Guide to Systematic Debugging"&lt;/a&gt;. Hur uppstår buggar? Några av Zellers upptäckter&amp;nbsp;överraskar vid en första anblick. Det visar sig nämligen att buggdensitet korrelerar med utvecklarerfarenhet och test coverage, d.v.s. kod skriven av mer erfarna utvecklare och kod omgiven av flest tester har större antal buggar än kod som skrivits av mindre erfarna utvecklare och kod som omges av färre tester. Det handlar dock troligtvis om omvänd kasualitet: erfarna utvecklare får svårare uppgifter och svår kod omges av extra många tester.&lt;/p&gt; &lt;p&gt;Dessa forskningsresultat är inte bara underhållande, de kan ha stor praktisk nytta också. Om man kan integrera mätningar av detta slag i framtida utvecklingsmiljöer kan man till exempel få varningar om vilka delar av koden eller vilken sorts konstruktioner som&amp;nbsp;är buggbenägna. Varningar som dessutom är anpassade till det egna företagets eller projektets historik.&lt;/p&gt; &lt;p&gt;Zellers presentation hade ett oväntat innehåll, var tankeväckande och levererades dessutom på ett inlevelsefullt och roligt sätt. Det var helt klart en av konferensens stora överraskningar för min del.&lt;/p&gt; &lt;p&gt;Om man någon gång har frågat sig hur man effektivt kan enhetstesta, eller snarare integrationstesta, databaser i .NET Framework är sannolikheten stor att man förr eller senare hamnat på &lt;strong&gt;Roy Osheroves&lt;/strong&gt; blogg &lt;a href="http://weblogs.asp.net/rosherove/"&gt;ISerializable.com&lt;/a&gt;. Osherove har länge bloggat om olika tekniker för databastestning och under rubriken &lt;strong&gt;"Techniques for testing data access code"&lt;/strong&gt; sammanfattade han de olika tekniker som står till buds för .NET-utvecklaren.&lt;/p&gt; &lt;p&gt;Problemen med enhetstester av databaser är flera. Ett problem är att det tar betydligt längre tid att testa en metod som läser eller skriver i databasen, ofta upp till femtio till hundra gånger så lång tid. När det börjar bli många tester kommer man inte att vilja eller kunna köra dem tillräckligt ofta. Ett annat problem är att testerna påverkar databasen så att de inte kan återupprepas med exakt samma resultat utan att man t.ex. manuellt återställer data inför varje testomgång. Antag att man till exempel vill testa en rad metoder som raderar rader ur databasen - det kan vara svårt att göra mer än en gång utan att databasen återställts däremellan. Ytterligare ett problem är att om metoderna man testar inte enbart utför dataaccess utan också annan logik, kan man inte separera testet av databasen från testet av den andra logiken och det kan då bli problematiskt att byta implementation samtidigt som testerna hålls intakta.&lt;/p&gt; &lt;p&gt;Av dessa skäl förespråkar många att man ersätter databasen med &lt;a href="http://en.wikipedia.org/wiki/Mock_object"&gt;Mock-objekt&lt;/a&gt; eller skapar en Fake, t.ex. en minnesdatabas som implementerar samma interface men lagrar och hämtar data från exempelvis Hashtables. Osherove tycker inte att detta angrepssätt är en bra idé eftersom man då inte testar själva databaslogiken, den som finns i nycklar, index, integritetsregler, triggers och så vidare. Om man använder en Fake eller en Mock måste man i så fall skriva särskilda tester för att testa databaslogiken och det är svårt att hitta bra verktyg för detta.&lt;/p&gt; &lt;p&gt;Osheroves alternativ är att man istället lyfter ut databastesterna från sitt enhetstestprojekt och istället placerar dem bland integrationstesterna, som normalt inte körs lika regelbundet, och använder någon sorts rollback av databasens data. Den smidigaste lösningen för dig som använder .NET Framework 2.0 eller senare är att starta ett TransactionScope inför varje test mot databasen och sedan göra en Rollback efter varje test. Det finns dock hopp även för dem som jobbar med tidigare versioner av ramverket.&amp;nbsp;Mer detaljer finns förstås&amp;nbsp;på &lt;a href="http://weblogs.asp.net/rosherove/"&gt;Osheroves blogg&lt;/a&gt;. Osherove var en ganska rolig presentatör och avslutade sin session med sång och gitarrspel&amp;nbsp;i form av&amp;nbsp;en cover på Simon &amp;amp; Garfunkels "The Sound of Silence" där han skrivit om texten så att den handlade om databaser ("Hello DB my old friend") och tålamod med dem ("It's time for violence").&lt;/p&gt; &lt;p&gt;Jag hann också svänga förbi Ruby-spåret och lyssna på &lt;strong&gt;Rich Kilmer&lt;/strong&gt; tala om &lt;strong&gt;"Ruby and the Art of Domain Specific Languages"&lt;/strong&gt;. Kilmer inledde med en kort teoretisk genomgång av möjligheter och problem med domänspecifika språk i Ruby, men större delen av hans presentation gick åt till en rad intressanta demonstrationer av verkliga projekt. Han visade på ett förtjänstfullt sätt hur man kan använda flexibiliteten i Ruby för att skapa domänspecifika språk som gör att domänexperten i princip kan, om inte skriva så i alla läsa koden och förstå det mesta av den. Jag borde verkligen titta mer på Ruby, inte för att jag kommer att gå över till språket, men det är &lt;a href="http://blogg.joakimsunden.se/2007/06/mer-frn-developer-summit.html"&gt;en intressant influens&lt;/a&gt; och det händer mycket kring Ruby-communityn.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-1819006371071514178?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/1819006371071514178/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=1819006371071514178' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/1819006371071514178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/1819006371071514178'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/10/jaoo-dag-1-domain-specific-languages.html' title='JAOO, dag 1: Domain Specific Languages, Database Testing, Beautiful Code and Debugging'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-1783901525815011072</id><published>2007-09-29T21:29:00.001+02:00</published><updated>2007-09-29T21:31:01.258+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAOO2007'/><title type='text'>JAOO, dag 1: Craftsmanship and Ethics</title><content type='html'>&lt;p&gt;&lt;a href="http://www.jaoo.dk/conference"&gt;JAOOs webbplats&lt;/a&gt; är på många vis en ganska dålig källa till information. Det är exempelvis svårt, för att inte säga omöjligt, att hitta någon som helst information om vad JAOO står för. "Java Object Orientation" är svaret man kan hitta på enstaka bloggar om man googlar. Jag gissar att man helt enkelt tonar ned denna bit därför&amp;nbsp;att konferensen nu har en bredare publik än vad den förmodligen hade från början. En annan detalj som jag missat, liksom många andra förstagångsbesökare&amp;nbsp;jag pratade med, var att det faktiskt är ett företag, &lt;a href="http://www.trifork.com/"&gt;Trifork&lt;/a&gt;, som arrangerar konferensen. Trots detta har konferensen väldigt stark "community"-prägel och mottot "for developers by developers" känns faktiskt äkta. Triforks CTO Kresten Krab Thorup inledde konferensen på måndagen med att betona att vad som gör JAOO annorlunda är att det är ett "software company setting up a software conference, not to sell, but to learn themselves".&lt;/p&gt; &lt;p&gt;Den som fick äran att öppna konferensen med en keynote var ingen mindre än &lt;a href="http://www.objectmentor.com/omTeam/martin_r.html"&gt;Robert C. Martin&lt;/a&gt; (alias "Uncle Bob") som talade under rubriken "Clean Code II: Craftsmanship and Ethics". Bob Martin visade sig vara en fartfylld välartikulerad man som gestikulerar med hela kroppen för att engagera publiken och han fick i alla fall mig att bli riktigt inspirerad och engagerad. Faktum är att jag tycker ämnet för hans keynote var så pass intressant att jag ska försöka redogöra för det i detalj.&lt;/p&gt; &lt;p&gt;Efter en effektfull, men kanske något för lång och irrelevant, inledning där han använde Kresten Krab Thorups kropp som material för en historisk exposé över jordens historia och människans lilla del däri, ställde Martin den provocerande frågan: "do we have a profession"? Hans svar var tvekande; under en lång tid gjorde utvecklare lite som de ville, valde sig egen stil. Yrket har inte några regler och riktlinjer, ingen historia med ritualer som till exempel advokater och läkare. Men runt millennieskiftet något hända, vårt hantverk definieras och vi börjar få en historia som vår praxis kan luta sig mot. Det börjar bli möjligt att definiera ett yrke som kan luta sig mot en disciplin snarare än förlita sig på dokumenterade processer. Den disciplin Bob Martin förespråkar är förstås Agile.&lt;/p&gt; &lt;p&gt;För att visa sin hängivenhet till de principer och praktiker som denna disciplin bygger på bär Martin, och numera även många av JAOOs deltagare inklusive undertecknad, ett grönt armband med påminnelsen/uppmaningen "Test first". Men exakt vilka principer och praktiker&amp;nbsp;är det vi talar om?&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Short iterations&lt;br&gt;Martin förspråkar en eller två veckors iterationer, fyra är alldeles för lång tid. I slutet av varje iteration ska det finnas exekverbar kod, dokumentation, tester etc. Det ska i princip vara möjligt att leverera mjukvaran varannan vecka.&lt;/li&gt; &lt;li&gt;Don't wait for definition&lt;br&gt;Sitt inte och vänta på att någon annan ska definiera vad som ska göras, utan bidrag själv till definitionsprocessen genom att bygga kod och få feedback.&lt;/li&gt; &lt;li&gt;Abstract away volatility&lt;br&gt;Kod som är en mer trolig kandidat för förändring ska vara på ett ställe och kod som troligtvis inte behöver förändras ska vara på ett annat. "No JavaScript doing business logic in the GUI!"&lt;/li&gt; &lt;li&gt;Decouple from others&lt;br&gt;Koda inte direkt mot andras implementationer, då kan du lätt bli sittande och vänta på att de ska bli klara. Använd stubs, mocks, simulators och så vidare - då berättar du också för andra hur du vill att interfacen ska se ut.&lt;/li&gt; &lt;li&gt;Never be blocked&lt;br&gt;Detta är "The Prime Directive". Martin använde ett exempel med en grupp testare som "inte kunde göra något" eftersom deras testserver inte var konfigurerad. Har inte utvecklarna fungerande mjukvara på sina datorer? Sätt er vid en av dem! Något kan man göra medan man väntar...&lt;/li&gt; &lt;li&gt;Avoid turgid viscous architectures&lt;br&gt;En del arkitektur hindrar mer än den hjälper. Den skapas ofta av arkitekter som vill lösa allting. Ett sätt att komma till rätta med problemet är att låta arkitekterna utveckla: "If architects have to write code they have to live in the mess they've created."&lt;/li&gt; &lt;li&gt;Incremental improvement&lt;br&gt;Koden är obegriplig, svårföränderlig, otestbar o.s.v. Vad gör du? "Admit you have a mess and clean it up! Bit by bit, day by day, slowly clean it up." Gör det till en regel att alltid checka in lite bättre kod än du checkade ut. Vi gör ofta tvärtom - det är inte professionellt.&lt;/li&gt; &lt;li&gt;No grand redesigns&lt;br&gt;Ledningen är aldrig intresserade av detta. "But then the developers begin to bang the drums... And management resigns. Enter the Tiger Team!" De bästa utvecklarna bildar toppteamet som ska bygga det nya fantastiska systemet. "Det gamla systemet" är specifikationen, så hur svårt kan det vara? Samtidigt sitter andra utvecklare kvar och förvaltar och vidareutvecklar systemet i drift. Det blir som Zenons paradox: hur fort Aristoteles än springer måste han alltid först ta sig dit sköldpaddan började med sitt försprång, men då har sköldpaddan hunnit ytterligare en bit och så vidare i all oändlighet...&lt;/li&gt; &lt;li&gt;Progressive widening&lt;br&gt;Pragmatic Programmers kallar det tracing bullets, i XP kallar man det spikes: lägg till en liten feature som går hela vägen uppifrån GUI ned till databasen och fortsätt därifrån. "Add a&amp;nbsp;thin slice, widen it progressively."&lt;/li&gt; &lt;li&gt;Progressive deepening&lt;br&gt;Få den tunna skivan att fungera ett lager i taget. "Make it run, make it work, make it fast."&lt;/li&gt; &lt;li&gt;Don't write bad code&lt;br&gt;Varför skriver man dålig kod? "Vi hade inte tid att skriva bra kod" är ett vanligt svar. Men har man i så fall verkligen tid att hantera konsekvenserna av dålig kod i form av fler defekter, svårare underhåll och så vidare? "Bad code is not something that slows someone else down months from now - it slows &lt;em&gt;you&lt;/em&gt; down &lt;em&gt;immediately&lt;/em&gt;!" Vad är det vi producerar, vad är vår artefakt? Ett systems beteende? Nej, det är &lt;em&gt;koden &lt;/em&gt;som är vår produkt. "If the code is a mess, the product is a mess. Bad code stays forever, dragging the team down, eventually dragging the company down."&lt;/li&gt; &lt;li&gt;Go fast, go well&lt;br&gt;"The only way to go fast is to go well."&lt;/li&gt; &lt;li&gt;Clean code&lt;br&gt;"What is clean code? It is&amp;nbsp;when the&amp;nbsp;code reads in such a way that, as you read it, each line is what you expect it to be."&lt;/li&gt; &lt;li&gt;Test-Driven Development&lt;br&gt;"The jury was out on this one, but now they have come back and it is a best practice." När Bob Martin frågade publiken om de ägnade sig åt testdriven utveckling räcktes ett anmärkningsvärt stort antal händer upp. "All the time?" Något färre händer. Robert Martin använder puristens definition av TDD:&lt;br&gt;1. Ingen produktionskod får skrivas innan du har ett test som misslyckas.&lt;br&gt;2. Du måste sluta skriva enhetstest när det misslyckas och skriva produktionskod så att det lyckas.&lt;br&gt;3. Du får inte skriva mer produktionskod än vad som behövs för att få testet att lyckas.&lt;br&gt;Något färre händer kvar efter denna definition.&lt;br&gt;Att bedriva TDD på detta vis tvingar oss att ha exekverbar kod hela tiden. "What makes code flexible? The effects of architecture and design are secondary. Tests are what makes code flexible and maintainable."&lt;/li&gt; &lt;li&gt;QA Should Find Nothing&lt;br&gt;Det är i alla fall den inställningen vi bör ha när vi kodar.&lt;/li&gt; &lt;li&gt;100% Code Coverage&lt;br&gt;Använd ett verktyg som t.ex. NCover för att se till att din code coverage är i närheten av 100% (i närheten räcker eftersom de flesta verktyg aldrig når 100% eftersom de inte räknar in interface).&lt;/li&gt; &lt;li&gt;Avoid debugging&lt;br&gt;Titta på koden och hitta buggen där - koden fungerade ju för två minuter sedan (se TDD ovan).&lt;/li&gt; &lt;li&gt;Manual Test Scripts Are Immoral&lt;br&gt;"Tryck på den knappen, skriv in det och det i inmatningsfälten, kontrollera att resultatet blir XYZ..." Om och om igen. "Could you imagine doing that for a job?! It's immoral!" Låt testarna fokusera på kreativa, utforskande tester.&lt;/li&gt; &lt;li&gt;Definition of done&lt;br&gt;"What is the definition of done? All tests are passing."&lt;/li&gt; &lt;li&gt;Test through the right interface&lt;br&gt;Testa inte via ett grafisk gränssnitt. Om det inte är det grafiska gränssnittet som ska testas och då ska affärslogiken simuleras/stubbas.&lt;/li&gt; &lt;li&gt;Apprenticeship&lt;br&gt;Det bästa sättet att lära sig är att sitta med erfarna utvecklare vecka ut och vecka in. Parprogrammera.&lt;/li&gt; &lt;li&gt;Use good tools&lt;br&gt;Det finns mängder av verktyg där ute, de bästa är ofta Open Source. Varför? "They put care into code."&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Ovanstående är hämtat från mina egna minnesanteckningar så vissa citat kanske inte är helt korrekta och möjligen har jag missat ett par punkter. Många av dessa punkter, ja förmodligen alla, är i någon variant kända för de flesta som intresserat sig för agila metoder de senaste åren. Och vissa av de Java-människor jag pratade med tyckte inte det var något att höja på ögonbrynen åt. Kanske beror det på min annorlunda bakgrund (.NET, icke-agila projekt), men jag tycker det var fantastiskt inspirerande att höra en prominent person som Bob Martin med självklarhet, glöd&amp;nbsp;och passion konstatera att "så här är det, så här ska man arbeta -&amp;nbsp;låt ingen intala dig motsatsen". Jag hoppas verkligen att min inspiration ska smitta av sig på andra i de projekt och sammanhang jag deltar i och att jag får tillfälle och möjlighet att tillämpa dessa goda riktlinjer i mitt yrkesutövande. Nu har jag i alla fall ett grönt band som påminner mig. :-)&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-1783901525815011072?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/1783901525815011072/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=1783901525815011072' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/1783901525815011072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/1783901525815011072'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/09/jaoo-dag-1-craftsmanship-and-ethics.html' title='JAOO, dag 1: Craftsmanship and Ethics'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2425318203683180089</id><published>2007-09-29T20:40:00.001+02:00</published><updated>2007-09-29T20:43:11.561+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAOO2007'/><title type='text'>JAOO, dag 0: "Leading Agile Retrospectives"</title><content type='html'>&lt;p&gt;I lördags anlände jag äntligen till Århus efter en smått hektiskt period med en&amp;nbsp;veckas solsemester med kraftigt försenad hemresa, två&amp;nbsp;intensiva arbetsdagar och ett snabbt besök hos vänner i Köpenhamn. För dig som inte besökt Århus kan jag berätta att det är en trevlig liten storstad, en universitetsstad som med ett invånarantal på 300 000&amp;nbsp;är Danmarks näst största stad. Den är dessutom sedan 1987 säte för konferensen &lt;a href="http://www.jaoo.dk/conference"&gt;JAOO&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Själva konferensen och dess sessioner började egentligen först på måndagen och slutade i onsdags, men den vetgirige går på tutorials redan dagen innan och avslutar också med tutorials torsdag och fredag. För söndagens tjuvstart hade jag valt "Leading Agile Retrospectives: A Simple, Pragmatic Framework" som leddes av &lt;a href="http://www.futureworksconsulting.com/diana.html"&gt;Diana Larsen&lt;/a&gt;, en av de människor som förmodligen lett flest agile retrospectives i världen och som tillsammans med Esther Derby författat boken &lt;a href="http://www.amazon.com/Agile-Retrospectives-Making-Teams-Great/dp/0977616649/ref=sr_1_2/002-4429752-3275230?ie=UTF8&amp;amp;s=books&amp;amp;qid=1191091017&amp;amp;sr=8-2"&gt;"Agile Retrospectives: Making Good Teams Great!"&lt;/a&gt; (Pragmatic Bookshelf, 2006).&lt;/p&gt; &lt;p&gt;Ett retrospektiv är med Larsens och Derbys ord "a special meeting where the team gathers after completing an increment of work to inspect and adapt their methods and teamwork" och som "enable whole-team learning, act as catalysts for change, and generate action". Till skillnad från mer traditionella projektutvärderingar fokuserar ett retrospektiv inte bara på utvecklingsprocessen, utan också på projektgruppen.&lt;/p&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="V&amp;aring;r 3D-modell" src="http://www.varia.nu/joakim/images/JAOOdag1_1121F/AgileTeam3DModel9.jpg" width="226" align="right" border="0"&gt;Enligt programbeskrivningen skulle vi under denna heldag introduceras i ett enkelt ramverk för retrospektivdesign och få prova på att själva designa ett retrospektiv. Vår 20 personer starka klass&amp;nbsp;blev nästan omedelbart indelade i grupper enligt principen om att "7+-2" är det optimala antalet projektmedlemmar och fick genast i uppgift att simulera ett projekt så att vi skulle ha något att göra ett retrospektiv om. Det simulerade projektet gick ut på att skapa en 3D-modell (!) för "Agile Team Leadership &amp;amp; Management" med fem olika stakeholders: konsulten som ska sälja den, teamet, teammedlemmen, Scrum Master/coach och Functional/Project Manager. Vi hade ungefär en halvtimme på oss och det material som stod till vårt förfogande var huvudsakligen&amp;nbsp;piprensare, post-its, papper, klistermärken, gem, gummiband&amp;nbsp;och tejp. Jag vill faktiskt påstå att vårt team producerade den tydligaste och mest användbara modellen...&lt;/p&gt; &lt;p&gt;Efter denna övning hade vi så ett projekt att utgå i från för att göra ett retrospektiv. Diana Larsen hade redan en färdig design&amp;nbsp;som vi använde oss av. Det började med att hon presenterade agendan och målet med&amp;nbsp;dagens retrospektiv: "Focus&amp;nbsp;on improving the balance and flow between our planning and activities". Sedan fick alla göra en övning hon kallade "Sense of the room" där vi&amp;nbsp;fick skriva ned&amp;nbsp;en känsla (förvirring, tyst, lycklig, engagerad o.s.v.)&amp;nbsp;och ett behov (respekt, kommunikation, vila, utmaning etc.) på olikfärgade lappar.&amp;nbsp;Lapparna samlades in, blandades och lästes upp.&amp;nbsp;Syftet med denna övning var tvåfalt: att få alla&amp;nbsp;att deltaga redan från början och att få&amp;nbsp;en uppfattning om stämningen i&amp;nbsp;teamet. Denna inledning&amp;nbsp;kallas för "Set the stage" i Derbys/Larsens ramverk.&lt;/p&gt; &lt;p&gt;Nästa steg i ramverket är att samla data ("Gather Data"). Den metod Larsen hade valt var att vi var och en under fem minuter på post-its skulle skriva ned observationer från projektet: saker vi iakttog, vad folk gjorde, sådant som stack ut eller andra händelser från projektet. Sedan klistrade vi upp våra lappar under en av fyra kategorier i form av olika ansiktsuttryck som hon förberett på väggen: glad, ledsen, arg, likgiltig. På detta sätt fick vi fram både fakta (lapparna) och reaktioner (kategoriseringen).&lt;/p&gt; &lt;p&gt;Nu var det dags att få fram insikter ("Generate Insights"). För detta använde vi något som kallas inlärningsmatris ("Learning Matrix"). Matrisen har fyra fält för att kategorisera erfarenheter från projektet: "Do same/more", "Do less/stop", "Try/Do differently" och "Appreciation". Vi började med en kort brainstorming för att fylla de olika fälten. Bland annat kom det fram att vi haft kul ("Appreciation"), att vi borde ha brainstormat för att komma på idéer till vår modell ("Do differently") och att vi borde ha jobbat mer iterativt ("Do more"). Därefter fick vi var sin handfull klistermärken med olika valörer (typ 5 cent till 10 dollar) som vi använde för att gradera de idéer vi tyckte det fanns mest "energi" kring i gruppen. De tre idéer&amp;nbsp;som fick&amp;nbsp;det högsta sammanräknade värdet valdes ut för diskussion.&lt;/p&gt; &lt;p&gt;Utifrån de idéer som kom fram kunde vi sedan avgöra vad som borde prövas i nästa iteration ("Decide What to Do"). För att undvika att fastna på första bästa idé, brainstormade vi fram en lista med aktiviteter där vi sedan fick tre röster var för att avgöra vilken eller vilka som var viktigast ("First fit vs Best fit"). Vi valde ut en av våra idéer och fick sedan skapa en "Action Report" för den:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;em&gt;What&lt;/em&gt; is the action?  &lt;li&gt;&lt;em&gt;Who&lt;/em&gt; has the zeal to carry it?  &lt;li&gt;&lt;em&gt;When&lt;/em&gt; will "who" check in with the team?  &lt;li&gt;&lt;em&gt;Why&lt;/em&gt; will this succeed?  &lt;li&gt;&lt;em&gt;How&lt;/em&gt; will we measure success/progress?&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Till sist avslutades retrospektivet med en summerering av&amp;nbsp;vad som ska göras så att alla i teamet är införstådda med vad man kommit överens om. Det är också viktigt att tacka alla för ett gott arbete. ("Close the Retrospective")&lt;/p&gt; &lt;p&gt;Detta är förstås bara ett exempel på hur man kan genomföra ett retrospektiv. Det viktiga är att den innehåller alla delar i ramverket:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Set the Stage  &lt;li&gt;Gather Data  &lt;li&gt;Generate Insights  &lt;li&gt;Decide What to Do  &lt;li&gt;Close the Retrospective&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Vi hann också med att utifrån förberedda scenarier, alltjämt indelade i samma grupper, designa egna retrospektiv utifrån ramverket. Diana Larsens och Esther Derbys bok innehåller en rad olika aktiviteter man kan använda för de olika stegen; vilka man använder handlar dels om tycke och smak, dels om den specifika situation man står inför. Det kan till exempel vara så, som i det scenario min grupp tilldelades, att deltagarna är oroliga för att bli beskyllda för det som gått fel och då är det viktigt att få dem att känna sig trygga och&amp;nbsp;använda aktiviteter där deltagarnas åsikter i stor utsträckning är anonyma.&lt;/p&gt; &lt;p&gt;Dagen avslutades med en "clinic" där vi gick igenom frågor och funderingar kring retrospektiv, dels sådana vi formulerat i början av dagen och klistrat upp på väggen, dels sådana som dykt upp under dagen.&lt;/p&gt; &lt;p&gt;Jag hade väntat mig något mer teori kring ramverket&amp;nbsp;och att få lära mig fler tekniker, men det var bra att få erfarenheten av att praktiskt ha deltagit i och designat&amp;nbsp;ett retrospektiv. Det gör förhoppningsvis att barriären för att testa det i sitt arbetsliv är lättare att komma över och jag vill verkligen försöka få in mer av denna teknik i de projekt jag arbetar med. Det är allt för ofta så att man bara rusar fram längs en kurs man tagit ut tidigt i projektet och aldrig stannar upp och reflekterar över vad man gör och var man är på väg.&lt;/p&gt; &lt;p&gt;Att anlända till JAOO innan majoriteten av deltagarna och att dessutom börja med en handgriplig tutorial med mycket grupparbete var en perfekt mjukstart på konferensen och flera av deltagarna fortsatte att umgås under hela veckan. Man slapp dessutom trängas med alla andra under den stora registreringen på måndagen.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2425318203683180089?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2425318203683180089/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2425318203683180089' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2425318203683180089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2425318203683180089'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/09/jaoo-dag-0-agile-retrospectives.html' title='JAOO, dag 0: &amp;quot;Leading Agile Retrospectives&amp;quot;'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-7967382308914771610</id><published>2007-09-06T22:48:00.001+02:00</published><updated>2007-09-29T20:43:11.562+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAOO2007'/><title type='text'>JAOO - her kommer jeg!</title><content type='html'>&lt;p&gt;Nu har jag anmält mig till konferensen &lt;a href="http://www.jaoo.dk/"&gt;JAOO&lt;/a&gt; i Århus, Danmark. JAOO tycks stå för "Java Object-Oriented", men det är nog mycket en historisk kvarleva och konferensens innehåll torde attrahera en vidare krets än namnet antyder. Bland årets spår finns t.ex. LINQ, The .NET Road, Scrum, Web 2.0, Real-World Ruby, Modeling och Agility on the Edge.&lt;/p&gt;&lt;p&gt;Själv ser jag särskilt fram emot den heldagstutorial jag bokat in för fredagen: "Domain Driven Development" med Eric Evans. Andra talare som fångar mitt intresse är Martin Fowler, Michael Feathers och Robert C. Martin, som alla hör till mina absoluta favoritförfattare just nu (mer om deras böcker på denna blogg senare).&lt;/p&gt;&lt;p&gt;Om du ska till JAOO och har lust att ses, hör av dig! Jag kommer att vara där alla sex dagar, från och med söndagen den 23 till och med fredagen den 28 september.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-7967382308914771610?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/7967382308914771610/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=7967382308914771610' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7967382308914771610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7967382308914771610'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/09/jaoo-her-kommer-jeg.html' title='JAOO - her kommer jeg!'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-510075439782977568</id><published>2007-09-04T22:43:00.001+02:00</published><updated>2007-09-04T22:43:57.862+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>A Low-Tech Approach to Understanding SOA</title><content type='html'>&lt;p&gt;I våras på &lt;a href="http://blogg.joakimsunden.se/search/label/Developer%20Summit"&gt;Developer Summit&lt;/a&gt; deltog jag i en workshop med Thoughtworks &lt;a href="http://dannorth.net/"&gt;Dan North&lt;/a&gt;. Rubriken var "SOA for Human Beings" och jag försökte sammanfatta en del av mina intryck &lt;a href="http://blogg.joakimsunden.se/2007/06/mer-frn-developer-summit.html"&gt;här&lt;/a&gt;. Utgångspunkten för Dan Norths presentation var de tankar och erfarenheter&amp;nbsp;han tidigare sammanfattat i en artikel för tidningen &lt;a href="http://www.stickyminds.com/BetterSoftware/magazine.asp"&gt;Better Software Magazines&lt;/a&gt; majnummer. Han har nu lagt ut artikeln, "A Low-Tech Approach to Understanding SOA",&amp;nbsp;på sin blogg:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;This article presents a simple, technology-agnostic approach to designing and evolving SOAs. You will not see acronyms such as WSDL, &lt;acronym&gt;SOAP&lt;/acronym&gt;, or REST, and I promise not to use technical terms like “orchestration,” “realization,” and “governance.” Because of this, you will be able to design and implement service-oriented architectures that truly serve your business.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Ladda ned&amp;nbsp;den som &lt;a href="http://dannorth.net/wp-content/uploads/2007/09/a-classic-example.pdf"&gt;PDF&lt;/a&gt;&amp;nbsp;eller läs den direkt på &lt;a href="http://dannorth.net/classic-soa/"&gt;webben&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-510075439782977568?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/510075439782977568/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=510075439782977568' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/510075439782977568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/510075439782977568'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/09/low-tech-approach-to-understanding-soa.html' title='A Low-Tech Approach to Understanding SOA'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-275026048532497648</id><published>2007-08-27T10:52:00.001+02:00</published><updated>2007-08-27T11:02:44.623+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Avega'/><title type='text'>Avegan nominerad till .NET Awards</title><content type='html'>Min kollega Jens Andersson (Team Shmup) har blivit nominerad till .NET Awards med sitt hobbyprojekt &lt;a href="http://shmup.blogspot.com/"&gt;Bullet Hell Tactics&lt;/a&gt;! Spelet är ett shoot-em-up utvecklat med C# i Game Studio Express och använder sig av Microsoft XNA Framework som fungerar på både Windows och Xbox 360. Du kan själv ladda ned spelet från &lt;a href="http://shmup.blogspot.com/"&gt;Team Shmups blogg&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Se mer om nomineringen och vad Jens har att säga om sitt spel på sajten för &lt;a href="http://www.microsoft.se/netawards"&gt;.NET Awards&lt;/a&gt;. Och glöm inte att rösta på Team Shmup och Bullet Hell Tactics när du ändå är i farten!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-275026048532497648?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/275026048532497648/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=275026048532497648' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/275026048532497648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/275026048532497648'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/08/avegan-nominerad-till-net-awards.html' title='Avegan nominerad till .NET Awards'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-8494162900789266424</id><published>2007-08-16T20:30:00.001+02:00</published><updated>2007-08-16T20:31:28.825+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>Äntligen tillbaka</title><content type='html'>&lt;p&gt;Nu är en lång och skön semester över och jag börjar så sakteliga komma igång ordentligt med arbete, läsande, bloggande och annat. Jag har faktiskt varit tillbaka på jobbet i snart två veckor, men eftersom det inte bara är min semester som tagit slut, utan också Premier Leagues, har en del fotbollstittande kommit i vägen för annat. I helgen lyckades jag hinna med Sunderland - Tottenham, West Ham - Manchester City, Aston Villa - Liverpool, Sevilla - Real Madrid, halva Arsenal - Fulham, Chelsea - Birmingham, Manchester United - Reading och AIK - Gefle (på plats)! Och så ytterligare fem matcher hittills i veckan, ej inräknat Liepajas Metalurgs - AIK som ljuder i &lt;a href="http://media.aik.se/index.aspx"&gt;webbradion&lt;/a&gt; just nu.&lt;/p&gt; &lt;p&gt;Snart lugnar det förhoppningsvis ned sig lite på fotbollsfronten, men just nu är nyhetens behag stort. Säsongspremiärer är särskilt roliga, inte bara för att man fått vänta så länge, utan också därför att ligan fortfarande känns ganska öppen och nykomlingarna ofta skräller trots storklubbarnas för varje år allt mer bisarra satsningar. Okej, det kanske kan verka magstarkt med tanke på att det kommer från en Chelsea-supporter, men det är i alla fall roligt när de andra elefanterna (läs: Manchester United)&amp;nbsp;faller...&lt;/p&gt; &lt;p&gt;Jag hade sett fram emot Microsofts &lt;a href="http://msdn.microsoft.com/events/pdc/"&gt;Professional Developer Conference&lt;/a&gt; 2007 i Los Angeles i höst, men den blev ju tyvärr uppskjuten. Tur då att jag upptäckte &lt;a href="http://www.jaoo.dk/"&gt;JAOO&lt;/a&gt; istället: en mycket intressant konferens så nära som Århus och med talare som Martin Fowler, Eric Evans, Robert C. Martin, Ken Schwaber och Jeff Sutherland. Med tanke på de intressanta namnen och den geografiska närheten är det lite konstigt att man inte hör talas om JAOO så mycket.&lt;/p&gt; &lt;p&gt;Ska du på JAOO? Har du varit där tidigare?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-8494162900789266424?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/8494162900789266424/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=8494162900789266424' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8494162900789266424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8494162900789266424'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/08/ntligen-tillbaka.html' title='Äntligen tillbaka'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-1918017272646386171</id><published>2007-06-28T22:40:00.001+02:00</published><updated>2007-08-28T15:50:41.833+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Avega'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Joakim Holm hos Avega: TDD i praktiken</title><content type='html'>&lt;p&gt;&lt;a href="http://jockeholm.wordpress.com/"&gt;Den bloggande terriern&lt;/a&gt; Joakim Holm var den sista i raden av föredragshållare som besökte Avega innan vi nu gör ett kort uppehåll över sommaren. Joakim Holm är en systemutvecklingskonsult med fokus på agila processer som &lt;a href="http://en.wikipedia.org/wiki/Extreme_Programming"&gt;Extreme Programming&lt;/a&gt; och &lt;a href="http://www.controlchaos.com/"&gt;Scrum&lt;/a&gt;. Han var inbjuden till Avega för att leda en kata för &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;testdriven utveckling&lt;/a&gt; (TDD) i Java. "Kata" är ett uttryck från japansk kampsport där det är liktydigt med ett koerograferat mönster av rörelser, t.ex. slag och sparkar. I detta sammanhang syftade det väl närmast på en koreograferad TDD-utvecklingssession där Holm vid tangentbordet med fast hand lotsade oss igenom hela övningen.&lt;/p&gt;&lt;p&gt;Holm tog sin utgångspunkt i &lt;a href="http://www.objectmentor.com/omTeam/martin_r.html"&gt;Robert C. Martins&lt;/a&gt; (alias &lt;a href="http://typo.objectmentor.com/articles/category/uncle-bobs-blatherings"&gt;"Uncle Bob"&lt;/a&gt;) exempel med ett program som ska beräkna poäng för en bowlingserie. Detta exempel återfinns i den eminenta boken &lt;a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445/ref=pd_bbs_sr_1/102-0101234-0185707?ie=UTF8&amp;s=books&amp;amp;amp;amp;amp;qid=1182977485&amp;sr=8-1"&gt;"Agile Software Development, Principles, Patterns, and Practices"&lt;/a&gt; (finns även i &lt;a href="http://www.amazon.com/Principles-Patterns-Practices-Robert-Martin/dp/0131857258/ref=pd_bbs_sr_2/102-0101234-0185707?ie=UTF8&amp;amp;s=books&amp;qid=1182977485&amp;amp;sr=8-2"&gt;nyutgiven version för C#&lt;/a&gt;), men Holms förlaga var om jag förstod saken rätt en live-dragning av Robert Martin själv som skiljde sig lite från (mitt minne av) boken. Kraven är lika enkla som uppenbara: &lt;a href="http://www.interbowling.se/pages/content/poang.htm"&gt;poängberäkningsreglerna för bowling&lt;/a&gt;. Först av allt tas en enkel design fram, ett UML-diagram med några till synes självklara klasser: Game, Roll, Frame och Score. Som sig bör i TDD börjar man koda genom att först skriva ett så enkelt test som möjligt:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;public void testCanCreateGame {&lt;br /&gt;BowlingGame bowlingGame = new BowlingGame();&lt;br /&gt;assertNotEquals(null, bowlingGame);&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Eftersom detta är den första kod vi skriver kan vi inte ens kompilera - det finns ju ingen BowlingGame-klass. Med hjälp av refaktoriseringsverktyget ("refactoring tool") i vår utvecklingsmiljö (Eclipse för Java i det här fallet, för Visual Studio måste man använda ett tredjepartstillägg som &lt;a href="http://blogg.joakimsunden.se/2005/11/resharper.html"&gt;ReSharper&lt;/a&gt;) skapar vi enkelt klassen automatiskt. Efter det kan vi köra vår testsvit, som än så länge bara består av ett test, och få grönt ljus när testet passerar. Nästa test blir lite svårare, men är fortfarande väldigt enkelt: poängen när alla slag hamnar i rännan ska vara noll. Eftersom man maximalt kan slå 21 slag i en serie borde testet se ut så här:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;public void testGutterGame {&lt;br /&gt;BowlingGame bowlingGame = new BowlingGame();&lt;br /&gt;for(int i = 1; i &amp;lt;= 21; i++) {&lt;br /&gt;bowlingGame.roll(0);&lt;br /&gt;}&lt;br /&gt;assertEquals(0, bowlingGame.score());&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Testet kompilerar naturligtvis inte, utan vi får lägga till metoderna &lt;span style="font-family:courier new;"&gt;roll(int)&lt;/span&gt; som tar antal nedslagna käglor som inparameter och &lt;span style="font-family:courier new;"&gt;score()&lt;/span&gt; som returnerar den totala poängen i spelet. Denna gång lägger vi emellertid till ett viktigt element i TDD som vi hoppade över i det första testet; när vi fått programmet att kompileras ser vi till att få rött ljus på testet. Vi kodar vår score()-metod så att den returnerar -1 bara för att få testet att misslyckas. Om vi inte gör det kan vi inte vara säkra på att testet verkligen testar det vi tänkt. När vi fått rött ljus ändrar vi "produktionskoden" så att den returnerar summan av de 21 slagen och vi får grönt ljus. Här framhåller Holm en viktig regel i TDD: innan vi får skriva en enda rad produktionskod måste vi få rött ljus från ett test. Därför är det positivt med rött ljus - då får vi koda!&lt;/p&gt;&lt;p&gt;En annan regel i TDD är att alltid välja den enklaste lösningen för att få ett test att passera och aldrig skriva mer kod än nödvändigt. Sålunda tänker vi inte på spärr och strike när vi skriver vår &lt;span style="font-family:courier new;"&gt;score()&lt;/span&gt;-metod utan summerar alla slag rakt av (vid spärr och strike får man en bonus som är lika stor som ett eller två nästföljande slag). Vi bryr oss inte heller om duplicering och funderar kanske inte så mycket på att bryta ut koden i egna metoder. Detta gör vi istället när vi har ett passerande test på plats - då kan vi refaktorisera vår kod steg för steg och köra testerna för att se att vi fortfarande får grönt ljus. Detta sätt att arbeta gör att man med stor trygghet gradvis kan förbättra designen i systemet utan att behöva oroa sig för att bryta existerande funktionalitet.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/benimoto/424655459/" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="180" src="http://www.varia.nu/joakim/images/JoakimHolmhosAvegaTDDipraktiken_1347A/RedLight_thumb4.jpg" width="240" align="right" border="0" /&gt;&lt;/a&gt;För att sammanfatta ser stegen för testdriven utveckling ut så här:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Skriv ett test som misslyckas (rött ljus).&lt;/li&gt;&lt;li&gt;Se till att det kompilerar.&lt;/li&gt;&lt;li&gt;Skriv kod så att testet lyckas (grönt ljus).&lt;/li&gt;&lt;li&gt;Ta bort duplicering och förbättra design.&lt;/li&gt;&lt;li&gt;Repetera.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Följandes detta mönster gick vi tillsammans med Holm framåt steg för steg till dess att vi slutligen hade ett program som klarade att beräkna poängen för bowlingserier med såväl rännslag som spärr och strike. Förutom att testerna hjälper oss att gå framåt och är ovärderliga vid förvaltning och vidareutveckling av programmet, gav de oss också en applikationsdesign som var en annan än den vi från början skissade fram. Faktum är att BowlingGame blev applikationens enda klass och att den hade ett mycket begränsat antal metoder som dessutom var korta och koncisa. Inledningsvis var det nog ingen som hade trott att programmet skulle bli så litet och enkelt och hade vi inte använt oss av TDD hade det förmodligen inte blivit det heller. Jag har själv sysslat en del med TDD på sistone och gillar det verkligen. Något som jag dock inte riktigt kopplat greppet om var just den "top-down-design" som Holm/Martin använder. Genom att börja uppifrån med användarcentrerade funktioner som "testGutterGame", snarare än börja på låg nivå med t.ex. Frame.GetScore() om vi utgått från det initiala UML-diagrammet, blir det lättare att undvika överdesign.&lt;/p&gt;&lt;p&gt;Jag är övertygad om att jag kommer att jobba allt mer med testdriven utveckling i framtiden och Holms roliga TDD-kata inspirerade mig ytterligare. Om du ännu inte testat TDD råder jag dig att göra det. Det kan vara en liten tröskel innan man kommer i gång, särskilt om man inte är van att jobba på det objektorienterade sätt som i alla fall jag har svårt att separera från TDD och det kan även vara svårt att vänja sig vid tanken på att skriva ett test innan det finns kod, men man kommer snabbt över den och då är det verkligen ett roligt och belönande arbetssätt.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-1918017272646386171?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/1918017272646386171/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=1918017272646386171' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/1918017272646386171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/1918017272646386171'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/06/joakim-holm-hos-avega-tdd-i-praktiken.html' title='Joakim Holm hos Avega: TDD i praktiken'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-5340387527613926562</id><published>2007-06-25T22:51:00.001+02:00</published><updated>2007-06-25T22:53:42.672+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Developer Summit'/><title type='text'>Mer från Developer Summit</title><content type='html'>&lt;p&gt;Från början hade jag tänkt bjuda på ganska detaljerade redogörelser från de föredrag jag valde att besöka på Developer Summit 2007 i slutet av maj, men tyvärr har jag inte lyckats ge mig själv tid till detta. Det blev i alla fall ganska långa referat av Beat Schweglers &lt;a href="http://blogg.joakimsunden.se/2007/06/beat-schwegler-applications-for-service.html"&gt;keynote om SOA&lt;/a&gt;&amp;nbsp;och&amp;nbsp;Erik Doernenburgs keynote &lt;a href="http://blogg.joakimsunden.se/2007/06/erik-doernenburg-simple-is-too-simple.html"&gt;"How Simple is Too Simple"&lt;/a&gt;, samt lite från &lt;a href="http://blogg.joakimsunden.se/2007/06/developer-summit-dag-1.html"&gt;ett par andra sessioner&lt;/a&gt; från konferensens första dag. I dag är det emellertid&amp;nbsp;en månad sedan konferensen gick av stapeln&amp;nbsp;och arrangören Cornerstone har dessutom &lt;a href="http://forum.cornerstone.se/blogs/devsum/default.aspx"&gt;lagt ut nästan alla presentationer&lt;/a&gt; på sin webbplats, så det känns inte längre särskilt angeläget att blogga om dem. Jag skulle dock kort vilja nämna något om några av de sessioner jag bevistade andra dagen, samt om de intressanta workshops det bjöds på den tredje dagen.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Niclas Nilsson - "Dynamic Languages for Statically Typed Minds"&lt;/strong&gt;&lt;br&gt;Jag har länge känt till Ruby och Ruby On Rails&amp;nbsp;men aldrig orkat undersöka det närmare. (Jag kommer inte heller att lägga ut texten om Ruby här, men den som är intresserad kan t.ex. kolla in introduktionsartikeln &lt;a href="http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html"&gt;"Rolling with Ruby on Rails"&lt;/a&gt;.) Det jag har snappat upp har förvisso låtit intressant, inte minst den påstådda produktiviteten och&amp;nbsp;fokuseringen på test och testbarhet.&amp;nbsp;På något sätt har jag ändå&amp;nbsp;haft känslan av att det är mer intressant för utvecklare intresserade av Linux, Apache och PHP eller möjligtvis Java.&amp;nbsp;Språk och miljöer som marknadsförs som produktiva och snabba att komma i gång med brukar också&amp;nbsp;ofta visa sig ha brister så snart man kliver utanför ramarna för marknadsföringsexemplen. Dessutom har min erfarenhet lärt mig att produktivitet och snabbhet vid nyutveckling&amp;nbsp;är av marginell betydelse jämfört med&amp;nbsp;andra kvaliteter som exempelvis hur&amp;nbsp;lätt kod och&amp;nbsp;design är att förstå och hur lätt den är att förändra. Förresten trivs jag ganska bra med Windows och .NET Framework så varför skulle jag byta till en annan plattform och ett annat språk och lära mig allt på nytt?&lt;/p&gt; &lt;p&gt;Förutsatt att man (som jag) tycker att det finns fördelar med Ruby, såsom duck typing, mixins och extensions, är ett svar på den frågan IronRuby, d.v.s. Ruby för .NET Framework. Eller IronPython för den delen, som ju är ett annat populärt dynamiskt språk. IronRuby gör det möjligt att använda styrkan i programmeringsspråket Ruby tillsammans med .NET Frameworks alla välbeprövade klassbibliotek, tredjepartskomponenter, ramverk etc. Dessutom ska man inte underskatta det lärorika i att med jämna mellanrum lära sig ett nytt programmeringsspråk för att få nya perspektiv på utveckling och ta till sig tekniker och tankesätt som man kanske kan tillämpa i sitt "eget" programmeringsspråk. Exempelvis C# har ju tagit starka intryck av de dynamiska språken, något som syns redan i C# 2.0&amp;nbsp;och som&amp;nbsp;blir ännu tydligare i 3.0 med t.ex. &lt;a href="http://www.lowendahl.net/showShout.aspx?id=120"&gt;Extension Methods&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Niclas Nilssons trevliga och avslappnade genomgång av de dynamiska språkens fördelar gjorde mig riktigt nyfiken på att börja experimentera med Ruby och en &lt;a href="http://microserf.wordpress.com/2007/05/30/my-first-ruby-on-rails-application/"&gt;före detta Sogeti-kollegas blogg&lt;/a&gt; fick mig att inse hur enkelt det är att komma i gång. Nu ska jag bara se till att få det installerat på min PS3 också...&lt;/p&gt; &lt;p&gt;(Läs gärna mina tidigare&amp;nbsp;blogginlägg om när de båda kollegorna på factor10 &lt;a href="http://jimmynilsson.com/"&gt;Jimmy Nilsson&lt;/a&gt; och &lt;a href="http://niclasnilsson.se/"&gt;Niclas Nilsson&lt;/a&gt; under våren var för sig besökte &lt;a href="http://www.avega.se/"&gt;Avega&lt;/a&gt; för att tala om &lt;a href="http://blogg.joakimsunden.se/2007/03/jimmy-nilsson-hos-avega-eller-svenska.html"&gt;TDD och DDD&lt;/a&gt; respektive &lt;a href="http://blogg.joakimsunden.se/2007/05/niclas-nilsson-hos-avega-dependency.html"&gt;Spring.NET&lt;/a&gt;.)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Andreas Brink - "Learning From Legacy: Making Software Maintainable" och "Testing and Refactoring Legacy Code"&lt;/strong&gt;&lt;br&gt;För ett par månader sedan snubblade jag över &lt;a href="http://www.objectmentor.com/resources/articles/WorkingEffectivelyWithLegacyCode.pdf"&gt;en artikel&lt;/a&gt; av &lt;a href="http://www.objectmentor.com/omTeam/feathers_m.html"&gt;Michael C. Feathers&lt;/a&gt; som handlade om hur man kan göra "legacy code" testbar. Efter att artikeln publicerades har han skrivit en hel bok i ämnet, &lt;a href="http://www.amazon.com/Working-Effectively-Legacy-Robert-Martin/dp/0131177052/ref=pd_sim_b_2/102-0101234-0185707?ie=UTF8&amp;amp;qid=1182798922&amp;amp;sr=8-3"&gt;"Working Effectively with Legacy Code"&lt;/a&gt;.&amp;nbsp;Feathers har jobbat länge med Extreme Programming och testdriven utveckling och har bland annat skapat CppUnit, C++-versionen av JUnit/&lt;a href="http://www.nunit.org/"&gt;NUnit&lt;/a&gt;, det mest populära ramverket för enhetstester. "Legacy code" är enligt Feathers all kod som saknar tester, oavsett när den är skriven. Det kan tyckas vara en ganska extrem hållning, men det ligger något i den definitionen trots allt. Även om "legacy" ("arv" på svenska) mer ordagrannt har med gammal kod och gamla system att göra, använder man ofta termen för att beteckna kod som är svår att förändra och svår att förstå,&amp;nbsp;vilket&amp;nbsp;enligt Feathers erfarenhet&amp;nbsp;i princip är all kod som saknar tester. Att arbeta effektivt med "legacy code" handlar därför väldigt mycket om att få in koden i ett testramverk,&amp;nbsp;om att göra den testbar.&lt;/p&gt; &lt;p&gt;Detta var också något av &lt;a href="http://blog.andreasbrink.se/"&gt;Andreas Brinks&lt;/a&gt;, konsult från Consignit, perspektiv under hans föredrag &lt;a href="http://forum.cornerstone.se/blogs/devsum/archive/2007/06/19/presentation-andreas-brink-consignit.aspx"&gt;"Learning From Legacy: Making Software Maintainable"&lt;/a&gt;. Brink lånade, dock med stor självständighet, en del från Feathers och hade dessutom en hel del annat bidra med. En intressant poäng han gjorde var vilken bra erfarenhet det är att jobba med det som, ofta nedlåtande, kallas för "förvaltning"; det är här man verkligen kan lära sig vad som är bra respektive dålig design och det är här man har chansen att i praktiken förbättra design och arkitektur. Men då är det också viktigt att de som utvecklat ett system får fortsätta vara med även i underhåll och förvaltning. Enligt Brink är det därför ett misstag att dela upp arbetet med ett system i utveckling respektive förvaltning, något som är snarare regel än undantag.&lt;/p&gt; &lt;p&gt;Andreas Brink&amp;nbsp;var en av de största överraskningarna för mig under Developer Summit. Förutom hans föredrag hade jag också förmånen att delta i den mycket lärorika workshop han ledde om &lt;a href="http://www.cornerstone.se/expertzone/dev07/sessions_net.aspx#309c"&gt;"Testing and Refactoring Legacy Code"&lt;/a&gt; under Developer Summits tredje dag. Brink var en duktig talare med ett intressant ämne som jag hade praktisk nytta av redan nästa arbetsvecka och dessutom var det inspirerande med någon som talade sig varm för förvaltning och underhåll av kod. Jag hoppas vi kan få se honom besöka &lt;a href="http://www.avega.se"&gt;Avega&lt;/a&gt; framöver.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Dan North - "SOA for Human Beings"&lt;br&gt;&lt;/strong&gt;Jag hade hört att &lt;a href="http://dannorth.net/"&gt;Dan North&lt;/a&gt; skulle vara en intressant och fascinerande person och titeln på hans workshop var minst sagt intressant. Mina förväntningar var följaktligen högt ställda, men jag visste inte riktigt vad jag förväntade mig. Tre timmar senare var jag mycket nöjd med mitt val av workshop men jag var fortfarande osäker på vad jag fått. Det är väldigt svårt att återge Dan Norths workshop, men man kan i alla fall säga att det handlade om SOA. North använde en sorts associationsteknik för att presentera sitt ämne; han beskrev det själv vid ett tillfälle som att han skapade mind maps och använde whiteboardtavlan som en slide show. Så fort han kom på att det var något som han skulle återkomma till senare skrev han ned ett minnesord för det i tavlans ena hörn och fortsatte med huvudspåret. Vad nu huvudspåret var, för han tvekade sannerligen inte att sväva ut i anekdoter om än det ena, än det andra; vi fick oss till livs&amp;nbsp;en egensinnig exposé över den serviceorienterade arkitekturens historik från stordatortiden fram till våra dagar, en snabb genomgång av bröderna Dreyfus inlärningsteori och mycket annat.&lt;/p&gt; &lt;p&gt;Hade det varit en mindre intressant talare, mindre intressanta anekdoter och mindre lärorika utsvävningar hade jag blivit besviken på avsaknad av röd tråd och bristande förmåga att inrymma ämnet inom de givna tidsramarna. Men North lovade oss aldrig något särskilt utan inledde med att fråga vad vi hade för förväntningar på de tre timmarna, stannade upp halvvägs för att värdera vad vi hunnit med och eventuellt omvärdera hur vi skulle gå vidare. Framför allt var dock det mesta han hade att säga fruktansvärt intressant. Om du någonsin får tillfälle att lyssna på Dan North rekommenderar jag att du tar chansen, vad än ämnet är; han är ett fenomen.&lt;/p&gt; &lt;p&gt;Någon redogörelse för vad Norths workshop handlade om tänker jag som sagt inte försöka ge, men några citat kan vara roliga och ge en liten vink om vad det är för person vi har att göra med.&lt;/p&gt;&lt;em&gt;"SOA is how departments help other departments getting work done."&lt;br&gt;"Service providers should match departments."&lt;/em&gt;&lt;em&gt;&lt;br&gt;"It is not SOA if it needs a computer."&lt;br&gt;&lt;/em&gt;En extrem version av SOA-mantrat att det handlar om &lt;em&gt;vad&lt;/em&gt;, inte om &lt;em&gt;hur&lt;/em&gt;. &lt;p&gt;&lt;em&gt;"A CIO is the person who manages the people software licenses."&lt;br&gt;"The CIO and the Enterprise Architect get together in a room - usually with a crack pipe - and produce something they call an 'Enterprise Data Dictionary'."&lt;br&gt;&lt;/em&gt;Dan Norths syn på en viss sorts informationsarkitektur...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-5340387527613926562?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/5340387527613926562/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=5340387527613926562' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5340387527613926562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5340387527613926562'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/06/mer-frn-developer-summit.html' title='Mer från Developer Summit'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-742984916457876691</id><published>2007-06-20T23:03:00.001+02:00</published><updated>2007-06-20T23:07:54.576+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Developer Summit'/><title type='text'>Developer Summit, dag 1</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;Utöver de båda keynotes jag skrivit om tidigare (&lt;a href="http://blogg.joakimsunden.se/2007/06/beat-schwegler-applications-for-service.html"&gt;Beat Schwegler&lt;/a&gt; och &lt;a href="http://blogg.joakimsunden.se/2007/06/erik-doernenburg-simple-is-too-simple.html"&gt;Erik Doernenburg&lt;/a&gt;) bjöds det på en del andra intressanta föredrag under Developer Summits första dag.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Tess Ferrandez - "Common problems in ASP.NET Production environments"&lt;/strong&gt;&lt;br /&gt;Jag har länge sporadiskt följt Tess Ferrandez blogg &lt;a href="http://blogs.msdn.com/tess/"&gt;"If broken it is, fix it you should"&lt;/a&gt;. Ferrandez är Escalation Engineer på Microsoft Product Support Services och hennes bloggande syftar till att hjälpa .NET-utvecklare "resolve issues on production system, mainly using Windbg.exe from  &lt;a href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"&gt;http://www.microsoft.com/whdc/devtools/debugging/default.mspx&lt;/a&gt; along with sos.dll that ships with the debugging tools". Det var precis vad hennes session på Developer Summit handlade om också. Det är egentligen inte något av mina främsta intresseområden, men jag har alltid fascinerats personer som förstår vad som händer under huven och obehindrat kastar sig över textbaserade konsolapplikationer med kryptiska kommandonamn och switchar. Ferrandez talade samtidigt som den till synes intressanta arkitektsessionen "The New Role of the System Architect" med Kentors Peter Tallungs och Visabs Fredrik Wahlstedt, men jag valde Ferrandez eftersom man aldrig vet när hon kommer till Sverige igen medan åtminstone Tallungs dyker upp lite &lt;a href="http://www.cornerstone.se/downloads/files/ez/dev/pettal_ws.pdf"&gt;här&lt;/a&gt; och &lt;a href="http://www.iasa.se/"&gt;där&lt;/a&gt;. Döm därför om min förvåning när Tess Ferrandez inleder på svenska och berättar att hon jobbar på Microsoft i Kista! Jag har tydligen läst hennes blogg lite för sporadiskt för där kan man &lt;a href="http://blogs.msdn.com/tess/archive/2007/01/04/i-ve-been-tagged.aspx"&gt;tydligt se att hon är svenska&lt;/a&gt; (och spanjorska). &lt;/p&gt;&lt;p&gt;Ferrandez delade in sitt föredrag i tre delar: Performance Issues, Memory Issues och Crashes and Exceptions. Det verktyg hon använde för att analysera problemen inom alla områden var det tidigare nämnda WinDbg. Med detta program kan man bl.a. se exakt hur många instanser av olika objekttyper som ligger på heapen, hur stort ett enskilt objekt är och skriva ut ett objekts innehåll. För den som är intresserad av den här typen av frågor, har problem med ASP.NETs minneshantering, laddning av assemblies etc, eller vill lära sig mer om WinDbg kan jag rekommendera en närmare titt på &lt;a href="http://blogs.msdn.com/tess/"&gt;"If broken it is, fix it you should"&lt;/a&gt;, där man också kan hitta mycket av innehållet från Ferrandez session.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Jimmy Nilsson – "Beyond Agile"&lt;/strong&gt;&lt;br /&gt;Jimmy Nilsson har tidigare &lt;a href="http://blogg.joakimsunden.se/2007/03/jimmy-nilsson-hos-avega-eller-svenska.html"&gt;gästat Avega&lt;/a&gt; och jag läste med stort nöje hans &lt;a href="http://blogg.joakimsunden.se/2007/01/applying-domain-driven-design-and.html"&gt;senaste bok&lt;/a&gt;, så det var med stor förväntan jag såg fram emot hans föredrag med det spännande ämnet "Beyond Agile". Han började lite trevande och konstaterade att allt fler arbetar agilt nu för tiden; men har verkligen de agila metoderna löst alla våra problem? Frågan är förstås retorisk och med utgångspunkt i ett antal problemområden gav Nilsson sin syn på vad han skymtar bortom de agila metoderna. &lt;/p&gt;&lt;p&gt;&lt;em&gt;"Teamwork doesn't work"&lt;br /&gt;"Requirement descriptions are poor"&lt;/em&gt;&lt;br /&gt;Ett sätt att komma till rätta med dessa problem är &lt;a href="http://behaviour-driven.org/"&gt;BDD, Behavior-Driven Development&lt;/a&gt;. BDD handlar i sin enklaste och ursprungliga form om ett annat sätt att tänka testdriven utveckling (TDD). Istället för att formulera testerna som "TestWithdraw" bör man formulera dem som "CanWithdrawMoney", "ShouldIssueWarning" o.s.v. I ett lite större perspektiv handlar det om att definiera acceptanskriterier i ett tidigt skede, göra det på verksamhetens språk och göra kriterierna exekverbara. Ett exempel på hur det skulle kunna se ut:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;"Money can be withdrawn"&lt;br /&gt;GIVEN&lt;br /&gt;  Account has money&lt;br /&gt;  Card is valid&lt;br /&gt;WHEN&lt;br /&gt;  Card is inserted&lt;br /&gt;  Money is requested&lt;br /&gt;THEN&lt;br /&gt;  Card is output&lt;br /&gt;  Money is output&lt;br /&gt;  Account is credited &lt;/span&gt;&lt;/p&gt;&lt;p&gt;Nilsson gav inget exempel på något verktyg eller någon miljö där detta är möjligt, men mina tankar under föredraget gick till FitNesse som jag länge tänkt titta närmare på. Med tanke på vad &lt;a href="http://dannorth.net/2007/06/introducing-rbehave"&gt;Dan North tillkännagav&lt;/a&gt; och Jimmy Nilssons kollega &lt;a href="http://niclasnilsson.se/articles/2007/06/18/rbehave-is-public"&gt;Niclas Nilsson bloggade om&lt;/a&gt; härom dagen antar jag emellertid att &lt;a href="http://rubyforge.org/scm/?group_id=1475"&gt;rbehave&lt;/a&gt; var vad han hade i tankarna. Med denna form av BDD skulle också testarna kunna komma in tidigare i projektet än vad som ofta är fallet i många utvecklingsprojekt, något som kanske kan bidra till att stärka teamkänslan och samarbetet.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;"Lack of focus on understanding the domain"&lt;br /&gt;"Focus on large scale and overview is missing"&lt;br /&gt;&lt;/em&gt;Domain-Driven Designs (&lt;a href="http://blogg.joakimsunden.se/2007/01/applying-domain-driven-design-and.html"&gt;DDD&lt;/a&gt;) fokus på problemdomänen och på ett gemensamt språk för verksamheten och utvecklingsteamet kan vara en lösning på dessa problem. Vad gäller ett mer övergripande perspektiv och DDD kan man konstatera att Eric Evans ägnar ett antal kapitel i sin bok &lt;a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/sr=1-1/qid=1168980426/ref=sr_1_1/104-9134970-1990310?ie=UTF8&amp;s=books"&gt;"Domain-Driven Design"&lt;/a&gt; åt "strategic patterns"; Nilsson berättade att Evans sagt att om han skulle skriva om boken i dag skulle han lägga denna del först, istället för som nu sist, i boken. Jag kommer att återkomma till DDD och dessa strategiska mönster i en separat bloggpost om Evans bok, men tills vidare kan jag varmt rekommendera boken för den som vill veta mer.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;"Developers get partly wrong tasks"&lt;br /&gt;"'Wrong' abstraction level is used"&lt;/em&gt;&lt;br /&gt;Vi behöver inte nödvändigtvis högre och högre abstraktioner, utan &lt;em&gt;rätt&lt;/em&gt; abstraktion. ("Att abstrahera högt är stort, men att abstrahera rätt är större" för att parafrasera den &lt;a href="http://www.faktoider.nu/thorild.html"&gt;devis av Thomas Thorild&lt;/a&gt; som pryder ingången till Uppsala universitetshus aula. &lt;span style="font-family:Wingdings;"&gt;J&lt;/span&gt;) Det här är något som Nilsson varit inne på redan i sin senaste bok och som också &lt;a href="http://www.lowendahl.net/showShout.aspx?id=136"&gt;berördes av andra&lt;/a&gt; under Developer Summit. Här lyfter Nilsson fram domänspecifika språk (Domain Specific Languages, DSL) som ett motmedel. DSL:er är egentligen inget nytt utan handlar om att skapa problemspecifika "programmeringsspråk" som bättre än de generella uttrycker problematiken i en särskild problemdomän, gärna på ett språk som ligger nära domänexperternas. Språket behöver inte nödvändigtvis vara textbaserat utan kan bestå av diagram, t.ex. de som användes för arbetsflöden i &lt;a href="http://blogg.joakimsunden.se/2007/05/fredrik-gunne-hos-avega-windows.html"&gt;Windows Workflow Foundation&lt;/a&gt;. För Nilssons del är säkert tankarna kring DSL kopplade till DDD:s betoning av "ubiquitous language" och vad Martin Fowler och Eric Evans benämner &lt;a href="http://www.martinfowler.com/bliki/FluentInterface.html"&gt;"fluent interfaces"&lt;/a&gt;, men det är också en viktig beståndsdel i Microsofts satsning på &lt;a href="http://msdn2.microsoft.com/en-us/architecture/aa699360.aspx"&gt;software factories&lt;/a&gt;.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-742984916457876691?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/742984916457876691/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=742984916457876691' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/742984916457876691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/742984916457876691'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/06/developer-summit-dag-1.html' title='Developer Summit, dag 1'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-7474685497360164713</id><published>2007-06-10T22:21:00.001+02:00</published><updated>2007-06-10T22:22:38.352+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Developer Summit'/><title type='text'>Erik Doernenburg, "How Simple is Too Simple?" (Developer Summit)</title><content type='html'>&lt;p&gt;Developer Summits första dag innehöll två keynotes. Efter Beat Schweglers "Architecting Applications for a Service-Oriented World" var det dags för &lt;a href="http://www.thoughtworks.com/"&gt;Thoughtworks&lt;/a&gt;-kollegorna &lt;a href="http://dannorth.net/"&gt;Dan North&lt;/a&gt; och &lt;a href="http://erik.doernenburg.com/"&gt;Erik Doernenburg&lt;/a&gt;, men tyvärr kunde inte Dan North infinna sig förrän till fredagens workshop (mer om detta senare). Doernenburg lämnade dock knappast någon besviken när han istället på egen hand besvarade frågan i föredragets titel: "How simple is too simple?"&lt;/p&gt; &lt;p&gt;De flesta är säkert överens om att enkelhet är en eftersträvansvärd kvalitet i mjukvaruutveckling, även vi som emellanåt gör oss skyldiga till det fåfänga misstaget att välja "snygga" eller "smarta" lösningar framför enkla. Även enkelhet kan dock drivas för långt, men frågan är hur enkelt är för enkelt? För att besvara sin fråga ville Doernenburg göra skillnad på enkel ("simple" ) och simplistisk/överförenklad ("simplistic"). En metafor begagnades för att visa skillnaden. Antag att en mur blockerar din väg. En simplistisk lösning är att springa in i muren med full kraft till dess att den rämnas eller nöts ned. En enkel lösning är att ta ett steg tillbaka, konstatera att muren bara är två meter bred och sedan gå runt den.&lt;/p&gt; &lt;p&gt;Motsvarande åtskillnad kan göras mellan komplex ("complex") och komplicerad ("complicated"). Skillnaden i ordalydelse här känns inte lika klockren, men här lutade sig Doernenburg mot &lt;a href="http://en.wikipedia.org/wiki/Fred_Brooks"&gt;Frederick P Brooks&lt;/a&gt; särskiljande mellan oavsiktlig ("accidental") respektive väsentlig ("essential") komplexitet för att förklara vad han menar. Exempel på den förra sorten, "komplicerad" med Doernenburgs terminologi,&amp;nbsp;är all kod du för tio år sedan var tvungen skriva för att hämta data från en databashanterare och visa den på en webbsida. Det är här fråga om en komplicerad teknisk implementation och inte om en komplex problemdomän. Ett aktiehandelsystem kan däremot utgöra en mycket komplex problemdomän och då talar vi istället om väsentlig komplexitet ("komplex" enligt Doernenburg).&lt;/p&gt; &lt;p&gt;Efter att ha klargjort dessa distinktioner gick Doernenburg in på lösningar som är för komplicerade ("solutions too complicated") och lösningar som är för enkla ("solutions too simplistic"). Ett intressant exempel Doernenburg lyfte fram på en för komplicerad lösning är när en senior utvecklare med långa bakgrund inom ett företag får för sig att han, istället för att delta i det dagliga arbetet,&amp;nbsp;ska skriva ett ramverk för att underlätta för mindre seniora och/eller nya utvecklare. Ett problem med detta tillvägagångssätt är att det är svårt att veta vad som behöver finnas i ramverket och vad som hör bättre hemma i den konkreta applikationen; det blir i bästa fall kvalificerade gissningar. Man riskerar att på detta sätt öka komplexiteten istället för att underlätta för utvecklarna, inte minst genom att man skapar en abstraktion istället för en konkret lösning. Ett bättre sätt att ta fram ramverk är att "skörda" dem utifrån fungerande praktiker och erfarenheter (se &lt;a href="http://www.martinfowler.com/bliki/HarvestedFramework.html"&gt;HarvestedFramework&lt;/a&gt;). Doernenburg exemplifierade med &lt;a href="http://blogg.joakimsunden.se/2007/05/niclas-nilsson-hos-avega-dependency.html"&gt;Spring&lt;/a&gt; som växte fram utifrån erfarenheter av vad som saknades i eller&amp;nbsp;inte fungerade med Enterprise Java Beans.&lt;/p&gt; &lt;p&gt;Vi kan säkert alla komma på bra exempel på för komplicerade lösningar, men exempel på för simplistiska lösningar kanske inte poppar upp lika lätt. Ett bra exempel Doernenburg tog upp var transparent distribution av objekt, d.v.s. idén att den som använder ett objekt inte ska behöva bry sig om huruvida objektet instansieras lokalt eller på en annan maskin (via t.ex. .NET Remoting). Detta är en dålig idé eftersom det ofta är av stor betydelse&amp;nbsp;för prestanda&amp;nbsp;om man gör på det ena eller andra sättet och detta bör ha konsekvenser för hur man designar sina objekt (se t.ex. Martin Fowlers &lt;a href="http://www.ddj.com/dept/architect/184414966"&gt;First Law of Distributed Object Design: Don't distribute&lt;/a&gt;). Ett annat exempel på en simplistisk lösning är att med en &lt;a href="http://blogg.joakimsunden.se/2006/05/or-mapping-vad-r-det.html"&gt;O/R-mappers&lt;/a&gt; hjälp låtsas att det inte finns någon databas; förr eller senare kommer det att straffa sig, t.ex. i prestandaproblem för vissa typer av frågor som ser enkla ut i objektmodellen men som översätts till mycket komplicerad och krävande SQL. (Detta är inget argument mot O/R-mappers, bara mot ett huvudlöst sätt att använda dem.)&lt;/p&gt; &lt;p&gt;Vad som är enkelt är också relativt. Det som förenklar för en expert kan samtidigt försvåra för en novis. Doernenburg exemplifierade med en kaffemaskin på Thoughtworks som hade sifferkombinationer som gränssnitt. "347" kan t.ex. betyda kaffe med mjölk och socker. Ett tämligen icke-intuitivt gränssnitt för den ovane, men efter en tids tillvänjning kan en person med gott sifferminne, som kanske aldrig annars skulle komma ihåg sina kollegors dryckespreferenser, hämta tio olika sorters kaffe till alla projektmedlemmar genom att memorera några olika sifferkombinationer. Ett mer IT-relaterat exempel är &lt;a href="http://blogg.joakimsunden.se/2007/05/niclas-nilsson-hos-avega-dependency.html"&gt;aspektorienterad programmering&lt;/a&gt; som för den invigde samlar "cross-cutting concerns" på ett ställe, men som för novisen innebär att man inte förstår vad som händer var.&lt;/p&gt; &lt;p&gt;Ytterligare en viktig aspekt av "enkelt" är den innebörd som är synonym med tidsbesparande. Många utvecklare upplever exempelvis att deras vardag blivit enklare sedan de börjat använda &lt;a href="http://blogg.joakimsunden.se/2006/05/resharper-20-beta-r-hr.html"&gt;Resharper&lt;/a&gt;.&amp;nbsp;"Put effort into being lazy" citerade Doernenburg sin frånvarande kollega Dan North innan han med en summering rundade av sin keynote.&lt;/p&gt; &lt;p&gt;Under denna konferens och vid en del andra tillfällen har jag gjort det till en (o)vana att fråga personer som, precis&amp;nbsp;som Doernenburg,&amp;nbsp;säger sig syssla med objektorienterad och domändriven design och inte har engelska som modersmål&amp;nbsp;vad de anser angående &lt;a href="http://blogg.joakimsunden.se/2007/03/jimmy-nilsson-hos-avega-eller-svenska.html"&gt;språkval för "ubiquituous language"&lt;/a&gt; och därmed kod.&amp;nbsp;Senare under kvällen hade jag&amp;nbsp;förmånen att svinga en bägare med Doernenburg och tog då fram denna käpphäst för en ridtur. Som tysk hade han sett en hel del hemska exempel på tyska utvecklare som efter bästa förmåga suttit med ordböcker för att översätta verksamhetens tyska till engelska. Det säger sig självt att kommunikationen blir lidande med detta sätt och att "hemspråket" oftast är att föredra om man verkligen ska kunna dela modellen med verksamheten.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-7474685497360164713?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/7474685497360164713/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=7474685497360164713' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7474685497360164713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7474685497360164713'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/06/erik-doernenburg-simple-is-too-simple.html' title='Erik Doernenburg, &amp;quot;How Simple is Too Simple?&amp;quot; (Developer Summit)'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-8820935631754780655</id><published>2007-06-10T12:23:00.001+02:00</published><updated>2007-06-10T12:25:24.101+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Developer Summit'/><title type='text'>Beat Schwegler, "Architecting Applications for a Service-Oriented World" (Developer Summit 2007)</title><content type='html'>&lt;p&gt;&lt;a href="http://www.cornerstone.se/expertzone/dev07"&gt;Developer Summit&lt;/a&gt; inleddes med en keynote av &lt;a href="http://blogs.msdn.com/beatsch/"&gt;Beat Schwegler&lt;/a&gt;, Microsoft Architect Evangelist för EMEA (Europe Middle East and Africa). Ämnet var "Architecting Applications for a Service-Oriented World" och Schwegler inledde med att ställa sig frågan vad han möjligtvis kunde ha att säga om detta, med IT-världens mått mätt, relativt gamla buzzword. "En modell är ej tillräckligt" var hans svar. Han exemplifierade med en karta över Londons tunnelbanesystem - "one of the best abstractions I know" - och jämförde det med kartor över busslinjer och flodtrafik, andra system som har beröringspunkter med tunnelbanesystemet för den som är intresserad av att transportera sig genom London. På samma sätt som det finns "interconnection points" mellan dessa behövs det knytpunkter mellan verksamheten och IT.&lt;/p&gt; &lt;p&gt;Grundförutsättningen var, som alltid med SOA (eller IT överhuvudtaget för den delen), att verkligheten är stadd i förändring. Eller som Beat Schwegler uttrycker det med ett citat av Charles Darwin i undertiteln till sin &lt;a href="http://blogs.msdn.com/beatsch/"&gt;blogg&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"It is not the strongest of the species that survive, nor the most intelligent, but the ones most responsive to change."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Ett scenario med låneansökan i ett banksystem fick tjäna som exempel, inte heller det särskilt ovanligt för att exemplifiera serviceorienterade lösningar. Det tradtitionella fallet, att en sökande laddar ned en ansökan i form av ett PDF-dokument och skickar in det till en handläggare, var utgångspunkten. Ett&amp;nbsp;in-house call center som tar emot en ansökan och på motsvarande sätt fyller i och skickar PDF-dokumentet till handläggaren var det andra användningsfallet. Vad vi än vill tro ser det tyvärr ut så här på många ställen än i dag.&lt;/p&gt; &lt;p&gt;Förändringsbehovet innehåller inte heller några överraskningar: ledningen vill att kunder ska kunna sköta sina ärenden online, vill outsourcea sitt call center och vill ha samma system för alla inblandade så att t.ex. en kund ska kunna börja fylla i sin ansökan online och sedan genast kunna fortsätta processen via telefon med kundtjänsten. Lösningen är inte helt oväntat en serviceorienterad arkitektur. Men vad innebär det?&lt;/p&gt; &lt;p&gt;Schwegler menar att det i den traditionella systemmodellen finns en klyfta mellan verksamhetsmodellen och den tekniska modellen. IT ses som en kostnad och kanske till och med som en kostnad man borde skära ned. Istället borde IT ses som en möjlighet att tillföra värde till verksamheten, men det är bara möjligt om IT närmar sig verksamheten. Schwegler hade ett småroligt sätt att uttrycka&amp;nbsp;"exakt" hur stor klyftan mellan verksamheten och IT är; lika stor som den mellan en bok och filmatiseringen av den.&amp;nbsp;När en bok ska filmatiseras finns det&amp;nbsp;ett oändligt sätt att göra det på och det kan göras&amp;nbsp;hundra filmer som alla är olika och som alla är sämre än boken (eftersom du läste den först).&amp;nbsp;Analogin är att verksamheten inte riktigt vet vad de får från IT. Ett sätt att komma till rätta med det är att sluta fokusera på &lt;em&gt;Hur&lt;/em&gt; systemen ska byggas och börja fokusera på &lt;em&gt;Vad&lt;/em&gt; som behövs: "You have to separate the 'how' from the 'what'."&lt;/p&gt; &lt;p&gt;Ett enkelt men effektivt exempel Schwegler använde var en processbeskrivning som "A skickar ett fax till B som bekräftar med SMS till A". Om några år kanske vi inte ens använder fax och SMS utan någon helt annan teknologi som vi inte ens kan föreställa oss i dag (telepati?) och då är processbeskrivningen, liksom naturligtvis även själva systemet,&amp;nbsp;värdelös. Verksamheten bör istället beskriva sina förväntningar på vad som behöver ske och sedan inte bry sig om hur det åstadkoms. För att överbrygga klyftan mellan verksamhetsmodellen och teknikmodellen inför Schwegler den servicebaserade modellen ("the service based model"). I denna systemmodell fokuserar verksamheten på Vad, vilka generella "capabilities" som behövs och på Service Level Expectations (SLE) istället för på detaljerade Service Level Agreements (SLA). Servicemodellen blir bryggan som tillhandahåller ett kontrakt för att uppfylla behoven och som orkestrerar verksamhetsprocesserna, IT implementerar dem.&lt;/p&gt; &lt;p&gt;Så långt var det inte mycket som kändes nytt, men som en introduktion till SOA var det bra och lättfattligt. Ofta slutar SOA-introduktioner ungefär här och det som var mest intressant med Schweglers presentation var att han gick vidare och försökte ge en bild av hur man kan implementera en servicemodell med existerande teknik utan att bygga allt på nytt. Han kallar sitt tillvägagångssätt för "Lift and Shift" och det innehåller ungefär dessa steg:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Analyze "as-is" architecture  &lt;li&gt;Define the service model  &lt;li&gt;Define the logical "to-be" architecture  &lt;li&gt;Refactor ("Lift"): Refactor the existing system to be aligned with the "to-be" model  &lt;li&gt;Migrate ("Shift"): Move the refactored assets to the target system and technology&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;"Lift and Shift" tillämpades sedan, på en mycket översiktlig nivå, på lånesystemet från det tidigare exemplet. Tyvärr har jag svårt att återge den här delen av presentationen, jag saknar t.ex.&amp;nbsp;Schweglers fina skisser och diagram, så den som är intresserad får helt enkelt hålla utkik efter PowerPoint-presentationen på&amp;nbsp;&lt;a href="http://www.cornerstone.se/expertzone/dev07"&gt;Developer Summits webbplats&lt;/a&gt; eller ta nästa tillfälle i akt&amp;nbsp;att lyssna på Schwegler.&lt;/p&gt; &lt;p&gt;Avslutningsvis framhöll Schwegler att serviceorientering inte bara handlar om "back-end services" utan också om användargränssnitt. Microsofts två strategier för detta är "Software and Services" (även kallat &lt;a href="http://msdn2.microsoft.com/en-us/architecture/aa699384.aspx"&gt;"Software as a Service", SaaS&lt;/a&gt;) och &lt;a href="http://msdn2.microsoft.com/en-us/office/aa905528.aspx"&gt;Office Business Applications&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-8820935631754780655?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/8820935631754780655/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=8820935631754780655' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8820935631754780655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8820935631754780655'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/06/beat-schwegler-applications-for-service.html' title='Beat Schwegler, &amp;quot;Architecting Applications for a Service-Oriented World&amp;quot; (Developer Summit 2007)'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-6899133897789943127</id><published>2007-05-23T13:09:00.001+02:00</published><updated>2007-06-25T23:02:19.628+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Developer Summit'/><title type='text'>Live från Developer Summit...</title><content type='html'>&lt;p&gt;Sitter just nu på årets upplaga av &lt;a href="http://www.cornerstone.se/expertzone/dev07/"&gt;Developer Summit&lt;/a&gt;. &lt;a href="http://blogs.msdn.com/tess"&gt;Tess Ferrandez&lt;/a&gt;, .NET Escalation Engineer på Microsoft ska precis börja tala under rubriken "Common problems in ASP.NET production environments". Ferrandez rycker ut när kunder har problem och debuggar bl.a. hängningar, kraschar och annat som inte går att debugga med Visual Studio. Förmiddagens keynotes med Microsofts &lt;a href="http://blogs.msdn.com/beatsch"&gt;Beat Schwegler&lt;/a&gt; och sedan ThoughtWorks &lt;a href="http://erik.doernenburg.com/"&gt;Eric Doernenburg&lt;/a&gt; var båda mycket intressanta och jag kommer att posta mer om mina intryck från dessa och andra sessioner senare.&lt;/p&gt;&lt;p&gt;Någon annan som är här?&lt;/p&gt;&lt;p&gt;&lt;strong&gt;UPPDATERING:&lt;/strong&gt; Nu har jag postat fler intryck under etiketten &lt;a href="http://blogg.joakimsunden.se/search/label/Developer%20Summit"&gt;Developer Summit&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-6899133897789943127?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/6899133897789943127/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=6899133897789943127' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/6899133897789943127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/6899133897789943127'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/05/live-frn-developer-summit.html' title='Live från Developer Summit...'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2577044563789968301</id><published>2007-05-22T20:46:00.001+02:00</published><updated>2007-05-22T20:53:26.786+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='OO'/><category scheme='http://www.blogger.com/atom/ns#' term='Bok'/><title type='text'>UML Distilled: A Brief Guide to the Standard Object Modeling Language</title><content type='html'>&lt;p&gt;Under hösten hade vi en föreläsningsserie om projekt- och systemutvecklingsmodeller på Avega. Under en av föreläsningarna fick alla deltagare göra ett &lt;a href="http://www.vark-learn.com/english/page.asp?p=questionnaire"&gt;test&lt;/a&gt; som visade sig ge svar på vilka inlärningsmetoder man var mest mottaglig för: visuella, hörsel, läsa/skriva eller "göra/prova på". Jag kommer inte ihåg exakt vilka värden jag hade, men jag hade i alla fall en tydlig preferens för läsa/skriva samtidigt som jag var minst mottaglig för visuella metoder som grafer och diagram. Kanske är det en förklaring till varför jag länge hade svårt att se nyttan med UML, Unified Modeling Language.&lt;/p&gt; &lt;p&gt;UML föddes 1997 genom ett enande (därav "unified") av de många objektorienterade grafiska modelleringsspråk som var populära under 80- och 90-talen. Grady Booch, Ivar Jacobson och Jim Rumbaugh brukar nämnas som UMLs skapare, men mycket av det faktiska arbetet&amp;nbsp;har skett i kommittéer där långt fler&amp;nbsp;givit viktiga bidrag. Mycket förenklat uttryckt är UML en familj grafiska notationer, uppbyggd av en enda meta-modell, som hjälper oss beskriva och designa mjukvarusystem, särskilt system som byggs med en objektorienterad ansats.&lt;/p&gt; &lt;p&gt;I den sista bisatsen ligger kanske en viktigare förklaring till min tidigare avoga inställning till UML: när jag inledde min karriär som Microsoft-, VB- och webbutvecklare var det inte precis i en objketorienterad metod jag fostrades. I takt med att jag rört mig från VB/ASP till C#/.NET, från webbutveckling till allt mer domänlogikutveckling och från konstruktion till allt mer design och arkitektur har ett objektorienterat angreppssätt blivit allt mer intressant, för att inte säga nödvändigt. Och då har också intresset för UML ökat.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.varia.nu/joakim/images/UMLDistilledABriefGuidetotheStandardObje_F12C/UMLDistilled7.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" src="http://www.varia.nu/joakim/images/UMLDistilledABriefGuidetotheStandardObje_F12C/UMLDistilled_thumb5.jpg" width="121" align="right" border="0"&gt;&lt;/a&gt;För att fräscha upp mina UML-kunskaper, inte minst inom andra områden än klassdiagram, läste jag för en tid sedan Martin Fowlers &lt;a href="http://www.amazon.com/gp/product/0321193687?ie=UTF8&amp;amp;tag=joakimsundens-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321193687"&gt;"UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3rd edition"&lt;/a&gt;&amp;nbsp;(det är från denna bok den tidigare korta definitionen och historiken är hämtad). Fowlers bok är en kort (ca 150 sidor) och kärnfull genomgång av UML, inklusive en kort historik, ett avsnitt om utvecklingsprocesser och ett appendix om skillnader&amp;nbsp;mellan olika UML-versioner. &lt;/p&gt; &lt;p&gt;Fowler identifierar tre olika sätt att använda UML: skiss ("sketch"), ritning ("blueprint") och programmeringsspråk ("programming language"). UML som skiss handlar om att kommunicera olika aspekter av ett system eller olika designidéer utvecklare&amp;nbsp;emellan. Detta användningssätt är informellt, man tummar ofta på en del UML-regler och kompletterar med egna notationer.&lt;/p&gt; &lt;p&gt;UML som ritning bygger på idén om en designer som skapar en detaljerad design av systemet som sedan kodas av programmerare utan nämnvärd tankemöda. Sådan UML måste vara betydligt mer heltäckande och exakt än skissvarianten, kräver mer avancerade verktyg och kombineras ofta med någons sorts forward och/eller reverse engineering, d.v.s. verktyg som bygger kod av UML och vice versa.&lt;/p&gt; &lt;p&gt;UML som programmeringsspråk tar ritningen ett steg längre: all programmering sker via UML-diagram som kompileras av sofistikerade verktyg till körbar kod. UML-diagrammen blir källkoden. Här ställs naturligtvis höga krav på exakt följande av strikta UML-regler.&lt;/p&gt; &lt;p&gt;UML Distilled fokuseras framför allt på UML som skiss; det är Fowlers åsikt (liksom min egen) att ritningsvarianten är svår att utföra väl och att det inte är ett särskilt effektivt arbetssätt. Även om designer och kodare kan vara samma person känns det inte som ett särskilt agilt sätt att arbeta. UML som programmeringsspråk är en trevlig idé, men knappast något som kommer att få stort genomslag. Dessutom är det inte säkert att grafiska sätt är bättre än textuella för alla programmeringsuppgifter, menar Fowler.&lt;/p&gt; &lt;p&gt;Boken tar upp alla tretton officiella diagram i UML 2 (den senaste versionen), men tyngdpunkten ligger på klass- och sekvensdiagram som upptar nästan lika många sidor (ca 50) som de andra diagramtyperna tillsammans (ca 60). Det är dessa diagram som används mest i objektorienterad design och som man oftast stöter på i böcker, artiklar och dokumentation.&amp;nbsp;Eller&amp;nbsp;för att använda Fowlers ord, som också&amp;nbsp;är ett bra exempel på hans stil:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"If someone were to come up to&amp;nbsp;you in a dark alley and say, 'Psst, wanna see a UML diagram?' that diagram would probably be a class diagram."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Fowler beskriver inte bara notationen på ett förtjänstfullt sätt utan sätter in diagrammen i de sammanhang och på de sätt de ofta används i designarbete. Och han gör det så väl att många menar att UML Distilled också är en bra introduktion till objektorienterad metod. De formella notationerna kompletteras med Fowlers kunskap om informell praxis, både sådan som levt kvar från de gamla modeller som tillhörde "förlorarna" vid föreningen till UML och sådan som växt fram snabbare än kommittéerna hunnit med och därför antingen anses bättre än, eller ännu inte har någon motsvarighet i, UML-specifikationen. Han är inte heller rädd för att lyfta fram onödiga eller krångliga konstruktioner i UML eller påpeka hur oanvändbara vissa delar är:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"Aggregation is strictly meaningless; as a result, I recommend that you ignore it in your own diagrams."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;UML Distilled är en bra och underhållande introduktion till såväl UML som objektorienterad metod. Den är kort och lätt att ta till sig. Om man huvudsakligen tänkt använda UML som skiss på det sätt Fowler beskriver är det här troligtvis den enda UML-bok man behöver. Om man har särskilda behov av fördjupning i andra diagram än klass- och skevensdiagram eller om man är intresserad av UML som ritning eller som programmeringspråk tjänar denna bok ändå som en bra utgångspunkt vare sig du är en nybörjare eller om du är en van UML-användare som behöver en repetition.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2577044563789968301?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2577044563789968301/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2577044563789968301' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2577044563789968301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2577044563789968301'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/05/uml-distilled-brief-guide-to-standard.html' title='UML Distilled: A Brief Guide to the Standard Object Modeling Language'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-4373153274832563984</id><published>2007-05-20T23:06:00.000+02:00</published><updated>2007-05-20T23:07:49.492+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Avega'/><title type='text'>Fredrik Gunne hos Avega: Windows Workflow Foundation</title><content type='html'>&lt;p&gt;I veckan var det dags för ännu en föredragshållare på Avega. Jag missade tyvärr Suns Tohrbiörn Fritzon om Javas framtid och när vår egen &lt;a href="http://www.newinstance.net/blog"&gt;Manuel Palacio&lt;/a&gt; tog upp JSF och Seam, ett nytt applikationsramverk för webbutveckling med Java. Den här gången var det konsulten Fredrik Gunne, med nästan ett decennium på Microsoft (utvecklingsgruppen för Microsoft Exchange) och Microsoft Consulting Services bakom sig, som bjöd på en presentation av &lt;a href="http://wf.netfx3.com/"&gt;Windows Workflow Foundation&lt;/a&gt; (förkortas WF, inte &lt;a href="http://en.wikipedia.org/wiki/World_Wrestling_Entertainment"&gt;WWF&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;Det är aldrig någon höjdare när en talare inleder med att förklara hur illa insatt han är i sitt ämne och att han aldrig jobbat med det, men när det gäller så pass nya teknologier som Workflow Foundation kan det möjligtvis passera. Trots de därmed dämpade förväntningarna levererades en ganska grundlig genomgång av ämnet och vi fick se en hel del intressanta demonstrationer och kodexempel. Däremot blev det av lätta insedda skäl något sämre med konkreta exempel på tillämpningar och fallstudier.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.varia.nu/joakim/images/FredrikGunnehosAvegaWindowsWorkflowFound_C30C/wf12.gif" atomicselection="true"&gt;&lt;img height="480" src="http://www.varia.nu/joakim/images/FredrikGunnehosAvegaWindowsWorkflowFound_C30C/wf_thumb8.gif" width="313" align="right" /&gt;&lt;/a&gt; För den som missat det är alltså Workflow Foundation den motor för arbetsflöden ("workflow engine") på Windowsplattformen som levereras som en del av .NET Framework från och med version 3.0 av ramverket. "Workflow engine" för kanske tankarna till BizTalk, affärsprocesser, Enterprise Application Integration och andra dyrare, tyngre och högre abstraktionsnivåer än vi normalt stöter på i .NET-utveckling på ramverksnivån. Ett utdrag från Wikipedia ger ett mer jordnära perspektiv på begreppet workflow:&lt;/p&gt;&lt;p&gt;"Workflow is the operational aspect of a &lt;a href="http://en.wikipedia.org/wiki/Work_procedure"&gt;work procedure&lt;/a&gt;: how &lt;a href="http://en.wikipedia.org/wiki/Task"&gt;tasks&lt;/a&gt; are structured, who performs them, what their relative order is, how they are synchronized, how &lt;a href="http://en.wikipedia.org/wiki/Information"&gt;information&lt;/a&gt; flows to support the tasks (&lt;a href="http://en.wikipedia.org/wiki/Wordflow"&gt;wordflow&lt;/a&gt;) and how tasks are being tracked."&lt;/p&gt;&lt;p&gt;Ganska många utvecklare har förmodligen skrivit &lt;em&gt;procedurer&lt;/em&gt; som hanterar &lt;em&gt;hur uppgifter är strukturerade&lt;/em&gt;, vilken deras &lt;em&gt;relativa ordning&lt;/em&gt; är och hur de &lt;em&gt;spåras,&lt;/em&gt; för att ta några av de delar som har uppenbara kopplingar till många programmeringsuppdrag. Med Workflow Foundation vill Microsoft också göra workflow engine mer "mainstream"; det ska bli en lika naturlig del i utvecklarnas verktygslåda som t.ex. ADO.NET eller .NET Remoting. Genom .NET Framework finns det alltid tillgängligt, är mycket enkelt att använda och kräver därmed inget större godkännandeprocedur från chefen eller kunden än t.ex. ett beslut att använda System.Transactions.&lt;/p&gt;&lt;p&gt;Det var förmodligen också det viktigaste intrycket jag tar med mig från presentationen: att Workflow Foundation kan komma till användning i långt fler situationer än jag tidigare tänkt mig. Från att ha betraktat Workflow Foundation som en relativt marginell del av ramverket, ämnad för särskilda scenarier såsom SOA-orkestreringsperspektiv och liknande, inser jag nu att det är ett verktyg också för många av de små arbetsflöden och processer som förekommer i många applikationer.&lt;/p&gt;&lt;p&gt;Jag får förhoppningsvis anledning att återkomma till Workflow Foundation i framtiden, men tills vidare vill jag uppmana alla som ännu inte tittat närmare på det att göra det, särskilt om man - som jag - inte förstått hur användbart det kan vara.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-4373153274832563984?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/4373153274832563984/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=4373153274832563984' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/4373153274832563984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/4373153274832563984'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/05/fredrik-gunne-hos-avega-windows.html' title='Fredrik Gunne hos Avega: Windows Workflow Foundation'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-5656380293407518248</id><published>2007-05-18T17:32:00.001+02:00</published><updated>2007-05-18T17:32:18.405+02:00</updated><title type='text'>Ny adress för bloggläsare</title><content type='html'>&lt;p&gt;Jag har länge irriterat mig på att alla postningar under ett år i bloggar på &lt;a href="http://www.blogger.com/"&gt;Blogger/Blogspot&lt;/a&gt; har samma datum: den första januari det året. Nu har jag därför valt att syndikera min blogg via &lt;a href="http://www.feedburner.com/"&gt;Feedburner&lt;/a&gt; istället så att alla ni som följer min blogg som "feed" via en bloggläsare slipper detta och genast kan se vilken dag och tid mina inlägg är publicerade. Det enda ni behöver göra är att klicka på den lilla ikonen längst upp till höger eller på &lt;a href="http://feeds.feedburner.com/JoakimSundenBlogg"&gt;den här länken&lt;/a&gt;: &lt;a title="http://feeds.feedburner.com/JoakimSundenBlogg" href="http://feeds.feedburner.com/JoakimSundenBlogg"&gt;http://feeds.feedburner.com/JoakimSundenBlogg&lt;/a&gt;. Jag har dessutom &lt;a href="http://forums.feedburner.com/viewtopic.php?t=3377"&gt;ändrat i min bloggmall&lt;/a&gt; så att autodiscovery i många bloggläsare, IE7 och Firefox nu ska använda den feeden automatiskt om ni väljer att lägga till bloggen via inbyggda funktioner i dessa applikationer.&lt;/p&gt; &lt;p&gt;Jag uppmanar alla andra som bloggar via Blogger/Blogspot att göra samma sak, särskilt de bloggar jag läser. Om inte altruistiska skäl är tillräckliga finns det också fördelar för den som bloggar i form av statistik över hur många som följer din blogg via feed, något som saknas i de flesta statistiktjänster som &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt; och &lt;a href="http://www.sitemeter.com/"&gt;Site Meter&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-5656380293407518248?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/5656380293407518248/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=5656380293407518248' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5656380293407518248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5656380293407518248'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/05/ny-adress-fr-blogglsare.html' title='Ny adress för bloggläsare'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-1420521291802534140</id><published>2007-05-17T13:47:00.001+02:00</published><updated>2007-05-17T13:50:33.782+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Avega'/><category scheme='http://www.blogger.com/atom/ns#' term='Verktyg'/><title type='text'>Niclas Nilsson hos Avega: Dependency Injection och AOP med Spring.NET</title><content type='html'>&lt;p&gt;Dryga månaden efter &lt;a href="http://blogg.joakimsunden.se/2007/03/jimmy-nilsson-hos-avega-eller-svenska.html"&gt;Jimmy Nilssons besök&lt;/a&gt; på&amp;nbsp;Avega förärades vi i slutet av mars med ett besök av dennes kollega från factor10 - &lt;a href="http://niclasnilsson.se/"&gt;Niclas Nilsson&lt;/a&gt;. Ämnen för kvällen var Dependency Injection och aspektorienterad programmering (AOP)&amp;nbsp;med &lt;a href="http://www.springframework.net/"&gt;Spring.NET&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Dependency injection, även känt som Inversion of Control innan &lt;a href="http://www.martinfowler.com/articles/injection.html"&gt;Martin Fowler m.fl. myntade det mer specifika begreppet&lt;/a&gt;, handlar i grund och botten om att minska beroenden mellan olika objekt genom att injicera de objekt man behöver. Det traditionella sättet att använda ett objekt från ett annat är ju att instantiera det direkt på det här sättet:&lt;/p&gt; &lt;p&gt;public class SalesController&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; // Code...&lt;br&gt;&lt;br&gt;&amp;nbsp; ItemRepository&amp;nbsp;items = new ItemRepository();&lt;br&gt;&lt;br&gt;&amp;nbsp; // More code...&lt;br&gt;}&lt;/p&gt; &lt;p&gt;Med dependency injection kan det istället se ut så här:&lt;/p&gt; &lt;p&gt;public class SalesController&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; // Code...&lt;br&gt;&amp;nbsp;&amp;nbsp; IItemRepository items;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; public SalesController(IItemRepository items)&lt;br&gt;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.items = items;&lt;br&gt;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; // More code....&lt;br&gt;}&lt;/p&gt; &lt;p&gt;I det första,&amp;nbsp;traditionella,&amp;nbsp;fallet har SalesController ett beroende av ItemRepository och måste anpassa sig efter ändringar i denna klass. I varianten med dependency injection förser man istället SalesController med en abstraktion (ett Interface i exemplet) av klassen och gör det därmed möjligt att ändra och byta ut implementationen av ItemRepository utan att SalesController påverkas.&lt;/p&gt; &lt;p&gt;En nackdel med dependency injection&amp;nbsp;är att man nu måste skapa objekten som ska injiceras någon annanstans än i objektet som ska använda dem. Här kan&amp;nbsp;Spring.NET hjälpa oss genom att låta oss konfigurera olika injections i XML och samla dem på ett ställe. Vi kan t.ex. ange vilken klass i vilken assembly vi avser när vi frågar efter "ItemRepository" och sedan ange att ItemRepository ska vara en konstruktorparameter för SalesController i samma eller en annan assembly.&amp;nbsp;När vi sedan ber Spring.NET om ett SalesController-objekt levereras det initierat och klart med en referens till den ItemRepository vi angav. Spring.NET har stöd för en rad olika sätt att skapa objekt, t.ex. via &lt;a href="http://www.dofactory.com/Patterns/PatternFactory.aspx"&gt;Factory Method&lt;/a&gt;, och kan även utifrån typ eller namn själv lista ut vilka objekt som ska injiceras.&lt;/p&gt; &lt;p&gt;Spring.NET är också ett ramverk för aspektorienterad programmering och design. Ett vanligt sätt att beskriva AOP är att lyfta fram hur man kan använda det för att hantera "cross-cutting concerns" som loggning, säkerhet och transaktioner samtidigt som man håller fast vid principen "separation of concerns" och inte blandar in dessa aspekter där de egentligen inte hör hemma, t.ex. i domänobjekt. Säg att man vill logga varje metodanrop i t.ex. ett &lt;a href="http://www.martinfowler.com/eaaCatalog/serviceLayer.html"&gt;Service Layer&lt;/a&gt;. Principen om separation of concerns säger oss att vi helst inte bör blanda in koden för loggning i varje metod som kan anropas. Vi vill dessutom gärna slippa upprepa denna kod om och om igen i varje metod.&lt;/p&gt; &lt;p&gt;Med AOP definierar vi helt enkelt vår "cross-cutting concern", i detta fall loggningen, i vad som med AOP-terminologi kallas för ett "advice". Sedan anger vi på vilka platser i koden - "pointcuts" -&amp;nbsp;vårt advice ska tillämpas. En pointcut kan anges&amp;nbsp;med Regular Expression och vi kan till exempel&amp;nbsp;ange att alla metoder i en assembly som börjar med "Save" ska omfattas av vårt advice "LoggingAdvice". Så här skulle det sedan kunna se ut i koden:&lt;/p&gt; &lt;p&gt;class LoggingAdvice : IMethodInterceptor&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; public object Invoke(IMethodInvocation invocation)&lt;br&gt;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Calling " + invocation.Method.Name +&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; " " + DateTime.Now);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object result = invocation.Proceed();&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("Finished&amp;nbsp;calling " + invocation.Method.Name +&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; " " + DateTime.Now);&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return result;&lt;br&gt;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/p&gt; &lt;p&gt;Nu kommer alla våra Save-metoder att meddela till Console när de anropas och när anropet är klart. Man behöver inte lägga till särskilt mycket kod till det här enkla exemplet för att få fram bra statistik på vilka metoder som tar längst tid att exekvera och därigenom använda AOP för att hitta flaskhalsar i ett system.&lt;/p&gt; &lt;p&gt;Transaktioner är en annan cross-cutting concern där AOP kommer väl till pass och faktum är att transaktionsmodellen&amp;nbsp;i Enterprise Services/COM+&amp;nbsp;använder sig av AOP. När man sätter attribut som [Transaction(TransactionOption.Required)] på en klass för att få den att delta i transaktioner är det i själva verket en pointcut för ett transaktions-advice man skapar, även om Microsoft inte använder den terminologin.&lt;/p&gt; &lt;p&gt;Jag har tidigare stiftat bekantskap med dependency injection och AOP, Jimmy Nilsson har t.ex. ett kapitel om just detta i sin &lt;a href="http://blogg.joakimsunden.se/2007/01/applying-domain-driven-design-and.html"&gt;senaste bok&lt;/a&gt; (för övrigt delvis författat av Eric Doernenbourg som &lt;a href="http://blogg.joakimsunden.se/2007/05/blandat.html"&gt;kommer till&amp;nbsp;Developer Summit&amp;nbsp;i nästa vecka&lt;/a&gt;), men jag har aldrig använt Spring.NET. Det var därför en nyhet för mig att ramverket innehåller mycket mer än stöd för dessa tekniker. Förutom en rad "nyckelfärdiga" advice för loggning, säkerhet med mera finns det ramverk för dependency injection för ASP.NET; klassbibliotek med&amp;nbsp;olika nyttiga funktioner&amp;nbsp;för datahantering med ADO.NET, collections, threading&amp;nbsp;med mera; en objektorienterad modell för databasoperationer som mappar resultatset till objekt och mycket annat intressant.&lt;/p&gt; &lt;p&gt;En rolig sak som händer under kvällen var att vi under middagspausen fick besök av &lt;a href="http://blog.springframework.com/arjen"&gt;Arjen Poutsma&lt;/a&gt; från &lt;a href="http://www.interface21.com/"&gt;Interface21&lt;/a&gt;, företaget bakom Java-ramverket Spring som Spring.NET är inspirerat av. Poutsma var i Stockholm för att delta i grundandet av en Spring User Group nästa dag och passade då på att träffa Niclas Nilsson. Konsekvensen av detta blev att andra halvan av kvällen avhandlades på engelska och Poutsma flikade ständigt in i (för att inte säga tog över) föredraget. Han sammanfattade kärnfullt syftet med AOP:&amp;nbsp;att hålla sina sockor torra. "DRY SOCS" - Don't Repeat Yourself (samla koden i&amp;nbsp;advice)&amp;nbsp;och Separation Of ConcernS (använd aspekter istället för att besudla klasser med sådant som inte hör dit). Han berättade också att Interface21 numera har en utvecklare av Spring.NET på sin lönelista vilket troligtvis innebär ännu bättre utveckling av och support för detta ramverk i framtiden.&lt;/p&gt; &lt;p&gt;Det kan också vara värt att nämna Microsofts satsningar inom dessa områden även om det inte var något som togs upp under kvällen på Avega. Microsoft &lt;a href="http://msdn.microsoft.com/practices"&gt;Patterns and Practices Team&lt;/a&gt; skapade &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=ObjectBuilder"&gt;Object Builder&lt;/a&gt; som&amp;nbsp;ett ramverk för dependency injection (och ett ramverk för att bygga ramverk/dependency injection containers)&amp;nbsp;för sitt Enterprise Library och nu lever projektet ett eget liv på &lt;a href="http://www.codeplex.com/"&gt;Codeplex&lt;/a&gt;. Jag har inte tittat närmare på det själv, men det verkar inte ha någon större spridning med bara drygt 1200 nedladdningar (källkod&amp;nbsp;&lt;em&gt;och&lt;/em&gt; binärkod)&amp;nbsp;sedan i januari. Spring.NET har som jämförelse drygt 2 500 nedladdningar i månaden.&lt;/p&gt; &lt;p&gt;I &lt;a href="http://msdn2.microsoft.com/en-us/library/aa480453.aspx"&gt;Enterprise Library 3.0&lt;/a&gt; som släpptes i april ingår något som heter &lt;a href="http://msdn2.microsoft.com/en-us/library/bb410104.aspx"&gt;Policy Injection Application Block&lt;/a&gt; och som utvecklare kan använda "to specify crosscutting behavior of objects in terms of a set of policies". Det handlar alltså om AOP, men ingenstans i beskrivningen av applikationsblocket nämns vare sig aspekter, AOP, pointcuts eller advice. &lt;a href="http://www.lowendahl.net/showShout.aspx?id=118"&gt;Man kan fråga sig varför&lt;/a&gt; Microsoft väljer att skapa en helt ny terminologi, men det är i alla fall troligt att aspektorienterad programmering med .NET Framework får ett uppsving i och med detta.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-1420521291802534140?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/1420521291802534140/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=1420521291802534140' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/1420521291802534140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/1420521291802534140'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/05/niclas-nilsson-hos-avega-dependency.html' title='Niclas Nilsson hos Avega: Dependency Injection och AOP med Spring.NET'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-3346054101837041764</id><published>2007-05-03T23:19:00.001+02:00</published><updated>2007-05-03T23:21:58.256+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Avega'/><category scheme='http://www.blogger.com/atom/ns#' term='MIX07'/><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>Blandat</title><content type='html'>&lt;p&gt;Microsofts &lt;a href="http://www.visitmix.com/"&gt;MIX07&lt;/a&gt; har precis avslutats, men jag hade tyvärr inte möjlighet att närvara på årets upplaga av "a 72 hour conversation" om webbutveckling (läs om mitt besök på förra årets konferens &lt;a href="http://blogg.joakimsunden.se/search/label/MIX06"&gt;här&lt;/a&gt;) eftersom jag istället var på Sardinien och förde en 72-timmars konversation om &lt;a href="http://www.avega.se/"&gt;Avega&lt;/a&gt; tillsammans med mina kollegor. För den som inte hängt med finns det, förutom den officiella sajten, ett antal bloggar där man kan uppdatera sig, till exempel svenska som min f.d. kollega &lt;a href="http://andersjonsson.blogspot.com/"&gt;Anders Jönssons&lt;/a&gt;, &lt;a href="http://blog.noop.se/"&gt;Magnus Mårtenssons&lt;/a&gt; och &lt;a href="http://blogs.msdn.com/robf/"&gt;Robert Folkessons&lt;/a&gt; (Microsoft).&lt;/p&gt;&lt;p&gt;Dessutom finns en chans att ta del av några av presentationerna från MIX07 på plats i Stockholm när Cornerstones &lt;a href="http://www.cornerstone.se/expertzone/dev07/"&gt;Developer Summit&lt;/a&gt; går av stapeln i slutet av maj. Det är emellertid inte bara Re-MIX07 som lockar mig till den konferensen, eller vad sägs om namn och ämnen som Dan North ("the &lt;a href="http://en.wikipedia.org/wiki/Behavior_driven_development"&gt;BDD&lt;/a&gt; guy" från Thoughtworks, företaget där &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt; är Chief Scientist) med workshopen "SOA for human beings" och Beat Schwegler (arkitekt, Microsoft) om "Architecting Applications for a Service-Oriented World".&lt;/p&gt;&lt;p&gt;Det har varit tyst på bloggen ett tag. Förutom att jag befunnit mig på Sardinien har jag bl.a. som traditionen bjuder haft en längre påskledighet i Boden, varit toastmaster på min brors bröllop (grattis Henrik och Lina!), fixat tjejens 30-årsfest, umgåtts med mina två små döttrar i vårsolen och kämpat mot ett en segdragen förkylning. Dessutom befinner vi oss i den hektiska tid på året då alla utländska fotbollsligor fortfarande pågår samtidigt som Champions League når sin kulmen och Allsvenskan börjat. Men misströsta icke; en hel del boktips, några referat av föreläsningar på Avega, ytterligare funderingar kring bästa praxis, fler bloggtips och annat smått och gott ligger och väntar på att bli nedtecknat. Stay tuned!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-3346054101837041764?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/3346054101837041764/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=3346054101837041764' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3346054101837041764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3346054101837041764'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/05/blandat.html' title='Blandat'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-4206730738948797987</id><published>2007-03-22T21:54:00.001+01:00</published><updated>2007-03-22T22:54:20.085+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bloggtips'/><title type='text'>Min blogglista</title><content type='html'>&lt;p&gt;Jag har många gånger fått frågan vilka bloggar jag läser och jag har minst lika många gånger funderat på att skapa en liten "blog roll", en blogglista. Det som hindrat mig är att jag i så fall vill välja ut några verkligt speciella (för mig) och berätta lite om varje blogg och då har det genast blivit ett större projekt. Från och med i dag publicerar jag äntligen en början till en blogglista tillsammans med en kortare beskrivning av varje blogg i denna bloggpost. När jag i framtiden lägger till bloggar till listan kommer jag att försöka posta kort om vad den handlar om.&lt;/p&gt;&lt;p&gt;En snabb överblick i min bloggläsare (jag använder just nu två olika: &lt;a href="http://www.rssbandit.org/"&gt;RssBandit&lt;/a&gt; och Outlook 2007) visar att jag just nu prenumererar på ca 120 bloggar. Mer än hälften av dem läser jag så pass regelbundet att jag åtminstone skummar igenom allt som skrivs och de allra flesta skummar jag igenom då och då. Några ligger i frysboxen och väntar på att jag ska inse att jag inte kommer att läsa dem och avsluta prenumerationen. En annan kategori är proffsbloggare som Robert Scoble, TechCrunch och liknande som producerar så många inlägg att det nästan är en heltidssysselsättning att följa dem. Dessa skummar jag oftast bara igenom rubrikvis på jakt efter intressanta nyheter, information om spännande Web 2.0 start-ups m.m. Även med denna metod blir det snabbt svårt att komma i kapp om man inte lästa dem på några dagar. Då markerar jag bara den katalogen som "läst" och börjar om nästa dag.&lt;/p&gt;&lt;p&gt;Av alla dessa bloggar vill jag lyfta fram de jag personligen tycker är mest läsvärda, men huvudsakligen sådana som jag inte ser i så många andras blogglistor. Det innebär att bloggare som &lt;a href="http://blogs.msdn.com/johanl/"&gt;Johan Lindfors&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/ahenrik/default.aspx"&gt;André Henriksson&lt;/a&gt;, &lt;a href="http://buzzfrog.blogs.com/"&gt;Dag König&lt;/a&gt;, &lt;a href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/a&gt; och andra microsoftare inte finns med på listan eftersom jag räknar med att den som hittat till min blogg redan känner till dem. Och om man inte gör det så återfinns de ändå refererade tillräckligt frekvent i min blogg för att man ska hitta till dem förr eller senare.&lt;/p&gt;&lt;p&gt;Nåväl, här följer en kort presentation av några av de bloggar jag tycker är mest intressanta just nu:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.codinghorror.com/blog"&gt;Coding Horror:&lt;/a&gt; Jeff Atwood har valt en symbol från Steve McConnells bok "&lt;a href="http://blogg.joakimsunden.se/2006/12/code-complete-practical-handbook-of.html"&gt;Code Complete&lt;/a&gt;" som titel för sin blogg och det är tydligt att McConnell är en viktig inspirationskälla. Atwood är i sin blogg lika mycket av en eklektiker och skriver ingående och inkännande om allt som har med programmering och datorer att göra. Det som särskiljer Coding Horror från många andra tekniknörd- och programmeringsbloggar är Atwoods vurmande för och kunskaper om de mänskliga faktorerna och processerna. Tekniska (men begripliga!) utredningar kring &lt;a href="http://www.codinghorror.com/blog/archives/000728.html"&gt;hur slumptal genereras&lt;/a&gt; och ingående &lt;a href="http://www.codinghorror.com/blog/archives/000732.html"&gt;jämförelser mellan olika processorer&lt;/a&gt; blandas med &lt;a href="http://www.codinghorror.com/blog/archives/000815.html"&gt;insiktsfulla texter om användargränssnitt&lt;/a&gt; och tankar kring vilka &lt;a href="http://www.codinghorror.com/blog/archives/000237.html"&gt;egenskaper en bra utvecklare bör besitta&lt;/a&gt;. &lt;p&gt;&lt;a href="http://blogs.msdn.com/nickmalik/"&gt;Inside Architecture:&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;Nick Malik är verksamhetsarkitekt på Microsofts Enterprise Architecture, &lt;a href="http://blogs.msdn.com/nickmalik/about.aspx"&gt;enligt honom själv&lt;/a&gt; "probably the best work on the planet" inte minst eftersom man får jobba med "some of the most experienced and varied folks you can imagine". Malik är naturligtvis en mycket erfaren och kompetent person själv och skriver mycker initierat om två av mina favoritämnen: Serviceorienterad Arkitektur (SOA) och Objektorienterad Analys och Design (OOAD). Jag har länge haft svårt att hitta bra böcker och texter om praktisk erfarenhet av att implementera SOA-lösningar, men Inside Architecture fyller en del av detta tomrum. &lt;p&gt;&lt;a href="http://www.25hoursaday.com/weblog/"&gt;Dare Obasanjo:&lt;/a&gt; Obasanjo är Program Manager för ett av teamen i Microsofts Windows Live, bland annat ansvarig för utvecklarsajten &lt;a title="http://dev.live.com/" href="http://dev.live.com/"&gt;http://dev.live.com/&lt;/a&gt;. Han ägde tidigare XML I/O- och Schema-API:erna i .NET Framework, liksom XSD-implementationen och står med anledning av detta för en del kommentarer angående XML i &lt;a href="http://blogg.joakimsunden.se/2006/09/framework-design-guidelines.html"&gt;Framework Design Guidelines&lt;/a&gt;. Tillsammans med Torsten Rendelmann har han utvecklat en av de RSS-läsare jag använder: &lt;a href="http://www.rssbandit.org/"&gt;RSSBandit&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Dare Obasanjo skriver mycket intressant om Web 2.0, men han skulle förmodligen inte gilla att jag skriver så eftersom han inte är så förtjust i begreppet. Han skriver dock ofta och gärna om AJAX, "social software", "web startups", webbsatsningar från "GYM" (Google-Yahoo-Microsoft) och andra tydliga "Web 2.0"-ämnen. Jag ser hans blogg som en mer kritisk, mer fokuserad, lite argare och mer webbinriktad &lt;a href="http://scobleizer.com/"&gt;Robert Scoble&lt;/a&gt; som blivit ännu mer intressant att läsa sedan Scoble lämnade Microsoft.&lt;/p&gt;&lt;p&gt;Om du inte hört talas om honom tidigare men tycker att namnet låter bekant kan det bero på att han är son till Nigerias nuvarande president, Olusegun Obasanjo.&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.devsource.com/devlife/"&gt;Julie Lerman:&lt;/a&gt; En kvinnlig .NET-utvecklare med ett lite annorlunda anslag och perspektiv. Medan många andra bra bloggar ibland kan upplevas som super-experter som talar &lt;em&gt;till&lt;/em&gt; oss vanliga dödliga, känns det som om Julia Lerman är en av oss och talar &lt;em&gt;med&lt;/em&gt; oss. Det betyder absolut inte att hennes blogg är mindre intressant. Hon brottas med samma problem som många andra, till exempel har hon på sistone publicerat en serie inlägg där hon brottas med att förstå ADO.NET Entity Framework och LINQ. Hon har en prestigelös attityd och är bra på att förmedla saker på ett rakt och enkelt sätt.&lt;/p&gt;&lt;p&gt;Lerman har nyligen bytt bloggmotor. Missa inte hennes &lt;a href="http://blog.ziffdavis.com/devlife"&gt;gamla bloggposter&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Det får räcka med bloggtips vidare. Fortsättning följer.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-4206730738948797987?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/4206730738948797987/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=4206730738948797987' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/4206730738948797987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/4206730738948797987'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/03/min-blogglista.html' title='Min blogglista'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-613433965781090282</id><published>2007-03-11T22:26:00.001+01:00</published><updated>2007-03-11T22:26:08.695+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Humor'/><title type='text'>SOA - rena fakta</title><content type='html'>&lt;p&gt;Äntligen en riktigt bra förklaring till SOA... ;-)&lt;/p&gt; &lt;p&gt;&lt;a title="http://soafacts.com/" href="http://soafacts.com/"&gt;http://soafacts.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;(&lt;a href="http://www.lowendahl.net/showShout.aspx?id=121"&gt;Via&lt;/a&gt; Patrik Löwendahls &lt;a href="http://www.lowendahl.net/"&gt;blogg&lt;/a&gt;.)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-613433965781090282?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/613433965781090282/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=613433965781090282' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/613433965781090282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/613433965781090282'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/03/soa-rena-fakta.html' title='SOA - rena fakta'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2810123363283957085</id><published>2007-03-10T16:51:00.001+01:00</published><updated>2007-03-10T16:51:43.979+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bästa praxis'/><title type='text'>Mer om .NET properties</title><content type='html'>&lt;p&gt;Sedan &lt;a href="http://blogg.joakimsunden.se/2007/01/net-bsta-praxis-properties.html"&gt;jag skrev&lt;/a&gt; om att använda .NET properties istället för get- och set-metoder och varför det är en god praxis att använda properties istället för publika medlemsvariabler, har ämnet diskuterats en hel del i &lt;a href="http://sv.wikipedia.org/wiki/Bloggosf%C3%A4ren"&gt;bloggosfären&lt;/a&gt;. Bland annat Eric Gunnerson har skrivit ett &lt;a href="http://blogs.msdn.com/ericgu/archive/2007/02/01/properties-vs-public-fields-redux.aspx"&gt;inlägg&lt;/a&gt; och en &lt;a href="http://blogs.msdn.com/ericgu/archive/2007/02/02/more-on-properties-vs-fields.aspx"&gt;uppföljning&lt;/a&gt;&amp;nbsp;där han lutar lite mot publika medlemsvariabler, &lt;a href="http://blogs.msdn.com/jaybaz_ms/archive/2007/02/08/properties-vs-fields-again.aspx"&gt;Jay Bazuzi&lt;/a&gt; håller mer än helhjärtat med och Jimmy Nilsson &lt;a href="http://jimmynilsson.com/blog/posts/PropertiesVsFields.htm"&gt;instämmer&lt;/a&gt;. &lt;a href="http://www.hedgate.net/articles/2007/02/24/public-fields-vs-properties-and-a-bit-of-yagni"&gt;Chris Hedgate&lt;/a&gt; köper inte argumenten, en ståndpunkt han delar med flera &lt;a href="http://blogs.msdn.com/ericgu/archive/2007/02/01/properties-vs-public-fields-redux.aspx"&gt;kommentatorer&lt;/a&gt; på Gunnersons blogg.&amp;nbsp;Alla påpekar förstås att det beror på kontext och hela diskussionen kan förefalla vara hårklyveri. Trots detta, eller kanske just därför,&amp;nbsp;kan jag inte hejda mig själv från att fortsätta delge er mina synpunkter i frågan.&lt;/p&gt; &lt;p&gt;Flera förespråkare av publika medlemsvariabler hänvisar till Rico Morianis prestandaargument som jag redan tagit upp i min andra uppdatering i mitt första &lt;a href="http://blogg.joakimsunden.se/search/label/B%C3%A4sta%20praxis#FlakeId=29890231&amp;amp;Height=477"&gt;inlägg&lt;/a&gt; (längst ned). Den prestandaförlust och den marginellt större assemblystorlek som kan bli följden av att använda properties måste i de allra flesta fall anses vara försumbar. Denna princip&amp;nbsp;kan&amp;nbsp;i alla fall inte gälla som tumregel utan måste i så fall snarare ses som förhastad optimering och som &lt;a href="http://en.wikiquote.org/wiki/Donald_Knuth"&gt;Donald Knuth sa&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"Premature optimization is the root of all evil (or at least most of it) in programming."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Gunnersons andra invändning, att properties som används "just in case" innebär "extra clutter in the class", äger väl viss tyngd, men det är enligt min mening dels något av en vanesak, dels något som kan hanteras av regions och andra sätt att strukturera sin kod. Dessutom kommer man från och med nästa version av C# och VB.NET kunna deklarera properties &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/03/08/new-c-orcas-language-features-automatic-properties-object-initializers-and-collection-initializers.aspx"&gt;mer koncist&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Bazuzi vidareutvecklar Gunnersons argument om det onödiga i att använda properties bara för säkerhets skull; om man använder properties bara för att undvika att bryta binär kompatibilitet, varför då inte som tumregel också alltid använda en factory method som returnerar ett interface istället för att använda konstruktorer? Då skulle man i framtiden kunna byta ut vilket objekt som returneras utan att bryta binär kompatibilitet. Bazuzi förväntar sig att man ska välja allt eller intet:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"If &lt;strong&gt;you&lt;/strong&gt; still believe that you need to use properties in the trivial cases, I hope you will examine these constructs and consider them seriously in your own code.&amp;nbsp; I suspect you should be choosing all or nothing."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Den här typen av argument brukar kallas "&lt;a href="http://en.wikipedia.org/wiki/Reductio_ad_absurdum"&gt;reductio ad absurdum&lt;/a&gt;" och kan vara intressanta i formallogik, men använt på det här viset är det inte mycket mer än ett retoriskt knep; bara för att man argumenterar för att det är säkrast att använda properties som tumregel innebär det inte&amp;nbsp;per automatik att man måste göra allt annat som står i ens makt för att&amp;nbsp;bibehålla binär kompatibilitet. Att använda en factory method för att returnera ett interface är betydligt mer "clutter in the class" än properties, det är ett betydligt mindre vanligt koncept och förstås inte&amp;nbsp;naturligt&amp;nbsp;av alla utvecklare på samma sätt som properties. En bästa praxis betyder inte att man aldrig någonsin får bryta mot den, utan den är ett stöd inte minst för de som inte är fullt medvetna om konsekvenserna av att avvika från den. Därför anser jag fortfarande att properties är&amp;nbsp;bästa praxis.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2810123363283957085?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2810123363283957085/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2810123363283957085' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2810123363283957085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2810123363283957085'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/03/mer-om-net-properties.html' title='Mer om .NET properties'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-9047621369839480233</id><published>2007-03-06T23:51:00.001+01:00</published><updated>2007-05-22T20:54:42.540+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Avega'/><category scheme='http://www.blogger.com/atom/ns#' term='OO'/><category scheme='http://www.blogger.com/atom/ns#' term='Bästa praxis'/><title type='text'>Jimmy Nilsson hos Avega (eller Svenska som allestädes närvarande språk)</title><content type='html'>&lt;p&gt;Härom veckan gästades &lt;a href="http://www.avega.se/"&gt;Avega&lt;/a&gt; av &lt;a href="http://blogg.joakimsunden.se/2007/01/applying-domain-driven-design-and.html"&gt;Jimmy Nilsson&lt;/a&gt; som talade lite om Test-Driven Development (TDD), &lt;a href="http://blogg.joakimsunden.se/2007/01/applying-domain-driven-design-and.html"&gt;Domain-Driven Design (DDD)&lt;/a&gt; och &lt;a href="http://blogg.joakimsunden.se/2006/05/or-mapping-vad-r-det.html"&gt;O/R-mappers&lt;/a&gt;. Det var en ganska lättillgänglig introduktion, inte minst om man läst hans senaste &lt;a href="http://blogg.joakimsunden.se/2007/01/applying-domain-driven-design-and.html"&gt;bok&lt;/a&gt;, men frågor och diskussioner var (som alltid på Avega) riktigt intressanta. Eftersom många aveganer i publiken var Java-människor fanns det ganska mycket kunskap om DDD och O/R-mappers i rummet. En intressant fråga som dryftades och som jag själv funderat mycket på var om man i regel bör använda svenska för ett projekts "ubiquitous language".&lt;/p&gt;&lt;p&gt;En förklaring av "ubiquitous language" kanske kan vara på sin plats för den som inte är bekant med DDD. Ett "allestädes närvarande språk", för att prata svenska, är en central ingrediens i DDD. Eric Evans understryker i sin bok "&lt;a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/sr=1-1/qid=1168980426/ref=sr_1_1/104-9134970-1990310?ie=UTF8&amp;s=books"&gt;Domain-Driven Desgin: Tackling Complexity in the Heart of Software&lt;/a&gt;" vikten av en för domänexperterna och utvecklingsteamet gemensam modell och ett gemensamt språk:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"A project faces serious problems when its language is fractured. Domain experts use their jargon while technical team members have their own language tuned for discussing the domain in terms of design. [...] Translation blunts communication and makes knowledge crunching anemic."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Lösningen är att tillsammans arbeta fram ett "ubiquitous language" som är mer fylligt och robust än den minsta gemensamma nämnaren för de olika språken och att verkligen konsekvent använda detta språk i allt som har med projektet att göra. Språket bör inbegripa allt från klassnamn och viktiga operationer, verksamhetens termer för att diskutera explicita affärsregler och till och med designmönster (och andra typer av mönster, t.ex. &lt;a href="http://c2.com/doc/forewords/fowler.html"&gt;analysis patterns&lt;/a&gt;), som teamet tillämpar på domänmodellen. Det bör användas när utvecklare och domänexperter kommunicerar med varandra, men också i utvecklarnas egna grupp för att beskriva system, uppgifter och funktionalitet, liksom i domänexperternas egna kommunikation och arbete med krav, featurelistor m.m. &lt;a href="http://www.refactoring.com/"&gt;Refactoring&lt;/a&gt; av koden kan leda till refactoring av språket och när språket ändras måste klassdiagrammen anpassas, klasser och metoder döpas om. På samma sätt som "continuous integration" är en bästa praxis bör man enligt Evans även tillämpa något han kallar "&lt;em&gt;conceptual&lt;/em&gt; integration":&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"Constant exercise of the UBIQUITOUS LANGUAGE in discussions of the model and application."&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Åter till Jimmy Nilsson och diskussionen om svenska. Även om man inte känner till DDD eller har dragit samma långtgående och djuptänkta slutsatser som Evans och andra DDD-förespråkare, är det lätt att känna igen problematiken och behovet av ett gemensamt språk; jag har själv funderat mycket på detta och gillar därför verkligen hur en gemensam modell och "ett allestädes närvarande språk" ges en så pass central roll i domändriven design. Och utifrån denna roll är det åtminstone för mig uppenbart att modellen och språket, liksom i förlängningen därmed även koden, bör vara på svenska för svenska projekt i svenska verksamheter.&lt;/p&gt;&lt;p&gt;Alla åhörare var emellertid inte överens om detta och jag vet från andra diskussioner att många till och med föredrar engelska för sina kommentarer och för dokumentation, så länge det inte finns uttryckliga önskemål om något annat. Ofta används argumentet att koden kan komma att sättas i händerna på engelskspråkiga utvecklare, inte minst med den växande offshoremarknaden. Det kan dock knappast vara så pass vanligt förekommande att man alltid skulle vara tvungen ta höjd för det till priset av alla problem språkförbistringen innebär (&lt;a href="http://c2.com/xp/YouArentGonnaNeedIt.html"&gt;YAGNI&lt;/a&gt;!).&lt;/p&gt;&lt;p&gt;Ett problem med svenska har varit att man inte kunnat använda svenska tecken (åäö) i koden och att det därför minskat tydligheten, men det är inte längre något problem i moderna utvecklingsmiljöer. Lite värre är kanske att det i mjukvaruvärlden finns en hel del begrepp som saknar bra eller i alla fall naturliga svenska översättningar, t.ex. namn på designmönster (Factory, Composite, State etc) eller något så grundläggande som Set- och Get-prefix. Programmeringsspråk, befintliga ramverk och klassbibliotek har sällan (aldrig?) översättningar vilket leder till att man antingen måste blanda språken (KnappEvent) eller använda olika språk för ramverk och applikation(OnClickEvent, KnappHändelse).&lt;/p&gt;&lt;p&gt;Dessa invändningar är tämligen bagatellartade enligt min mening och förtjänsterna med att använda svenska, snarare än att tvinga domänexperter och utvecklare att hitta på mer eller mindre krystade översättningar, överstiger vida nackdelarna. Nu undrar väl alla vad Jimmy Nilsson tyckte, men det här är ju trots allt min blogg... Okej då, han skämtade först om att problemet enklast löses genom att avskaffa svenska språket och att han skriver på engelska för att slippa ta itu med problemet, men menade sedan att så länge vi måste dras med svenska bör det förstås vara regel snarare än undantag att använda svenska för sitt ubiquit... förlåt, &lt;em&gt;allestädes närvarande språk&lt;/em&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-9047621369839480233?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/9047621369839480233/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=9047621369839480233' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/9047621369839480233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/9047621369839480233'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/03/jimmy-nilsson-hos-avega-eller-svenska.html' title='Jimmy Nilsson hos Avega (eller Svenska som allestädes närvarande språk)'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2083256375984438828</id><published>2007-02-18T22:05:00.001+01:00</published><updated>2007-02-18T22:07:30.808+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>SOA enligt Microsoft</title><content type='html'>&lt;p&gt;John Evdemon, arkitekt med fokus på &lt;a href="http://en.wikipedia.org/wiki/Business_Process_Management"&gt;BPM &lt;/a&gt;och SOA i Microsofts Architecture Strategy Team, har sammanställt en ganska stor &lt;a href="http://blogs.msdn.com/jevdemon/archive/2007/01/08/a-round-up-of-microsoft-soa-resources.aspx"&gt;samling länkar&lt;/a&gt; till resurser från Microsoft som har att göra med serviceorienterad arkitektur. En av resurserna är en nedladdningsbar bok (gratis), &lt;a href="http://msdn2.microsoft.com/en-us/library/aa479349.aspx"&gt;"Readings in Service Orientation"&lt;/a&gt;, som också delades ut gratis på TechEd. Den beskrivs som "an interesting set of classical papers on architecting services by a variety of well-known authors in the architectural space" (bl.a. &lt;a href="http://www.pathelland.com/"&gt;Pat Helland&lt;/a&gt; och &lt;a href="http://blogs.msdn.com/maarten_mullender/"&gt;Maarten Mullender&lt;/a&gt;) och är indelad i fem delar:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Design and Modeling: Aligning Business and IT&lt;/li&gt;&lt;li&gt;Data: Information Management for Services&lt;/li&gt;&lt;li&gt;Process: Services Composition and Consumption&lt;/li&gt;&lt;li&gt;Identity: Who are you? Can you use my service?&lt;/li&gt;&lt;li&gt;Protocols and Practice: Services-based Infrastructure&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Jag har tyvärr inte hunnit läsa den ännu, men den verkar onekligen intressant.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2083256375984438828?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2083256375984438828/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2083256375984438828' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2083256375984438828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2083256375984438828'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/02/soa-enligt-microsoft.html' title='SOA enligt Microsoft'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-5311218386692447276</id><published>2007-02-06T22:33:00.001+01:00</published><updated>2007-05-22T20:54:42.541+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='OO'/><category scheme='http://www.blogger.com/atom/ns#' term='Bok'/><title type='text'>Head First Design Patterns</title><content type='html'>&lt;p&gt;De flesta utvecklare har väl någon gång kommit i kontakt med designmönster ("&lt;a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)"&gt;design patterns&lt;/a&gt;"), men för många har det stannat vid ett flyktigt möte, inte minst bland dem som räknar sig som .NET-utvecklare. Det är i alla fall min erfarenhet efter samtal med kollegor, kunder och andra .NET-utvecklare jag mött genom åren. Detta förhållande har sannolikt att göra med att .NET-plattformen i allmänhet, och verktygsstödet i form av Visual Studio i synnerhet, uppmuntrar utveckling enligt vad &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt; kallar &lt;a href="http://www.martinfowler.com/eaaCatalog/tableModule.html"&gt;Table Module&lt;/a&gt; pattern (som är ett arkitekturmönster). Något förenklat handlar Table Module om att en instans (.NET DataSet) representerar, och hanterar affärslogiken för, alla rader i en databastabell eller -vy. Istället för en domänmodell (&lt;a href="http://www.martinfowler.com/eaaCatalog/domainModel.html"&gt;Domain Model&lt;/a&gt; pattern) och ett mer objektorienterat förhållningssätt underlättar .NET och Visual Studio utveckling med DataSet. I exempelkod och tutorials från Microsoft, liksom i de flesta projekt och kundprojekt jag arbetat med, blir det också ofta proceduriell programmering med metoder som hanterar DataSet som såväl in- som utparametrar (jmf Fowlers &lt;a href="http://www.martinfowler.com/eaaCatalog/transactionScript.html"&gt;Transaction Script&lt;/a&gt; pattern). Jag antar att även Microsofts historik, inte minst Visual Basics ställning, gjort att det ser ut på detta sätt. Mot denna bakgrund är det förståeligt om intresset för objektorienterade designmönster inte är särskilt stort bland .NET-utvecklare.&lt;/p&gt;&lt;p&gt;Nu kanske någon tycker att jag målar fan på väggen bara för att få nöjet att piska honom och visst är det så att det finns gott om .NET-utvecklare som är såväl OO-purister som designmönsterevangelister. Enligt min erfarenhet är dessa dock undantagen som bekräftar regeln. Samtidigt är något på väg att hända. Domänmodellen vinner allt större inflytande (som jag varit inne på tidigare &lt;a href="http://blogg.joakimsunden.se/2007/01/applying-domain-driven-design-and.html"&gt;här&lt;/a&gt;) och Microsofts stora satsning med &lt;a href="http://blogg.joakimsunden.se/2006/02/linq-den-felande-lnken-mellan-oo-och.html"&gt;LINQ&lt;/a&gt;, &lt;a href="http://blogg.joakimsunden.se/2006/05/or-mapping-vad-r-det.html"&gt;O/R-mapping&lt;/a&gt; och den nya &lt;a href="http://msdn2.microsoft.com/en-us/library/aa730866(VS.80).aspx"&gt;Entity Data Model&lt;/a&gt; i nästa version av ADO.NET ("Orcas") lär ge ännu mer näring åt denna utveckling. Om inte denna utveckling gör dig mer intresserad av att titta närmare på designmönster kanske ett boktips kan övertala dig? ;-)&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.varia.nu/joakim/images/HeadFirstDesignPatterns_12652/DesignPatterns3.jpg" atomicselection="true"&gt;&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="160" src="http://www.varia.nu/joakim/images/HeadFirstDesignPatterns_12652/DesignPatterns_thumb1.jpg" width="137" align="left" border="0" /&gt;&lt;/a&gt; Boken "&lt;a href="http://www.amazon.com/gp/product/0596007124?ie=UTF8&amp;tag=joakimsundens-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;creative=9325&amp;amp;creativeASIN=0596007124"&gt;Head First Design Patterns&lt;/a&gt;" (Eric &amp; Elisabeth Freeman, Kathy Sierra, Bert Bates; O'Reilly Media 2004; 638 sidor) är utgiven i O'Reillys annorlunda, men populära "&lt;a href="http://www.headfirstlabs.com/"&gt;Head First&lt;/a&gt;"-serie. Head First har tagit fasta på de senaste rönen inom neurobiologi, kognitionsforskning och inlärningsteori och utifrån dessa skapat böcker som är fokuserade på att läsaren verkligen ska &lt;em&gt;lära sig&lt;/em&gt; innehållet i dem. Detta har resulterat i visuellt rika framställningar som är fyllda med ingående, pedagogiska och tydliga exempel samt gott om inlärningsövningar av olika slag. Men framför allt är de väldigt underhållande (och lätta) att läsa och det är väl till syvende og sist det som gör dem så lärorika. Själv föll jag omedelbart pladask för det härliga bildspråket, den snygga presentationen, den nördiga humorn (även dåliga skämt underlättar inlärningen enligt folket på Head First) och de käcka 50-talsbilderna med välklädda och välfriserade män och kvinnor som i pratbubblor kläcker ur sig diverse klokskaper:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;"I used to think real men subclassed everything. That was until I learned the power of extension at runtime, rather than at compile time. Now look at me!"&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://www.varia.nu/joakim/images/HeadFirstDesignPatterns_12652/hfooad_preview2.png" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="427" src="http://www.varia.nu/joakim/images/HeadFirstDesignPatterns_12652/hfooad_preview_thumb.png" width="450" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Utseendet är förstås inte allt. Head First Design Patterns tar upp ett dussintal (de mest användbara enligt dem själva) av de klassiska mönster som lades fram av "The Gang of Four" (Gamma, Helm, Johnson, Vlissides) i "&lt;a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;tag=joakimsundens-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;creative=9325&amp;amp;creativeASIN=0201633612"&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt;": Observer, Decorator, Factory, Singleton, Command, Adapter, Facade, Template Method, Iterator, Composite, State och Proxy. Författarna ägnar ungefär 30-60 luftiga och lättlästa sidor åt varje mönster. En mycket liten del, ofta mot slutet av varje kapitel, ägnas åt den formella definitionen av mönstret som diskuteras. Man har istället valt att använda konkreta exempel på problem som kan lösas med hjälp av mönstret i fråga för att sedan på ett pedagogiskt vis arbeta - och inte minst omarbeta - in designmönstret i lösningen. Ett stort fokus ges de objektorienterade designprinciper som ligger bakom designmönstren ("Encapsulate what varies", "Open for extension, closed for modification" o.s.v.).&lt;/p&gt;&lt;p&gt;Även om det är ganska länge sedan jag första gången intresserade mig för designmönster har jag aldrig känt att jag haft särskilt stor användning för dem. Jag har naturligtvis stött på de vanliga och även vid något tillfälle skapat en Factory eller använt Singleton. Men när jag bläddrat i Gang of Fours bok eller ögnat igenom mönsterkataloger har det mesta känts väl abstrakt och lite grann som om det mer berör en annan värld än den där jag bedriver mitt dagliga arbete. Denna känsla har säkert att göra med den bakgrund jag tecknade i början av denna text och det faktum att jag nu tagit designmönster till hjärtat har säkert att göra med att jag i allt högre utsträckning kommit att ägna mig åt verklig objektorienterad analys, design och utveckling. Det sistnämnda skulle i så fall också förklara varför jag var så förtjust i boken Head First Design Patterns. Samtidigt kan jag dock inte göra mig fri från tanken att Head First faktiskt lyckats förklara designmönster på ett sådant sätt att de känns omedelbart användbara.&lt;/p&gt;&lt;p&gt;Om jag ska nämna någon nackdel med boken är det att den efter ett tag kan upplevas som lite tjatig och närmast överpedagogisk, exempel och förklaringar upprepas o.s.v. Å andra sidan vore det orättvist att förvänta sig ett kompakt och faktaspäckat referensverk - i så fall är nog Gamma et al att föredra.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;UPPDATERING:&lt;/strong&gt; Jag glömde nämna att Head First Design Patterns utgår från Java i kodexempel och annat, men denna lapsus beror troligtvis på att det knappast är något man tänker på om man är bevandrad i C#. Några exempel i avsnitten "patterns in the wild" tar upp Javas klassbibliotek, men även i dessa fall är likheterna med .NET Framework så stora att det inte är några problem att förstå för den som inte är bekant med Java.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-5311218386692447276?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/5311218386692447276/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=5311218386692447276' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5311218386692447276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5311218386692447276'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/02/head-first-design-patterns.html' title='Head First Design Patterns'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-6379885158860700504</id><published>2007-02-05T09:14:00.000+01:00</published><updated>2007-02-05T09:26:12.235+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web2.0'/><title type='text'>Hjälp till att hitta Jim Gray!</title><content type='html'>Jim (James) Gray, en av Microsofts främsta databasforskare, är &lt;a href="http://www.nbc11.com/news/10888165/detail.html"&gt;försvunnen&lt;/a&gt; sedan han för en vecka sedan begav sig ut på en segeltur för att sprida sin avlidna mors aska. Efter att kustbevakningen har givit upp letandet har företag som Microsoft, Google och Amazon slutit upp och gjort det möjligt för människor över hela världen att via &lt;a href="http://www.mturk.com/mturk/preview?groupId=J0XZ58STDWJZ5QY4F9M0"&gt;Amazons mekaniska turk&lt;/a&gt; söka efter Jim Gray genom att studera satelittbilder från området där han seglade. &lt;a href="http://www.mturk.com/mturk/preview?groupId=J0XZ58STDWJZ5QY4F9M0"&gt;Hjälp till du med&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-6379885158860700504?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/6379885158860700504/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=6379885158860700504' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/6379885158860700504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/6379885158860700504'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/02/hjlp-till-att-hitta-jim-gray.html' title='Hjälp till att hitta Jim Gray!'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-5250040134149275754</id><published>2007-02-04T22:26:00.001+01:00</published><updated>2007-02-04T22:26:29.497+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web2.0'/><title type='text'>Windows Live SDK</title><content type='html'>&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb264574.aspx"&gt;Windows Live SDK&lt;/a&gt; lanserades utan pompa och ståt i dagarna. Trots den ouppmärksammade lanseringen innehåller Windows Live SDK en hel del intressanta API:er till &lt;a href="http://blogg.joakimsunden.se/2006/03/windows-live-och-microsoft-gadgets.html#FlakeId=29890231&amp;amp;Height=77"&gt;Microsofts Live-tjänster&lt;/a&gt;&amp;nbsp;som också ytterligare förstärker bilden av att Microsoft öppnar upp sig allt mer som jag varit inne på &lt;a href="http://blogg.joakimsunden.se/2006/05/bygg-egna-atlas-kontroller-med-atlas.html"&gt;tidigare&lt;/a&gt;&amp;nbsp;(andra färska exempel är att man förra veckan &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/01/30/asp-net-ajax-1-0-source-code-released.aspx"&gt;släppte källkoden&lt;/a&gt; till ASP.NET AJAX). Windows Live SDK innehåller följande digra samling API:er och SDK:er:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa983013.aspx"&gt;Microsoft adCenter API&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb251794.aspx"&gt;Windows Live Search Web Service API&lt;/a&gt; .  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa751024.aspx"&gt;Messenger Activity SDK&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa905655.aspx"&gt;Windows Live Messenger Add-In API&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb259702.aspx"&gt;Windows Live Spaces MetaWeblog API&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa973045.aspx"&gt;Virtual Earth Map Control SDK, Version 4.0&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb259752.aspx"&gt;Windows Live Alerts SDK&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb259721.aspx"&gt;Windows Live Custom Domains SDK&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb246473.aspx"&gt;Windows Live Expo (Beta) API&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa479889.aspx"&gt;Windows Live ID Service&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa336199.aspx"&gt;Windows Live Toolbar Custom Button SDK&lt;/a&gt;.  &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa738906.aspx"&gt;Windows Live Writer SDK&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Kolla även in &lt;a href="http://dev.live.com/"&gt;http://dev.live.com/&lt;/a&gt; och &lt;a href="http://msdn2.microsoft.com/en-us/live/default.aspx"&gt;Windows Live Developer Center&lt;/a&gt; om du vill följa vad som händer på denna front i framtiden.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-5250040134149275754?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/5250040134149275754/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=5250040134149275754' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5250040134149275754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5250040134149275754'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/02/windows-live-sdk.html' title='Windows Live SDK'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-5577096101916273111</id><published>2007-02-01T22:46:00.001+01:00</published><updated>2007-02-01T22:46:53.246+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>Mitt Windows Experience Index</title><content type='html'>&lt;p&gt;Nu när Windows Vista har lanserats på riktigt har &lt;a href="http://www.nvidia.com/"&gt;Nvidia&lt;/a&gt; äntligen släppt drivrutiner som fungerar med mitt GeForce Go 7600 512 MB grafikkort. Trots att jag kört Vista sedan i &lt;a href="http://blogg.joakimsunden.se/2006/07/torrperiod.html"&gt;somras&lt;/a&gt; är det först nu jag kan njuta fullt ut&amp;nbsp;av det nya vackra operativsystemet. Och jag måste säga att jag verkligen gillar utseendet - allt från &lt;a href="http://images.google.se/images?q=windows+vista+aero&amp;amp;hl=sv&amp;amp;sa=X&amp;amp;oi=images&amp;amp;ct=title"&gt;Aero&lt;/a&gt; till det nya teckensnittet.&lt;/p&gt; &lt;p&gt;Med drivrutinerna på plats kan jag också slutligen få reda på vad mitt Windows Experience Index är. Detta Experience Index är ett sorts mått på din dators prestanda och tanken är att det ska gå att använda för att avgöra vilka spel och andra programvaror din dator klarar av. Med tanke på att en "base score of 5 were the highest performing computers available when Windows&amp;nbsp;Vista was released", enligt operativsystemets hjälptext om ämnet,&amp;nbsp;verkar min nya bärbara &lt;a href="http://www.zepto.se/Default.aspx?page=NotebookSummaryPage&amp;amp;notebookid=huqig2mkma6F5w"&gt;Zepto 6615WD&lt;/a&gt;&amp;nbsp;hålla vad vissa tester har &lt;a href="http://www.zepto.se/Specifications/sv/PC%20f%C3%B6r%20ALLA%20nr7%202006%20-%20Zepto%20Znote%206615WD%20b%C3%A4st%20i%20test.pdf"&gt;utlovat&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.varia.nu/joakim/images/MittWindowsExperienceIndex_14055/ExperienceIndex6.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="179" src="http://www.varia.nu/joakim/images/MittWindowsExperienceIndex_14055/ExperienceIndex_thumb4.jpg" width="453" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hur ser ditt Experience Index ut? Vinner jag? ;-)&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-5577096101916273111?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/5577096101916273111/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=5577096101916273111' title='6 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5577096101916273111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5577096101916273111'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/02/mitt-windows-experience-index.html' title='Mitt Windows Experience Index'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-7916663084190357636</id><published>2007-01-26T07:37:00.000+01:00</published><updated>2007-02-18T21:02:09.625+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bästa praxis'/><title type='text'>.NET bästa praxis: properties</title><content type='html'>För ganska länge sedan hjälpte jag ett företag att vidareutveckla ett system på .NET-plattformen (ASP.NET, IIS, SQL Server) med ett av företaget egenutvecklat ramverk som skulle användas för alla deras webbapplikationer. Personen som hade varit "arkitekt" för ramverket kom från en Java- och Oraclebakgrund och hade ingen större erfarenhet av .NET. C#-syntax är inte så svårt att lära sig, särskilt inte om man kan Java, och har man flera års erfarenhet av att utveckla Java-baserade webblösningar borde det väl inte vara så svårt att få till något för .NET?&lt;br /&gt;&lt;br /&gt;Så tycks man ha resonerat, men tyvärr är det ju inte riktigt så enkelt i verkligheten. Förutom en syntax måste man ha hyfsad koll på .NET Frameworks klassbibliotek och god kännedom om hur modellen för att utveckla webbapplikationer ser ut för ASP.NET; den skiljer sig en del från JSP och andra modeller. Men även om man läser in sig på dessa delar saknas en mycket viktig del, nämligen bästa praxis ("best practices"). Hur mycket man än vet om vad man &lt;em&gt;kan&lt;/em&gt; göra med .NET, är det en annan fråga vad man &lt;em&gt;bör&lt;/em&gt; göra.&lt;br /&gt;&lt;br /&gt;För att fortsätta med exemplet med "Java-arkitekten"; i Java använder man get- och set-metoder för att kapsla in privata medlemmar. Exempel:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;private int mAntal;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public int getAntal()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;return mAntal;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public void setAntal(int varde)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;mAntal = varde;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I .NET använder man isället egenskaper, "properties":&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;private int mAntal;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;public int Antal&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;get { return mAntal; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;set { mAntal = value; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nu kan man lätt få för sig att det inte har någon betydelse vad man använder, utan att det mer är en fråga om tycke och smak, som till exempel när det gäller vilken rad man ska ha första måsvingen på. &lt;a href="http://www.brendonmatheson.com/2006/12/19/back_to_basics_the_perfect_net_bean_property.html"&gt;En del&lt;/a&gt; tror till och med (&lt;a href="http://www.theserverside.net/news/thread.tss?thread_id=43793#225415"&gt;felaktigt&lt;/a&gt;) att get- och set-metoder är att föredra, även i .NET. Faktum är dock att det finns flera goda skäl till att properties är bästa praxis i .NET.&lt;br /&gt;&lt;br /&gt;I .NET används i regel properties för att representera data, medan metoder används för att utföra handlingar på ett objekt. Genom att utrusta sin klass med en property signalerar man därför att det handlar om enkel dataåtkomst medan metodnamn med "Get" framför propertyns namn (t.ex. GetAntal i exemplet ovan) reserveras för att ge en fingervisning om att det då istället handlar om en relativt kostsam operation. Om man regelmässigt använder getters och setters förlorar man denna informativa distinktion.&lt;br /&gt;&lt;br /&gt;Genom att namnet för både läsning och skrivning är detsamma för en property är det enkelt att använda reflection för properties. Det gör att många funktioner och verktyg har stöd för propertys, men inte för get- och set-metoder, till exempel databinding och designläget i Visual Studio som automatiskt visar properties på egentillverkade kontroller ("custom controls").&lt;br /&gt;&lt;br /&gt;Sedan kan man förstås fråga sig varför man bör använda något annat än publika medlemsvariabler överhuvudtaget, oavsett om väljer properties eller get- och set-metoder. Till de främsta skälen hör, förutom vad som ovan nämnts, att man med properties (eller motsvarande) enkelt kan lägga till validering eller transformering utan att behöva ändra klassens interface. Eftersom man oftast inte kan vara helt säker på att detta inte kommer att behövas bör man alltid använda properties redan från början; att ändra en publik medlemsvariabel till en property i efterhand bryter nämligen binär kompatibilitet och innebär att du måste kompilera om beroende kod.&lt;br /&gt;&lt;br /&gt;Det här är det första inlägget i vad som är tänkt att bli en serie om bästa praxis för programmering och design, särskilt på .NET-plattformen, som ni kommer att hitta under taggen "&lt;a href="http://blogg.joakimsunden.se/search/label/BÃ¤sta%20praxis"&gt;Bästa praxis&lt;/a&gt;" på denna blogg. Kom gärna med kommentarer, invändningar eller kompletteringar! (Använd kommentarsfunktionen.)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPPDATERING:&lt;/strong&gt; Jag använde tidigare getter/setter som benämning på get- och set-metoder, men det slog mig att även en property kan kallas getter/setter så jag använder nu konsekvent "get- och set-metoder".&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPPDATERING 2:&lt;/strong&gt; Delar av ovanstående är baserat på riktlinjer från &lt;a href="http://blogg.joakimsunden.se/2006/09/framework-design-guidelines.html"&gt;Framework Design Guidelines&lt;/a&gt;. En av kommentatorerna i boken, Rico Mariani, har många tänkvärda kommentarer utifrån ett prestandaperspektiv, så även gällande properties vs. public fields. Hans &lt;a href="http://blogs.msdn.com/ricom/archive/2006/08/31/performance-quiz-11-ten-questions-on-value-based-programming.aspx"&gt;bloggpost&lt;/a&gt; om just detta är en bra påminnelse om att det ibland kan vara nödvändigt att frångå vad som i vanliga fall är bästa praxis. Även &lt;a href="http://blogs.msdn.com/ericgu/archive/2007/02/01/properties-vs-public-fields-redux.aspx"&gt;Eric Gunnersons kommentar&lt;/a&gt; i ämnet är läsvärd.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-7916663084190357636?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/7916663084190357636/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=7916663084190357636' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7916663084190357636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7916663084190357636'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/net-bsta-praxis-properties.html' title='.NET bästa praxis: properties'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-526037937301581300</id><published>2007-01-23T22:12:00.001+01:00</published><updated>2007-01-23T22:14:17.987+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><title type='text'>ASP.NET AJAX är här!</title><content type='html'>&lt;p&gt;Nu har Microsoft släppt &lt;a href="http://ajax.asp.net/"&gt;ASP.NET AJAX 1.0&lt;/a&gt; så nu är det bara att tuta och köra. &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/01/23/asp-net-ajax-1-0-released.aspx"&gt;Läs mer&lt;/a&gt; på &lt;a href="http://weblogs.asp.net/scottgu/default.aspx"&gt;Scott Guthries blogg&lt;/a&gt;. I samband med detta släpptes även fyra nya kontroller i projektet &lt;a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=AtlasControlToolkit"&gt;ASP.NET AJAX Control Toolkit&lt;/a&gt; (länkarna nedan tar dig till live-demos av kontrollerna):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ajax.asp.net/ajaxtoolkit/AutoComplete/AutoComplete.aspx"&gt;AutoComplete&lt;/a&gt;. En Extender-kontroll som förser din TextBox med automatisk komplettering av inmatade värden utifrån en web service som du kopplar den till.&lt;/li&gt;&lt;li&gt;&lt;a href="http://ajax.asp.net/ajaxtoolkit/Calendar/Calendar.aspx"&gt;Calendar&lt;/a&gt;. Extender som ger en "DatePicker" till din TextBox.&lt;/li&gt;&lt;li&gt;&lt;a href="http://ajax.asp.net/ajaxtoolkit/MaskedEdit/MaskedEdit.aspx"&gt;MaskedEdit&lt;/a&gt;. Ännu en Extender som vid fokus utrustar din TextBox med anvisningar för hur den ska fyllas i (t.ex. ett särskilt datumformat i formen "____-__-__") samt validering av tillåtna värden (t.ex. siffror inom ett visst intervall).&lt;/li&gt;&lt;li&gt;&lt;a href="http://ajax.asp.net/ajaxtoolkit/Tabs/Tabs.aspx"&gt;Tabs&lt;/a&gt;. Växla mellan flikar och spara utan att ladda om sidan (PostBack).&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-526037937301581300?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/526037937301581300/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=526037937301581300' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/526037937301581300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/526037937301581300'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/aspnet-ajax-r-hr.html' title='ASP.NET AJAX är här!'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-5603897453791503341</id><published>2007-01-22T20:02:00.001+01:00</published><updated>2007-01-22T20:02:56.038+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web2.0'/><title type='text'>Hur ser ditt IP-nummer ut?</title><content type='html'>&lt;p&gt;&lt;a href="http://www.varia.nu/joakim/images/HurserdittIPnummerut_119EE/MyIdenticon4.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="32" src="http://www.varia.nu/joakim/images/HurserdittIPnummerut_119EE/MyIdenticon_thumb2.jpg" width="32" align="right" border="0"&gt;&lt;/a&gt; &lt;a href="http://www.docuverse.com/blog/donpark/"&gt;Don Park&lt;/a&gt; har hittat på ett sätt att visualisera människors IP-nummer som ett s.k. "9 Block Pattern". Han kallar sitt påhitt för "identicon" och det är inte bara för skojs skull:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;I think identicons have many use cases. One use is embedding them in wiki pages to identify authors. Another is using them in CRM to identify customers. I can go on and on. It's not just about IP addresses but information that tends to move in 'herds'.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Den lilla bilden du ser är min "identicon". Du kan se din egen i kommentarfunktionen på &lt;a href="http://www.docuverse.com/blog/donpark/"&gt;Don Parks blogg&lt;/a&gt; eller &lt;a href="http://www.codinghorror.com/blog/archives/000774.html"&gt;ladda ned .NET-kod&lt;/a&gt; för att själv skapa identicons från &lt;a href="http://www.codinghorror.com/"&gt;Coding Horror&lt;/a&gt; (där jag först läste om detta).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-5603897453791503341?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/5603897453791503341/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=5603897453791503341' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5603897453791503341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5603897453791503341'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/hur-ser-ditt-ip-nummer-ut.html' title='Hur ser ditt IP-nummer ut?'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2606021157651354636</id><published>2007-01-21T21:12:00.001+01:00</published><updated>2007-01-21T21:12:20.637+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>Dags för en universalfjärrkontroll?</title><content type='html'>&lt;p&gt;När detta är vad du måste rada upp för att se på TV inser du att det är dags att införskaffa något sorts universalfjärrkontroll...&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.varia.nu/joakim/images/Dagsfrenuniversalfjrrkontroll_12686/Remotes2.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="300" src="http://www.varia.nu/joakim/images/Dagsfrenuniversalfjrrkontroll_12686/Remotes_thumb.jpg" width="452" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Om jag nu bara kunde använda mobilen för att svara på vanliga telefonsamtal och lagra alla betal- och kreditkort, bensinkort, medlemskort, bonuskort o.s.v. på ett enda kort så skulle min lycka vara gjord.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2606021157651354636?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2606021157651354636/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2606021157651354636' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2606021157651354636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2606021157651354636'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/dags-fr-en-universalfjrrkontroll.html' title='Dags för en universalfjärrkontroll?'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-239649197763597072</id><published>2007-01-21T20:51:00.001+01:00</published><updated>2007-05-22T20:54:42.542+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='OO'/><title type='text'>Domain Driven Design Quickly</title><content type='html'>&lt;p&gt;För den som är intresserad av Domain-Driven Design (t.ex. efter att ha läst mitt inlägg om Jimmy Nilssons bok "Applying Domain-Driven Desgin and Patterns") kan gratisboken "&lt;a href="http://www.infoq.com/news/2006/12/domain-driven-design"&gt;Domain Driven Design Quickly&lt;/a&gt;" (nedladdningsbar PDF) från &lt;a href="http://www.infoq.com/"&gt;InfoQ&lt;/a&gt; vara av intresse. Ja, även själva InfoQ-sajten för den delen; de vänder sig enligt egen utsago huvudsakligen till "the technical architect, technical team lead (senior developer), and project manager" och har artiklar, videomaterial och miniböcker indelade i de fem kategorierna Java, .NET, SOA, Ruby och Agile.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-239649197763597072?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/239649197763597072/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=239649197763597072' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/239649197763597072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/239649197763597072'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/domain-driven-design-quickly.html' title='Domain Driven Design Quickly'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-7928975373013763087</id><published>2007-01-17T23:29:00.001+01:00</published><updated>2007-05-22T20:54:42.542+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='OO'/><category scheme='http://www.blogger.com/atom/ns#' term='Bok'/><title type='text'>Applying Domain-Driven Design and Patterns</title><content type='html'>&lt;p&gt;&lt;a href="http://domaindrivendesign.org/"&gt;&lt;a href="http://www.varia.nu/joakim/images/ApplyingDomainDrivenDesignandPatterns_12E2C/ADDDP6.jpg" atomicselection="true"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="160" src="http://www.varia.nu/joakim/images/ApplyingDomainDrivenDesignandPatterns_12E2C/ADDDP_thumb4.jpg" width="123" align="right" border="0" /&gt;&lt;/a&gt;Domain-Driven Design&lt;/a&gt; (DDD) är en design- och utvecklingsmetodik  som det talas mer och mer om. Eric Evans, den mest namnkunnige DDD-förespråkaren tillika författaren till "&lt;a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/sr=1-1/qid=1168980426/ref=sr_1_1/104-9134970-1990310?ie=UTF8&amp;s=books"&gt;Domain-Driven Design: Tackling Complexity in the Heart of Software&lt;/a&gt;", sammanfattar DDD på följande vis:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Fundamentally, DDD is the principle that we should be focusing on the deep issues of the domain our users are engaged in, that the best part of our minds should be devoted to understanding that domain, and collaborating with experts in that domain to wrestle it into a conceptual form that we can use to build powerful, flexible software. ("&lt;a href="http://www.infoq.com/articles/eric-evans-ddd-matters-today"&gt;Eric Evans on why DDD Matters Today&lt;/a&gt;", &lt;a href="http://www.infoq.com/"&gt;http://www.infoq.com/&lt;/a&gt;)&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I praktiken handlar det mycket om gammal hederlig objektorienterad design och analys, fokus på en renodlad domän-/verksamhetsmodell och verksamhetslogik (innebär ofta att någon sorts O/R-mapper används för att slippa lägga onödig tid och energi på dataaccess/persitering) och betoning av ett så kallat "ubiquitous language" (allestädes närvarande språk), d.v.s. ett gemensamt språk för, och en god kontinuerlig dialog mellan, verksamhet och utvecklingsprojekt. För läsare av den här bloggen kanske det bör tilläggas att DDD huvudsakligen har sina rötter i Java-världen, men metodiken är på frammarsch i .NET-världen också.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.jnsk.se/"&gt;Jimmy Nilsson&lt;/a&gt; är en svensk utvecklare och Microsoft Most Valuable Professional (MVP) inom Solutions Architecture som tillsammans med Eric Evans och kanadensiskan Ying Hu driver &lt;a href="http://domaindrivendesign.org"&gt;domaindrivendesign.org&lt;/a&gt;. För ett halvår sedan utkom han med boken "&lt;a href="http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202/ref=pd_sim_b_2/104-9134970-1990310"&gt;Applying Domain-Driven Design and Patterns: With Examples in C# and .NET&lt;/a&gt;" (ADDDP; utgiven av Addison-Wesley, 2006).&lt;/p&gt;&lt;p&gt;Jimmy Nilssons bok handlar förstås till stor del om DDD, men en hel del andra intressanta ämnen konkurrerar om utrymmet bland bokens ca 500 sidor. Bland dessa ämnen framträder &lt;a href="http://en.wikipedia.org/wiki/Test_driven_development"&gt;Test Driven Development&lt;/a&gt; (TDD) med &lt;a href="http://www.refactoring.com/"&gt;refactoring&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)"&gt;design patterns&lt;/a&gt; och &lt;a href="http://blogg.joakimsunden.se/2006/05/or-mapping-vad-r-det.html"&gt;O/R-mapping&lt;/a&gt; (med &lt;a href="http://www.nhibernate.org/"&gt;NHibernate&lt;/a&gt;) som de mest centrala och för framställningen genomgående. Andra ämnen som tas upp till behandling är bl.a. &lt;a href="http://en.wikipedia.org/wiki/Service_Oriented_Architecture"&gt;Service Oriented Architecture&lt;/a&gt; (SOA), &lt;a href="http://en.wikipedia.org/wiki/Aspect_Oriented_Programming"&gt;Aspect Oriented Programming&lt;/a&gt; (AOP) med &lt;a href="http://www.springframework.net/"&gt;Spring.NET&lt;/a&gt; och hur man utvecklar testbara gränssnitt.&lt;/p&gt;&lt;p&gt;Bokens titel gör klart att den handlar om tillämpning av DDD och detta är ett löfte som infrias. Efter att i bokens första del av fem ha tecknat en bakgrund med beskrivningar av DDD, Design patterns och TDD, som redan den karakteriseras av många exempel, kastar sig Nilsson i den andra delen över ett exempelprojekt i form av en kort och koncis, men inte alls okomplicerad, kravlista. I tämligen detaljerade kodexempel visar han steg för steg hur man kan använda sig av TDD för att ta fram och förfina sin domänmodell och hur man kan hålla den fri från beroenden till exempelvis databas/persistering.&lt;/p&gt;&lt;p&gt;Just renodlingen av modellen och önskan att hålla isär den från annan kod för att verkligen kunna fokusera på domänproblemen är grundläggande i DDD och därmed också ett skäl till att O/R-mappers är så populära inom denna metodik, så även i ADDDP varför en icke föraktlig del (den tredje) av boken som sagt handlar om detta. Nilsson, med en stadig bakgrund inom databasutveckling, vrider och vänder på för- och nackdelarna med O/R-mappers, vilka kriterierna för en bra O/R-mapper är och slutligen hur exemplet NHibernate kan användas tillsammans med den domänmodell vi tillsammans - ja, det känns nästan så! - tagit fram under bokens gång.&lt;/p&gt;&lt;p&gt;Det märks att författaren har stor erfarenhet av såväl utvecklings- som verksamhetsproblematik och det är uppfriskande att se Nilsson söka upp de problemställningar som så ofta förekommer i verkliga projekt, men är ack så sällsynta i de många tillrättalagda handledningar man kan hitta i dokumentation och exempel på Internet, såväl från Microsoft som från andra, eller i andra böcker för den delen.&lt;/p&gt;&lt;p&gt;Bokens näst sista del handlar om "other design techniques to keep an eye on and start using" (med några av de tidigare nämnda ämnena så som SOA och AOP) och den sista är ett appendix med exempel på hur andra tillfrågade utvecklare skulle ha löst samma kravlista som Nilsson löst på sitt sätt i resten av boken. Båda dessa delar är nästan uteslutande författade av gästskribenter (bl.a. bloggarna &lt;a href="http://udidahan.weblogs.us/"&gt;Udi Dahan&lt;/a&gt; och &lt;a href="http://www.matshelander.com/wordpress/"&gt;Mats Helander&lt;/a&gt;). Några av dessa skribenter - och ytterligare ett par där till - har dessutom skrivit dels kortare texter, dels små noter inskjutna lite här och där i hela Nilssons framställning.&lt;/p&gt;&lt;p&gt;Jimmy Nilssons stil är en "prövande" stil, som på sätt och vis liknar den programmeringsstil han förordar, med många frågor, försök till lösningar, nya frågor och "refactoring" av de tidigare svaren. Lägg till detta en mycket ödmjuk hållning i övrigt och stilen blir stundtals för prövande och osäker med ständiga reservationer och försäkringar om att det ena eller andra inte är "the silver bullet". Samtidigt är det också denna stil som involverar läsaren och ger en inblick i hur en duktig utvecklare går till väga för att lösa ett problem, ja till och med en känsla för hur han tänker. Ett större problem blir det dock i kombination med gästtexterna, de insprängda noterna och bokens bredd av ämnen; det blir helt enkelt lite väl osammanhållet och spretigt ibland, vissa avsnitt känns malplacerade, t.e.x Udi Dahans annars intressanta text om SOA och den del av boken som handlar om designtekniker att hålla ett öga på kanske borde ha hamnat i bokens appendix istället för kapitlet med alternativa lösningsförslag.&lt;/p&gt;&lt;p&gt;På det stora hela utgör dessa problem dock inga avgörande invändningar mot Jimmy Nilssons bok som utan tvekan är mycket läsvärd. För den som likt jag är intresserad av, men ännu inte sysslat så mycket med, TDD och O/R-mappers är bokens praktiska orientering en guldgruva och en inspirationskälla till att äntligen komma igång.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-7928975373013763087?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/7928975373013763087/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=7928975373013763087' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7928975373013763087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/7928975373013763087'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/applying-domain-driven-design-and.html' title='Applying Domain-Driven Design and Patterns'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2129688141977661429</id><published>2007-01-17T06:31:00.000+01:00</published><updated>2007-01-17T09:27:49.820+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='Web2.0'/><title type='text'>Pageflakes</title><content type='html'>&lt;a href="http://www.pageflakes.com/"&gt;Pageflakes&lt;/a&gt; är en &lt;a href="http://blogs.zdnet.com/web2explorer/?p=127"&gt;AJAX Desktop&lt;/a&gt; (se t.ex. min &lt;a href="http://blogg.joakimsunden.se/2006/03/windows-live-och-microsoft-gadgets.html#FlakeId=29890231&amp;Height=461"&gt;tidigare post&lt;/a&gt; om Windows Live) som är &lt;a href="http://ajax.asp.net/default.aspx?tabid=47&amp;amp;subtabid=476&amp;subtabindex=2&amp;amp;as=1"&gt;byggd med&lt;/a&gt; Microsoft ASP.NET AJAX. Jag har använt den som startsida en tid eftersom det är ett enkelt och bekvämt sätt att samla sådant som jag vill ha snabb och enkel tillgång till samtidigt som jag håller mig uppdaterad/påminns varje gång jag startar en ny webbläsarsession. Jag använder den framför allt för att följa ett par av de mest uppdaterade och intressanta bloggarna jag följer samt för mina favoriter/bokmärken på &lt;a href="http://del.icio.us"&gt;del.icio.us&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;En häftig feature med Pageflakes är att man kan mycket enkelt kan exportera de gadgets (eller "flakes" som de kallas här) som finns till sin hemsida eller blogg. Jag har till exempel lagt in mina del.icio.us-favoriter i högerkolumnen här på min blogg. Det är så enkelt att till och med din mormor skulle klara av det. Omar AL Zabir, Microsoft MVP (Most Valuable Professional) och grundare av Pageflakes, skriver &lt;a href="http://msmvps.com/blogs/omar/archive/2007/01/12/enrich-your-blog-website-with-cool-widgets.aspx"&gt;om detta&lt;/a&gt; i sin &lt;a href="http://msmvps.com/blogs/omar/"&gt;blogg&lt;/a&gt;. Där finns också en hel del matnyttigt för den som använder ASP.NET AJAX. Kolla även in hans &lt;a href="http://www.oazabir.com/"&gt;hemsida&lt;/a&gt; som är ett ganska coolt showcase för vad man kan åstadkomma med JavaScript och DHTML.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2129688141977661429?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2129688141977661429/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2129688141977661429' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2129688141977661429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2129688141977661429'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/pageflakes.html' title='Pageflakes'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-3678397026091198401</id><published>2007-01-14T18:27:00.001+01:00</published><updated>2007-01-14T18:27:49.218+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MIX07'/><title type='text'>MIX07 vs MIX06</title><content type='html'>&lt;p&gt;Jag &lt;a href="http://blogg.joakimsunden.se/2006/11/mix07.html"&gt;reflekterade tidigare&lt;/a&gt; omkring &lt;a href="http://www.visitmix.com/"&gt;MIX07&lt;/a&gt; och konstaterade att det måste vara svårt att skapa samma attraktionskraft och hype detta år som föregående. Nu har det börjat komma en del information kring &lt;a href="http://visitmix.com/bios/"&gt;keynotes&lt;/a&gt;, &lt;a href="https://content.visitmix.com/public/sessions.aspx"&gt;sessioner&lt;/a&gt; m.m. som förstärker mitt första intryck. Ämnena är ungefär samma som förra året: Microsoft AJAX (Atlas), WPF, IE7, RSS, Windows Live o.s.v. På många sätt kanske årets innehåll är mer intressant eftersom teknikerna inte längre är i betastadiet och flera av sessionerna verkar gå mer på djupet, men om man besökte förra årets konferens och har hängt med hyfsat i teknikernas utveckling sedan dess känns inte årets upplaga lika spännande.&lt;/p&gt; &lt;p&gt;Jag tror däremot att MIX07 har en hel del att erbjuda beslutsfattare och andra som är intresserade av affärsmodeller och hur man kan dra nytta av de olika teknikerna. Om jag skulle få förmånen att besöka årets konferens är det sessioner kring dessa ämnen som skulle få min uppmärksamhet. Vi får väl se vad chefen tycker...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-3678397026091198401?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/3678397026091198401/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=3678397026091198401' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3678397026091198401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3678397026091198401'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/mix07-vs-mix06.html' title='MIX07 vs MIX06'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-1001937631289802514</id><published>2007-01-14T15:29:00.003+01:00</published><updated>2007-01-14T15:29:33.436+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web2.0'/><title type='text'>Snap Preview Anywhere</title><content type='html'>&lt;p&gt;&lt;a href="http://www.snap.com/"&gt;Snap&lt;/a&gt; är en ny söktjänst som erbjuder ett annorlunda sätt att söka på webben. Den mest intressanta delen handlar om det visuella,&amp;nbsp;hur sökresultatet presenteras. Utöver den vanliga sökresultatlistningen ägnas en stor del av skärmutrymmet åt att förhandsvisa hur sidorna som döljer sig bakom länkarna i sökresultatet ser ut.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.varia.nu/joakim/images/SnapPreviewAnywhere_14043/Snap8.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="315" alt="Snap.com" src="http://www.varia.nu/joakim/images/SnapPreviewAnywhere_14043/Snap_thumb6.jpg" width="420" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Det häftigaste med Snap är dock inte själva sökmotorn utan den finess som heter &lt;a href="http://www.snap.com/about/spa1A.php"&gt;Snap Preview Anywhere&lt;/a&gt;&amp;nbsp;och som du från och med i dag kan åtnjuta på denna blogg. Genom att klistra in en liten JavaScript-kodsnutt i din bloggmall/hemsida får alla länkar på den en liten förhandsvisning av hur sidan det länkas till ser ut. Det här är en finess jag har efterfrågat länge, särskilt för bloggar eftersom bloggare ofta lägger in länkar lite överallt i texten utan att tydliggöra var de leder. Med Snap Preview Anywhere kan jag stilla min nyfikenhet utan att behöva lämna texten jag läser&amp;nbsp;eller öppna en massa nya webbläsarfönster. Testa själv&amp;nbsp;med&amp;nbsp;länkarna i denna blogg och&amp;nbsp;om du gillar vad du ser kan du mycket enkelt skaffa Snap Preview Anyhwere själv &lt;a href="http://www.snap.com/about/spa1A.php"&gt;här&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-1001937631289802514?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/1001937631289802514/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=1001937631289802514' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/1001937631289802514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/1001937631289802514'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/snap-preview-anywhere.html' title='Snap Preview Anywhere'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-5502951620850661917</id><published>2007-01-13T14:06:00.001+01:00</published><updated>2007-01-18T08:07:59.526+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><category scheme='http://www.blogger.com/atom/ns#' term='English'/><title type='text'>Five Things People Don't Know About Me</title><content type='html'>&lt;p&gt;I am IT! I have been &lt;a href="http://blogs.msdn.com/johanl/archive/2007/01/11/tagged.aspx"&gt;tagged by Johan Lindfors&lt;/a&gt; and have to tell you five things you probably don't know about me (the "5 Things People Don't Know About Me" meme is of English speaking origin, hence the English).&lt;/p&gt;&lt;ul&gt;&lt;li&gt;I arrived to Uppsala University to study political science and philosophy. The orientation of my education changed slightly over the years and I eventually ended up with a bachelor’s degree in History of Science and Ideas (Idé- och lärdomshistoria). I wrote my paper about the Swedish editor and writer Leonard Ljunglund (1867-1946) and hoped for a while to be able to write a Ph.D. thesis about the Lebensphilosophie (Bergson, Dilthey, Nietzsche, Schopenhauer, among others) around 1900.&lt;/li&gt;&lt;li&gt;Until I reached the age of 20 something I practically only ate meat, primarily pure beef, and potatoes. I never ate fish or pizza (did not even taste them once as I can remember), avoided vegetables and rice, sauces, gratins etc. I mostly ate plain burgers (no mayo, cheese or vegetables!) or steak and fries (no sauce or vegetables). I did not even eat pasta except spaghetti with a "sauce" made only out of minced meat and spices. When I was about 25 and met my fiancé I turned 180 degrees and became a vegetarian. Later I also added fish and shellfish to my diet (my fiancé and two daughters are still 100% vegetarians though).&lt;/li&gt;&lt;li&gt;I used to be politically engaged. I opposed the current Prime Minister Fredrik Reinfeldt as he battled his way to Chairman of Moderata Ungdomsförbundet in the early 90s and I was the Vice Chairman of the political student organization the current Minister for Finance Anders E. Borg chaired a few years earlier.&lt;/li&gt;&lt;li&gt;When it was time for me to be at kindergarten (2 years old) I started to cry as soon as my parents left me there. So instead of kindergarten, my daycare was provided by my paternal grandparents Albin and Ingeborg. Perhaps this explains the somewhat "spoiled" eating habits I mentioned as my second thing.&lt;/li&gt;&lt;li&gt;As you may have seen in my profile's picture of me, I am wearing both glasses and a goatee. I am not particularly fond of either (I'd prefer contact lenses and a clean shave), but my fiancé insists it suits me and who am I to criticize her apperently good taste in men...&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I'm tagging the following five (actually six) bloggers:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://buzzfrog.blogs.com/zabrak/"&gt;Dag König&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jensgustavsson.se/"&gt;Jens Gustavsson&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ljusberg.se/blogs/smorakning/default.aspx"&gt;Anders Ljusberg&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blog.noop.se/default.aspx"&gt;Magnus Mårtensson&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.2xsundblad.com/cs/blogs/stenandper/default.aspx"&gt;Sten och Per Sundblad&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;You're it!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-5502951620850661917?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/5502951620850661917/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=5502951620850661917' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5502951620850661917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/5502951620850661917'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/five-things-people-don-know-about-me.html' title='Five Things People Don&amp;#39;t Know About Me'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2260038593588106444</id><published>2007-01-12T11:22:00.000+01:00</published><updated>2007-01-12T11:31:24.965+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>Ny bloggadress: http://blogg.joakimsunden.se/</title><content type='html'>Efter mycket om och men verkar det nu som om min nya domän slutligen fungerar. De gamla adresserna kommer att fortsätta fungera under en tid framöver, men från och med nu kommer alltså &lt;a href="http://blogg.joakimsunden.se/"&gt;http://blogg.joakimsunden.se/&lt;/a&gt; att vara den riktiga adressen till denna blogg, så nu är det dags att ändra era bokmärken/favoriter om ni inte redan gjort det. Om ni prenumererar på &lt;a href="http://blogg.joakimsunden.se/feeds/posts/default?alt=rss"&gt;RSS &lt;/a&gt;eller &lt;a href="http://blogg.joakimsunden.se/feeds/posts/default"&gt;ATOM &lt;/a&gt;är det så klart nya adresser även för dessa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2260038593588106444?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2260038593588106444/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2260038593588106444' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2260038593588106444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2260038593588106444'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/ny-bloggadress-httpbloggjoakimsundense.html' title='Ny bloggadress: http://blogg.joakimsunden.se/'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2241291253693236496</id><published>2007-01-09T20:51:00.000+01:00</published><updated>2007-01-09T21:02:15.376+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web2.0'/><title type='text'>2006 års bästa "Web 2.0"-tjänster</title><content type='html'>I min &lt;a href="http://joakimsunden.blogspot.com/2005/12/web-20.html"&gt;första bloggpostning om Web 2.0&lt;/a&gt; för drygt ett år sedan länkade jag till Dion Hinchcliffes "&lt;a href="http://web2.wsj2.com/the_best_web_20_software_of_2005.htm"&gt;The Best Web 2.0 Software of 2005&lt;/a&gt;". Nu har Hinchcliffe, med en av de mest populära och läsvärda &lt;a href="http://web2.wsj2.com/"&gt;bloggarna&lt;/a&gt; om Web 2.0, gjort en &lt;a href="http://web2.wsj2.com/the_best_web_20_software_of_2006.htm"&gt;ny lista för 2006&lt;/a&gt; som innehåller en hel del förväntade kioskvältare (YouTube, MySpace, Netscape), men också en del mindre kända uppstickare. Det är en bra utgångspunkt och länksamling för den som är intresserad av Web 2.0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2241291253693236496?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2241291253693236496/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2241291253693236496' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2241291253693236496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2241291253693236496'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/2006-rs-bsta-web-20-tjnster.html' title='2006 års bästa &quot;Web 2.0&quot;-tjänster'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-8003770518063103471</id><published>2007-01-09T14:15:00.000+01:00</published><updated>2007-05-09T20:34:11.385+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Avega'/><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>Nytt! Nytt! Nytt!</title><content type='html'>Gott nytt år!&lt;br /&gt;&lt;br /&gt;Ny dotter: &lt;a href="http://www.flickr.com/photos/joakimsunden/330876434/in/set-72157594453832033/"&gt;Saga&lt;/a&gt;,  2006-12-22 20:21.&lt;br /&gt;&lt;br /&gt;Nytt jobb: konsult på &lt;a href="http://www.avega.se/"&gt;Avega&lt;/a&gt;, ledande inom systemarkitektur och integration i Stockholm.&lt;br /&gt;&lt;br /&gt;Ny bloggadress: &lt;a href="http://blogg.joakimsunden.se/"&gt;http://blogg.joakimsunden.se/&lt;/a&gt; Ändra era länkar och Atom-/RSS-prenumerationer. (Ändringen håller på att genomföras just nu vilket kan innebära bloggen inte kommer att vara tillgänglig under en kortare period.)&lt;br /&gt;&lt;br /&gt;Nytt bloggutseende: igen... (Eftersom den förra ärligt talat inte var särskilt snygg och inte heller funktionell på det vis jag hoppats och för att kunna dra nytta av ny funktionalitet hos &lt;a href="http://www.blogspot.com/"&gt;Blogspot/Blogger&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-8003770518063103471?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/8003770518063103471/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=8003770518063103471' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8003770518063103471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8003770518063103471'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2007/01/nytt-nytt-nytt.html' title='Nytt! Nytt! Nytt!'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-6044991698102110942</id><published>2006-12-18T23:44:00.001+01:00</published><updated>2006-12-18T23:44:24.810+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bok'/><title type='text'>Code Complete: A practical handbook of software construction</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: medium none; border-top: medium none; margin: 0px; border-left: medium none; border-bottom: medium none" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=joakimsundens-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0735619670" width="1" border="0"&gt;Steve McConnells &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FCode-Complete-Second-Steve-McConnell%2Fdp%2F0735619670%2Fsr%3D8-1%2Fqid%3D1166481518%3Fie%3DUTF8%26s%3Dbooks&amp;amp;tag=joakimsundens-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;”Code Complete: A practical handbook of software construction”&lt;/a&gt; (Microsoft Press, 1993) har länge tillhört programmeringslitteraturens klassiker. Den anses av många vara den definitiva guiden till mjukvarukonstruktion och har kallats för både programmerarens bibel och programmeringsmetodikens heliga graal. Trots de fantastiska lovords som östs över boken har jag länge tvekat att läsa den eftersom den är så pass gammal för ett sådant snabbföränderligt område som programmering. Den utkom förvisso i en andra utgåva häromåret (Microsoft Press, 2004), men jag var osäker på om den verkligen skulle vara väsentligt uppdaterad. Denna farhåga verkar jag för övrigt vara långt i från ensam att hysa angående denna bok; kanske bidrar bokens sidantal (960 sidor) till att man inte gärna chansar.  &lt;p&gt;Vad som ändå gjorde att jag slutligen läste boken var en kort, men initierad, användarrecension på Amazon.com som menade att andra utgåvan faktiskt är en rejält genom- och omarbetad sådan. Nu har jag inte möjlighet att jämföra med den första utgåvan (eftersom jag inte läst den), men jag kan däremot till fullo hålla med om att boken helt klart är mycket väl värd att läsa även i dag.  &lt;p&gt;Code Complete har enligt McConnell själv tillkommit för att överbrygga klyftan mellan den kunskap om mjukvarukonstruktion som finns bland professorer och ”industry gurus” å ena sidan och vanliga kommersiella utövare å den andra. Han citerar vetenskapliga studier som menar att det tar mellan 5 och 15 år för kunskapen hos den förra gruppen att nå fram till den senare – Code Complete är tänkt som en genväg som gör denna kunskap tillgänglig för programmerare här och nu. Boken är också full av hänvisningar till vetenskapliga studier och undersökningar av alla de slag. Jag tycker detta är en av bokens styrkor: välkända programmeringsprinciper får här förklaringar och uppbackning i hårda data. Dessutom strör McConnell små guldkorn av forskningsresultat genom hela boken, t.ex. att ett idealiskt variabelnamn ligger på någonstans mellan 10-16, eller i alla fall 8-20, tecken.  &lt;p&gt;Eftersom 50 till 65 procent av ett mjukvaruprojekt handlar om den aktivitet som kallas konstruktion och detta område trots detta är underrepresenterat i litteraturen har McConnell valt att låta detta ämne spela huvudrollen i Code Complete. Trots att detta syfte varit tydligt uttalat har en del av den kritik som ändå riktats mot boken gått ut på att den för ensidigt fokuserat på detta område. Jag tycker personligen absolut inte att det är en brist, men oavsett vad man tycker om detta kan man knappast undgå att imponeras av hur uttömmande McConnell lyckas beskriva ämnet för sin studie – en mer komplett bok om mjukvarukonstruktion och programmeringsmetodik är svår att föreställa sig om man vill att den ska vara heltäckande och samtidigt detaljrik.  &lt;p&gt;På de drygt 860 sidor av boken som återstår sedan man räknat bort index och den omfattande bibliografin, kan man läsa om allt från generella principer och grundfilosofi för mjukvarukonstruktion till konkreta riktlinjer för hur man bäst skriver en for-loop; från integrationsstrategier och systematisk uppföljning av testning till hur du bör utforma dina kommentarer och var du bu bör placera blanka rader mellan kodblocken; från statistiska bevis för vikten av ordentligt utformade krav och för hur programstorlek påverkar konstruktion till personliga resonemang om mjukvarukonstruktion som ett hantverk snarare än en ingenjörskonst och om vilka egenskaper en programmerare bör besitta för att bli framstående inom sitt förvärv. Så länge det gäller konstruktion finns det kort sagt inget ämne som är för stort eller för litet för att McConnell ska behandla det och oavsett storlek behandlar han dem med stor omsorg och har alltid personliga erfarenheter, vetenskapliga studier eller välgrundade argument att bidra med för att förtydliga, bevisa och övertyga.  &lt;p&gt;En kort genomgång av bokens beståndsdelar kan vara på sin plats. Code Complete är indelad i sju delar:  &lt;p&gt;&lt;strong&gt;1. Laying the Foundation (ca 70 sidor)&lt;br&gt;&lt;/strong&gt;De inledande kapitlen handlar om den grund som enligt McConnell måste vara på plats innan man kan börja med konstruktionen: framför allt problemformulering/vision, krav och arkitektur, men även val av programmeringsspråk, programmeringskonventioner/kodstandard och konstruktionspraxis (integrationsmetod, parprogrammering, obligatoriska enhetstester, verktyg för source control o.s.v.).  &lt;p&gt;&lt;strong&gt;2. Creating High Quality Code (160 s.)&lt;/strong&gt;&lt;br&gt;McConnell börjar med att slå fast det för resten av boken helt centrala “Software’s Primary Technical Imperative”: Managing Complexity. Med detta imperativ i bakhuvudet går han sedan igenom en rad välbekanta grundprinciper för mjukvarudesign, såsom enkelt, återanvändbart, löst kopplat, utbyggbart, lätt att förvalta. Från denna abstraktionsnivå fortsätter detaljerandet via klassiska byggstenar för design som ”real world objects”, abstraktion, inkapsling och arv, via designmönster ner till grunderna för klasser, riktlinjer för bra klassinterface och konstruktordesign. Slutligen landar vi i ett kapitel om rutiner; rutindesign, bra rutinnamn, hur lång en rutin får vara, hur rutinparametrar bör användas och vilken ordning de ska ha m.m. Ett kapitel om defensiv programmering (validering, felhantering, exceptions) och ett kapitel om Pseudocode Programming Process (PPP), lågnivådesign i form av pseudokod som sedan tjänar som kommentarer till koden, avslutar denna del av boken.  &lt;p&gt;&lt;strong&gt;3. Variables (110 s.)&lt;/strong&gt;&lt;br&gt;Här tar McConnell upp allt man behöver tänka på när det gäller variabler: hur och när de bäst initieras, hur länge de bör leva, hur ett bra namn ser ut beroende på typ och hur långt det ska vara, hur olika datatyper bör användas, när man ska använda arrays, varför man ska undvika globala variabler etcetera, etcetera.  &lt;p&gt;&lt;strong&gt;4. Statements (110 s.)&lt;br&gt;&lt;/strong&gt;Hur strukturerar du bäst dina koddeklarationer? I vilken ordning ska villkoren testas i if-satser med flera villkor? I case-satser? När bör du använda en while-loop och när passar en for-loop bättre? Hur och när ska loopens villkor kontrolleras? Hur får man lämna en loop? Hur och när använder man tabelldrivna metoder istället för komplicerade if-satser? När ska man använda parenteser? Ingenting får lämnas åt slumpen när det gäller att organisera och strukturera sin kod, enligt McConnell som här delger oss sina synpunkter på hur dessa och många andra liknande frågor bör besvaras. Avsnittet innehåller också ett referat av den klassiska debatten för och emot ”goto”.  &lt;p&gt;&lt;strong&gt;5. Code Improvements (190 s.)&lt;/strong&gt;&lt;br&gt;Denna del av boken handlar om hur man (fortfarande i konstruktionsfasen) kan förbättra kodens kvalitet genom utvecklartestning (och uppföljning av denna), ”collaborative construction” (parprogrammering, kodgranskning, kodinspektioner), debugging, refactoring och code-tuning. Särskilt avsnittet om ”collaborative construction” är intressant; även om jag läst en del XP-litteratur (eXtreme Programming) och därigenom tilltalats av parprogrammering, hade jag ingen aning om hur enig forskningen är om dessa teknikers (särskilt formella kodinspektioner) effektivitet när det gäller att kvalitetssäkra och undvika defekter i kod.  &lt;p&gt;&lt;strong&gt;6. System Considerations (180 s.)&lt;/strong&gt;&lt;br&gt;Programmets storlek, projektledning och projektmetod, integrationsmetod och utvecklingsverktyg är externa faktorer som i allra högsta grad påverkar konstruktionen. Här går McConnell igenom denna påverkan och kommer med förslag på hur man hanterar detta, t.ex. olika angreppssätt för integration, hur projektledare och ledning bör behandla utvecklare och hur ”managing your manager” ibland kan vara en nödvändighet.  &lt;p&gt;&lt;strong&gt;7. Craftsmanship (130 s.)&lt;br&gt;&lt;/strong&gt;Den avslutande delen av boken upptas till största delen av rekommendationer för layout, kodningsstil och hur man skriver självdokumenterande kod. Det handlar dels om vikten av gemensamma konventioner, dels om personliga åsikter i (ofta med en väl underbyggd argumentation så klart!) sådana gamla olösliga religiösa strider som på vilken rad den inledande måsvingen ska vara placerad. McConnell lyfter här också fram ett antal egenskaper han anser utmärker en god mjukvarukonstruktör (bl.a. ödmjukhet, nyfikenhet, intellektuell hederlighet, samarbetsvilja, kreativitet och disciplin). Bokens sista kapitel innehåller en rad tips på var man kan hitta mer information i såväl litteratur och tidskrifter som på nätet och genom användargrupper.  &lt;p&gt;Varje kapitel avslutas med listor med titlar och korta beskrivningar av böcker som fördjupar sig i ämnet för kapitlet i fråga. I slutet av många kapitel finns också ämnesindelade checklistor som man kan använda för att testa sin design/kod/layout mot de principer kapitlet redogjort för.  &lt;p&gt;För den som läst så här långt kommer det väl knappast som en överraskning att jag tycker att Code Complete är en mycket läsvärd bok. Faktum är att det kanske är en av de bästa, eller i alla fall för min vardag mest givande, böcker jag någonsin läst. Den har, om inte förändrat, i alla fall starkt påverkat det sätt jag vardagligen arbetar med och tänker på programmering. Väldigt många designprinciper och praktiska råd har jag kunnat tillämpa direkt i mitt dagliga kodningsarbete och för många saker jag ”alltid” tänkt på har jag nu fått en förklaring till varför jag gjort det och varför det är bra (jag har även fått veta att visa saker är dåliga och tvingats ändra mig ;-)). McConnells uppfordrande och auktoritativa tonläge har också inspirerat mig att ännu mer oförtrutet stå upp för genomtänkt design och noggrann kodning när deadlines kryper allt närmare och röster höjs för quick-and-dirty-lösningar som i slutändan ändå alltid straffar sig i form av fler defekter och svårare vidareutveckling och förvaltning.  &lt;p&gt;Naturligtvis har boken även ett par svagheter. Bland annat kan detaljrikedomen vara kvävande för vissa med rad efter rad med resonemang om parentesers placeringar, olika förslag på förkortningsregler, parametrars ordningsföljd etc. Jag vill dock gärna tro att många programmerare, likt jag själv, är intresserade av sådana detaljer; de starka känslor en diskussion om måsvingens placering brukar kunna väcka tyder i alla fall på det.  &lt;p&gt;Samtidigt som jag verkligen uppskattar all statistik och de flitiga citeringarna av vetenskapliga studierna är de också ett av bokens problem, om än ett mindre sådant. Ett antal hänvisningar är till studier utförda under tidigt 90-tal eller till och med 80- och 70-tal. Vid denna tid gav t.ex. utvecklingsmiljöerna inte utvecklaren samma stöd som i dag med färgkodning av syntax, automatisk komplettering av variabel- och typnamn m.m. Detta gör att en studie från 1990 om optimal längd på ett variabelnamn kanske inte äger samma värde som om den varit utförd på 2000-talet. Till McConnells försvar bör man dock tillägga att han, med goda skäl, är en stark förespråkare av kodgranskning, formella kodinspektioner och andra former av ”collaborative construction” där kodutskrifter förstås är av central betydelse.  &lt;p&gt;Sammanfattningsvis är Code Complete en modern klassiker inom programmeringslitteraturen som innehåller mycket matnyttigt för såväl erfarna utvecklare som nybörjare, ja för alla som på allvar är intresserade av att bli en bättre programmerare eller mjukvarukpnstruktör. Jag kan varmt rekommendera boken och hoppas att den har en lika positiv och inspirerande effekt på ditt yrkesliv som den redan haft på mitt.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-6044991698102110942?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/6044991698102110942/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=6044991698102110942' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/6044991698102110942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/6044991698102110942'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/12/code-complete-practical-handbook-of.html' title='Code Complete: A practical handbook of software construction'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-4300698349222001704</id><published>2006-11-21T22:50:00.001+01:00</published><updated>2006-11-21T22:50:05.633+01:00</updated><title type='text'>Windows Vista för nedladdning</title><content type='html'>&lt;p&gt;Sedan några dagar finns Windows Vista, liksom Office 2007,&amp;nbsp;tillgängligt för nedladdning för &lt;a href="http://msdn.microsoft.com/subscriptions/"&gt;MSDN-prenumeranter&lt;/a&gt;. Det officiella releasedatumet är som jag tidigare rapporterat den 30 november och då kommer Microsoft Sverige att anordna ett stort releaseparty i Stockholm. Jag kommer att vara där - kommer du?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-4300698349222001704?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/4300698349222001704/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=4300698349222001704' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/4300698349222001704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/4300698349222001704'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/11/windows-vista-fr-nedladdning.html' title='Windows Vista för nedladdning'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-8047477901896552990</id><published>2006-11-08T09:18:00.000+01:00</published><updated>2006-11-08T09:24:47.962+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><title type='text'>.NET Framework 3.0 och ASP.NET AJAX Beta 2 lanserat</title><content type='html'>&lt;a href="http://joakimsunden.blogspot.com/2006/11/net-framework-30-vad-r-det.html"&gt;Mycket riktigt&lt;/a&gt; tillkännagavs lanseringen av &lt;a href="http://www.netfx3.com/blogs/news_and_announcements/archive/2006/11/06/.NET-Framework-3.0-has-been-released_2100_.aspx"&gt;.NET Framework 3.0&lt;/a&gt; i samband med att TechEd Europe for Developers drog i gång i går. Samtidigt lanserades också &lt;a href="http://ajax.asp.net/"&gt;ASP.NET AJAX Beta 2 &lt;/a&gt; som nu är "feature complete" vilket troligtvis innebär att vi får se en skarp release redan i år.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-8047477901896552990?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/8047477901896552990/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=8047477901896552990' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8047477901896552990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/8047477901896552990'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/11/net-framework-30-och-aspnet-ajax-beta-2.html' title='.NET Framework 3.0 och ASP.NET AJAX Beta 2 lanserat'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-3981940361456798400</id><published>2006-11-08T08:46:00.000+01:00</published><updated>2006-11-08T08:59:18.162+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='MIX07'/><title type='text'>MIX07</title><content type='html'>Nu har Microsoft lanserat tid och plats för nästa års MIX-konferens - &lt;a href="http://visitmix.com/"&gt;MIX07&lt;/a&gt;. Konferensen äger rum på The Venetian i Las Vegas, precis som förra året. Den pågår från 30 april till 2 maj och öppnar för anmälan i januari 2007. &lt;a href="http://joakimsunden.blogspot.com/search/label/MIX06"&gt;Förra årets konferens var mycket intressant&lt;/a&gt;, men då kändes Web 2.0, AJAX, Windows Vista och Windows Presentation Foundation ganska nytt och hett - inte minst för en svensk microsoftutvecklare som undertecknad. Frågan är om man kommer att kunna skapa samma attraktionskraft kring nästa års upplaga? Följ utvecklingen på &lt;a href="http://visitmix.com/"&gt;http://visitmix.com/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-3981940361456798400?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/3981940361456798400/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=3981940361456798400' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3981940361456798400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3981940361456798400'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/11/mix07.html' title='MIX07'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-3291783378682730118</id><published>2006-11-06T15:48:00.001+01:00</published><updated>2006-11-06T15:48:48.293+01:00</updated><title type='text'>.NET Framework 3.0 - vad är det?</title><content type='html'>&lt;p&gt;I morgon börjar Microsofts TechEd Europe för utvecklare och jag skulle bli mycket förvånad om vi inte får se en release, eller åtminstone ett tydligt releasdatum, av såväl Windows Vista som .NET Framework 3.0. Trots detta verkar det fortfarande råda förvirring om vad .NET Framework 3.0 egentligen innebär, till exempel verkade inte ens Microsoft Sveriges Johan Lindfors helt säker i sin dragning på MSDN Live om just .NET Framework 3.0 härom veckan (okej, han skämtade förhoppningsvis). Jag tänkte därför försöka reda ut begreppen lite.&lt;/p&gt; &lt;p&gt;.NET Framework 3.0 innebär inte några större ändringar av Base Class Libraries, C#, VB .NET eller övriga delar av .NET Framework 2.0 (bara ändringar som kommer att motsvaras av Service Pack för 2.0), utan är en utökning av funktionalitet genom vad som kallas .NET 3.0 Components:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Windows Presentation Foundation (WPF, tidigare känt som "Avalon").&lt;/li&gt; &lt;li&gt;Windows CardSpace (tidigare "InfoCard").&lt;/li&gt; &lt;li&gt;Windows Communication Foundation (WCF, tidigare "Indigo").&lt;/li&gt; &lt;li&gt;Windows Workflow Foundation (WF).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Microsoft har fått en del kritik för att de kallar denna ändring av ramverket för "3.0" då många menar att det kanske hade varit mer lämpligt med 2.5 eller liknande. En del kritiker menar att skälet till det jämna och fina versionsnumret är att 3.0 kommer att vara förinstallerat på Windows Vista och att det skulle vara osnyggt att ha en mellanversion till detta flaggskepp. (För den som är intresserad av att följa den, faktiskt ganska intressanta, versionsdebatten är Brad Abrams blogginlägg "&lt;a href="http://blogs.msdn.com/brada/archive/2006/06/10/625717.aspx"&gt;Toward .NET Framework 3.0&lt;/a&gt;" en bra utgångspunkt.)&lt;/p&gt; &lt;h3&gt;Okej, nu vet jag vad 3.0 är - men vad är det jag hör om 3.5?!&lt;/h3&gt; &lt;p&gt;Det är väl bara halvofficiellt än så länge, men innovationer som C# 3.0, VB 9, .NET vNext&amp;nbsp;och LINQ kommer sannolikt att släppas under versionsnumret 3.5. Samtidigt med denna version kommer en ny version av Visual Studio, kodnamn "Orcas", som i grunden är samma som Visual Studio 2005 men med stöd för WPF-, WCF- och LINQ-projekt m.m. Förhoppningsvis kommer även Microsoft ASP.NET AJAX (tidigare Atlas) att släppas i skarp version och med bättre stöd för JavaScript-utveckling m.m. tillsammans med Orcas.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-3291783378682730118?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/3291783378682730118/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=3291783378682730118' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3291783378682730118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/3291783378682730118'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/11/net-framework-30-vad-r-det.html' title='.NET Framework 3.0 - vad är det?'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-2919002204220664263</id><published>2006-10-23T20:13:00.001+02:00</published><updated>2006-10-23T20:16:02.069+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Microsoft AJAX Extensions Beta Release</title><content type='html'>&lt;p&gt;Ni har säkert redan läst det annorstädes, men jag måste bara berätta att &lt;a href="http://ajax.asp.net/"&gt;Microsoft AJAX Extensions&lt;/a&gt; (tidigare känt som Atlas) i fredags släppts i Beta-version.&lt;/p&gt;&lt;p&gt;Man kan läsa mer på webbplatsen, som nu bytt adress från &lt;a href="http://atlas.asp.net/"&gt;http://atlas.asp.net/&lt;/a&gt; till &lt;a href="http://ajax.asp.net/"&gt;http://ajax.asp.net/&lt;/a&gt;, eller i Scott Guthries uttömmande &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/10/20/ASP.NET-AJAX-Beta-1-Released.aspx"&gt;bloggpost&lt;/a&gt;, men jag tänkte dra de mest intressanta nyheterna i korthet.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Istället för en enda JavaScript-fil med alla features har olika delar delats upp i mindre filer som laddas vid behov och som dessutom packats ihop ytterligare. &lt;li&gt;Fullt stöd för Safari. Bra stöd för Opera, ännu bättre på gång. &lt;li&gt;Bättre debuggingstöd för JavaScript-koden. &lt;li&gt;Förbättrad UpdatePanel; bl.a. möjligheten att dynamiskt skapa och lägga till UpdatePanels på en sida (bra för composite controls), möjligheten att koppla olika UpdateProgress- och Animation-kontroller till olika UpdatePanels, samt ökad tillgänglighet genom t.ex. bättre stöd för skärmläsare. &lt;li&gt;Förbättrat och förenklat klientscriptbibliotek (AJAX Script Library). &lt;li&gt;Bättre kompatibilitet med andra AJAX-bibliotek för att undvika "språk"-krockar med t.ex. Scriptaculus och Prototype. &lt;li&gt;Licens för och möjlighet att tweaka och modifiera AJAX Script Library och distribuera detta i egna produkter/lösningar. &lt;li&gt;Ett antal nya kontroller i AJAX Control Toolkit; DropDown, MutuallyExclusiveCheckBox och ValidatorCallout.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Sedan finns det dessvärre en baksida med Beta-versionen, men det gäller mest de som tillverkat egna kontroller eller utvecklat mot klientscriptbiblioteket: förändringarna i AJAX Script Library är ganska stora och eftersom man inte har någon kompileringshjälp och JavaScript inte är det roligaste språket att felsöka, kommer det att vara ganska besvärligt att migrera till Betan. (Faktum är att releasen av Betan försenades p.g.a. att teamet bakom Control Toolkit hade &lt;a href="http://blogs.msdn.com/sburke/archive/2006/10/20/finally-asp-net-ajax-control-toolkit-released.aspx"&gt;underskattat svårigheterna med migreringen.&lt;/a&gt;) &lt;/p&gt;&lt;p&gt;Om du ännu inte riktigt förstått vad som är så coolt med Microsoft AJAX Extensions är det hög tid att du tar reda på det på &lt;a href="http://ajax.asp.net/"&gt;http://ajax.asp.net/&lt;/a&gt; - nu är det inte länge kvar innan ramverket är en del av .NET Framework.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-2919002204220664263?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/2919002204220664263/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=2919002204220664263' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2919002204220664263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/2919002204220664263'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/10/microsoft-ajax-extensions-beta-release.html' title='Microsoft AJAX Extensions Beta Release'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-116097666109588889</id><published>2006-10-16T07:18:00.000+02:00</published><updated>2006-10-16T07:28:38.741+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP.NET 2.0 och webbstandards</title><content type='html'>&lt;a href="http://msdn2.microsoft.com/en-us/asp.net/aa336602.aspx"&gt;ASP.NET for Designers&lt;/a&gt; heter en intressant sektion på MSDN som egentligen har ett något missvisande namn. Det är ganska sällan ASP.NET-utvecklare kan ignorera designfrågor och om det förekommer är det i princip aldrig positivt. Förutom den mycket läsvärda artikeln &lt;a href="http://msdn.microsoft.com/library/en-us/dnaspp/html/aspnetusstan.asp"&gt;Building ASP.NET 2.0 Web Sites Using Web Standards&lt;/a&gt; och andra artiklar hittar du här &lt;a href="http://msdn2.microsoft.com/en-us/asp.net/aa336613.aspx"&gt;ett gäng CSS-baserade mallar&lt;/a&gt; som du kan använda för att snabbt och enkelt kan modifiera smälla upp en egen sajt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-116097666109588889?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/116097666109588889/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=116097666109588889' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/116097666109588889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/116097666109588889'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/10/aspnet-20-och-webbstandards.html' title='ASP.NET 2.0 och webbstandards'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-115901478183977632</id><published>2006-09-23T14:33:00.000+02:00</published><updated>2006-10-16T07:28:38.674+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Kortare byggtider för webbutveckling med Visual Studio 2005</title><content type='html'>&lt;p&gt;Scott Guthrie har publicerat en &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/09/22/Tip_2F00_Trick_3A00_-Optimizing-ASP.NET-2.0-Web-Project-Build-Performance-with-VS-2005.aspx"&gt;mycket intressant artikel&lt;/a&gt; om hur du kan få kortare byggtider för webbutvecklingsprojekt i Visual Studio 2005. Förutom en rad generella tips skriver Guthrie en del, och länkar till ännu mer, om skillnaderna mellan Web Site Projects, som är den nya modellen för VS 2005, och &lt;a href="http://webproject.scottgu.com/"&gt;Web Applications Projects&lt;/a&gt;, som kommer med Service Pack 1, mer liknar modellen i VS 2003 med bl.a. en enda assembly och som redan nu finns att ladda ned "fully supported" från Microsoft.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-115901478183977632?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/115901478183977632/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=115901478183977632' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115901478183977632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115901478183977632'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/09/kortare-byggtider-fr-webbutveckling.html' title='Kortare byggtider f&amp;ouml;r webbutveckling med Visual Studio 2005'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-115895723772178256</id><published>2006-09-22T22:33:00.000+02:00</published><updated>2006-10-16T07:28:38.606+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lösningar'/><title type='text'>Access to the path 'C:\Documents and Settings\username\Local Settings\Temp\~5a72\bin\App_Code.compiled' is denied</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Häromdagen råkade vi ut för felmeddelandet "Access to the path 'C:\Documents and Settings\username\Local&lt;br&gt;Settings\Temp\~5a72\bin\App_Code.compiled' is denied" när vi försökte göra en "Publish Web Site" i Visual Studio 2005. Efter en del efterforskningar, bland annat med hjälp av utmärkta verktyget &lt;a href="http://www.sysinternals.com/Utilities/Filemon.html"&gt;FileMon&lt;/a&gt; från SysInternals (&lt;a href="http://blogs.msdn.com/tomarcher/archive/2006/07/18/669894.aspx"&gt;numera uppköpta av Microsoft&lt;/a&gt;!), lyckades vi hitta problemets orsak. Det visade sig att det användarkonto vi angivit&amp;nbsp;för identity impersonate i Web.config måste ha rättigheter att skriva till den kompilerande användarens lokala temp-mapp (C:\Documents and Settings\username\Local Settings\Temp\)! Det enklaste, och förmodligen även säkraste, sättet att komma runt problemet är förstås att tillfälligt kommentera bort denna rad i Web.config medan man kör "Publish Web Site".&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-115895723772178256?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/115895723772178256/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=115895723772178256' title='3 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115895723772178256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115895723772178256'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/09/access-to-path-cdocuments-and.html' title='Access to the path &apos;C:\Documents and Settings\username\Local Settings\Temp\~5a72\bin\App_Code.compiled&apos; is denied'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-115851497480971082</id><published>2006-09-17T19:42:00.000+02:00</published><updated>2006-10-16T07:28:38.540+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>Bloggändringar</title><content type='html'>&lt;p&gt;Om du inte följer denna blogg via en RSS-läsare borde du vid det här laget ha upptäckt att jag ändrat utseendet på min blogg. Det gamla formatet utnyttjade inte riktigt utrymmet på moderna bildskärmar och jag hoppas att det här utseendet ska kännas lite läsvänligare.&lt;/p&gt; &lt;p&gt;Jag har också lagt till statistik för bloggen via &lt;a href="http://www.sitemeter.com"&gt;SiteMeter&lt;/a&gt; och jag måste säga att jag är något överraskad av vilka som besöker min blogg. Nu har det förvisso bara gått ett par veckor sedan jag började kolla, men det verkar som om majoriteten av mina läsare faktiskt inte är mina närmast sörjande (jag har inte precis marknadsfört min blogg), utan folk som hamnar här efter att ha sökt information eller&amp;nbsp;lösningar på problem via Google. Detta är en positiv överraskning eftersom ett av huvudsyftena med bloggen är att hjälpa människor att enkelt hitta lösningar på de problem som jag själv varit tvungen brottas med.&lt;/p&gt; &lt;p&gt;Med tanke på denna besöksstatistik och med tanke på att jag just nu sitter&amp;nbsp;i ett uppdrag där jag dagligen hjälper utvecklare med .NET 2.0 tänkte jag den närmaste tiden försöka posta en del inlägg om olika problem jag stött på den senaste tiden. Jag hoppas att det blir till hjälp för någon.&lt;/p&gt; &lt;p&gt;Jag funderar också på att testa Google AdSense och se hur det fungerar; med min blygsamma trafik blir det knappast mer än kaffepengar, men det kan bli en intressant erfarenhet.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-115851497480971082?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/115851497480971082/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=115851497480971082' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115851497480971082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115851497480971082'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/09/bloggndringar.html' title='Blogg&amp;auml;ndringar'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-115800611539526238</id><published>2006-09-11T22:21:00.000+02:00</published><updated>2006-10-16T07:28:38.349+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Adjö Atlas, välkommen AJAX Library och AJAX Extensions</title><content type='html'>&lt;p&gt;Atlas finns inte längre. Eller rättare sagt, kodnamnet Atlas har nu blivit ersatt av ett officiellt namn eftersom Microsoft nu har besämt sig för att göra produkten "fully supported" och kommer att leverera en 1.0-version i slutet av året. Det blev tyvärr inget av de roliga namnen från &lt;a href="http://aspadvice.com/blogs/ssmith/archive/2006/08/16/Atlas_Naming_Game.aspx"&gt;Atlas Naming Game&lt;/a&gt;, till exempel Client-side Rich Asynchronous Product (CRAP) och Asynchrounous POST Platform Leveraging Enterprise Javascript And XML (APPLEJAX).&lt;/p&gt; &lt;p&gt;Klientdelen kommer att få namnet Microsoft AJAX Library och serverdelen får heta ASP.NET 2.0 AJAX Extensions. Serverkontrollerna kommer att finnas med i ASP.NET "Orcas" (kodnamnet för nästa version) och det kommer att finnas WYSIWYG-designstöd för dem i Visual Studio "Orcas", som också kommer att få bättre JavaScript-IntelliSense och -debugging.&lt;/p&gt; &lt;p&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2006/09/11/_2200_Atlas_2200_-1.0-Naming-and-Roadmap.aspx"&gt;Läs mer&lt;/a&gt; om nya namnen, leveransplaner m.m. på Scott Guthries blogg.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-115800611539526238?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/115800611539526238/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=115800611539526238' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115800611539526238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115800611539526238'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/09/adjlkommen-ajax-library-och-ajax.html' title='Adj&amp;ouml; Atlas, v&amp;auml;lkommen AJAX Library och AJAX Extensions'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-115797876969371697</id><published>2006-09-11T14:46:00.000+02:00</published><updated>2006-10-16T07:28:38.265+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Ny version av CSS-vänliga ASP.NET-kontroller</title><content type='html'>&lt;p&gt;Nu finns det en ny version av kontrolladaptrarna för att bygga CSS-vänliga (icke-TABLE) ASP.NET-kontroller som jag bloggat om &lt;a href="http://joakimsunden.blogspot.com/2006/05/css-vnliga-kontroller-lanserade.html"&gt;tidigare&lt;/a&gt;. Nedladdningen innehåller också ytterligare ett antal nya tabellfria implementationer av ASP.NET-kontroller. &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/09/08/CSS-Control-Adapter-Toolkit-Update.aspx"&gt;Läs mer&lt;/a&gt; på Scott Guthries blogg.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-115797876969371697?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/115797876969371697/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=115797876969371697' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115797876969371697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115797876969371697'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/09/ny-version-av-css-vnliga-aspnet.html' title='Ny version av CSS-v&amp;auml;nliga ASP.NET-kontroller'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-115790267851813825</id><published>2006-09-10T17:37:00.000+02:00</published><updated>2006-10-16T07:28:38.198+02:00</updated><title type='text'>Lyssna på podcasts!</title><content type='html'>&lt;p&gt;Ett bra och roligt sätt att lära sig mer om utveckling och arkitektur är att lyssna på några av de många podcasts som finns i dessa ämnen. Det senaste halvåret har jag tagit för vana att ladda ned podcasts till min Qtek-telefon, eller bränt dem på CD för bilen, som jag sedan passat på att lyssna på när jag skottat jord, klippt gräsmattan, kört bil till jobbet eller utfört någon annan monoton syssla.&lt;/p&gt; &lt;p&gt;Mina favoritställen att ladda ned podcasts från är &lt;a href="http://channel9.msdn.com/showforum.aspx?forumid=34"&gt;Channel 9&lt;/a&gt; (som jag bloggat om &lt;a href="http://joakimsunden.blogspot.com/2006/03/channel9-p-svenska.html"&gt;tidigare&lt;/a&gt;) och Dag Königs (numera evangelist hos Microsoft) &lt;a href="http://buzzfrog.libsyn.com/"&gt;"Another Visitor".&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-115790267851813825?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/115790267851813825/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=115790267851813825' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115790267851813825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115790267851813825'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/09/lyssna-p-podcasts.html' title='Lyssna p&amp;aring; podcasts!'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-115757629541026403</id><published>2006-09-06T22:58:00.000+02:00</published><updated>2006-10-16T07:28:38.134+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Bok'/><title type='text'>Framework Design Guidelines</title><content type='html'>&lt;p&gt;Sedan ett halvår eller så tillbaka i tiden har jag följt &lt;a href="http://blogs.msdn.com/BradA/"&gt;Brad Abrams blogg&lt;/a&gt;, inte minst genom hans inblandning i Microsofts Atlas-projekt (faktum är att jag växlade några ord med honom om detta på Mix06 i våras). Brad Abrams är Lead Program Manager för Microsofts .NET Framework Team, en position han tidigare haft också i Common Language Runtime Team. Han har designat olika delar av .NET Framework sedan 1998, var Lead Editor för Common Language Specification (CLS) och ECMA/ISO CLI Standard. Med denna bakgrund är det inte konstigt att hans bok &lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=as2&amp;path=ASIN/0321246756&amp;amp;tag=joakimsundens-20&amp;camp=1789&amp;amp;creative=9325"&gt;Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries&lt;/a&gt; (en bok i &lt;a href="http://www.awprofessional.com/series/series.asp?ser=335197&amp;rl=1"&gt;Microsofts .NET Development Series&lt;/a&gt;) är så full av goda råd. Att hans medförfattare heter Krzysztof Cwalina och är Program Manager för Common Language Runtime Team med ansvar för namespaces som System.Collections, System.Diagnostics m.m., gör förstås också sitt till.&lt;/p&gt;&lt;p&gt;Under de år .NET Framework har funnits har Microsoft förstås fått enormt mycket återkoppling från mjukvaruindustrin och utvecklarcommunityn kring ramverket. Man har dessutom själva bedrivit omfattande användbarhetstester och ägnat mycket tid åt att internt utveckla designriktlinjer för såväl .NET Framework som andra produkter. Det är erfarenheterna från denna tid som författarna vill dela med sig av i Framework Design Guidelines.&lt;/p&gt;&lt;p&gt;Boken täcker allt från den grundläggande filosofin bakom ramverksdesign till designriktlinjer som när du bör välja en struct framför en class till specifika detaljer för hur du bör namnge dina parametrar ("endpoint" ska till exempel skrivas just så och inte "endPoint"). Det går alldeles utmärkt att läsa de ca 350 sidorna från pärm till pärm, men man kan också nöja sig med de första 30 sidorna om "Framework Design Fundamentals", skumma igenom intressanta riktlinjer och i övrigt använda boken som referens. Riktlinjerna är indelade efter ämnen som "Naming Guidelines", "Type Design Guidelines", "Usage Guidelines" och "Common Design Patterns", och finns av fyra olika slag: "Do", "Don't", "Consider" och "Avoid". Naturligtvis åtföljs riktlinjerna av resonemang och exempel. Dessutom, och det här är verkligen en av bokens stora behållningar, har man överallt sprängt in typografiskt distinkta kommentarer/anekdoter från ett 20-tal microsoftare och Microsoft-nära industriexperter som t.ex. Jeffrey Richter ("&lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=as2&amp;amp;path=ASIN/0735614229&amp;tag=joakimsundens-20&amp;amp;camp=1789&amp;creative=9325"&gt;Applied Microsoft .NET Framework Programming&lt;/a&gt;") och Anders Hejlsberg (skaparen av C#). I kommentarerna kan man läsa många intressanta resonemang och motiveringar till varför .NET Framework ser ut som det gör och man kan även skönja en del av de trätoämnen som omgärdat utvecklingen av ramverket (prestanda- och C++-gänget mot lättanvänt- och VB-gänget, förenklat uttryckt).&lt;/p&gt;&lt;p&gt;Riktlinjerna i Framework Design Guidelines är i första hand utformade för att passa just ramverk och publika API:er, särskilt sådana som bokens författare kallar "progressive frameworks" och definierar sålunda:&lt;/p&gt;&lt;p&gt;"Framework that is easy to use in basic scenarios yet powerful enough to be used in advanced scenarios."&lt;/p&gt;&lt;p&gt;Och man kan lugnt säga att "easy to use" är den princip som väger tyngst i riktlinjerna; ofta får lösningar som kanske är mer finurliga eller skulle ge bättre prestanda vika på foten för de som är mer lättanvända, och av utvecklarna förväntade, enligt Microsofts erfarenheter och användbarhetstester. Det gör att alla råd kanske inte passar lika bra för just ditt ramverk, men enligt min mening är majoriteten av riktlinjerna tillämpliga även vid applikationsutveckling. Dessutom är det ju så som en av kommentatorerna skriver: "Performance gets better over time, ease of use doesn't."&lt;/p&gt;&lt;p&gt;Framework Design Guidelines är en mycket bra bok som egentligen alla .NET-utvecklare borde läsa, i synnerhet de med intresse/ansvar för design- och arkitekturfrågor.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/exec/obidos/redirect?link_code=as2&amp;path=ASIN/0321246756&amp;amp;tag=joakimsundens-20&amp;camp=1789&amp;amp;creative=9325"&gt;&lt;img src="http://images.amazon.com/images/P/0321246756.01._AA_SCMZZZZZZZ_V61462001_.jpg" border="0" /&gt;&lt;/a&gt;&lt;img style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN: 0px; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" height="1" alt="" src="http://www.assoc-amazon.com/e/ir?t=joakimsundens-20&amp;l=as2&amp;amp;o=1&amp;amp;a=0321246756" width="1" border="0" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-115757629541026403?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/115757629541026403/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=115757629541026403' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115757629541026403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115757629541026403'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/09/framework-design-guidelines.html' title='Framework Design Guidelines'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-115582792221051013</id><published>2006-09-03T21:06:00.000+02:00</published><updated>2007-02-08T09:29:16.046+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lösningar'/><title type='text'>Vad gick egentligen snett när du råkat ut för System.Data.ConstraintException?</title><content type='html'>&lt;p&gt;Det händer då och då att man som utvecklare råkar ut för System.Data.ConstraintException när man via DataAdapter.Merge försökt fylla ett typed DataSet med data. Felmeddelandets detaljrikedom lämnar en del att önska:&lt;/p&gt;&lt;p&gt;"System.Data.ConstraintException: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints."&lt;/p&gt;&lt;p&gt;Det kan alltså vara i princip vad som helst som gått snett och om ditt DataSet är någorlunda komplext är det inte särskilt lätt att gissa sig till det heller. Lösningen ligger i att fånga detta exception och använda DataSet.GetErrors() för att få reda på exakt vilka rader det var problem med och vilka problemen var:&lt;/p&gt;&lt;p&gt;&lt;code&gt;try&lt;br /&gt;{&lt;br /&gt;   myTypedDataSet1.Merge(ds.Tables[0], false,&lt;br /&gt;      MissingSchemaAction.Error);&lt;br /&gt;}&lt;br /&gt;catch(System.Data.ConstraintException exc)&lt;br /&gt;{&lt;br /&gt;   DataRow[] rows = myTypedDataSet1.myDataTable.GetErrors();&lt;br /&gt;   foreach(DataRow row in rows)&lt;br /&gt;   {&lt;br /&gt;      string error = row.RowError; // Visa/logga felmeddelande etc.&lt;br /&gt;   }&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-115582792221051013?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/115582792221051013/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=115582792221051013' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115582792221051013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115582792221051013'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/09/vad-gick-egentligen-snett-nr-du-rkat.html' title='Vad gick egentligen snett när du råkat ut för System.Data.ConstraintException?'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-115628047375589207</id><published>2006-08-22T23:01:00.000+02:00</published><updated>2006-10-16T07:28:37.940+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Verktyg'/><title type='text'>Windows Live Writer</title><content type='html'>&lt;p&gt;Denna bloggpost skriver jag på &lt;a href="http://windowslivewriter.spaces.live.com/" target="_blank"&gt;Windows Live Writer (Beta)&lt;/a&gt; som är Microsofts nya &lt;a href="http://en.wikipedia.org/wiki/WYSIWYG=4&amp;amp;CS=OTH&amp;amp;SR=4" target="_blank"&gt;WYSIWYG&lt;/a&gt;-skrivbordsapplikation för att skriva blogginlägg. Som ni ser fungerar det bra även för andra bloggar än de på &lt;a href="http://spaces.live.com/" target="_blank"&gt;Windows Live Spaces&lt;/a&gt; (f.d. MSN Spaces), till exempel &lt;a href="http://www.blogger.com/"&gt;Blogger/BlogSpot&lt;/a&gt; som jag använder.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Förutom ett smidigt gränssnitt för text och länkar finns det funktioner för att enkelt lägga in bilder och kartor (från Windows Live Map). Det mest intressanta för framtiden är emellertid att Windows Live Writer har ett öppet API och utvecklare kan ladda ned en SDK för att bygga egna add-ons och applikationer. Det finns redan en &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=flickr4writer" target="_blank"&gt;Flickr4Writer&lt;/a&gt; som gör att du kan lägga in &lt;a href="http://www.flickr.com/" target="_blank"&gt;Flickr&lt;/a&gt;-bilder i dina blogginlägg.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-115628047375589207?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/115628047375589207/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=115628047375589207' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115628047375589207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115628047375589207'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/08/windows-live-writer.html' title='Windows Live Writer'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-115408232469873997</id><published>2006-07-28T12:15:00.000+02:00</published><updated>2006-10-16T07:28:37.742+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>Torrperiod</title><content type='html'>Vilken fantastisk sommar det har varit med sol och höga temperaturer. Bönderna, eller vi med nylagda gräsmattor, har kanske inte alltid varit lika förtjusta i denna torrperiod. Torrperiod har det även varit för min blogg som ni kanske märkt. Fotbolls-VM, nytt uppdrag, semester, altanbygge och annat huspyssel, allmän semesterlättja och nytt operativsystem är vad som satt käppar i hjulet. Nytt operativsystem ja; jag har försökt installera Windows Vista Beta 2 sedan det kom i maj. Ja, jag började egentligen redan med Beta 1, men har fått samma felmeddelande för båda versionerna innan installationsprogrammet ens kommit igång ordentligt:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"Setup could not get information about the disks on your computer"&lt;br /&gt;&lt;br /&gt;Googlande, formatering av alla diskar, radering av Master Boot Record med bootdisk och fdisk har inte hjälpt - felmeddelandet har kvarstått. Efter många om och men upptäckte jag slutligen att jag var tvungen att fysiskt koppla bort min andra interna hårddisk. Det gjorde jag i går och i dag skriver jag detta inlägg på Internet Explorer 7 från Windows Vista. Jag gillar verkligen känslan och utseendet i det nya operativsystemet, trots att jag inte har ett grafikkort som klarar de snygga glaseffekterna ("Aero"). Kanske blir det en del bloggposter om Vista framöver.&lt;br /&gt;&lt;br /&gt;Nu ska jag sätta i gång installationen av Office 2007 innan jag går ut i solen och svalkar mig med ett stort glas iste och börjar njuta av slutet på semestern (en vecka kvar efter helgen).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-115408232469873997?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/115408232469873997/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=115408232469873997' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115408232469873997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115408232469873997'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/07/torrperiod.html' title='Torrperiod'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-115009304013034824</id><published>2006-06-12T08:10:00.000+02:00</published><updated>2006-10-16T07:28:37.676+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><title type='text'>Mer om Microsoft Motion</title><content type='html'>I slutet av maj publicerade Microsoft en intressant introduktion till sitt projekt Motion (som jag skrivit om &lt;a href="http://joakimsunden.blogspot.com/2006/04/microsoft-kartlgger-hur-fretag.html"&gt;tidigare&lt;/a&gt;) som handlar om så kallad business capability modelling:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/motionlite.asp"&gt;Motion Lite: A Rapid Application of the Business Architecture Techniques Used by Microsoft Motion&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-115009304013034824?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/115009304013034824/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=115009304013034824' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115009304013034824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/115009304013034824'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/06/mer-om-microsoft-motion.html' title='Mer om Microsoft Motion'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114900328724231396</id><published>2006-05-30T17:29:00.000+02:00</published><updated>2006-10-16T07:28:37.613+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lösningar'/><category scheme='http://www.blogger.com/atom/ns#' term='Bästa praxis'/><title type='text'>Låt INTE ditt exception ärva från ApplicationException</title><content type='html'>Jag har alltid fått lära mig, både från böcker och från Microsofts egna råd, att egna Exceptions alltid ska ärva från ApplicationException. Jag blev därför väldigt förvånad när jag upptäckte att Microsofts kodanalysverktyg (FxCop) ger ett "TypesShouldNotExtendCertainBaseTypes"-meddelande på exceptions som ärver från ApplicationException.&lt;br /&gt;&lt;br /&gt;Lite efterforskningar ger vid handen att Microsoft ändrat sig i frågan, men att de ändringarna inte slagit igenom i dokumentationen (se till exempel &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp"&gt;här&lt;/a&gt;). Vad värre är uppmärksammades ändringen inte heller i .NET Framework 2.0 där klassen fortfarande finns utan att vara markerad som "obsolete" och där samma felaktiga rekommendation länge gavs i dokumentationen. Nu har dokumentationen emellertid ändrats och man påpekar att ApplicationException inte längre tjänar något syfte (se &lt;a href="http://msdn2.microsoft.com/en-us/library/system.applicationexception.aspx"&gt;här&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Det är egentligen inte fel att ärva från ApplicationException - det finns helt enkelt bara ingen vits med det. Du behöver följaktligen inte kasta dig över alla gamla projekt och ändra i dem, men du bör i framtiden istället ärva från Exception.&lt;br /&gt;&lt;br /&gt;Läs mer om detta i &lt;a href="http://blogs.msdn.com/fxcop/archive/2006/04/05/569569.aspx"&gt;FxCop-bloggen&lt;/a&gt; eller i Brad Abrams (tidigare ägare av design guidelines) &lt;a href="http://blogs.msdn.com/brada/archive/2004/03/25/96251.aspx"&gt;blogg&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114900328724231396?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114900328724231396/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114900328724231396' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114900328724231396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114900328724231396'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/lt-inte-ditt-exception-rva-frn.html' title='Låt INTE ditt exception ärva från ApplicationException'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114882032041728313</id><published>2006-05-28T14:37:00.000+02:00</published><updated>2006-10-16T07:28:37.537+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web2.0'/><title type='text'>Windows Live Gadget SDK</title><content type='html'>Nu har Microsoft släppt ett &lt;a href="http://microsoftgadgets.com/livesdk/index.htm"&gt;Software Development Kit (SDK) för Windows Live Gadgets&lt;/a&gt; som jag skrivit om &lt;a href="http://joakimsunden.blogspot.com/2006/03/windows-live-och-microsoft-gadgets.html"&gt;tidigare&lt;/a&gt;. Förutom API hittar man där även en Developer's Guide, Design Guidelines, en Visual Studio Live Gadget Project Template, ett antal exempel och en del annat nyttigt. Det har med andra ord nu blivit mycket enklare att komma i gång med sitt första Gadget-projekt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114882032041728313?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114882032041728313/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114882032041728313' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114882032041728313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114882032041728313'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/windows-live-gadget-sdk.html' title='Windows Live Gadget SDK'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114838527597949232</id><published>2006-05-23T13:45:00.000+02:00</published><updated>2006-10-16T07:28:37.468+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Verktyg'/><title type='text'>Intellisense för SQL-frågor</title><content type='html'>Intellisense-hjälp för SQL-frågor är något jag efterlyst länge och det var något av en besvikelse att Microsoft inte hade med detta i SQL Server 2005. &lt;a href="http://www.red-gate.com/"&gt;Red-Gate&lt;/a&gt; är ett företag som tillverkar ypperliga SQL-verktyg; jag har tidigare använt deras svit för att synkronisera lagrade procedurer mellan databaser - något som är ganska knepigt att göra manuellt. De släpper nu sitt verktyg &lt;a href="http://www.red-gate.com/products/SQL_Prompt/index.htm"&gt;SQL Prompt&lt;/a&gt;, med just Intellisense för SQL-frågor, &lt;em&gt;gratis&lt;/em&gt; för den som laddar ned det innan 1 september.&lt;br /&gt;&lt;br /&gt;Detta tips fick jag via &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/05/22/Red_2D00_Gate-SQL-Query-Intellisense-Tool-_2800_Free-Download_2900_.aspx"&gt;Scott Guthries blogg&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114838527597949232?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114838527597949232/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114838527597949232' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114838527597949232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114838527597949232'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/intellisense-fr-sql-frgor.html' title='Intellisense för SQL-frågor'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114837236093536518</id><published>2006-05-23T09:56:00.000+02:00</published><updated>2006-10-16T07:28:37.402+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><title type='text'>Varför behöver man en arkitekt?</title><content type='html'>Varför behöver man en arkitekt? Svaret på den frågan kan man hitta i form av en &lt;a href="https://www.skyscrapr.net/blogs/video/archive/2006/03/10/46.aspx"&gt;tecknad film&lt;/a&gt; med en käck sång på Microsofts nya webbplats om arkitektur, &lt;a href="https://www.skyscrapr.net/"&gt;Skyscrapr&lt;/a&gt;. Det är fortfarande lite oklart vilken som är målgruppen, men enligt sajtens initiativtagare, Program Manager för Microsofts Architecture Strategy Team, är det bland annat min mamma:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"My hope for this site is to make architecture accessible to all. Does your mother not quite understand what you do, send her here? Are you a BDM or COO and need to better understand the guidence your chief architect has just given you? Come here. No assumptions made, no prequal required."&lt;/blockquote&gt;De lättillgängliga tecknade filmerna på sajten stämmer bra överens med denna vision, men samtidigt finns där ett gäng intressanta och avancerade podcasts med personer som &lt;a href="http://friends.newtelligence.net/clemensv/"&gt;Clemens Vasters&lt;/a&gt;, &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt; och Jeff Richter. Det bjuds även på utdrag från gamla nummer av &lt;a href="http://www.architecturejournal.net/"&gt;Architecture Journal&lt;/a&gt;, en tidskrift som knappast har mamma i målgruppen. (Om inte mamma är, eller aspirerar på att bli, mjukvaruarkitekt förstås.)&lt;br /&gt;&lt;br /&gt;För den som är nyfiken på det här med arkitektur kan Skyscrapr vara intressant att hålla ett öga på. Just nu känns det lite mer som en sajt för utvecklare som börjat nosa på arkitekturfrågor, snarare än en sajt för mamma; men skicka henne för all del länken till den tecknade filmen!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114837236093536518?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114837236093536518/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114837236093536518' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114837236093536518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114837236093536518'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/varfr-behver-man-en-arkitekt.html' title='Varför behöver man en arkitekt?'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114828300716251268</id><published>2006-05-22T09:20:00.000+02:00</published><updated>2006-10-16T07:28:37.332+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Verktyg'/><title type='text'>Resharper 2.0 Beta är här</title><content type='html'>Med tanke på det &lt;a href="http://joakimsunden.blogspot.com/2005/11/resharper.html"&gt;evangelium jag förkunnat&lt;/a&gt; om ReSharper får jag nästan skämmas som inte betatestat den nya versionen förrän nu. &lt;a href="http://www.jetbrains.com/resharper/beta20.html"&gt;ReSharper 2.0 Beta&lt;/a&gt; ger dig äntligen samma stöd i Visual Studio 2005 som ReSharper 1.5 skämt bord dig med i tidigare versioner av Visual Studio - och mer därtill. Visst finns det invändningar - det tar till exempel alldeles för lång tid att starta upp ReSharper med Visual Studio 2005 ibland - men det är ju än så länge bara en betaversion. &lt;a href="http://www.jetbrains.com/resharper/beta20.html"&gt;Testa den gratis&lt;/a&gt; du med! (Glöm inte att använda länken till "license key" för att få demo-nyckeln.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114828300716251268?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114828300716251268/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114828300716251268' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114828300716251268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114828300716251268'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/resharper-20-beta-r-hr.html' title='Resharper 2.0 Beta är här'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114803265759872748</id><published>2006-05-19T11:31:00.000+02:00</published><updated>2006-10-16T07:28:37.266+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><title type='text'>AJAX och tillgänglighet</title><content type='html'>Från att ha varit ett okänt begrepp för de flesta som sysslat med webbutveckling, har tillgänglighet under de senaste 2-3 åren blivit en fråga som ingen professionell webbutvecklare har råd att ignorera. (För den som fortfarande inte vet vad det handlar om föreslår jag ett besök på &lt;a href="http://www.w3.org/"&gt;W3C&lt;/a&gt;:s avdelning för Web Accessibility Initiative (WAI), &lt;a href="http://www.w3.org/WAI/"&gt;http://www.w3.org/WAI/&lt;/a&gt;.) Stödet för utvecklare att arbeta i enlighet med riktlinjer för tillgänglighet har förbättrats avsevärt, till exempel genom automatisk validering i Visual Studio 2005 och &lt;a href="http://http://joakimsunden.blogspot.com/2005/12/internet-explorer-developer-toolbar.html"&gt;Internet Explorer Developer Toolbar&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;En annan trend, som knappast kunna undgå någon läsare av denna blogg, är AJAX som teknik för att bygga webbapplikationer med rika användarupplevelser. Tyvärr medför denna teknik en hel del problem ur ett tillgänglighetsperspektiv. Bland annat är JavaScript något man inte bör förlita sig på om man vill bygga en tillgänglig webbplats och det innebär naturligtvis bekymmer för en webbplats byggd med AJAX-tekniker. En del av lösningen på detta problem är förstås att se till att webbplatsen fungerar även utan AJAX, men i många fall kanske just AJAX-teknikerna är en stor del av webbplatsens profil eller till och med nytta.&lt;br /&gt;&lt;br /&gt;Ett annat problem är att skärmläsare, som många blinda använder sig av, inte märker när delar av en webbplats uppdaters via AJAX-teknik och därför inte vet att det laddats ny information som den ska läsa upp. Och även om det skulle gå att signalera att ny information tillkommit blir det också ett problem att identifiera vilken del av informationen som är ny.&lt;br /&gt;&lt;br /&gt;Två svenska bloggare (de skriver dock på engelska båda två) som skriver bra om de här frågorna, liksom om webbutveckling och webbstandards i allmänhet, är Robert Nyman (&lt;a href="http://www.robertnyman.com/"&gt;Robert's Talk&lt;/a&gt;) och Roger Johansson (&lt;a href="http://www.456bereastreet.com/"&gt;456 Berea Street&lt;/a&gt;). På 456 Berea Street finns &lt;a href="http://www.456bereastreet.com/archive/200605/ajax_javascript_support_and_screen_reader_accessibility/"&gt;en bra bloggpost&lt;/a&gt; med flera länkar för den som vill fördjupa sig ytterligare i just problematiken med AJAX och tillgänglighet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114803265759872748?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114803265759872748/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114803265759872748' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114803265759872748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114803265759872748'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/ajax-och-tillgnglighet.html' title='AJAX och tillgänglighet'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114673308021548110</id><published>2006-05-15T21:53:00.000+02:00</published><updated>2006-10-16T07:28:37.063+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Verktyg'/><title type='text'>O/R-mapping - vad är det?</title><content type='html'>En vanlig modell vid programmering mot databaser är att all logik för att kommunicera med databasen placeras i ett separat lager, ett så kallat data access layer (DAL, även data access &lt;em&gt;logic&lt;/em&gt;). Detta lager innehåller vanligtvis en mängd olika CRUD-metoder (Create-Read-Update-Delete) som använder hårdkodade SQL-frågor och/eller anrop av lagrade procedurer för att returnera datatransfer objects (DTO, t.ex. DataSet) eller "business objects" (t.ex. Customer, Product) till anropande lager. Så här brukar det, något förenklat, se ut i koden:&lt;br /&gt;&lt;br /&gt;Person myPerson = dataAccessLayer.GetPerson(id);&lt;br /&gt;myPerson.Name = "Nytt namn";&lt;br /&gt;dataAccessLayer.SavePerson(myPerson);&lt;br /&gt;&lt;br /&gt;Mönstret känns igen från Microsofts egna kodexempel, liksom från deras architecture guidelines och best practices.&lt;br /&gt;&lt;br /&gt;En annan modell är så kallad Object Relational Mapping eller O/R-mapping (även automated mapping). Vissa skulle säga att O/R-mapping är ett mer objektorienterat sätt att närma sig problemet; i denna modell skapar man "mappningar" mellan databasen tabeller/vyer och deras fält, och objektorienterade klasser och deras attribut. Detta görs enklast via en O/R-mapper som förutom att automatiskt generera klasserna utifrån databasen, även innehåller ett ramverk som bland annat genererar dynamisk SQL för att hantera kommunikationen mellan objekten och databasen. Med en O/R-mappers dynamiska SQL och ramverk blir det också enkelt att byta databas; koden ser likadan ut, men annan kod genereras och de dynamiska SQL-satserna kanske ser annorlunda ut. Så här kan koden se ut med en O/R-mapper:&lt;br /&gt;&lt;br /&gt;Person myPerson = new Person(id);&lt;br /&gt;myPerson.Name = ”Nytt namn”;&lt;br /&gt;myPerson.Save();&lt;br /&gt;&lt;br /&gt;Man skulle kunna säga att en O/R-mapper låter den objektorienterade utvecklaren att spara objektens tillstånd (”state”) utan att behöva tänka på var och hur detta sker.&lt;br /&gt;Förespråkare för O/R-mapping brukar framhålla fördelarna med det automatiska kodgenererandet; förutom den uppenbara tidsbesparingen minskar även risken för buggar. Det är onekligen ett tilltalande argument, men det finns bra verktyg för att automatiskt generera DAL även utan O/R-mapping. Ett exempel är DataSet Designer i Visual Studio, ett annat och mer kraftfullt är &lt;a href="http://g.msn.com/9SE/1?http://www.codesmithtools.com/&amp;&amp;amp;amp;amp;amp;DI=293&amp;IG=f6cc98de16614d188db2432cfac2a32f&amp;amp;POS=1&amp;CM=WPU&amp;amp;CE=1&amp;CS=OTH&amp;amp;SR=1"&gt;CodeSmith&lt;/a&gt;. O/R-mapperns dynamiska natur gör dock att du redan från början har en väldigt komplett lösning, medan du med en traditionell kodgenerator kan få lägga ned en hel del arbete på att finjustera mallar och annat för att få fram kod som är lika flexibel.&lt;br /&gt;&lt;br /&gt;Modellen har förstås sina kritiker också. Den vanligaste invändningen är att O/R-mappers dynamiska SQL förvisso är flexibel, men att det man vinner i flexibilitet lätt kan förloras i prestanda; en skicklig databasutvecklare kan optimera enskilda frågor, särskilt mer komplicerade sådana, bättre än en O/R-mapper. En del kritiker menar till och med att många som använder O/R-mappers gör det därför att de inte kan sin SQL; intressant nog finns det dem som menar att det är en fördel med O/R-mappers att de genererar bättre SQL än en normal utvecklare. Frågan är hur allvarlig denna kritik är – de flesta O/R-mappers erbjuder en möjlighet att gå runt ramverket och specialskriva metoder och använda lagrade procedurer.&lt;br /&gt;&lt;br /&gt;O/R-mapping är ingenting nytt, men jag tycker det talats allt mer om modellen på sistone. Jag tror att en del av förklaringen kan vara att Microsoft, från att ha varit ganska ointresserade av modellen och satsat mer på data transfer objects som recordsets och datasets, för en tid sedan började tala om egen O/R-mapper. Arbetsnamnet var &lt;a href="http://msdn.microsoft.com/data/objectspaces.aspx"&gt;ObjectSpaces &lt;/a&gt;och tanken var att det skulle lanseras med Visual Studio 2005. Samtidigt som detta ökade intresset för O/R-mapping hade det på kort sikt en motsatt effekt; man väntade hellre på Microsofts lösning än investerade tid och resurser på en produkt med osäker framtid. En hel del hann dock hända på vägen, ObjectSpaces lades ned och allt talar nu för att det är &lt;a href="http://msdn.microsoft.com/data/ref/linq/"&gt;LINQ/dLINQ&lt;/a&gt;, som jag skrivit om &lt;a href="http://joakimsunden.blogspot.com/2006/02/linq-den-felande-lnken-mellan-oo-och.html"&gt;tidigare&lt;/a&gt;, som kommer att bli Microsofts bidrag till O/R-mapping. Om jag förstått saken rätt kommer LINQ dessutom att vara utbyggbart på ett sådant sätt att dagens O/R-mappers kommer att kunna bygga på LINQ i framtiden, snarare än konkurrera med teknologin.&lt;br /&gt;&lt;br /&gt;Till syvende og sist blir det som vanligt projektets förutsättningar som får bestämma om man bör använda en O/R-mapper eller inte. I väldigt många projekt räcker en O/R-mapper väldigt långt och du får väldigt mycket gratis, i en del fall kanske det krävs mycket specialskriven dataaccesslogik som gör att en O/R-mapper inte tillför särskilt mycket. Ibland kanske det är fråga om så pass lite affärslogik att det blir suboptimalt att baka om data till objekt, till exempel i rapporter som utgår från en tabell eller vy i databasen.&lt;br /&gt;&lt;br /&gt;Oavsett om man tycker att O/R-mapping är en bra modell eller inte kan man vara säker på att vi kommer att se ännu mer av den i och med LINQ som kommer med nästa version av C#/VB.NET och Visual Studio redan i höst. Vill man inte använda en O/R-mapper bör man i alla fall titta närmare på kodgeneratorer; här är trenden än tydligare – allt mer kod kommer i framtiden att genereras av olika verktyg.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Länkar till information om O/R-mapping och LINQ&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.vanatec.com/en"&gt;Vanatec OpenAccess&lt;/a&gt; - en populär O/R-mapper&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.llblgen.com/"&gt;LLBLGen Pro&lt;/a&gt; - ännu en populär O/R-mapper&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.nhibernate.org/"&gt;nHibernate &lt;/a&gt;- portning till .NET av den klassiska O/R-mappern för Java&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.npersist.com/"&gt;nPersist&lt;/a&gt; - svensk O/R-mapper för .NET av &lt;a href="http://www.matshelander.com/"&gt;Mats Helander&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.howtoselectguides.com/dotnet/ormapping/"&gt;Kriterier för att välja O/R-mapper&lt;/a&gt;, omfattande lista på O/R-mappers&lt;/li&gt;&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2006/05/14/446412.aspx"&gt;Scott Guthrie om LINQ och ASP.NET&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.lowendahl.net/showShout.aspx?id=99"&gt;Har Microsoft andra O/R-mappers på gång..?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114673308021548110?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114673308021548110/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114673308021548110' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114673308021548110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114673308021548110'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/or-mapping-vad-r-det.html' title='O/R-mapping - vad är det?'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114681635342085718</id><published>2006-05-05T10:00:00.000+02:00</published><updated>2006-10-16T07:28:37.203+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MIX06'/><title type='text'>Upplev Mix06 i din dator</title><content type='html'>Alla sessioner från Mix06 är nu &lt;a href="http://sessions.mix06.com/"&gt;tillgängliga för nedladdning&lt;/a&gt; på konferensens webbplats.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114681635342085718?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114681635342085718/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114681635342085718' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114681635342085718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114681635342085718'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/upplev-mix06-i-din-dator.html' title='Upplev Mix06 i din dator'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114681595544764907</id><published>2006-05-05T09:49:00.000+02:00</published><updated>2006-10-16T07:28:37.140+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='Verktyg'/><title type='text'>Ny version av Atlas Control Toolkit</title><content type='html'>Nu finns den nya versionen av Atlas Control Toolkit att &lt;a href="http://download.microsoft.com/download/b/8/1/b8176a86-5d85-41b8-819b-19a9acf1ce8c/AtlasControlToolkit.exe"&gt;ladda ned&lt;/a&gt;. Den innehåller huvudsakligen buggfixar, men också fyra nya kontroller:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;AlwaysVisibleControl:&lt;/strong&gt;  gör så att valfri kontroll alltid hänger kvar "ovanpå" sidan när du scrollar.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;DropShadow:&lt;/strong&gt;  ger en Panel skugga runt kanterna. Kan till exempel användas med AlwaysVisibleControl för att tydliggöra att den svävar ovanpå sidan.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;ModalPopup:&lt;/strong&gt; en popup som visar innehållet som en modal dialog så att resten av sidan gråas ut och inte går att klicka på eller navigera inom förrän du gjort ditt val och/eller besvarat dialogen.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;RoundedCorners:&lt;/strong&gt; lägger automatiskt till rundade hörn på till exempel en panel.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114681595544764907?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114681595544764907/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114681595544764907' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114681595544764907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114681595544764907'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/ny-version-av-atlas-control-toolkit.html' title='Ny version av Atlas Control Toolkit'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114673031789264617</id><published>2006-05-04T10:07:00.000+02:00</published><updated>2006-10-16T07:28:36.991+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Verktyg'/><title type='text'>Microsoft och de 101 kodexemplen</title><content type='html'>Microsoft har skapat en rad referenskodexempel för Visual Studio 2005 som man kan använda och vidareutveckla för att lösa vanligt förekommande uppgifter, till exempel hur man använder SQLCacheDependency för cache, hur man skapar egna menyer i Outlook eller hur man använder serieporten med den nya Port-klassen. Det rör sig om totalt 101 olika exempel indelade i åtta kategorier:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Base Class Libraries - Group 1 Samples&lt;/li&gt;&lt;li&gt;&lt;a name="Base2"&gt;Base Class Libraries - Group 2 Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a name="data"&gt;Data Access Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a name="web"&gt;Web Development Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a name="winforms"&gt;Windows Forms Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a name="vsto"&gt;Visual Studio Tools for Office Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a name="Tablet"&gt;Tablet PC Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a name="Net"&gt;.NET Compact Framework Samples&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Du kan ladda ned dem i antingen C# eller VB.NET från &lt;a href="http://msdn.microsoft.com/vstudio/downloads/101samples/"&gt;http://msdn.microsoft.com/vstudio/downloads/101samples/&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114673031789264617?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114673031789264617/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114673031789264617' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114673031789264617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114673031789264617'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/microsoft-och-de-101-kodexemplen.html' title='Microsoft och de 101 kodexemplen'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114664577910715305</id><published>2006-05-03T10:25:00.000+02:00</published><updated>2006-10-16T07:28:36.927+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><title type='text'>Bygg egna Atlas-kontroller med Atlas Control Toolkit</title><content type='html'>&lt;a href="http://atlas.asp.net/default.aspx?tabid=47&amp;subtabid=477"&gt;Atlas Control Toolkit&lt;/a&gt; har funnits ute sedan i påskas, men jag tycker ändå det är värt att nämna det eftersom jag dels tycker hela Atlas-projektet är mycket intressant, dels gillar trenden mot allt större öppenhet och deltagandekultur som blir allt tydligare hos Microsoft. Atlas Control Toolkit är ett ramverk med mallar och basklasser för att bygga återanvändbara Atlas-kontroller. Det kan till exempel vara en &lt;a href="http://atlas.asp.net/atlastoolkit/CascadingDropDown/CascadingDropDown.aspx"&gt;CascadingDropDownList&lt;/a&gt; som laddar nya rullgardinsmenyer, utan synlig postback, med nya val utifrån vad du valt i de tidigare menyerna; ett ganska vanligt scenario i olika typer av webbformulär. Just CascadingDropDownList hittar du också bland de exempelkontroller som medföljer verktygslådan tillsammans med ytterligare några stycken, bland annat min personliga favorit &lt;a href="http://atlas.asp.net/atlastoolkit/PopupControl/PopupControl.aspx"&gt;PopupControl&lt;/a&gt; som poppar upp ett litet "fönster" i anslutning till ett element, t.ex. med en asp:calendar-kontroll för att åstadkomma en så kallad datumväljare ("date picker").&lt;br /&gt;&lt;br /&gt;Microsofts förhoppning är att Atlas Control Toolkit ska få utvecklare både inom och utom Microsoft att utveckla hundratals, eller till och med tusentals, Atlas-kontroller. Programmets ansvarige, &lt;a href="http://blogs.msdn.com/sburke/default.aspx"&gt;Shawn Burke&lt;/a&gt;, har målet klart för sig:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"Basically, my mission is to band together with our users (you!) and turn this&lt;br /&gt;tookit into the biggest, baddest set of web client UI extensions around."&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;För att åstadkomma detta kommer man att sätta upp någon form av source control på Internet där alla som vill kan bidra till kontrollutvecklingen med egna kontroller, men även genom exempelvis vidareutveckling och buggfixar i befintliga kontroller. Detaljerna för hur detta kommer att fungera är inte klara ännu, men en ny version av verktygslådan och en del nya kontroller kommer nu i veckan och därefter har Burke &lt;a href="http://blogs.msdn.com/sburke/archive/2006/04/28/586095.aspx"&gt;annonserat&lt;/a&gt; att man kommer att ta tag i saken.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114664577910715305?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114664577910715305/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114664577910715305' title='1 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114664577910715305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114664577910715305'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/bygg-egna-atlas-kontroller-med-atlas.html' title='Bygg egna Atlas-kontroller med Atlas Control Toolkit'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114664311686987036</id><published>2006-05-03T09:56:00.000+02:00</published><updated>2006-10-16T07:28:36.863+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>CSS-vänliga kontroller lanserade</title><content type='html'>Nu har Microsoft äntligen lanserat de CSS-vänliga kontrolladaptrar jag skrev om &lt;a href="http://joakimsunden.blogspot.com/2006/03/aspnet-20-nu-nnu-mer-tillgngligt.html"&gt;tidigare&lt;/a&gt;. Förutom att du med hjälp av dessa själv kan styra vad kontrollerna i ASP.NET producerar för HTML, finns det fem CSS-vänliga exempelkontroller (Menu, TreeView, DetailsView, FormView och DataList) med i paketet du kan ladda ned &lt;a href="http://www.asp.net/cssadapters/Default.aspx"&gt;här&lt;/a&gt;. Förutom det white paper du hittar på samma plats har Scott Guthrie som vanligt skrivit en &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/05/02/444850.aspx"&gt;lättillgänglig introduktion&lt;/a&gt; i sin blogg.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114664311686987036?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114664311686987036/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114664311686987036' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114664311686987036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114664311686987036'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/05/css-vnliga-kontroller-lanserade.html' title='CSS-vänliga kontroller lanserade'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114586791999637389</id><published>2006-04-26T09:39:00.000+02:00</published><updated>2006-10-16T07:28:36.786+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>I am alive!</title><content type='html'>Ledighet tillbringad i det isolerade Smedsträsk, inskolning på dagis och problem med Internet-uppkopplingen är faktorer som samverkat till att hålla mig borta från min blogg de senaste veckorna. Nu är jag dock tillbaka. En gigantisk mejl- och RSS-skörd, liksom andra praktiska bestyr förenade med återkomst till kontoret efter en tids frånvaro, återstår dock att ta itu med innan jag kommer att ha tid att skriva något.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Uppdatering:&lt;/strong&gt; En faktor som försenat min återkomst ytterligare är att jag inte kunnat publicera nya inlägg på min blogg denna vecka på grund av problem med Blogger/Blogspot. Om du kan läsa detta verkar de problemen vara lösta nu... :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114586791999637389?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114586791999637389/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114586791999637389' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114586791999637389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114586791999637389'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/04/i-am-alive.html' title='I am alive!'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114421927736221503</id><published>2006-04-05T08:36:00.000+02:00</published><updated>2006-10-16T07:28:36.724+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='MIX06'/><title type='text'>Bygg egna Atlas-kontroller</title><content type='html'>Bertrand Le Roy på Atlas-teamet har påbörjat en serie &lt;a href="http://weblogs.asp.net/bleroy/archive/2006/04/04/441921.aspx"&gt;blogginlägg&lt;/a&gt; om hur man skapar egna Atlas-kontroller med hjälp av den &lt;a href="http://atlas.asp.net/docs/Overview/AtlasLibraryOverview.aspx"&gt;utbyggnad av JavaScript&lt;/a&gt; som Atlas innehåller. De kontroller han använder som exempel är de som Brad Abrams använde i sin &lt;a href="http://blogs.msdn.com/brada/archive/2006/03/23/559077.aspx"&gt;Atlas-demonstration&lt;/a&gt; på Mix06. Du kan ladda ned koden för demon &lt;a href="http://blogs.msdn.com/brada/archive/2006/03/23/559077.aspx"&gt;här&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114421927736221503?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114421927736221503/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114421927736221503' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114421927736221503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114421927736221503'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/04/bygg-egna-atlas-kontroller.html' title='Bygg egna Atlas-kontroller'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114418201531853748</id><published>2006-04-04T21:47:00.000+02:00</published><updated>2006-10-16T07:28:36.662+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Arkitektur/Design'/><title type='text'>Microsoft kartlägger hur företag fungerar</title><content type='html'>Ric Merrifield på Microsoft är ansvarig för ett projekt inom Microsoft som kallas "the Motion initiative" som är sysselsatt med så kallad business capability modeling. Tillsammans med företag från olika branscher - allt från livsmedelskedjor till advokatbyråer - har Microsoft byggt upp en generell modell över alla de kompetenser eller färdigheter ("capabilities") ett företag använder för att bedriva sin verksamhet. Den mest grundläggande nivån, core capabilities, handlar om breda kategorier som "Develop product/services", "Generate demand" och "Plan and manage the enterprise". Den karta Motion tagit fram borrar sig sedan ned inom varje sådan kategori ända till vad som kallas primitiva aktiviteter, till exempel "Enter orders into production" och "Access product pipeline for availability". Om allt detta och mycket mer berättade Ric Merrifield när han besökte Sverige i slutet av förra året på Microsofts och &lt;a href="http://www.2xsundblad.com"&gt;Sundblad &amp; Sundblads&lt;/a&gt; Architect Forum. I fall du inte hörde till den selekta skara som då fick chansen kan jag meddela att Robert Scoble nu gjort en mycket intressant &lt;a href="http://channel9.msdn.com/showpost.aspx?postid=179071"&gt;intervju med Ric Merrifield&lt;/a&gt; om just Motion som finns på &lt;a href="http://joakimsunden.blogspot.com/2006/03/channel9-p-svenska.html"&gt;Channel9&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114418201531853748?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114418201531853748/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114418201531853748' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114418201531853748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114418201531853748'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/04/microsoft-kartlgger-hur-fretag.html' title='Microsoft kartlägger hur företag fungerar'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114371384873980260</id><published>2006-03-30T11:54:00.000+02:00</published><updated>2006-10-16T07:28:36.597+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>På gång för ASP.NET</title><content type='html'>Scott Guthrie har börjat publicera en månatligen &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/03/30/441465.aspx"&gt;återkommande lista&lt;/a&gt; på nyheter för ASP.NET från Microsoft på sin blogg. För april innehåller den sådant som ännu en Atlas-release, ett Atlas Control Pack med bland annat cascading drop-down lists och collapsable panels, de adapteruppdateringar som gör flera web controls helt CSS-kontrollerade som jag skrev om &lt;a href="http://joakimsunden.blogspot.com/2006/03/aspnet-20-nu-nnu-mer-tillgngligt.html"&gt;tidigare&lt;/a&gt; samt en release candidate för &lt;a href="http://webproject.scottgu.com/"&gt;Visual Studio 2005 Web Application Project&lt;/a&gt; för de som gillar projektmodellen från VS2003.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114371384873980260?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114371384873980260/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114371384873980260' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114371384873980260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114371384873980260'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/03/p-gng-fr-aspnet.html' title='På gång för ASP.NET'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114365669236834023</id><published>2006-03-29T20:21:00.000+02:00</published><updated>2006-10-16T07:28:36.532+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><title type='text'>Jag bloggar från Stäket</title><content type='html'>I och med detta inlägg har jag placerat min blogg i &lt;a href="http://bloggkartan.se/registrera/22770/staeket/"&gt;Stäket&lt;/a&gt; på &lt;a href="http://bloggkartan.se/"&gt;bloggkartan.se&lt;/a&gt;. Det verkar som att jag är den första som registrerat denna plats som hemvist för min blogg. Det ska bli intressant att se om vi blir fler...&lt;br /&gt;&lt;br /&gt;För dig som inte vet vad Stäket är eller var det ligger kan jag berätta att det ligger i Kallhäll i Järfälla kommun norr om centrala Stockholm. "Stäk" är ett gammalt namn för ett befäst sund med spetsade träpålar under vattnet; i detta fall Almarestäket mellan Järfälla och Upplands Bro, den enda seglingsleden till Uppsala. Just detta stäk är Sveriges mest kända, inte minst på grund av "&lt;a href="http://sv.wikipedia.org/wiki/St%C3%A4kets_rivning"&gt;beslutet om Stäkets rivning&lt;/a&gt;" från 23 november 1517 som har kallats Sveriges första riksdagsbeslut och som var upphovet till Stockholms blodbad när ärkebiskop Gustav Trolle tre år senare krävde sin hämnd; Stäket var också namnet på Trolles borg.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114365669236834023?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114365669236834023/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114365669236834023' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114365669236834023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114365669236834023'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/03/jag-bloggar-frn-stket.html' title='Jag bloggar från Stäket'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114365631226476495</id><published>2006-03-29T19:43:00.000+02:00</published><updated>2006-10-16T07:28:36.469+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MIX06'/><title type='text'>Mix06 - avrundning</title><content type='html'>Den sista dagen på Mix06 innehöll Mix06 Chat, en chans att lunchmingla med konferensens övriga deltagare, men också med dess talare och personal. Jag talade en hel del med ett par olika personer i Atlas-teamet, framför allt med &lt;a href="http://blogs.msdn.com/jhawk/"&gt;Jonathan Hawkins&lt;/a&gt;, nyckelperson tillika Program Manager Architect i Atlas-teamet, samt med en tjej i teamet bakom &lt;a href="http://joakimsunden.blogspot.com/2006/03/windows-live-och-microsoft-gadgets.html"&gt;Windows Live&lt;/a&gt; (jag uppfattade tyvärr aldrig hennes namn). Ett par intressanta saker framkom under våra samtal:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Någon form av ramverk som gör det möjligt att själv använda gadgets på sin egen webbplats på samma sätt som på Live.com kommer att levereras i en framtida Atlas-release. Eftersom nya releaser kommer ca var sjätte vecka kan det alltså bli ganska snart.&lt;/li&gt;&lt;li&gt;Windows Lives svar på &lt;a href="http://joakimsunden.blogspot.com/2006/03/problem-med-svenska-windows-live.html"&gt;min kritik&lt;/a&gt; blir förhoppningsvis åtminstone information om hur man kommer runt problemet. Förhoppningsvis kommer de på sikt att göra alla alternativ lättillgängliga för även icke-engelska browsers/Passport-konton.&lt;/li&gt;&lt;li&gt;&lt;a href="http://local.live.com/"&gt;Virtual Earth&lt;/a&gt; kommer snart att få täckning för "northern and eastern Europe" (Tyskland hör tydligen till någon av dessa kategorier!); bildmaterialet lär redan finnas och det är bara en tidsfråga innan det blir tillgängligt.&lt;/li&gt;&lt;li&gt;Kartmaterialet på &lt;a href="http://local.live.com/"&gt;http://local.live.com/&lt;/a&gt; är mer begränsat än det du får tillgång till själv via &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/VEMSC_SDK/HTML/Introduction.asp"&gt;Virtual Earth API&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Namnet Atlas är inte en akronym utan är liksom en del andra Microsoft-kodnamn hämtat från Saturnus-trivia; Atlas är en av Saturnus månar och Cassini (den inbyggda webbservern i Visual Studio 2005) är en (del av en) &lt;a href="http://en.wikipedia.org/wiki/Cassini-Huygens"&gt;NASA-farkost&lt;/a&gt; som skickades till planeten för snart nio år sedan.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114365631226476495?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114365631226476495/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114365631226476495' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114365631226476495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114365631226476495'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/03/mix06-avrundning.html' title='Mix06 - avrundning'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114362645877038391</id><published>2006-03-29T11:59:00.000+02:00</published><updated>2006-10-16T07:28:36.406+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personligt'/><category scheme='http://www.blogger.com/atom/ns#' term='MIX06'/><title type='text'>Lång dags färd mot Stockholm</title><content type='html'>Det har gått ett tag sedan mitt senaste inlägg. Orsaken till detta är min mardrömsresa hem från Las Vegas. Det började med att jag fick influensan och mådde så pass illa att jag var orolig för hur jag skulle ta mig mellan planen i Chicago. När jag äntligen vinglat fram till min flight, ett direktflyg till Stockholm med SAS, visade den sig vara inställd. Efter en lång tids illamående i en extremt långsam kö belönades jag med en matkupong på $5 (sic!) och en flygresa via Frankfurt med Air India åtskilliga timmar senare. Naturligtvis hade de sjabblat med just min bokning i Frankfurt och jag fick snällt vänta i ytterligare några timmar på ett senare plan till Stockholm. Sedan dess har jag i princip varit sängliggande. Nåväl, Mix06 var dock så intressant att jag gärna hade gjort om resan även med facit i hand.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114362645877038391?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114362645877038391/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114362645877038391' title='2 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114362645877038391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114362645877038391'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/03/lng-dags-frd-mot-stockholm.html' title='Lång dags färd mot Stockholm'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114304127156761217</id><published>2006-03-22T16:20:00.000+01:00</published><updated>2006-10-16T07:28:36.345+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='MIX06'/><title type='text'>AJAX - erfarenheter från skyttegraven</title><content type='html'>Den mest lärorika sessionen jag besökt hittills är Scott Isaacs &lt;a href="https://content.mix06.com/content/SessionView.aspx?TopicID=4ff5b5e6-11ad-4f9b-a50a-722953ed0877"&gt;"Lessons from the Trenches: Engineering Great AJAX Experiences"&lt;/a&gt;. Scott Isaacs var chefarkitekten bakom Live.com och har samlat på sig en hel del erfarenheter om de hinder och fallgropar man måste se upp med när man kodar en AJAX-applikation. Alla som tänkt använda ATLAS/AJAX på allvar bör gå gå igenom hans &lt;a href="http://www.weblogging.com/decks/lessons.ppt"&gt;slides&lt;/a&gt; från denna session och se den live när alla sessioner görs tillgängliga på &lt;a href="http://www.mix06.com/"&gt;http://www.mix06.com/&lt;/a&gt; om en månad. &lt;a href="http://spaces.msn.com/siteexperts/"&gt;Scotts blogg&lt;/a&gt; innehåller också en hel del nyttiga erfarenheter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114304127156761217?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114304127156761217/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114304127156761217' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114304127156761217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114304127156761217'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/03/ajax-erfarenheter-frn-skyttegraven.html' title='AJAX - erfarenheter från skyttegraven'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114297806794779381</id><published>2006-03-21T22:35:00.000+01:00</published><updated>2006-10-16T07:28:36.276+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='MIX06'/><title type='text'>Mix06 Sandbox</title><content type='html'>Jag tillbringade några timmar i &lt;a href="http://blog.mix06.com/blog/archive/2006/02/27/504.aspx"&gt;Mix06 Sandbox&lt;/a&gt; under söndagen; spelade lite X-box 360, kollade in olika &lt;a href="http://www.origamiproject.com/1/"&gt;Origami&lt;/a&gt;-prototyper, tittade på &lt;a href="http://msdn.microsoft.com/windowsvista/building/presentation/"&gt;Windows Presentation Foundation&lt;/a&gt; och experimenterade med de olika laborationerna som finns installerade på de olika stationerna här. Det kändes ganska lyxigt att ha personer som &lt;a href="http://weblogs.asp.net/bleroy/"&gt;Bertrand Le Roy&lt;/a&gt; och &lt;a href="http://blogs.msdn.com/brada/"&gt;Brad Abrams&lt;/a&gt; från ATLAS-teamet sittande bredvid sig beredda att svara på frågor om de olika laborationerna och andra ATLAS-relaterade spörsmål. En av de mest intressanta laborationerna var faktiskt &lt;a href="http://www.microsoft.com/windowsvista/features/foreveryone/sidebar.mspx"&gt;Windows Vista Sidebar&lt;/a&gt;. Microsoft har verkligen gjort det otroligt enkelt att skapa egna &lt;a href="http://joakimsunden.blogspot.com/2006/03/windows-live-och-microsoft-gadgets.html"&gt;gadgets&lt;/a&gt; för Sidebar. Du behöver egentligen bara använda HTML för att skapa en enkel gadget och sedan placera den i rätt katalog i operativsystemet så är det klart.&lt;br /&gt;&lt;br /&gt;Jag har sett att flera av laborationerna, liksom ett antal presentationer, nu finns tillgängliga för nedladdning på &lt;a href="https://content.mix06.com/content/sessions.aspx"&gt;https://content.mix06.com/content/sessions.aspx&lt;/a&gt;. Tyvärr går många laborationer inte att köra utan tillgång till filer som inte är inkluderade i de nedladdningsbara filerna, men laborationsmanualerna kan ändå vara intressanta.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114297806794779381?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114297806794779381/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114297806794779381' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114297806794779381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114297806794779381'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/03/mix06-sandbox_21.html' title='Mix06 Sandbox'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20103956.post-114289324884122040</id><published>2006-03-20T23:18:00.000+01:00</published><updated>2006-10-16T07:28:36.148+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MIX06'/><title type='text'>Windows Live som plattform</title><content type='html'>Gårdagens session &lt;a href="https://content.mix06.com/content/SessionView.aspx?TopicID=84c7add6-a23b-4e25-b6c0-d2d4d2f612e4"&gt;"The Windows Live Platform: Build Applications That Have Access to 400 Million Address Books, and 13 Billion Contacts!"&lt;/a&gt; handlade om &lt;a href="http://joakimsunden.blogspot.com/2006/03/windows-live-och-microsoft-gadgets.html"&gt;Windows Live&lt;/a&gt; som plattform eller hur vi som utvecklare kan använda Microsofts öppna API:er för att utnyttja Microsofts Windows Live Platform i våra egna applikationer. Exempel på de tjänster som är tillgängliga är &lt;a href="http://msdn.microsoft.com/live/gettingstarted/searchstart"&gt;MSN Search&lt;/a&gt;, &lt;a href="http://www.viavirtualearth.com/vve/promos/getstarted.ashx"&gt;Virtual Earth&lt;/a&gt; och &lt;a href="http://msdn.microsoft.com/live/gettingstarted/messengerstart"&gt;MSN Messenger&lt;/a&gt;. Med MSN Search Web Services kan du till exempel bygga en söktjänst för din egen sajt som använder MSN Search bakom kulisserna men visar sökresultatet på din egen sajt precis som du vill ha det.&lt;br /&gt;&lt;br /&gt;Microsoft visade en hel del ögongodis de skapat som exempel på hur tjänsterna kan kombineras, bl.a. en applikation som via Messenger visade var demokillens kontakter befinner sig på en karta från Virtual Earth liveuppdaterad var 30 sekunder med AJAX-teknik utifrån GPS-signaler på deras mobiltelefoner. Med några enkla steg skapade han sedan ett möte på ett café på kartan varpå vägbeskrivningar automatiskt skickades ut till alla deltagande kontakter utifrån deras respektive positioner.&lt;br /&gt;&lt;br /&gt;En mer jordnära och nyttig tillämpning som demonstrerades var en Messenger-applikation som ger dig möjlighet att låta en annan person köra felsökning på din dator om du till exempel vill hjälpa din mamma med datorproblem.&lt;br /&gt;&lt;br /&gt;Ett tredje exempel kan du själv testa genom att lägga till &lt;a href="mailto:mix06info@hotmail.com"&gt;mix06info@hotmail.com&lt;/a&gt; som kontakt i Messenger och sedan skicka meddelandet "menu" till din nya kontakt. Du kommunicerar då med en &lt;a href="https://buddyscript.conversagent.com/msnoffer.html"&gt;Bot&lt;/a&gt; som kan ge dig information om Mix06. Testa till exempel "activities" genom att skriva detta, eller genom att välja det menyalternativet efter att ha skrivit "menu", och välj till exempel en restaurang på The Strip för att få upp ett Messenger Activity-fönster med en karta från Virtual Earth som visar restaurangen.&lt;br /&gt;&lt;br /&gt;I går lanserade Microsoft också en ny ingång på MSDN med mer information om det här: &lt;a href="http://msdn.com/live"&gt;Windows Live Developer Center&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20103956-114289324884122040?l=blogg.joakimsunden.se' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blogg.joakimsunden.se/feeds/114289324884122040/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20103956&amp;postID=114289324884122040' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114289324884122040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20103956/posts/default/114289324884122040'/><link rel='alternate' type='text/html' href='http://blogg.joakimsunden.se/2006/03/windows-live-som-plattform.html' title='Windows Live som plattform'/><author><name>Joakim Sundén</name><uri>http://www.blogger.com/profile/13012928966653025125</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://www.varia.nu/joakim/joakim.jpg'/></author><thr:total>0</thr:total></entry></feed>
