lördag, november 29, 2008

Rendering i WPF

När det gäller rendering av grafik i WPF pratar man om att den sker i olika lager, eller tiers. Ett tier definieras av vilka möjligheter och vilken prestanda grafikhårdvaran har på den dator som kör applikationen och desto högre tier man kör på desto bättre prestanda får man. WPF har tre olika Tiers.

Tier 0: På tier 0 har man ingen hårdvaruacceleration utan all rendering utförs av mjukvaran och exekveras på datorns CPU. Man hamnar på tier 0 om man har en DirectX-version lägre än 7.0.

Tier 1: På tier 1 har man delvis tillgång till hårdvaruacceleration. Minnet på grafikkortet måste vara +30MB och versionen av DirectX är större än 7.0 och mindre än 9.0.

Tier 2: Här har man hårdvaruacceleration på alla element som har stöd för hårdvarurendering. T ex så dök det upp stöd för hårdvarurendering av bitmap effects som Blur och DropShadow. För att komma upp i tier 2 måste man ha DirectX-version som är högre än 9.0, minst 120MB grafikminne samt lite andra grejer.

DirectX

Den senaste version av DirectX för XP är nio och Microsoft har sagt att de bara kommer att släppa DirectX 10 för Vista (och senare). Det finns en version av DirectX 10 för XP men den är inte från Microsoft. Vilken version som körs av DirectX får man enklast fram genom att köra dxdiag från en commandopromt.

RenderCapability

För att ta reda på vilket tier man exekverar på kan man använda sig av RenderCapability.Tier. Den returnerar en Int32 som man får göra en right-shift-operation på för att få reda på vilket tier den motsvarar.

RenderCapability.Tier returnerar följande för respektive lager:

Tier 0: 0

Tier 1: 65536

Tier 2: 131072

och koden för att göra en right-shift är:

var tier = (RenderCapability.Tier >> 16).ToString();


Microsoft har en bra beskrivning av vad som skiljer de olika lagren på http://msdn.microsoft.com/en-us/library/ms742196.aspx

fredag, november 21, 2008

Parallellisering

Det är inte direkt någon nyhet att processorutvecklingen den senaste tiden går mot fler kärnor istället för snabbare processer. Intels snabbaste processor för desktop ligger idag på 3,2GHz och har fyra kärnor. Tidigare har man kunnat förlita sig på ”the quake optimization rule” men det kommer inte att funka längre. För att skriva applikationer som drar nytta av processorerna måste vi som utvecklare ge oss in i parallellisering. Det kommer också att komma stöd för parallellisering i ramverket genom Parallel Extensions. På PDC tidigare i år var det inte mindre än nio sessioner om parallel programming.

Teamet på Microsoft som jobbar med frågorna har en blog och en site med gott om information.

Om det är någon som undrar vad ”the quake optimization rule” är så är det ett utryck jag hörde Ted Neward säga på .NET Rocks. Tänk dig att någon säger till dig att din applikation går för sakta. Du tar en vecka på dig och kollar igenom koden och sedan säger du att du behöver ca 18 månader på dig för att dubbla prestanda. Du får godkänt på projektet och kan sedan gå hem och spela Quake i 18 månader och vänta på nästa generations processor.

Det här baserar på Mores lag men det kommer inte att fungera längre om vi inte har applikationer som drar nytta av alla dessa kärnor.

tisdag, november 11, 2008

Nyheter i Visual Studio 2010

Idag efter Keynote på TechEd blev jag lite nyfiken på att labba lite med Visual Studio 2010. Jason Zander visa på lite nyheter som jag tänkte kolla in. Så ikväll när jag kom till hotellrummet laddade jag in den CTP av Visual Studio 2010 som finns att ladda ner och här är lite grejer som jag hittade:



  • När man ska skapa ett nytt projekt i VS2008 så ligger alla templates för Visual Basic på den lite undanskymda platsen Other Languages. Nu har den flyttats upp och ligger bredvid C#. En liten förändring men ack så viktigt för att VB-utvecklarna ska känna sig lika viktiga.


  • Implicit Line Continuation. Jason visade lite vb-kod idag och visade då hur man kunde plocka bort Line Continuation-tecknet. När man läser på så visar det sig att man inte längre behöver använda sig av det för många, vanligen förekommande, fraser. Dvs det går inte alltid att ta bort det. Ett exempel när man inte längre behöver det är i LINQ. Så när man tidigare fick skriva:

    Dim procs = From p In Process.GetProcesses() _
    Where p.ProcessName.StartsWith("s") _
    Select p

    kan man nu helt enkelt ta bort de tecknet på varje rad.

    Dim procs = From p In Process.GetProcesses()
    Where p.ProcessName.StartsWith("s")
    Select p


  • VB får nu också en del som kom i C# 3.0 som Auto Implemented Properties och Collection Initializers.


  • Den stora nyheten i C# är ju så klart möjligheten att hantera dynamiska typer men mer om det en annan gång.


  • En nyhet i Visual Studio är att man kan generera klasser, metoder och properties direkt från kod. Det innebär att man först kan skapa ett unit test och där skapa en instans av ett objekt som inte finns (ännu). Sedan använda sig av den smart tag som dyker upp och väljer att generera den klassen. Man får då upp en dialogruta där man får välja i vilket projekt den ska skapas och vilken synlighet den ska ha. En bug här är dock att om man har sitt testprojekt och sin klass som testas i olika namespace så kommer det genererade klassen att hamna i fel namespace. För er som använder er av ReSharper så är det här så klart ingen nyhet ;-)


  • En annan nyhet i Visual Studio är de verktyg som finns för att lätta få en överblick över ett projekt. T ex finns det en funktion som kallas Architecture Explorer. Med hjälp av den får man en överblick över hela sitt projekt med alla referenser och kan använda det diagrammet för att navigera i sin lösning. Bilden nedan visar ett AssemblyDiagram. De olika pilarna visar på var det finns beroenden och bredare pilar betyder ett större beroende.







Jag tror att den här typen av diagram kommer att bli väldigt bra verktyg framöver just för att få en bättre överblick över ett projekt. Jag skulle kunna tänka mig att ladda in ett existerande projekt bara för att få ut ett sådant diagram för att t ex använda i en dokumentation.

måndag, november 10, 2008

Certified at TechEd

Nytt för i år är att man kan skriva cert på TechEd. Jag vet att de hade den möjligheten för en massa år sedan men de senaste åren har de inte haft det. Nu finns det dock en del av labb-arean där man kan signa upp sig för att skriva cert. Så jag anmälde mig igår för att ta det fruktade 70-536 .NET Framework - Application Development Foundation. Jag var så nöjd att jag hade en promotion-kod som gav mig 25% rabatt tills en annan MCT sa att man som MCT har 45% rabatt på alla cert, alltid. Det kan ju vara bra att veta till nästa gång.

Jag har förberett mig ganska länge, läst, sett den en-timmes "cram session" som finns tillgänglig online och labbat och googlat en hel del. Jag tycker att det brukar funka rätt bra om man kollar på Skills Measured och sedan läser på och labbar om de olika delarna. När jag gick igenom alla frågor så trodde jag att jag skulle hamna runt 800 poäng men jag lyckades skriva 982! Tror bara jag hade en fråga fel.

Done that, been there, got the t-shirt... Den här gången var det en t-shirt med texten Certified at TechEd Developers Barcelona.

Så nu är det dags för lunch och sedan är det Keynote med Jason Zander.

Ja just det... nu ska parentesen bort. Hasse är på väg hit så från imorgon är vi full styrka på plats.

söndag, november 09, 2008

Stuck in SharePoint-land!

När det gäller labbarna på TechEd så blev det SharePoint i år igen. Så nu har jag ca 40 olika labbar som jag ska handleda under veckan och vid flera pass är jag ensammen på 28 platser... Kan bli en utmaning! Jag hade önskat dubbla pass på måndag morgon men fich istället dubbla pass på måndag kväll. Annars passar mitt schema in med de sessioner jag vill se.

Det var en del nya labbar, bla annat en om hur man skapar Silverlight 2.0 Webparts i SharePoint som var riktigt bra. Det var en del fel i materialet som vanligt och hela labben gick inte att slutföra. Jag fattar inte vad de som korrekturläser och kollar labbarna håller på med.

Som alltid är allt väldigt välordnat och infrastrukturen fungerar felfritt.

Som jag skrev i ett tidigare inlägg så verkar TechEd EMEA lite nerprioriterat i år och det märks också en del konstnadsbesparingar. T ex så får vi som jobbar här fått en tom väska. Det brukar annars vara fyllt med goodies och det ryktas om att lunchen vid två av dagarna bara är en lite lunch-påse istället för den buffé som normalt dukas upp.

lördag, november 08, 2008

På väg till TechEd!

Sitter nu på Arlanda på väg till TechEd i Barcelona. Det blir fjärde i ordningen, en i Amsterdam -99 och nu för tredje året i rad i Barcelona. Tyvärr så kommer circus-TechEd att flytta till Berlin från 2009... Även om innehållet är det viktiga så går det inte att komma ifrån att 20 grader i november, tapas och FC Barcelona höjer stämningen på konferensen en aning!

Det känns som att årets TechEd har kommit lite i skuggan av PDC och att alla announcements redan är gjorda så det ska bli spännande att se vad de har att komma med på Keynote på måndag.

Årets uppställning från Connecta består av undertecknad, Magnus Hjelmqvist och Daniel Joelsson. Magnus kommer att fokusera på Microsoft Dynamics och allt som har med IT-driven affärsutveckling medan Daniel kommer att fokusera på sessionerna om arkitektur, Entity Framework, Visual Studio 2010, LINQ och C#. Själv kommer jag att försöka se lite av Best of PDC, en hel del om WPF och säkerligen några arkitekturdragningar. Har också hört rykten om att Mikael Deurell ska sjunga på scen under Tess Ferrandez dragning och det får man ju inte missa.

Tyvärr kunde min kollega Hans Sterby inte följa med i år. Han var uttagen till att jobba i labbarean men tack vare det helt rätta beslutet att prioritera familjen så blir han kvar hemma.

I år kommer ni att känna igen oss från Connecta genom våra fina tröjor (om jag nu får de andra att använda dem). Hasses fick bli i parentes eftersom att han inte är med...



Veckan kommer att bli ganska fullpackad. Det börjar med labb-genomgång imorgon kl 09.00 då jag också får tilldelat vilka pass jag får samt vilka labbar jag kommer att jobba med. Förra året var det SharePoint som gällde men i år hoppas jag på WPF eller ADO.NET. På tisdag kväll är det Architect Chillout Session med Mikael Deurell och på onsdag är det Country Drinks.

På torsdag kommer min sambo ner och spenderar helgen tillsammans med mig för att sedan åka hem på söndag. Jag stannar dock kvar och deltar i Visual Studio Team System Partner Summit från söndag till tisdag. Det kommer att bli en liten konferens för de partners till Microsoft som är med i Team System Inner Circle och kommer att ha talare som Sam Guckenheimer, Brian Harry och Ivar Jacobson.

Det kommer att bli tio otroligt spännande och inspirerande dagar men oj oj vad jag kommer att sakna mina barn!

fredag, oktober 31, 2008

Konfiguration av Cloud Services-projekt

Förutom den vanliga web.config så har man också tillgång till två andra config filer i ett projekt av typen Web Cloud Service. Dessa heter ServiceConfiguration.cscfg samt ServiceDefinition.csdef.



ServiceDefinition.csdef
Den här filen innehåller definitionen av tjänsten man bygger, dvs vilka roller den är uppbygd av. En Web Role innehåller också InputEndpoints som definierar vilket protokoll som används (http eller https) samt vilken port man kommunicerar på. Servicedefinitionen byggs in i projektet och laddas upp till molnet.

En tjänst i molnet kan alltid som mest innehålla en Web Role och en Worker Role. Ett projekt kan innehålla flera Web Role men det kan bara vara en som är associerad med tjänsten. Att associerad och av-associerad roller med en tjänst gör man enkelt genom att högerklicka på Roles-noden.


ServiceConfiguration.cscfg
ServiceConfiguration kan laddas upp separat för att förändra tjänsten i molnet efter det är publicerad. De man kan ställa in i konfigurationsfilen är t ex antalet instanser som körs av tjänsten och par av namn och värde som man kan använda sig av i applikationen.


Antalet instanser som körs av en Web Role respektive Worker Role kan vara olika till antalet så man kan alltså köra en Web Role och tre Worker Roles.


En liten lustig grej när man ska lägga till ConfigurationSettings som man sedan kan läsa in i applikationen är att man måste lägga till den både i ServiceConfiguration och i ServiceDefinition men med skillnaden att man bara lägger till värdet i ServiceConfiguration. Om man bara lägger till den i ServiceConfiguration så får man ett något anonymt felmeddelande när man kör applikationen: Invalid Configuration File.


Exempel på hur de två konfigurationsfilerna ser ut med ConfigurationSettings elementet rätt konfigurerat:




För att sedan läsa in data från konfigurationsfilen anävänder man den statiska metoden GetConfigurationSetting på RoleManager:
var firstName = RoleManager.GetConfigurationSetting("FirstName");


RoleManager kan man också använda för att skriva logmeddelanden till consolen i det simulerade molnet:
RoleManager.WriteToLog("Information", "Hello World");

Värt att veta är dock att om man börjar ändra i associeringen av roller till en tjänst så uppdateras också konfigurationsfilerna vilket innebär att om man har ConfigurationSettings så försvinner dessa...

Trots det så är jag än så länge positivt överraskad av hur stabilt och långt utvecklat allt är. Det är ju trots allt bara CTP än så länge!

Äntligen installerat Azure!

Ikväll bestämde jag mig för att installera Windows Azure och allt som har med den att göra. Eftersom att min dator var helt ny och fräsh så tänkte jag att jag skulle, för en gångs skull, göra allt i en virtuell maskin. Så en Windows Server 2008 fick agera mål för mina installationer. Det dröjde dock inte länge förrän problemen började hopa sig. Det första som behövdes var SP1 för .net Framework och SP1 och Visual Studio 2008 och det tar ju sin lilla tid att genomföra dessa installationer.

Det verkliga problemet var dök upp när jag skulle installera SP1 för VS och inte hade tillräckligt med diskutrymme. Min disk är satt att växa automatiskt med det funkade inte så bra när installationsprogrammet kollar efter ledigt diskutrymme innan installationen kan starta - suck. Så jag gav upp till slut upp den virutella och satsade på att installera allt direkt på datorn istället.

Så efter några trevliga prerequisits som tex ASP.Net MVC och PowerShell är jag nu klar med hela insallationen av följande:


Så nu är det då äntligen dagsa att se vad VS har att erbjuda!

I VS har man lite nya project templates tillgängliga som alla ligger under Clode Services. Det är Blank Cloud Service, Web Cloud Service, Worker Cloud Service och den sammanslagna Web And Worker Cloud Service. Den största skillanden mellan Web Cloud och Worker Cloud så är det att Web Cloud har en IIS installerat i sin virtuella maskin och kan därför ta emot requester utifrån och hosta asp.net samt WCF-tjänster. Worker Cloud kan bara kommunicera med andra genom köer i storage molnet. Användningen för ett Worker Cloud är om man har något som kommer att ta lång tid eller kräver extra kraft att utföras. Då kan man bygga den delen i ett Worker Cloud som man kommunicerar med genom en kö.

Nu har jag implementerar lite enkel logik i mitt Web Cloud-projekt - tycker F5...

Det första som händer när man tycker F5 för att köra igång sitt projekt är att Development Storage konfigureras. Han inte riktigt med att se exakt vad som hände men det skapades en databas för Cloud Storage (Blob, Queue och Table) och det konfigurerades några konton.

Applikationen drar sedan igång och det ser ut precis som en vanlig webapp. Inga skillnader alls. Förutom att man i sin tray, där man normalt brukar ha Cassini när man startar en webapp, så har man nu två nya ikoner. Deveopment Fabric och Development Storage.

Development Fabric är den del av utvecklingsmiljön som simulerar molnet. Det är här ens applikation körs. Bilden nedan visar hur det ser ut när man har konfigurerat sin applikation att köra på en viruell maskin.



Om man sedan ändrar i en konfigurationsfil och skriver att

Så får man istället två virtuella maskiner att köra sin applikation på:




Nästa steg är att publicera sin applikation till molnet. För att göra det högerklickar man på det projekt som innehåller konfigurationen för tjänsten i molnet coh väljer Publish. Då får man logga in med sitt live ID och då gäller det ju också att man har ett konto i molnet vilket jag inte har... ännu :-(

Nästa steg blir att börja labba med de olika tjänsterna i molnet. .Net Services och Storage Services... men mer om det senare!

Live Mesh

Sedan en tid tillbaka använder jag Live Mesh vilket är den första applikationen som är utvecklad på Azure. Den använder sig av Live Services på Azure Services Platform.

Live Mesh är ett "desktop in the cloud" där du får utrymme att spara upp till 5gb data. Det data som du sparar i molnet kan du sedan välja hur det ska synkas till de enheter du har lagt till i ditt "system". Mesh finns idag för XP och Vista. MAC och Mobil finns som CTP. När man sparar en fil i en mesh-folder på din lokala dator (som för dig som användare ser ut precis som en vanlig folder) så synkas den direkt till andra enheter. Man kan också logga in på sitt Live Desktop och hantera filer därifrån.

Bilden visar enheterna i min "Device Ring":




På sikt ska man även som utvecklare kunna kunna bygga mesh-enablade web-applikationer som görs tillgängliga genom en applikationskatalog i molnet. Användare väljer en applikationen som sedan installeras till den användarens moln och kommer sedan också att synkas till alla enehter. Det blir då sedan möjligt att köra applikationen lokalt med lokalt data eller i molnet. Mesh-applikationer kommer att kunna byggas med olika tekniker som t ex Silverlight, DHTML eller Flash.


Fram till ny har Live Mesh bara varit tillgängligt för USA (även om det har gått att klämma sig in genom att ändra lite inställningar på sitt Live-konto) men nu är en publik beta tillgänglig worldwide. Så nu är det dags att surfa in till www.livemesh.com, lämna fast mark och kliva in i molnet!

onsdag, oktober 29, 2008

Azure

David Chappell har skrivit en helt fantastikt bra artikel om The Azure Services Platform som går igenom de olika delarna i plattformen samt de olika tjänster man kan använda sig av som utvecklare.

Det ska bli riktigt kul att börja testa och självklart har jag anmält mig på Azure-siten för att få tillgång till CTP av tjänsterna.

Redan idag går det dock bra att ladda ner och bygga appar som sedan körs i det simulerade molnet.

tisdag, oktober 28, 2008

Oslo är här!

Igår släpptes de första bitarna (hyper early CTP) till Oslo. Men vad är Oslo och var ska man börja?

Oslo kodnamnet för Microsofts nya plattform för modeldrivna applikationer. I kärnan finns tre delar:

Ett nytt språk, M
M är namnet på Oslos nya språk för att skapa modeller. Modellering som teknik är inget nytt utan något vi har använt oss av länge. Vi modellerar idag våra applikationer i Visio, på en servett eller på en whiteboard. Problemet med det här är att det ofta blir en första vision av systemet som man sedan inte underhåller över tiden. Med M får vi nu möjligheten att skapa modeller i ett deklarativt språk. På de modeller vi bygger i M kan vi sedan skapa domänspecifika språk (DSL).

M består av tre olika delar. MGraph, MSchema och MGrammar. Mer om dessa senare...

Ett verktyg, Quadrant
Tanken med Quadrant är att det är ett verktyg där man kan få en textbaserad eller visuell representation av en modell. Precis som i t ex xaml-editorn i Visual Studio så kan man göra förändringarna där man själv känner sig bekväm. Det är bara två olika vyer av samma källa. Quadrants användarupplevelse ska påminna om den i Office.

Flera olika roller inom en organisation, som t ex analytiker, arkitekt, utvecklare och IT Chef, kan samarbete runt dessa modeller i Quadrant genom att använda en vy som passar för deras behov. Det kommer också att vara möjligt att uppdatera modellerna direkt i Visual Studio, BizTalk, SharePoint, Visio etc.

En central lagringsplats för modeller, Repository
All data om de modeller som skapas sparas i en central lagringsplats som kallas för The Oslo Repository. Den baserars på SQL Server och därför kan man också använda alla vertyg man normalt använder mot SQL Server även mot The Oslo Repository.


Var börjar jag?
En bra start är att kolla på http://msdn.microsoft.com/Oslo/. Där kan man ladda ner SDK och läsa på en hel del.

Rekomenderade bloggar:
http://douglaspurdy.com/
http://www.pluralsight.com/community/blogs/dbox/default.aspx

I ett avsnitt av .NET Rocks! med just Douglas Purdy och Don Box pratade de om Oslo. Vid ett tillfälle nämnde Don en session på PDC som handlar om hur man kan använda Oslo för att skapa textbaserade DSL och uttryckte det som: "If ýou want the power of Anders (Hejlsberg) in your hands...".

lördag, oktober 25, 2008

Ny logga för .NET!

Idag släpptes en ny officiell logga för .NET! Anledningen är för att synka med Microsofts värderingar om vad de tycker att .NET står för: konsistent, robust och lysande användarupplevelse (fritt översatt).

Läs mer på Scott Barnes blogg och på Scott Hanselmanns dito.

fredag, oktober 10, 2008

PDC online!

Tyvärr så har jag inte möjligheten att vara med på PDC i år. Ser dock fram emot att följa PDC Online. Johan Lindfors har lovat att han ska blogga live från keynotes och sessioner och idag läste jag att alla sessioner kommer att finnas online inom 24 timmar efter framförandet!

På TechEd i Orlando tidigare igår sände de keynotes live och om det blir något liknande så lovar jag att det kommer att kommer att hålla väldigt hög kvalitet!

tisdag, september 30, 2008

Scrum med ITMaskinen

I fredags hade jag unge herr Deurell en föreläsning för ITMaskinen om agile, Scrum och hur man kan använda Microsofts verktyg för att lyckas. Min roll var så klart att prata om agile och Scrum och Micke pratade om TFS och vikten av test med hjälp av Team System.

Läs mer i inlägget De tre vise männen coh Scrum på ITMaskinens eminenta bloggsida.

söndag, september 21, 2008

TechEd Developers i Barcelona!

Nu är det klart! Jag och min kollega Hans Sterby kommer att åka till TechEd Developers i Barcelona i november!

För mig blir det tredje året i rad och det är andra året jag åker dit som så kallad MCT-Proctor. Det innebär att jag kommer att, i egenskap av MCT, jobba som handledare i labb-arean på konferensen.

Nu återstår det att se vilket ämne man blir placerad på. Hoppas på WPF men det kan nog hända att det blir ADO.Net 3.5 med tanke på att jag klarade beta-certet jag skrev i april.

Jag har sagt det tidigare och säger det igen, skriv beta-cert.. det lönar sig!

måndag, augusti 18, 2008

De små nyheterna...

I (som jag skrev om i mitt förra inlägg) skrev jag om att man efter att ha installerat SP1 för Visual Studio 2008 fick man tillgång till "Close All" när man högerklickar på en flik. Det visade sig att det stämmer inte alls...

Idag när min kollega Pär skulle köra "Close All" i Visual Studio 2008 efter att ha installerat SP1 upptäckte vi att den funktionen inte alls kommer från SP1 utan från reSharper.

Ytterligare kärlek till reSharper alltså!

tisdag, augusti 12, 2008

De små nyheterna som gör en lycklig!

Igår släpptes Service Pack 1 för Visual Studio 2008 och Framework 3.5 vilket självklart måste laddas ner och installeras. För en gångs skull hade jag inte installerat någon av betaversionerna vilket gjorde att installationen var helt smärtfri.

De stora nyheterna är att Entity Framework och ADO.NET Data Services är släppt men ibland är det de små nyheterna som gör en lycklig! Upptäckte precis att de nu har implementerat Close All när man högerklickar på en tab!!!

Tidigare har man antingen varit tvingad att välja Close All But This och sedan stänga det fönster som blev kvar alternativt gå till Window - Close All Documents. Men nu - vilken time saver!!

reSharper 4.0

Ibland är man efter sin tid men jag känner om och om igen att jag alltid är efter Mikael Deurells tid! Under många år har han pratat om sin kärlek till reSharper och jag vet att om några år kommer jag också att prata om DFO, PowerShell och production debugging. Men nu är det reSharper som gäller! Har precis installerat version 4.0 i min Visual Studio 2008 där jag jobbar i ett Visual Basic-projekt och visst... Det är kärlek!

Okej, i VB är den absolut inte perfekt. T ex så är den inte helt med när det gäller dess rekomendationer om Imports och LINQ och inte heller funkar Split declaration and assignment när man använder LINQ. Den missar nämligen att lägga in den line continuation som VB kräver. Men vad gör väl det när man får tillgång till refactoring som Extract Method...

fredag, augusti 08, 2008

Agila människor är speciella... Del 2

Igår kväll på avslutningsmiddagen för konferensen fick jag svar på vad de asiatiska dansarna gjorde. De var alla japaner som förberedde ett uppträdande på middagen. En av dem fick en utmärkelse från Agile Alliance och han tog med sig sina landsmän upp på scen och sjöng sången Dear XP.

torsdag, augusti 07, 2008

Agila människor är speciella...

Imorse när jag hade hämtat frukost och var på väg till en TDD-clinic i C# så gick jag förbi ca 20 asiatiska killar och tjejer som stod och dansade en dans, spelade i maraccas samtidigt som de kollade på en skärm. Exakt vad de gjorde där kl åtta på morgonen är för mig fortfarande en gåta men de var i alla fall glada!

Det som man ser på den här konferensen är att folk som jobbar med agile utvecklig är helt klart passionerade för det de gör!

Vad betyder affärsvärde?

Jag har följt och varit inblandad i en tråd i ett forum på Pellesoft.se som handlar om vad värde betyder i ett agilt projekt. Man pratar hela tiden om att man ska leverera affärsvärde tidigt och ofta men vad betyder värde. Den enkla definitionen av affärsvärde är enligt mig ”något som beställaren kan använda i sin verksamhet för att tjäna pengar”.

En definition av värde som Tom och Kai Gilb har är:
Value is a perceived benefit: that is, the benefit we think we will get from something. It’s is relative to a stakeholder.

Alltså värde är något som är relevant för en intressent och som den intressenten uppfattar som en fördel.

Om man sedan pratar om affärsvärde så måste man också definiera vem intressenten är och i en försäljningssituation pratar man om tre olika typer av köpare:

Ekonomisk: Den ekonomiska köpare är den som skriver under kontraktet, ser till att projektet får de ekonomiska resurser det behöver och den enda person som kan säga ja till ett projekt.

Teknisk: Den tekniska köpare är den eller de som ansvarar för att projektet eller produkten som köps in möter tekniska specifikationer och organisationens normer. Tekniska köpare kan säga nej till ett projekt eller en produkt.

Användare: Slutanvändare av en produkt eller system. Kan också säga nej.

När man har slutfört en försäljning och fått ett signerat avtal är det allt för ofta som tekniska köpare och användare tar över projektet och den ekonomiska köparens behov (eller utlovat affärsvärde), samt hur de ska levereras, förbises.

Okej, så vidare till en definition av affärsvärde:
Business Value is the perceived benefit the Economic Buyer (and ideally the organization) will get from making investments to improve something of importance to them.

Äffärsvärde är alltså, precis som värde, en uppfattad fördel som den ekonomiska köparen kommer att få ut av en investering.

Hur mäter man då affärsvärde? Affärsvärde kan vara svårt att mäta direkt men det kan mätas om man använder en teknik som kallas Measurable Objectives. Därför kan vi säga att vi levererar affärsvärde om vi är på väg att uppfylla den ekonomiska köparens mätbara mål. Dessa mätbara mål bryts sedan ner till features som implementeras i systemet och varje feature uppfyller en eller flera av de övergripande målen.

Jag var på en presentation idag av Ryan Shriver, www.theagileengineer.com, och vi gjorde ett antal övningar runt Measurable Objectives vilket var väldigt intressant. Han hade även beräkningar där man kunde avgöra hur väl olika features man planerar att implementera uppfyller målen och vilken relation det finns mellan kostnad för implementationen och levererat affärsvärde. Detta kan man sedan då använda för att avgöra om man ska implementera feature A eller B.

onsdag, augusti 06, 2008

Agile estimering och plannering

Tidigare har jag förespråkat att använda T-shirt sizing när man estimerar produktbacklog och sedan story points till sprintbacklog-tasks men efter att ha lyssnat på Mike Cohn idag så får jag nog tänka om! Visserligen ska man inte ändra det som funkar och i de projekt jag har varit med så har det fungerat riktigt bra. Men de nackdelar med t-shirt sizing som han tar upp går ju inte att bortse ifrån.

Ett problem är att använda M, L och XXL när man estimerar features på produktbackloggen är att man inte kan addera dessa tillsammans och en kund kommer alltid att vilja veta när man ska vara klar med ett projekt. Att då svara att vi är klara om 4 small, 3 medium och 2 large funkar inte. Man måste ha estimat som går att addera så att man kan ta reda på vilken hastighet man har och därmed också kunna säga när i tiden man kommer att vara klar.

Så vad Mike föreslår är man ska använda story points när man estimerar de items man har på sin produktbacklog. Den typen av estimering gör man normalt innan första sprinten när man gör sin releaseplanering. Man bör försöka komma igenom hela produktbackloggen men inte lägga för mycket tid på varje item (ca 20 i timmen bör man klara av). Nya items kommer att komma in på produktbackloggen kontinuerligt så därför måste man också kontinuerligt estimera under varje sprint. För att estimera produktbacklogen funkar det alldels utmärkt att använda sig av Planning Poker och då behöver man heller inte konverera sina estimat till timmar.

När man sedan ska planer det jobb man ska göra i första sprinten måste man veta vilken hastighet teamet har. Om man har ett team som har genomfört ett antal sprintar är det ju inget problem men om man har ett nytt team så finns det även tekniker för att ta reda på vilken hastighet teamet kommer att ha. Hastigheten baserar man då på hur mycket teamet tror att de kommer att kunna hinna med under nästa sprint och använder det som teamets hastighet.

När teamet sedan ska bryta ner features från produktbackloggen till uppgifter i sprintbackloggen måste uppgifter mätas i ideala timmar. Vi har gjort så att vi har spelat planning poker och satt story points på uppgifterna och sedan räknat om dessa till ideala timmar. Jag frågade Mike vad han tyckte om det och han sa att det är nog i det läget bättre att göra det ”the old fashion way” och bara sätta timmar på de olika uppgifterna. Jag har alltid förespråkat att man ska, även på uppgiftsnivå, dra nytta av allas input i estimaten men Mike menar att om man har en databasexpert i temat som säger att en uppgift tar fyra timmar så är det bara att sätta fyra timmar på den uppgiften. Att implemntera en feature på produktbackloggen blir mest troligt ändå flera olika uppgifter, tex att skapa en stored procedure, att modifiera objektmodellen, att anpassa gränssnittet samt att testa de olika delarna. Och då är det bäst att de olika experterna för de olika områdena får sätta timmar på uppgifterna.

Det jag tror att jag kommer att ta med mig till mitt nästa projekt är att lära mig mer om user stories för att få en bättre produktbacklog. Estimera produktbackloggen mha planning poker i story points och sedan bryta ner den till tasks i sprintbackloggen och direkt sätta optimalatimmar på dessa.

Man blir så lycklig när man känner att bitar faller på plats! Nu måste bara se till att också uppdatera min kurs :-D

söndag, augusti 03, 2008

Agile 2008

På plats i Toronto och imorgon börjar konferensen Agile 2008. Bor på 24de våningen och idag väcktes jag av ett falskt brandalarm från 15 våningen. Lite lätt jet-laggad kunde jag inte somna om så nu tänkte jag bege mig till Torontos stora turistattraktion – CN Tower med världens högsta, av människan skapade, observatorium.

Har för övrigt lite problem med att få ström till min dator. Igår köpte jag en konverterare på Best Buy och den funkade ju bra, till allt utom min dator. Datorn har en bredare kontakt… Någon som har nått tips på var man kan köpa en som funkar även till datorsladdar?

Annars så ser jag väldigt mycket fram emot att konferensen ska dra igång imorgon! Ska bli skönt att få lite mera kolla på läget för än så länge har jag ingen aning om var de olika föreläsningssalarna ligger. Nåja, det löser sig nog och då kan jag se fram emot föredrag under veckan av så väl Mary Poppendieck och Mike Cohn!

(I mitt förra inlägg sa jag att mitt nästa inlägg skulle handla om min första erfarenhet från verkligheten med LINQToXML men det får vänta tills jag kommer hem.)

fredag, juli 25, 2008

Tillbaka från semester

Semestern är slut och jag har jobbat en vecka nu. Inte skulle det vara fel med lite mer ledighet men men… Jag är annars tillbaka på samma projekt som innan semestern vilket så klart är skönt (att ha något att komma tillbaka till). Veckan i projektet har bjudit på en hel del arkitekturförändringar då vi har lärt oss en del om komplexiteten i applikationen på sista tiden. Jag skrev lite om projektet som jag jobbar med i ett tidigare blogginlägg men den fina portaltanken har vi nu lämnat bakom oss. Det blev för mycket strul med kommunikation och svårare att dela state mellan applikationer. För mycket legacy kod och för lite tid helt enkelt.

Det som har varit glädjande under den här veckan är:

  • Vi har kommit igång med Scrum på allvar igen i projektet. Vi är nu mitt inne i en två veckors sprint och vår burn-down ser okej ut. Vet dock av erfarenhet att vi borde ha hunnit lite längre för jag tror att en del av uppgifterna är lite tunt estimerade.

  • Alla våra projekt är konverterade till Visual Studio 2008 och .NET Framework 3.5!

  • Jag har nyss checkat in mina första rader med LINQ-kod i ett produktionssystem!!! (mer om det i nästa inlägg)

  • Jag har skrivit mina första enhetstester på produktionskod i Visual Studio 2008.



Den här veckan har också upptäckt att jag är väldigt ifrågasättande vilket inte alltid är så positivt. Det finns en tendens hos mig att ställa frågan Varför? och kanske gör jag det lite för mycket ibland. Jag menar, bara för att jag inte skulle implementera en lösning på samma sätt så betyder det inte att det är en sämre lösning, antagligen snarare tvärt om!

Veckan som kommer bjuder på upplopp i sprinten samt förberedelse inför Agile2008 i Toronto!

Var för övrigt och såg The Dark Knight igår och jag säger bara oj oj oj! Ser fram emot att se den på IMAX i Toronto nästa helg!

torsdag, juni 12, 2008

Snippet för Singleton

Många gånger har jag tänkt att jag ska göra en snippet för att skapa en singleton men det har aldrig blivit av men idag, efter en lyckad release hos kund, så tycket jag att jag kunde ta mig fem minuter för att knåpa ihop en sådan som sedan kommer att spara in de fem minuterna om och om igen. Och om jag sedan också kan spara fem minuter åt någon annan så är väl det toppen!

Min singleton är baserad på DoFactorys Singleton med .NET optimized code men jag har bytt ut deras accessor, som är en metod, till en property pga jag tycker att det då blir snyggare att accessa den från annan kod då. Man slipper parenteserna i anropet.

Skapa en ny fil i Visual Studio av typen XML File,döp den till singleton.snippet, spara den i \My Documents\Visual Studio 2008\Code Snippets\Visual C#\My Code Snippets\ och klistra in följande kod:


<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">


  <CodeSnippet Format="1.0.0">


    <Header>


      <Title>singleton</Title>


      <Shortcut>singleton</Shortcut>


      <Description>Code snippet for singleton class</Description>


      <Author>Björn Eriksen - Connecta</Author>


      <SnippetTypes>


        <SnippetType>Expansion</SnippetType>


      </SnippetTypes>


    </Header>


    <Snippet>


      <Declarations>


        <Literal>


          <ID>className</ID>


          <ToolTip>The name of the class</ToolTip>


          <Default>SingletonClassName</Default>


        </Literal>


        <Literal>


          <ID>methodName</ID>


          <ToolTip>A method in the singleton class</ToolTip>


          <Default>MethodName</Default>


        </Literal>


      </Declarations>


      <Code Language="CSharp">


        <![CDATA[


          public sealed class $className$


              {


                  //This is the instance that will hold the instance


                  private static readonly $className$ instance =


                    new $className$();


 


                  //Private constructor


                  private $className$()


                  {


                  }


 


                  //The property used to return the singleton instance


                  public static $className$ UniqueInstance


                  {


                      get


                      {


                          return instance;


                      }


                  }


 


                  //Add methods


                  public void $methodName$()


                  {


 


                  }


              }


        ]]>


      </Code>


    </Snippet>


  </CodeSnippet>


</CodeSnippets>


onsdag, juni 11, 2008

Lazy Load och Eager Load med LINQ to SQL

Lazy Load

LINQ to SQL implementerar i grunden ett pattern som heter Lazy Load. Lazy Load innebär att man, som i fallet med LINQ to SQL har att göra med en databas, bara hämtar de rader som man behöver när man faktiskt behöver dem. Inom LINQ kallar man det för Deferred Query Execution vilket betyder att man kan definiera en fråga i ett läge men att kopplingen mot databasen sker först när man börjar iterera resultatet.

När man deklarerar en fråga för att t ex hämta alla kunder som finns i en stad som börjar på bokstaven M:

            var customers = from c in db.Customers

                            where c.City.StartsWith("M")

                            select c;


så kommer det att skapas en representation av frågan i form av ett Query Expression Tree. Om man då sätter break point och debuggar kan man se vilken SQL som kommer att exekveras. Men det är först när man använder någon information från resultatet:

            foreach (var customer in customers)

            {

                Console.WriteLine(customer.ContactName);

            }


som raderna faktiskt hämtas. Så frågan ovan genererar en server-round trip som returnerar 13 rader (om man använder sig av Northwinds databas).

Om man sedan går vidare på varje kund och skriver ut dess ordrar enligt följande:

            foreach (var customer in customers)

            {

                Console.WriteLine(customer.ContactName);

                foreach (var order in customer.Orders)

                {

                    Console.WriteLine(" - " + order.OrderDate.ToString());

                }

            }


så kommer man att för varje kund-objekt generera en ny SQL och hämta just den kundens ordrar. Det innebär att iterationen över kundernas ordrar kommer att generera 14 server-round trips.

Det här kan vara väldigt bra i vissa lägen men mindre bra i andra lägen. Tänk att man har ett presenteras en trädvy där alla kund-objekt visas och sedan väljer användaren att bara expandera en av dessa kunder för att visa kundens alla ordrar. Ja då kanske det är bättre att i bara hämta just den kundens ordrar istället för att skicka över alla kunders ordrar.

Eager Load

Men om man nu har en sådan situation där man vet att man vill ladda alla kunder och alla dess ordrar, dvs man vill använda sig av Eager Load istället för Lazy Load, ja då finns det förstås en lösning och det är DataLoadOptions.

För att lyckas med Eager Load i LINQ så skapar man ett objekt av typen DataLoadOptions och anropar en metod som heter LoadWith. I LoadWith anger man vilka objekt man ska ladda samtidigt som det huvudobjekt man hämtar. Detta gör man med hjälp av ett lambdauttryck. DataLoadOptions-objektet lägger man sedan till i DataContext-objektet. Här nedan har jag använt mig av en object initializer för att sätta propertyn samtidigt som jag skapar objektet.

            var dlo = new DataLoadOptions();

            dlo.LoadWith<Customer>(p => p.Orders);

            var db = new NorthwindDataContext() { LoadOptions = dlo };


Den frågan som jag ställde i början av det här inlägget gällde att hämta alla kunder som bor i en stad som börjar på bokstaven M. När man då skapar ett DataLoadOptions-objekt så är det ett objekt av typen Customer som man anger som typ till den generiska metoden LoadWith och det här objektet är det som kallas grundobjektet. I lambdauttrycket anger man sedan vilket typ av objekt som man vill ladda samtidigt som det grundobjekt man planerar att hämta. Detta innebär att man med en server-round trip kommer att hämta kund-objekten samt dessa kunders alla ordrar.

DataLoadOptions-objektet kan man sedan fylla på med flera relaterade objekt av andra typer som man vill ladda samtidigt som huvudobjektet.

            var dlo = new DataLoadOptions();

            dlo.LoadWith<Customer>(p => p.Orders);

            dlo.LoadWith<Order>(o => o.Order_Details);


Lazy Load är ett fantastiskt pattern men det är väldigt viktigt att man känner till vilka implikationer det kan få att använda det. Lazy Load innebär alltid ett mer chatty interface vilket som sagt kan vara bra ibland men helt förödande i andra lägen.

onsdag, maj 14, 2008

reSharper 3.1 med C# 3.0...

Igår installerade jag reSharper 3.1 på min Visual Studio 2008. Bättre intellisense, bättre refactoring-stöd och en allmänt trevligare utvecklingsmiljö var det som lockade. Tyckte också att det skulle bli kul att se vilket extra stöd man fick till de nya features i C# 3.0 så utan att läsa på allt för mycket installerade jag den senaste versionen, 3.1. Hoppade direkt in och skapa en ny console application i mitt favorit direcotry d:\junk\ och började skriva min favorit LINQ-fråga:

var procs = from p in Process.GetProcesses()

          select p;

 

Men istället för p så poppade en skum intellisense upp och ville ha en typ av nått slag... skrev om skrev om och skrev om men jag fick inte till frågan. Började tro att jag hade hamnat i akut LINQ-koma! Men det visade sig så klart att reSharper 3.1 inte har stöd för C# 3.0 utan då måste man vänta till version 4.0.

 

Det alternativ man har är att ladda ner den senaste nightly builden från reSharper 4.0 men det känns lite väl hard core just nu med tanke på att vissa av byggena är taggade som Not Recommended.

 

 

Så, dags för avinstallation. In på add/remove programs och plocka bort den - gick mycket smärtfritt och sedan tillbaka in till Visual Studio igen men...

 

Ingen intellisense!

 

Det visade sig dock att det bara var en checkbox under Tools/Options/Text Editor/C#. Av någon anledning återställer inte avinstallationen av reSharper "Auto list members" - Puh!

 

Men visst är det så att man är lite sugen på att ladda ner senaste bygget och testa 4.0...

fredag, maj 02, 2008

Plugin-pattern på webben

Martin Fowler har i sin bok Patterns of Enterprise Application Architecture beskrivit ett plugin patter som man kan använda för att länka ihop applikationer genom konfiguration istället för vid kompilering. Min tanke var att bygga en webbapplikation, typ en portal, som sedan blir medveten om att andra applikationer existerar bara genom en konfigurering istället för att man måste känna till den vid utveckling. Min vision var att kunna utveckla och uppgradera portalen för sig och sedan utveckla och uppgradera applikationer för sig.

Jag började med att definiera ett interface som varje applikation måste implementera. Det interfacet ska kunna leverera information om applikationen i fråga:

    public interface IApplicationInfo

    {

        string ApplicationName { get; set; }

    }

 

Sedan la jag till en PluginFactory med en statisk metod getPlugin. Den metodens uppgift var att läsa in assemblyt (snyggt ord) från disk och skapa en instans av den klass som implementerar IApplicationInfo och returnera denna...

public static IApplicationInfo getPlugin(string assemblyName)

{

var assembly = Assembly.LoadFrom(assemblyName);

var assemblyTypes = from a in assembly.GetTypes()

                    select a;

 

foreach (var t in assemblyTypes)

{

    var o = Activator.CreateInstance(t);

    if (o is IApplicationInfo)

        return o as IApplicationInfo;

}

return null;

}

 

Först placerade jag min PluginFactory i samma Visual Studio 2008 projekt som Portalen men det gjorde att mina enhetstester mot getPlugin blev otroligt sega att köra eftersom att den måste starta igång webservern först. Det blev dock betydligt bättre när jag flyttade ut den till ett eget class-library. Ett härligt bevis på hur test-driven utveckling gör att man fattar beslut tidigt som gör att ens arkitektur blir mer testbar!

Nästa steg var att lägga till en AppSetting i min web.config för varje applikation som jag vill att portalen ska känna till och använde mig av en LINQ-fråga för att hämta ut dessa:

var applications = from a in ConfigurationManager.AppSettings.AllKeys

                   where a.StartsWith("PortalApplication")

                   select new { AssemblyName = ConfigurationManager.AppSettings[a] };

 

Grymt coolt! Refelction, LINQ, plugin-patterns och allt möjligt coolt men sen då? Vad har jag vunnit med det här jämfört med att bara lägga in den här informationen i web.config eller i en databas. Hur ska jag nu få mina applikationer att agera i portalen som om de var en del av portalen från första början?

Ju mer jag funderar på det hela desto mer ser det ut som att det är Facebook jag vill bygga (fast utan den sociala delen)... För det är ju precis det Facebook är, en portal med viss gemensam funktionalitet och ett antal tjänster som sedan applikationsutvecklare kan nyttja för att bygga egna applikationer som jackas in i portalen. Så hur har Facebook löst interaktionen mellan en applikation och portalen? Kör varje applikation i en IFrame eller? Är det någon som vet??

tisdag, april 22, 2008

Fråga via Messenger på min blog

Det är fantastiskt kul när någon kontaktar mig på Messenger genom min blog. Då känns det verkligen att det finns någon där på andra sidan som läser det man skriver då och då. Idag hände det för andra gången men den här gången var jag på lunch och kunde inte svara :-(

Frågan handlade om hur man estimerar uppgifter i en sprintplanering i Scrum och om man bör dela upp estimaten för en uppgift i implementation respektive i test.

På Sprint Definition Meeting (som man har innan Sprint Planning Meeting) kommer teamet överens med produktägaren vilka product backlog items man ska implementera under den kommande sprinten. Dessa bryter sedan teamet ner till uppgifter under sprintplanneringen och varje uppgift estimeras. Dessa uppgifter ska estimeras utifrån ett sedan tidigare definierat klart-begrepp där det i min värld absolut ingår test!

Så säg att "Klart" för ett specifikt team betyder "Kodat, Verifierat, Granskat, Incheckat", ja då ska estimatet på 5 story points innebära att det är just kodat, verifierat, granskat och incheckat. Om klart-begreppet istället är "Kodat & Incheckat" (vilket det är för många utvecklare) så har man aktivt valt att lägga test utanför sprinten.

Det kan så klart också vara helt okej att lägga test utanför sprinten. Om man tex har en testavdelning och en testprocess som är implementerad och fungerar bra så tycker jag inte att man ska riva den och flytta in testresurserna i teamen. I alla fall inte initialt, utan då tycker jag att man ska anpassa sig till det man har och se till att man ökar kvaliteten på sina leveranser till testavdelningen tex genom testdriven utveckling.

John, hoppas att det här var svar på frågan du ställde på messenger och om inte är det bara att du hör av dig igen!

onsdag, april 16, 2008

Bug vid konvertering till 2008?

Idag fick jag en fråga från en tidigare uppdragskollega om att konvertera en web-applikation jag jobbat med till Visual Studio 2008. Han hade försökt men lyckades inte och fick det härliga och informativa System.Runtime.InteropServices.COMException. Inget i event loggen, ingen info i konverteringsloggen, ingenting... Man tackar!

Det projektet använder sig av EPiServer och Web Application Project (WAP). WAP var ju först en separat download till 2005, ingick sedan i SP1 och är nu en del av VS2008 så jag trodde att felet var där men icke. Felet ligger istället i hur de olika versionerna av Visual Studio hanterar om IIS finns installerat på utvecklarmaskinen eller inte.

Det finns en inställning under project properties där man kan välja om man ska använda den inbyggda web servern eller om man ska använda IIS. I VS2005 kan man välja det senare alternativet även om man inte har IIS installerat men det kan man inte i VS2008 utan får ”The IIS Web Server is not installed on this computer”.

Det trevliga COMException får man om man först skapar ett Web Application Project i 2005’an, sätter att den ska använda IIS utan att ha IIS installerat och sedan öppnar det i 2008’an.

Så lösningen är antingen att se till att IIS är installerat innan konverteringen till 2008 eller så går man in i projektfilen och ändrar True till False.

[Update 2008-04-22]
Buggen är verifierad sedan länge av produktteamet och kommer att rättas i nästa release (SP1).

tisdag, april 15, 2008

.NET 3.5 Enhancements Training Kit

Som jag har skrivit i ett tidigare inlägg på min blog så finns det ett VS2008 & .NET 3.5 Training Kit. Det här paketet har varit källan till en hel del när det gäller de seminarier jag har hållit tillsammans med Addskills om nyheterna i VS2008 och .NET Framework 3.5. Demos, slides och exempelkod har nyttjats.

Nu är det släppt ett liknande training kit för .NET 3.5 Enhancments som berör följande, kommande, tekniker:
- ADO.NET Data Services
- ASP.NET MVC
- ASP.NET Dynamic Data
- ADO.NET Entity Framework
- ASP.NET Ajax History
- ASP.NET Silverlight Controls

Med tanke på vilken källa till kunskap det förra training kittet har varit så kändes det här som en något perfekt att sätta tänderna i! Men... Det saknas en hel del.

"Presentations will be added in a future release of the training kit."
"Demos will be added in a future release of the training kit."
"Screencasts will be added in a future release of the training kit."
"Resources will be added in a future release of the training kit."

Det enda som finns med är ett par Hands-on labbar. Lite besviken blev jag men precis som de skriver så kommer det att komma i kommande releaser av training kitet.

.NET 3.5 Enhancements Training Kit

Dags för beta-cert!

Idag släpptes tre nya cert från Microsoft i det som kallas .NET 3.5 exams:

70-502: Windows Presentation Foundation
70-503: Windows Communication Foundation
70-504: Windows Workflow Foundation

Dom betatestades under början av året så om det var någon som skrev den under beta-tiden så börjar resultaten att trilla ner nu. Det tar alltså ett par månader från det att man skriver tills man får reda på om man klarade eller inte. Under tiden så utvärderas frågor och feedback, frågor stryks och ändras och sedan sätts en nivå som blir den som gäller för att klara beta-certet. Logga in på MCP-siten - där ser man resutlatet snabbast.

Det är också två andra cert som just nu beta-testas:

70-561: Microsoft .NET Framework 3.5, ADO.NET Application Development
70-562: Microsoft .NET Framework 3.5, ASP.NET Application Development

Betaperioden pågår fram till den 4 maj och det är gratis att skriva. Observera att tiden för certet är fyra timmar och att det är betydligt mycket fler frågor än på ett vanligt cert.

När man ska anmäla sig till beta-cert behöver man en kod och certen börjar med nummer 71 istället för 70.

71-561 – beta code = 561B1
71-562 – beta code = 562B1

Själv ska jag skriva den 29 och 30 april.

onsdag, mars 12, 2008

Cert som pensioneras under 2009

Om ett år, 2009, så kommer ett antal Microsoft-cert som leder fram till MCAD, MCSD och MCDBA att pensioneras. Detta innebär dock inte att man kommer att förlora titeln från sitt transcript. Däremot innebär det att man inte längre kommer att kunna använda något av följande cert i sin examensplan:

Exam 70-300: Analyzing Requirements and Defining Microsoft .NET Solution Architectures
Exam 70-301: Managing, Organizing, and Delivering IT Projects by Using Microsoft Solutions Framework 3.0
Exam 70-305: Developing and Implementing Web Applications with Microsoft Visual Basic .NET and Microsoft Visual Studio .NET
Exam 70-306: Developing and Implementing Windows-based Applications with Microsoft Visual Basic .NET and Microsoft Visual Studio .NET
Exam 70-310: Developing XML Web Services and Server Components with Microsoft Visual Basic .NET and the Microsoft .NET Framework
Exam 70-315: Developing and Implementing Web Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET
Exam 70-316: Developing and Implementing Windows-based Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET
Exam 70-320: Developing XML Web Services and Server Components with Microsoft Visual C# and the Microsoft .NET Framework
Exam 70-330: Implementing Security for Applications with Microsoft Visual Basic .NET
Exam 70-340: Implementing Security for Applications with Microsoft Visual C# .NET
Exam 70-228: Installing, Configuring, and Administering Microsoft SQL Server 2000 Enterprise Edition
Exam 70-229: Designing and Implementing Databases with Microsoft SQL Server 2000 Enterprise Edition

onsdag, mars 05, 2008

IE8

Har just installerat IE8. Den blev som sagt tillgänglig direkt när Scott hade avklarat sitt keynote och installationen gick otroligt smidigt. Kravet på Vista är SP1 vilket jag tror inte finns tillgängligt för svenska Vista ännu.

En riktigt cool grej är att man kan starta IE8 i en simulerad IE7-mode. Som webbutvecklare finns alltid en oro att installera en ny version av en browser eftersom att man oftast utvecklar för den version som redan finns. Nu med IE8 kan man med en knapptryckning och en omstart köra IE8 som om den vore IE7 vilket är grymt bra.

En annan cool grej är det lilla verktyget Developer Tools som hänger med IE8. Det är motsvarande funktionalitet som IE Developer Toolbar dvs att kunna hitta element på siten osv. Den innehåller tre flikar. HTML, CSS och Script. De två första är ganska självförklarande men den tredje... den tredje är riktigt ball när det gäller ajax och javascript utveckling eftersom att man därifrån kan kliva in och debugga alla sidor man går in på. Hela sidans kod visas och man kan sätta breakpoints och debugga där och då!

WebSlices verkar också rätt coolt men det har jag ännu inte kolla på. Det kommer nog i nästa post...

Mix08 keynote

Sitter hemma och kollar på en live sändning från Mix08 i Las Vegas med Scott Guthrie.

Lite av det som pratas om:

  • Hard Rock-cafe har byggt en grymt grymt grymt cool applikation baserad på Silverlight och Depp Zoom. Johan Lindfors visade Deep Zoom på lanseringseventet men på det sätt Hard Rock har använt det är helt otroligt. Siten finns på http://memorabilia.hardrock.com/ och handlar om all memorabilia de har. Missa den inte!
  • Beta 1 av IE8 kommer att finnas tillgänglig för nerladdning direkt efter keynote. Här är länken:
    http://www.microsoft.com/windows/products/winfamily/ie/ie8/readiness/Install.htm
  • En ny version av Expression Blend kommer att göras tillgänglig. Den heter 2.5 March Preview och kommer att ytterligare förbättra hur man jobbar med WPF, Silverlight 1.0 och Silverlight 2. http://silverlight.net/default.aspx
  • Silverlight on mobile är på god väg. En demo av en social-nätverks-app på Windows Mobile 6 på en HTC Touch var rätt cool. Det intressanta är att man kan nu utveckla en silverlight app i Visual Studio och Blend och sedan publicera den på mobil utan att ändra ett smack. Lite kul att Scott Gu också levererar "nyheten" att man också kommer att kunna köra Silverlight på Nokia-telefoner som kör Symbian OS. Den här nyheten tipsade dock min kollega Pär Gradin mig om redan i förmiddags på vårt uppdrag in the hood...
  • Visual Studio 2008 Tools for Silverlight Beta 1 finns tillgängligt för nerladdning. http://www.microsoft.com/downloads/details.aspx?FamilyId=E0BAE58E-9C0B-4090-A1DB-F134D9F095FD&displaylang=en

Jag kan varmt rekomendera att se hela keynoten som kommer att finnas tillgänglig på visitmix.com om 24 timmar.

Det coolaste är nog ändå att de spelade Johnny Cash när gästerna skulle komma in på scen! The man in black rules!

fredag, februari 29, 2008

Länkar till scrum & agile

I materialet till min Scrum-kurs som jag ger på Addskills eller på ett företag nära dig har jag en samling med länkar till verktyg, böcker, bloggar osv som kan vara bra att ha. Av någon anledning finns den inte med i det tryckta materialet så nu tänkte jag att jag lägger ut den här istället.

Länkar:

Böcker:
  • Ken Schwaber
    • Agile Project Management with Scrum
    • The Enterprise and Scrum
    • Agile Software Development with Scrum

  • Mike Cohn
    • Agile Estimating ang Planning
    • User Stories Applied: For Agile Software Development

  • Jean Tabaka
    • Collaboration Explained

  • Kent Beck
    • Extreme Programming Explained: Embrace Change (2nd Edition)

  • Martin Fowler
    • Refactoring: Improving the Design of Existing Code

  • Andy Hunt and Dave Thomas
    • Pragmatic Unit Testing in C# with NUnit

Verktyg:

torsdag, februari 28, 2008

Cert för Visual Studio 2008

I samband med att jag håller kurser och seminarier om Visual Studio 2008 får jag ofta frågor om vad det är för cert på gång för VS2008.

Microsoft är på väg att släppa sex nya titlar:
• MCTS: .NET Framework 3.5, Windows Presentation Foundation Applications
• MCTS: .NET Framework 3.5, Windows Communication Foundation Applications
• MCTS: .NET Framework 3.5, Windows Workflow Foundation Applications
• MCTS: .NET Framework 3.5, Windows Forms Applications
• MCTS: .NET Framework 3.5, ADO.NET Applications
• MCTS: .NET Framework 3.5, ASP.NET Applications

Den core-exam 70-536 som funnits länge nu är grundkravet för samtliga titlar.

Som det ser ut just nu ska de bli tillgängliga i april 2008.

tisdag, februari 19, 2008

VS2008 & .net 3.5 Training Kit

Vill passa på att tacka alla som kom på mitt seminarium i Visual Studio. Min tidsplanering under förmiddagen var katastrof men det är ju så kul när det bli mycket frågor så jag hoppas att ni tycker att det också var givande. Under eftermiddagen körde jag ett betydligt högre tempo och han igenom hela materialet... Till och med SharePoint-demo!

Jag får en del frågor om exemplekod och demoprojekt och tänkte hänvisa till det material som ligger till grund för min presentation. Visual Studio 2008 and .NET Framework 3.5 Training Kit Ett riktigt bra paket som innehåller presentationer, labbar och demos. Väl värt att ladda ner och installera!

tisdag, februari 12, 2008

Super tuesday! - Känns stort!

Det snackas om att amerikanska valet hade sin Super Tuesday, dvs den dagen när halva landet går till primärval. Snick-snack, idag är det Super Tuesday, i alla fall för mig! Kan dessa releaser möjlighen ha nått att göra med att Microsoft kör TechReady i Seattle den här veckan??

Windows Server 2008 RTM. It´s out, finally! Gamla goda Longhorn får äntligen se dagens ljus. Känns stort. Produkten kommer att lanseras tillsammans med lanseringen av VS2008 och SQL Server 2008 inom kort vilket osökt leder mig in på nästa puck.

VIP-inbjudan till lanseringen av produkterna. Som en av 150 utvecklare har jag fått en inbjudan till lanseringen idag. Känns också stort och speciellt kul i och med att jag har varit ute och pratat om VS2008 i ett par månader nu.

Sedan finns det inte någon koppling till nästa punken men det känns ändå stort.

Windows Vista SP1 RTM! Jag har själv inte haft några problem alls med Vista men har hört att det ska bli bättre och snabbare med SP1 vilket aldrig är fel. Ska nog ändå vänta tills efter fredag innan jag installerar. För på fredag ska jag hålla ett seminarium i Visual Studio 2008 och väntar ca 100 pers på fm och 100 pers på em. Lite trist om datorn skulle paja idag då!

fredag, februari 08, 2008

SharePoint & VS2008

När man är ute och pratar om Visual Studio 2008 eller SharePoint får man ofta frågan om hur bra och på vilket sätt de funkar tillsammans. Till VS2005 finns ett tilläggspaket som kallas SharePoint extensions. Då får man tillgång till ett antal projekt och itemtemplates samt ett enkelt sätt att deploya till en utvecklingsmiljö.

I VS2008 och VS Tools for Office (som nu ingår i produkten - lysande! Nu kan äntligen OBA´s ta fart på allvar!!) finns stöd för att bygga SharePoint Workflows. På ett otroligt smidigt sätt kan man bygga ett workflow, deploya och debugga. Antalet steg som man behöver göra är drastiskt minskade! Men allt det andra då? Om man vill bygga en Site Defenition, hur gör man då?

Eftersom att SharePoint extensions inte finns för VS2008 har jag rekomenderat att avvakta men det finns lösningar. När det gäller VS2008 extensions for SharePoint så kommer det att släppas i juni 2008 och fram tills dess kan man använda sig av STSDEV som min mentee på Connecta Jouni Pakarinen tipsade mig om. Jag ser fram emot en demo Jouni!