Welcome to MSDN Blogs Sign in | Join | Help

Ju mer jag jobbar med arkitektur desto mer inser jag att det intressanta finns i det som tas för givet. Mitt lightning talk på Open Space 2010 handlade om detta. Om defaultarkitektur. Om det där som bara... Skall vara. Som t.ex.

- Identitet och säkerhet stavas LDAP
- Det skall vara en flerskiktad modell
- Vi MÅSTE ha en relationsdatabas annars går det åt...

Ju mer oerfarna team det är, destå mer krampaktigt håller man fast vid nedanstående modell, som inte är dålig... Men lite väl contextagnostisk.

Det roliga med modellen ovan är att jag jobbat med detta i över tio år och aldrig sett en bra implementation av en "Business Workflow" box enligt modellen. Har man tunga workflow så adresserar man det via en workflowmotor. Lätta workflows, enkla statemachines i domänmodellen. En annan intressant detalj är hur Business Components skiljer sig från Business Entities boxen. Det hela handlar givetvis mer om hur man vill modellera sin domän än om verb, substantiv och en artikel i msdn magazine som skall mappas till en box i en defaultmodell. Det intressanta är dock att det inte är helt ovanligt är att man sätter modellen ovan innan man överhuvudtaget gör en analys av den miljö man skall verka i.

De senaste åren har en ny defaultarkitektur etablerats, jag skall försöka rita den med en vy som kan mappas mot P&P modellen ovan, lite för mycket boxar för min smak, men det mappar renare mot vår första modell.

Det intressanta är att denna adresserar domäninterna och domänexterna frågor innan man låser skikt och liknande. Egentligen ser jag det hela på detta sätt:

Modellera aktuell domän ur ett verksamheltsperspektiv, id perspektiv, säkerhetsperspektiv och dataperspektiv innan ni bestämmer er för en arkitektonisk modell. Det går inte att utgå från en boxad defaultarkitektur och sedan försöka lista ut hur man skall trycka ner saker i aktuell box.

Hur var det nu Dreyfus studien uttryckte det...

Novice: rigid adherence to rules and no discretional judgment...

Och lösningen är ingen produkt eller teknologi... Hur gärna jag än vill att det skall vara det...

Följ med på en resa där vi utforskar nya ving.se siten tillsammans med Anders Ljusberg, ansvarig arkitekt för projektet som tillsammans med ett otroligt kompetent team skapat lösningen. Hur utvecklar man en modern resebokningssite på Microsofts plattform med extremt höga krav på tillgänglighet och skalbarhet? Anders förklarar hur de arbetar med en modulariserad MVC arkitektur i en lösning baserad på asp.net 3.5 och den senaste versionen av .net framework.

Klicka här för att titta på intervjun med Anders Ljusberg på Channel 9

Vi dyker även in i hur de använder Unity som IoC container och på ett aspektorienterat sätt skjuter in funktionalitet som loggning och prestandamätning. På detta sätt kan man automatiskt skicka prestandainformation i realtid till Microsoft Operations Manager. Ett pragmatiskt och vackert sätt att hantera applikationens hälsomodell och dra nytta av investeringar i System Center och övrig Microsoftplattform.

Och hur anpassar man egentligen Unity till att vara snabb nog för att användas i en av Sveriges största resebokningssiter? Läs mer om hur ving.se prestandaoptimerat Unity här.

Är ni mer nyfikna på hur Ving.se utvecklats finns mer att läsa på Vings beta blog.

Såg att min add-in till Internet Explorer fått vingar, här kommer den igen. Markera text i IE, högerklicka och sök direkt i Spotify. Enjoy! (Funkar i alla hyffsat moderna versioner av IE)

Ladda ner spotifyaddin.msi (88.0K)

placebo

Jag tänkte använda denna post till att beskriva hur man kan använda .NET framework för att skapa applikationer till iPhone. Samtidigt som jag gör det tänkte jag även passa på att visa hur MVC används vid utveckling mot iPhone OS. Som arkitekt tycker jag att det är enormt lärorikt att lära mig hur mönster används på andra plattformar. Helt ärligt tror jag inte jag förstod lambdas i C# innan jag började använda blocks i Ruby (IronRuby ftw!).

I denna post vill jag hänga upp det hela på två mönster nämligen Delegation och MVC.

Vi kör igång... Målet är inte att gå igenom alla moment för att skapa applikationen, om ni vill se allt i detalj är ni mycket välkomna att ladda ner källkoden. Jag vill vandra igenom koden och flagga några aspekter som jag tycker är intressanta. Bakgrunden till att det går att använda C# och .NET för att nå iPhones API:er är Monotouch. Monotouch gör att vi kan nå iPhone OS API:er samt ha lyxen att lägga till alla de saker som vi tar för givna som .NET utvecklare. Lysande! (Det är så sjukt bra att jag inte riktigt fattar det, våra favorit .NET features när vi utvecklar mot en annan leverantörs OS... Wicked!)

(Disclaimer: Självklart vill jag som stolt Microsoftanställd att alla i hela världen skall utveckla mot Windows Mobile, men om ni nu ska utveckla för iPhone så är det klart att ni skall göra det med .NET framework i botten och att lära sig bli en bättre utvecklare genom att titta på vackra mönster på andra plattformar är bra för själen/hjärnan)

Vi startar projektet med MonoDevelop som blir vårt IDE för dagen.mono2

Det första vi ser är att vi har en Main.cs. Grunden i alla iPhone applikationer är en instans av en applikation, men för att vi skall slippa subklassa denna hela tiden, bygger detta på delegation. Applikationsobjektet delegerar arbete till vår AppDelegate som ärver från UIApplicationDelegate. NSApplication hanterar hela livscykeln för applikationen som när vi startar och när vi avslutas. När appen har kickat igång delegerar NSApplication arbetet till vår delegat via ett meddelande till FinishedLaunching. Om du undrar varför allting börjar med NS så finns det många anledningar, den roligaste är Objective-C saknar namespaces så man är så illa tvungen... (*host* Stenålder :-)) Hursomhelst, det finns många andra saker som uppväger detta men det är lite kul... Det är här i vår applikationsdelegat vi sätter upp vår bas-kontroller med tillhörande vy. Det exempel som visas på MonoTouch är lite spretigt. Alla events från knappar och liknande skickas till AppDelegate (Som vi ser ovan). Det blir lite som ett globalt event-knattedisco istället för en ren implementation där givetvis lyssnaren finns i aktuell controller. Vi gör om och gör rätt...

 MonoTest - Main.cs* - MonoDevelop

Vi skapar en UINavigationController och lägger till den som en subview till vårt huvudfönster. Det intressanta med detta är att denna kommer att sköta alla våra kontroller med tillhörande vyer via en intern stack implementation. Navigerar vi oss neråt bland vyer så pushar vi bara nya kontrollers på stacken, navigerar vi tillbaks så poppar vi stacken. Allt annat som övergångseffekter och aktivering sköts av NSNavigationController. Snyggt...Vi skapar en ny ViewController och kallar den för ButtonController. Denna kommer att hantera den första vyn vi kommer att visa. Cocoa applikationer använder sig ofta av Interface Builder för att skapa UI och vi gör detsamma.

   ib


Vi skickar in tre knappar i aktuell vy och hookar upp denna till lyssnare i vår kontroller. Objective-C hanterar events/actions på ett lite annorlunda sätt än vad vi är vana vid. UIn som byggs via Interface builder hookas upp med hjälp av actions/outlets och kan mappas mot metoder i applikationen som taggats upp med IBAction(event)/IBOutlet(referens till kontroll). Internt parsas bara aktuell header fil från Interface builder så att den skall kunna se hur man kan trycka ihop kod/resurs(UI). Ändrar vi i Interface builder så slår detta igenom i koden, men det är lite magi under ytan. Ni kan se hur detta görs i implementationen av den översta och mellersta knappen. Men i och med att vi har tillgång till .net framework kan vi självklat använda en vanlig delegat. Det sista knappen hookas upp med en enkel

eventlambda

Självklart funkar det att använda lambdas. 

Sweet!Nu när ButtonControllern är klar kan vi vid uppstart pusha denna på NSNavigationControllerstacken med en navController.PushViewController(buttonController,true); enligt tidigare bild...När vi smetar vårt finger mot den översta knappen pushar vi en ny kontroll på navigationsstacken. Denna gång blir det en kontroll med en label vy.

 MonoTest - ButtonController.xib.cs* - MonoDevelop 

Vill vi navigera tillbaks till föregående vy är det bara att poppa en kontroller i NSNavigationController (Detta görs automatiskt om man använder knappen i kontrollen). 

 iPhone

Vad jag ville visa med detta exempel är att det är fullt möjligt att skriva lysande applikationer till iPhone med .NET framework. Vissa saker blir snyggare (som eventhantering, minneshantering mm.) samtidigt har vi tillgång till alla native API:er som iPhone erbjuder... Inte alls så dumt... 

Här kommer en liten video som visar hur det hela ser ut i verkligheten:

Vill ni ha källkoden eller är nyfikna på mer så är det bara att pinga mig via bloggen eller på @deurell på twitter!

"Punk. Quarterback Punk..."

Jag och Tess körde vår "Devs & Ops Unite" dragning igår. Härligt att det var så mycket sköna människor som kom och tittade på vår batalj i gränslandet mellan Jolt och Birkenstock.  Sessionen spelades in och kommer att läggas ut via techdays siten om jag fattat det rätt, återkommer med en länk när den är uppe. Lägger upp en pdf från presentationen här. Om ni har funderingar eller frågor är det enklast att hitta mig på twitter nuförtiden... :-)

Imorgon är det dags för Dataföreningens/IASAs ITARC konferens. Min insats i detta blir Azure demos på Sten Sundblads keynote samt ett härligt pass där Microsoft, Amazon, Google och EMC kör korta (jepp, 15 minuter... Tror det kortaste jag kört tidigare är 60 minuter...) presentationer om våra molnplattformar. Skall bli kul, om ni är där finns jag på twitter under hela dagen. Vill ni ha min presentation så finns den här.

Fick ett tråkigt meddelande idag. En av mina stora förebilder på Microsoft här i Norden, som jag lärt mig otroligt mycket av kopplat till TDD på vår plattform, Mark Seemann, slutar på Microsoft. Hans tankar och posts kring Zero Friction TDD är väl värda en genomläsning! Allt är en effekt av en sugig konjunktur och i detta fall la Microsoft ner hela Microsoft Dynamics Mobile Teamet i Danmark.

Letar ni efter en grym utvecklare, TDD person, föreläsare i Köpenhamn eller Öresundsregionen så rekommenderar jag att kontakta honom asap.

På gamla dagar har jag blivit railsutvecklare. Snart står jag väl med en MacBook under armen på Starbucks, säsongskort i Whistler, nya telisar, rött hår och tjänar miljoner... Eller så stannar jag här med min fula Thinkpad och odlar managementmage...

Hursomhelst är det underbart att bredda min horisont och samtidigt få känna mig som en riktig nybörjare. Hittills har resan varit lysande! Men.... Jag har saknat Visual Studio. Nu finns det ett sätt att smidigt köra rails med SQL Server i botten och via Visual Studio. Cool! I like it! Ni hittar mer info här.

Min övergång till Windows7 har gått hur bra som helst. Det har bara varit två hangups som jag inte riktigt snyggt har kommit runt. Det ena är att adplus vägrar att hitta aktuella processer när jag skall ta ut en dump och den andra är att registreringar av WMI providers inte fungerar som jag skulle vilja. WMI sparar jag ett litet tag till, men adplus visar sig ha en ganska enkel lösning.

Problemet ligger i tlist som används av adplus för att hitta aktuell process. Den enkla lösningen är att skicka med en -tlist switch till adplus men det är lite att gräva ner huvudet i sanden. Gräver man lite djupare (som John Robbins gjorde) så finner man att i Windows 7 lägger till en extra [0] i output, såhär;

[0] 1 32 5828 powershell.exe
Command Line: ...

denna finns inte under Vista vilket gör att parsningen av processerna inte längre funkar och genererar en:

>adplus -hang –p 4242 -o c:\dumps
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

The following requested processes are not executing:
4242;

Annoying... Men vår hjälte har givetvis skapat en fix för detta som ni kan hitta här.

Tack till Tess som tipsade min om detta! Nu är världen vacker igen...

Happy debugging´on Windows7!

Ingen kan förklara de innersta hemligheterna med TFS så klart och tydligt som Dag. Du rockar!

 

Ibland behöver jag komma bort ifrån arkitekturdokument, WSDL, WCF, DFO, EntLib, debugging och hitta tillbaks till den där känslan som gjorde att jag började programmera från början. Inte var det för att skriva LOB applikationer direkt… Under julen bestämde jag mig för att bygga ett enkelt tvåmanna racingspel i Silverlight för att få svar på hur en game loop ser ut i Silverlight 2, plocka fram mina kunskaper i linjär algebra och, inte minst, för att ha kul! (Man ska jaga den feta roterande kuben och akta sig för allt annat!). Tanken var att detta även skall ingå i den debugging lab site som jag och Tess jobbar på inför vår dragning på TechDays. Måste bara proppa den full med buggar först…

astrocubes 

Det mesta av utvecklingen var ren glädje men en sak sprang jag på som jag fortfarande inte har någon lösning på. Alla de objekt jag vill rendera ärver från UserControl och jag skulle givetvis vilja att de istället ärver från AstroObject som ärver från UserControl och innehåller stöd för att hålla reda på vinklar, fart och beteende för Thrust, Draw och annat. Ship är egenritad i XAML men AstroCube byggs dynamiskt ihop innan utritning. Här brände jag flera timmar innan jag gav upp… Det visar sig att det är hyffsat enkelt om man definierar objekten i XAML men i mitt fall ville jag dynamiskt lägga till mina objekt. Någon som har några idéer? All kod för detta projekt ligger uppe på codeplex så det är bara att kolla om ni har lust… Jag har några idéer men ni kanske redan har facit? :-)

classdiagram

Nu är det dags att börja skita ner händerna och jobba med Azure! Jag återkommer… ;-)

- jetbrains resharper
- den porriga thai-akvarierestaurangen med kitchiga vattenhjul på bordet och grym pad-thai i Sollentuna
- spotify
- garmin forerunner 405
- visual studio team system test edition
- evernote
- sxipper
- snagit
- live mesh
- powershell
- gym&sim
- powertab
- WaitForSingleObject
- alla sjukt sköna männsikor jag får hänga med och dessutom får deg för att jobba tillsammans med... Lysande...

Ta hand om er och kramas extra hårt i jul! Nu preppar jag med glögg-vm, sura ufon och tomteluvor! Vi ses efter jul!

Ok, lite content tänkte jag ha med... Ni hittar mina intervjuer från Øredev här, och min och Robert Folkessons MSDN live föreläsning om testbarhet, IOC & post mortem debugging här och här.

Identity 2.0 hjälten Dick Hardt börjar jobba för Microsoft! Dick ligger bakom den grymma sxipper id add-in prylen till firefox som jag inte riktigt klarar av att leva utan... Han har även levererat en helt makalös identity 2.0 föreläsning som ni inte får missa. Kudos till Daniel Akenine som tipsade mig om detta!

Øredev fångar många av de aspekter jag älskar med den här branschen. Passion, kompetens, nyfikenhet och öppenhet för att nämna några... I vilken annan miljö har man lyxen att gå från en skön dragning om MEF för att sedan gå på en lysande dragning om aspektorienterad programmering där jag inte ens bryr mig att det ligger i ett java-spår utan bara njuter av innehållet...

Från detta till att få höra Scott Bellware spy galla över varför det finns miljoner olika versioner av Windows, Office och Visual Studio och inte kunna bemöta detta med annat än... "Ehmmm... Jag håller med, kan vi inte ta en grymt god Oracle kaffe och snacka mer?". Underbart! Uppfriskande och magiskt!

Vi kommer att publicera våra intervjuer från konferensen på channel9 under veckan.

Jag längtar redan tills nästa år! Grymt bra jobbat!!!

oredev1 

With your feet in the air and your head on the ground
Try this trick and spin it,
Your head will collapse if there's nothing in it...

Jag har vid ett antal tillfällen fått hjälp av en talarcoach på Microsoft, hon är rätt skön och kommer med en hel del praktiska tips som är riktigt användbara men en av de som ringer allra hårdast i mitt huvud är;

- "Det finns två sorters talare, de som är grymt förberedda, har planerat för alla tänkbara scenarios och... Amatörer!" (Efter detta intar hon ett ansiktsuttryck som om hon tryckt ner en ebolasmittad hamster i halsen...)

Om jag måste sälla mig till en av dessa så måste det bli till amatörerna... Det intressanta är att jag håller rätt mycket föreläsningar och de allra bästa sessionerna har haft en väldigt stor del improvisation över sig. Jag känner mig aldrig riktigt förberedd och fokuserar mig mest på att ha stöd rent kompentensmässigt för att kunna ta ut svängarna och anpassa mig till publiken.

De allra mest oförberedda presentationerna i mitt liv blev förra veckans presentationerTechEd i Barcelona. Efter lite snack över några öl tillsammans med Tess Ferrandez hoppade jag in som co-speaker på två interaktiva post-mortem debugging sessioner och %#/&"# vad kul det var. Även om jag var lite av side kick Bob måste jag säga att det än en gång bevisade värdet av improvisation, att vara fler på scen, att kunna anpassa innehåll efter publikens frågor och att lärdomar från skarpa incidenter i produktion och test är viktigare input till arkitektur än tomma ord från trötta äldre män som tappat greppet om verkligheten...

Tess har lagt upp länkar till alla de resurser vi använde under dragningen, ni hittar dem här!

And all the roads we have to walk along are winding
And all the lights that lead us there are blinding…

More Posts Next page »
 
Page view tracker