lördag, december 08, 2007

Microsoft Volta rockar!

Tidigare i veckan släpptes en Community Technology Preview av Microsoft Volta. Volta är en extension till Visual Studio 2008 som är till för att hjälpa utvecklare att bygga distribuerade webbapplikationer. Först designar och bygger man en applikation som en klientapplikation. Volta tolkar den .NET-kod man skrivit och skriver om den till JavaScript. Så alla .NET bibliotekt man använt tolkas och konverteras till JavaScript. Det finns också möjlighet att komma åt HTML-DOM-element från .NET koden och manipulera dessa.

Volta jobbar på MSIL istället för källkod i from av text och använder MSIL-koden för att göra omskrivningen till annan kod. I och med att man använder omskrivning som teknik kan man vara väldigt sent i utvecklingsfasen innan man bestämmer hur man ska distribuera sin applikation mellan olika lager.

Arkitektur refactoring
Programmeringsmodellen i Volta tar refactoring till en ny nivå och möjliggör att med hjälp av attribut styra var delar av en applikation ska exekvera. Så bara genom att ange ett attribut på en klass: [RunAtOrigin()] så säger man åt Volta att istället för att skapa JavaScript för den klassen så skapas en WCF-tjänst som automatiskt accessas från JavaScript-klienten. Det möjliggör också att man på ett väldigt enkelt sätt kan bygga in asyncrona mönster i sina applikationer. Det är bara att lägga till ett [Async]-attribut och ge möjlighet att lägga till en callback-metod.

Långt in i framtiden
Eftersom att det här är en första CTP av Volta så är det fortfarande på ett väldigt expermintellt stadium och inte ens säkert att det kommer att ingå i någon produkt. Men det är i alla fall grymt coolt!

Det finns mycket mer att läsa och ett enkelt exempel att följa på: http://labs.live.com/volta/

tisdag, december 04, 2007

EssUp kommer att bli gratis

Början av det här inlägget handlar mycket om besvikelse men det kommer att vändas lite längre ner… Jag säger inte att det vänds till odelad positivism men det vänder i alla fall…

På TechEd Developers i Barcelona i november träffade jag representanter för Ivar Jacobsons företag Ivar Jacobson Consulting för att prata lite mer om deras Essential Unified Process (EssUP). Jag blev ganska besviken ett år tidigare när jag var på TechEd Developers och lyssnade på Ivar prata om EssUP för första gången men tänkte att jag skulle ge den en ny chans.

Även denna gång blev jag besviken då jag fick informationen att EssUP bara kommer att vara tillgängligt för Ivar Jacobson Consultings kunder. Dvs att om man anlitar dom och deras konsulttjänster så får man också tillgång till processen.

Dag König skrev i ett inlägg på hans blog att han var glad att EssUP släpps för Team Foundation Server så jag ställde frågan till honom om det stämmer att EssUP inte är gratis. Han ställde frågan vidare till Ivar Jacobson Consulting och fick samma svar: EssUP och EssWork är idag gratis för alla våra kunder. Man får alltså tillgång till allt vårt IP som en del av ett engagemang (utbildning och/eller konsultuppdrag). Det här känns helt galet! Att idag lansera en agil process som är så starkt kopplad till ett företag känns helt fel.

Någon dag senare läste jag en kolumn i Computer Sweden skriven av Ivar Jacobson och då tänkte jag att jag måste gå till källan för att få rätt information. Så jag skrev ihop ett mail till Ivar och ställde samma fråga: ”Hur ska jag som fristående konsult kunna använda mig av EssUP på mina kunder om jag inte får tillgång till materialet?”

Någon dag senare fick jag också ett svar från Ivar! Svaret var väldigt positivt men det som är lite oroande är varför de ger så olika svar på samma fråga. I alla fall så var Ivars svar: När det handlar om ”produkterna” EssUP and EssWork så skall dessa bli fria. Innan de är fria genomgår de en förfining tillsammans med 10-20 kunder över hela världen.Vi vill inte göra något fritt som man inte kan lyckas med utan hjälp av oss.”

EssUP kommer alltså att bli gratis och helt fritt. Paketet kommer att doneras till Eclipse Process Framework där det kommer att finnas en EssWork community. Det finns också verktygsstöd för Visual Studio och Eclipse på klientsidan samt för Team Foundation Server och JIRA på serversidan.

Jag kommer att skriva fler inlägg om EssUP inom kort när jag börjar få tag i material och testat att installera EssWork på Team Foundation Server.

Som sagt är jag inte odelat positiv till EssUp men jag ska ge det en ärlig chans och min största besvikelse har vänt och förhoppningsvis kommer jag att hitta delar jag kan använda även om det skulle vara Scrum som används som process.

måndag, november 26, 2007

Sagan om Ringen - live

Igår var jag och en kompis och såg Howard Shore och Kungliga Filharmonikerna framföra musiken från Sagan om Ringen-trilogin. Det var en mäktig upplevelse att se Howard med stor inlevelse dirigerade orkestern och den makalösa kören. Till stöd för minnet så projicerades också illustrationer från filmerna på filmdukar runt orkestern. Det blev dock lite väl långt kan jag tycka och jag hade vissa stunder lite svårt att koncentrera mig och började istället tänkte på annat. Vilket inte är fel – hur ofta får man möjligheten att sitta och filosofera till en sådan bakgrund!

Mina funderingar gick oftast till hur mycket en dirigent egentligen tillför? Någon som vet? Här har vi ett minst sagt högpresterande team av otroligt skickliga individer och tillsammans presterar något som i sin helhet ger mycket mer än summan av dess ingående delar. Men frågan är; skulle de klara det lika bra utan sin ledare? I det här fallet är teamet (Filharmonikerna) vana att jobba tillsammans, de kan den domän de verkar i och känner till varandras styrkor och svagheter. Men deras Scrum master (dirigenten Howard) har inte jobbat nått med teamet så vad har han egentligen att tillföra?

Jag pratade med en stolt mamma till ett av barnen i kören som även var på genrepet och där hade Howard tydligen avbrutit många gånger och guidat orkestern när de inte spelade som han ville så visst är det så att han gör skillnad. Men eftersom att teamet redan från start är så pass högpresterande så behövs inte så mycket guidning från Scrum Mastern utan han (i det här fallet) kan bara göra små justeringar för att nå perfektion.

fredag, november 23, 2007

Visual Studio 2008 - installation och utbildning

Min nerladdning och installation av Visual Studio 2008 gick relativt smärtfritt. Jag följde Scott Guthrie's tips hade inga större problem. Första gången jag körde installationen så avbröts den pga att en Windows Update som inte hade blivit klar plötsligt blev det. Men efter omstart så funkade det dock perfekt. VS2008 är den enda versionen jag har på min maskin men jag har också gjort en installation på en virtuell maskin där jag sedan tidigare hade 2005 - även det utan problem.

En kollega till mig har dock haft en hel del problem men han valde att fösta avinstallera VS2005 innan han la in 2008. Läs mer om det på hans blog.

Jag körde en heldagsutbildning igår i Visual Studio 2008 på Microsoft för deras ISV Partners och trodde jag skulle kunna säga att jag var en sån där cool kille som hållit utbildning på en betaprodukt. Men eftersom att den släpptes innan så kände jag mig tvingad att installera den nya. Så nu får jag väl säga att jag var ganska tidigt ute att hålla utbildning efter release...

måndag, november 19, 2007

VS 2008 RTM idag!

Nu sägs det då att Visual Studio 2008 ska vara släppt och finnas att ladda ner på MSDN. Problemet är bara det att just nu får man ett felmeddelande på MSDN när man försöker gå in på download-siten.

Server Error in '/' Application.

The file '/home.aspx' has not been pre-compiled, and cannot be requested.

Så man får väl testa ikväll istället...

fredag, november 16, 2007

Min Scrum-artikel är online!

Jag har skrivit en artikel för AddSkills (fd Jönsson och Lepp) om Scrum och nu, i samband med namnbytet och lanseringen av deras nya site så finns den online.

Jag har precis avslutat det andra tillfället av min två-dagars-kurs Scrum i Praktiken och hade nio mycket nöjda deltagare. De sista sidorna i mitt kursmaterial är lite rekommenderad läsning och länkar. Detta har av någon anledning AddSkills klippt bort så jag tänkte att jag ska få till en blog-post med det innehållet.

Den här gången har det varit väldigt väldigt mycket frågor om allt från enhetstesting till hur man bemannar Scrum-team och hur 17 man ska kunna estimera i Story Points. Väldigt utmanande och utvecklande!

Nu när den här kursen är avslutat blir fokus helt på en jump start i Visual Studio som jag ska hålla nästa vecka på Microsoft för Microsofts räkning. Där är maxantalet 50 personer vilket ska bli en ny upplevelse!

måndag, november 05, 2007

Release av Visual Studio 2008 i november!

Idag på Keynote på TechEd developers fick vi den trevliga nyheten att Visual Studio 2008 och .Net Framework 3.5 kommer att släppas på MSDN i november! Som annonserats tidigare så kommer de att lanseras tillsammans med Windows Server 2008 och SQL Server 2008 i februari.

fredag, november 02, 2007

Blogga med Live Writer

Idag laddade jag ner en ny version av Live Messenger (8.5 beta 2) och då fick man också Live Writer på köpet, ja om man nu vill så klart. Så jag installerade den och tog hjälp av Ashwini Khares blogpost om hur man konfigurerar Live Writer med Blogger.com som jag använder för min blog.

Så det här är det första inlägget från Live Writer!

tisdag, oktober 30, 2007

Barcelona baby!

Nu är det snart dags för TechEd Developers 2007. På lördag morgon går flighten ner till Barcelona. Med på den flighten är också min kollega Hasse Sterby. Vi kommer att åka ner för att jobba som MCT Ambassadörer under TechEd. Det innebär att vi ska jobba med att handleda labbar och få prya hos eliten (MickeD, FredrikN, PatrikL) på Ask The Expert. Största delen av tiden kommer dock att spenderas på föreläsningar. För min del blir fokus Visual Studio 2008 och SharePoint. Men det kommer säkert att bli några sköna dragningar av ett par av mina favoriter från förra året Clemes Vasters & Steve Swartz.

En annan höjdpunkt blir på söndagen när jag och Hasse ska gå på fotboll på Camp Nou och se FC Barcelona mot Real Betis!

VPC för Visual Studio 2008 är tidsbestämd...

Den vpc som har funnits för beta 2 av Visual Studio 2008 är tidsbestämd till den 1 nov 2007. Nu finns det nya filer att ladda ner och det är bara vpc-er som berörs eftersom att det är operativsystemet som är tidsbegränsat.

Mer att läsa finns på Scott Gu's blogg.

Läste då också att det inte kommer att komma någon publik RC för VS2008 utan att de bara kör en privat RC-test-omgång. Hmmm så jag får väl anta att jag har fel angående min tidigare gissning om att vi kommer att få RC på TechEd...

lördag, oktober 27, 2007

Dags för en RC snart?

Börjar det inte bli dags för en release candidate av Visual Studio 2008 snart? Min gissning är att den dyker upp till TechEd Developers 2007. Förra året släpptes .NET Framework 3.0 och det har ryktats om "great announcments" på årets TechEd i Barcelona. Looking forward to it! 9 dagar kvar säger min TechEd Developers 2007 Vista gadget!

torsdag, oktober 25, 2007

Kortlek för Planning Poker

På Connecta håller jag på att jobba med att ta fram en kortlek för Planning Poker. Just nu håller vi på att ta fram en design av korten och förhoppningsvis ska de vara klara till i Januari 2008.

Min plan med kortlekarna är att använda den i min kurs på Jönsson och Lepp som heter Scrum i Praktiken där ett av momenten är att gå igenom och prova på Planning Poker samt att ge den till kunder och annat löst folk som är intresserade.

Hör gärna av dig om du är intresserad av en kortlek så ska jag se till att skicka en så snart de är klara.

måndag, oktober 15, 2007

Mat Weddle från Obadiah Parker

En cover som ger mig gåshud! Lyssna också på de andra låtarna av Obadiah Parker... Finns att köpa på en iTunes nära dig.

Manu Chao

Igår var jag och min kompis Johan på Hovet och såg Manu Chao. Riktigt bra konsert med grymt ös! Det var länge sedan jag såg att det hoppades så långt bak bland de lyckliga på ståplats. Det enda jag saknade var mera blås och så hade jag velat se King Kong Five i en Radio Bemba-ska-tappning.

Det var dock riktigt kul att se låtar live som jag aldrig har hört annat än att jag själv valt att spela dem. Att de skulle spela Sidi H'Bibi kändes lika otippat som när Depeche Mode körde sin stenhårda version av Photographic på Stockholms Stadion förra sommaren.

Kolla in det här klippet för att få en känsla av hur hela kvällen var igår! Grymt med energi!

tisdag, oktober 02, 2007

NUnit Asserts i VS2008 unit testing

Med NUnit 2.4 så kom möjligheten att använda en ny modell för hur man hanterar Asserts, en Constraint-baserad modell. Tidigare var man tvingad att använda olika asserts beroende på vad man vill testa (som t ex Assert.IsTrue() eller Assert.AreEqual) men nu kan man istället använda sig av Assert.That(). En av överlagringarna i Assert.That tar ett Constraint-objekt som inparameter. Constraint-objekt ligger i ett eget namespace i nunit.framework.dll som heter NUnit.Framework.Constraints.

Utöver det så finns även ett namespace som heter NUnit.Framework.SyntaxHelpers. SyntaxHelpers innehåller en klass som heter Is (eller Iz för VB.Net) och alla metoder i Is returnerar ett object av typen Constraint.

Detta gör att man kan skriva asserts av typen:

Assert.That(strMyName, Is.EqualTo("Björn Eriksen").IgnoreCase);

eller

Assert.That(11111.3, Is.EqualTo(11111.31).Within(0.1));

eller

Assert.That(50, Is.Not.EqualTo(100));





Det här sättet att skriva asserts tycker jag är väldigt trevligt och man saknar det snabbt om man måste gå tillbaka och skriva på det "gamla" sättet.

I Visual Studio 2008 finns inte något inbyggt stöd för att använda constraints-baserade asserts men det är ju onekligen en trevlig IDE att använda för unit testing så vad gör man...?

Det man kan göra är att använda NUnit constraints based asserts i Visual Studios unit testing-ramverk!

För att få till det hela på ett smidigt sätt så måste man plocka bort using-referensen till Microsoft.VisualStudio.TestTools.UnitTesting; och ersätta den med:

using NUnit.Framework;

using NUnit.Framework.SyntaxHelpers;




Anledning till detta är att klassen Assert finns med i både NUnit.Framework och i Microsoft.VisualStudio.TestTools.UnitTesting, så kompilatorn vet inte vilken den ska välja. För enkelhetens skulle bör man därför plocka bort using-referensen till Microsoft.VisualStudio.TestTools.UnitTesting istället för den till NUnit. Då blir det enklare när man ska skriva Asserts i sina test-metoder.

Effekten blir då den att, för attribut och typer som man ska referera från Microsofts test-ramverk så måste man ha kompletta sökvägar t ex:

[Microsoft.VisualStudio.TestTools.UnitTesting.TestMethod()]



I och med Visual Studio 2008 så kommer unit testing att vara med i Professional-versionen och förhoppningsvis leder det till att det blir enklare att införa unit testing i projekten!

Källkod till HTML

Upptäckte idag att jag hade ett behov av att få över färdigformaterad kod från Visual Studio till html, dvs så att färgkodning och indentering hänger med.

T ex:


public static int Add(int tal1, int tal2)


{


    return tal1 + tal2;


}




För att lösa det vände jag mig till Scott Hanselman och hans Ultimate Developer and Power Users Tool List for Windows.

Där hittade jag en länk till CopySourceAsHtml och eftersom att jag försöker använda VS2008 så mycket som möjligt även en länk för att få det att fungera i Visual Studio 2008.

torsdag, september 27, 2007

Första Scrum-projekt för kund


I våras var jag på intervju för ett projekt på en av Connectas kunder. Under intervjun pratade vi en del om deras arbetssätt och det som de beskrev var väldigt likt Scrum så mitt förslag var att vi skulle inför Scrum fullt ut. De nappade på förslaget så när jag började så började teamet jobba efter Scrum.
Vi var ett relativt litet team på bara fyra personer och jobbade mot personer som var vana att på att snabbt få resultat. Så här i efterhand skulle vi nog kanske ha haft kortare iterationer men överlag så funkade det rätt bra.



Första iterationen var en katastrof. Vi tog på oss allt för mycket jobb och tog inte tillräckligt med hänsyn till att jag var helt ny i projektet och att en medlem i teamet skulle vara borta en hel del. Andra iterationen gick dock mycket bättre och vi levererade vad vi hade åtagit oss på utsatt tid.
Några saker som jag tar med mig från den tiden är:
• Sätt ett mål för sprinten. Målet för sprinten är otroligt viktigt när man ska fokusera på vad man ska göra och säkerställa att man är på väg i rätt riktning.
• Definiera vad klart betyder!
• Automatisera deployment, byggen och tester.



De här erfarenheterna är något jag tagit med mig till den kurs jag tagit fram och som jag nu ger på Jönsson och Lepp som heter Scrum i praktiken.

VS2008 Announcements på TechEd?

Brian Keller sa just att det kommer att komma många intressanta nyheter om Visual Studio 2008 under TechEd Developers i Barcelona! Han såg väldigt exalterad… kanske dags för en RC?

TechEd Barcelona!

I november är det dags för TechEd i Barcelona igen och den här gången ska jag vara där som HOL proctor! Som MCT får man söka som frivillig att jobba under TechEd som HOL proctor och jag och Hasse Sterby från Connect har blivit utvalda. Vi kommer att jobba som handledare på hands on labs och kommer också att få jobba ett pass på ask the expert. Det ska bli grymt kul!

Förhoppningsvis får jag handleda labbarna om Visual Studio 2008 (skulle passa bra med tanke på den Metro-training jag är på nu) så om ni har några frågor om det är det bara att hugga tag i mig på plats.

Ser fram emot en vecka i Barca med gott sällskap och goda tapas!

Metro training i Amsterdam

De senaste tre dagarna har jag varit på Metro training i Amsterdam. Det är en utbildning för utbildare och tanken är att man sedan ska hem och leverera utbildningar för partners om Visual Studio 2008. Så det har varit tre dagar med otroligt mycket information om nyheterna i VS2008 och Team Foundation Server.

Så om någon är intresserad av en presentation om Visual Studio 2008, antingen på en övergripande nivå eller inom något ämne mer i detalj är det bara att höra av er!

fredag, januari 26, 2007

Compare objects in unit test

Today I wanted to create some unit tests for a object relationship mapper that Connecta developed for a client. The method I wanted to test was a find method that takes an id for an entity and returns that entity from the database. The entity that I searched for was created in a static method marked with the [ClassInitialize()] attribute.

By the way, I use Team System for unit testing.

So, how do I compare the objected that I created with the object that I got from the database? Will I be happy with just comparing what ToString returns or do I take a random number of properties and compare them? No, the only reasonable thing to do is to compare the value of every property on the objects.

To do this I created a new static class in my test project called
ObjectComparer
. ObjectComparer has one method called CompareObjects that takes the two objects to compare as in-parameters. Then I use reflection to find the properties on the object and compare the value of every property in the two objects. That worked really well but I soon realized that I needed a way to exclude properties from the compare method. For instance there can be a datetime field that holds a datetime for when the record was created in the database. This field will never be the same in a compare and therefore needs to be ignored. So I added another parameter that will hold a generic list that contains the names of the properties to ignore: List<string> IgnoreList.
CompareObjects returns another object called ObjectCompareResult that contains two properties, a Boolean containing the result of the compare and a string containing the possible error message if the compare returns false.

Here is the code for the method CompareObjects:

public static ObjectCompareResult CompareObjects(object obj1, object obj2, List<string> IgnoreList)
{
Type objectType1 = obj1.GetType();
PropertyInfo[] propertyInfos = objectType1.GetProperties();
foreach (PropertyInfo propertyInfo in propertyInfos)
{
if (IgnoreList == null || (IgnoreList != null && !IgnoreList.Contains(propertyInfo.Name.ToString())))
if (!propertyInfo.GetValue(obj1, null).Equals(propertyInfo.GetValue(obj2, null)))
return new ObjectCompareResult(false, String.Format("The value of the property '{0}' is not the same in the two objects. Value from obj1 = '{1}'. Value from obj2 = '{2}'",
propertyInfo.Name.ToString(),
propertyInfo.GetValue(obj1, null),
propertyInfo.GetValue(obj2, null)));
}
return new ObjectCompareResult(true);
}



And here is the code for the unit test:

[TestMethod()]
public void FindTest()
{
MyStorage target = FrameworkUnitTest.Framework_Storage_MyStorageAccessor.CreatePrivate();
MyEntity expected = myEntity; //Created in the ClassInitialize
MyEntity actual = target.Find(myId);
List ignoreList = new List();
ignoreList.Add("DateCreated");

ObjectCompareResult result = ObjectComparer.CompareObjects(expected, actual);

Assert.IsTrue(result.CompareResult, result.CompareMessage);
}


Thanks to my peers for help when it comes to reflection and comparing object values!