PerSalmi.NET

Swedish .Net software developer...
# Saturday den 20 February 2010

Kodkontrakt är en ny teknik som kommer i samband med Visual Studio 2010. Vad är då detta med konkontrakt? Lite förenklat kan man väl säga att det är ett sätt att kunna skriva kod som kontrollerar att inkommande och utgående parametrar och resultat är rimliga och håller sig inom förväntade gränser. Kan alltså vara riktigt bra för att se till att den som använder dina klassbibliotek inte skickar in dåliga parametervärden och ställler till det för sig.

Kodkontrakt har varit i fokus och diskuterats i min närhet vid flera tillfällen de senaste månaderna, dels vid ett frukostseminarie  i december och senare när jag själv presenterade nyheter kring .NET 4 på en konferens i Sälen för några veckor sedan. Först var vi lite besvikna eftersom det verkade som kodkontrakten inte skulle fungera ihop med Visual Studio 2010, de fanns inte med i installationen. Vi hörde rykten om att teamet på Microsoft Research inte hade levererat till Visual Studios byggteam, så kontrakten kom att saknas i betaversion 2.

imageEn del extra efterforskningar efter frukostseminariet visade dock att kontraktstödet faktiskt finns och fungerar, det kräver bara en liten extra nerladding och en separat installation. Både vi som lyssnade och killen som höll frukostföredraget var alltså besvikna i onödan. Det visade sig dessutom fungera bra med Visual Studio 2010 Beta 2 samt nu med den nya RC-versionen.

Det man behöver är antingen Code Contracts Standard eller Premium som finns att ladda ner från Code Contracts på Microsoft DevLabs. Teamet bakom kodkontrakten har mer material i form av publicerade forskningsrapporter och användarhandledning i PDF-form på sin sajt hos Microsoft Research, läs dem här: Contracts - Microsoft Research. Om man vill delta i diskussioner eller ställa frågor finns även ett forum specifikt om kodkontrakt på: Code Contracts MSDN Forum

Ok, det var lite allmän info. Hur kommer man då igång att använda kontrakt i sin dagliga kodning?

Efter att man installerat kontraktstödet så får man en ny panel i projektegenskaperna, Code Contracts:

image

Ovan ser man att jag aktiverat både runtime-kontroller och statiska kontroller som körs vid kompilering. På min labbmaskin har jag installerat premiumvarianten av kontraktstödet, därav har jag både runtime och statisk kontroll. Det är alltså denna projektinställning som behövs för att kontrakt som skrivits in i koden ska vara aktiva och kontrolleras antingen vid körning eller kompilering.

För att visa hur kontrakt för före- och eftervillkor fungerar har jag en mycket enkel metod i mitt C# projekt:

public int PositiveAdd(int a, int b) 
{
    Contract.Requires(a >= 0);
    Contract.Requires(b >= 0);
    Contract.Requires((a + b) > 0);
    Contract.Ensures(Contract.Result<int>() == (a + b));
    return (a + b);
}

Villkoren ovan är avsedda att kontrollera att båda inparametrarna är större än noll och att de tillsammans också ska vara större än noll. Kontrollen av slutresultatet verifierar att returvärdet är ett heltal som är summan av inparametrarna. Detta är ju som ni ser extremt förenklat bara för att visa just själva kontrakten. Requires-raderna ger alltså de “före”-villkor vi vill ha medan Ensures ger oss “efter”-kontroller.

Om man kör kod som utrustats med kontrakt för före- och eftervillkor i sin debugger kan man tydligt se att Contract.Requires(…) och Contract.Ensures(…) inte är kodrader som exekveras som vanligt. I denna sekvens av bilder från en debugger session visar det sig hur kontrakten kontrolleras vid exekvering av metoden.

Vi börjar med att först köra alla sk pre-conditions för att kontrollera utgångsläget när metodens kod påbörjas:

CropperCapture[4]

CropperCapture[5]

CropperCapture[6]

Nästa steg är mer överraskande, det är här man verkligen ser att Contract raderna inte är en vanlig del av metoden, debuggern visar nu att metodens kod kommer att exekvera från början av metodens kodblock:

CropperCapture[7]

Här fortsätter sedan körningen med att utföra det verkliga jobbet i vår metod:

CropperCapture[8]

Den funktionella delen av metoden är nu klar, i normala fall är vi nu färdiga att returnera resultatet till den anropande kodsekvensen:

CropperCapture[9]

Men eftersom kontrakten är aktiverade så är det istället dags att gå igenom och verifiera alla “efter”-villkor:

CropperCapture[10]

Som sammanfattning är alltså Contract-raderna inte en del av metoden som körs procedurellt!

Detta var kontroller för enkla före- och eftervillkor, kontraktstödet innehåller fler varianter av kontroller, men de får vi ta upp en annan gång.

Saturday, 20 February 2010 00:14:08 (W. Europe Standard Time, UTC+01:00)  #    Comments [1]
.Net | C# | Visual Studio
# Thursday den 11 February 2010

Sedan ett par dagar har Visual Studio 2010 Release Candidate funnits tillgänglig för MSDN-prenumeranter och nu har denna version även släppts för allmän nerladdning.

image

Eftersom jag höll ett föredrag om en del av nyheterna i Visual Studio 2010 och .NET Framework 4 på Combitechs Sälenkonferens 2010 nu i slutet av januari så kan det ju finnas en liten anledning att tipsa om nerladdningslänkarna till den nya RC versionen:

Det kan också vara värt att kolla in nya Team Foundation Server 2010 på Visual Studio Team Foundation Server eftersom den nu går utmärkt att installera på klientoperativsystem som Windows 7. Det är ett enkelt sätt att experimentera med versionshantering och work items mm för att lära sig hantera TFS. Jag håller som bäst på att kolla in TFS lokalt på min laptop, installationen gick på några få minuter och jag har redan ett par projekt importerade för fortsatta experiment. Om du är nyfiken på hur konfiguration av TFS går till på din lokala maskin så kan man se en video om det från Jim Lamb:

Thursday, 11 February 2010 00:18:17 (W. Europe Standard Time, UTC+01:00)  #    Comments [0]
TFS | Visual Studio
# Tuesday den 5 January 2010

Hittade ett coolt trick på CNET News som gör att man kan skapa en enda mapp som Windows 7 magiskt fyller med länkar till alla administrationsverktyg och kontrollpaneler.

Windows 7 God Mode Screenshot

Att skapa sin egen God Mode mapp är enkelt! Skapa bara en ny mapp på valfritt ställe och döp om den till:

GodMode.{ED7BA470-8E54-465E-825C-99712043E01C} 

En extra karamell i Windows 7 som  jag har saknat under många år med Windows är ett kortkommando för att skapa en ny mapp, nu finns den Shift + Ctrl + N ger en ny mapp i Utforskaren, fungerar även på Windows skrivbord, i fildialoger för att spara och öppna filer. Dvs där man allt som oftast behöver ha en ny mapp.

Tuesday, 05 January 2010 13:39:05 (W. Europe Standard Time, UTC+01:00)  #    Comments [0]
Windows 7
# Friday den 11 December 2009

Ja, det kanske inte är den mest gångbara julklappen för alla kategorier av människor. Jag har ett tips till er som som sitter och funderar på den perfekta julklappen till programmerare, hobby hackare och andra sorteras datorfantaster:

Köp en Solid State Disk (SSD)!

Själv har jag väl funderat lite på om det verkligen är så fantastiskt mycket snabbare än en vanlig hårddisk, men i veckan fick alla utvecklarna i projektet jag jobbar med för tillfället varsin Intel X-25 160 GB SSD-enhet. Eftersom det är rätt mycket verktyg man jobbar med och har installerade är vi några som testat innan alla maskiner installeras om på bred front.

Lite snabba mätningar då? Jo, ta en titt på detta.

Utgångsläget, en Dell Latitude E6400 laptop med 7200 rpm 250 GB disk med Windows 7 x64:

NoSSD

Inte så illa diskprestanda för att vara en klassisk hårddisk i en laptop var vad jag tänkte, maskinen är hyffsat rapp, bygger om vår kompletta lösning i Visual Studio 2008 på lite under 2 minuter.

Ok, vad händer då när man fixat de tre skruvarna och har en Intel X-25 SSD på plats? Första indikationen på att nåt är rejält mycket snabbare är att Windows 7 installeras på ca 10 minuter, lägger på Visual Studio 2008 på ca 5 minuter och fortsätter med den notoriskt långsamma installationen av VS 2008 SP1. Servicepacket installerat på 12 minuter! Jag minns att jag en gång gått på lunch och kommit tillbaks innan den hunnit installera klart detta servicepack på en annan inte alltför långsam dator.

Till lite råa siffror då…

Samma Latitude E6400 som ovan men med med Intel X-25 SSD

SSD

Resultatet med 4 ggr snabbare läsning, dubbelt så snabb skrivning och generellt sett söktider nära noll känns helt sjukt.

Hur är datorn att jobba med då efter att ha bytt till den extremsnabba disken? Det som man framför allt märker av är att starta större program som förrut tog tid, tex SQL Server Management Studio går mycket snabbare. Kompileringar i Visual Studio går snabbare, några exakta mätningar är svåra att ge men ett stort projektbygge som vi har är ca 40% snabbare att bygga om helt. Office applikationerna startar i stort sett på ett ögonblick och webbsidor laddar mycket snabbare, så kontentan är att hela arbetsupplevelsen med maskinen flyter mycket bättre. Tid är pengar och liv, detta kommer att ge mig mer tid att göra vettigare saker än att sitta och vänta…

Det ska bli intressant att se hur länge denna “snabbhetskänsla” sitter i, tyvärr har man ju en tendens att ganska fort tycka att en dator inte är tillräckligt snabb. Teknostressen lär väl komma även här. Men just nu ser det lovande ut!

Friday, 11 December 2009 23:03:14 (W. Europe Standard Time, UTC+01:00)  #    Comments [3]
Hårdvara | Windows 7
# Monday den 7 September 2009

Ett gäng MVP- och Regional Directors har satt samman en gratis e-bok med ett urval av artiklar där innehållet spänner över lite blandade ämnen som berör de flesta av oss som är aktiva inom utveckling av programvara och speciellt på .NET plattformen.

image

Kolla in http://devshaped.com/book eller här för direktlänk till nerladdningen...

Bland innehållet finns allt från att jobba med underhåll av äldre applikationer, tips om C# konstruktioner som underlättar din vardag programmerare, till hur man kommer igång med innovativa användargränssnitt i Silverlight.

Materialet är till största delen hämtat från författarnas mest populära bloggartiklar som har förpackats i soffvänligt format och kryddats med lite tecknade serier.

Monday, 07 September 2009 11:42:30 (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
Läsning
# Thursday den 6 August 2009

Ok, då var det dags att ta ner det färdiga Windows 7 RTM versionen som precis släpptes på MSDN/TechNet.

image

Windows 7 ser just nu ut att vara tillgängligt i följande editions:

  • Starter (endast för x86)
  • Home Basic
  • Home Premium
  • Professional
  • Enterprise
  • Ultimate

Det finns även Windows SDK tillgängligt direkt för nerladdning, trevligt för ibland har det dröjt lite extra innan SDK har släppts men nu ligger de ute samtidigt.

Ultimate och Starter är de två varianterna jag tänkte installera först på min Dell Latitude E6400 respektive Asus Eee PC 901.

Thursday, 06 August 2009 19:22:57 (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
Windows 7
# Tuesday den 28 July 2009

NäraNerladdningsChef

Man undrar verkligen hur sånt som på bilden ovan kan slippa ut ur testlabbet. Det är ju inte så svårt att räkna ut vad den engelska textens betydelse var, men ett företag av den storleken borde väl ha råd att korrekturläsa nån gång då och då?

Tuesday, 28 July 2009 21:22:33 (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
Diverse
# Friday den 24 July 2009

För de som inte har Visual Studio Team System i sin MSDN prenumeration kommer nu en intressant extra present när Expression Studio 3 släpps. 

image

Den nya Expression Studio 3 finns nu med som en del även för de som har Visual Studio Professional med MSDN Premium prenumeration. Så nu kan fler använda Expression Design och Expression Encoder! Nu kanske detta inte leder till några direkta mirakel för hur WPF och Silverlight applikationer kommer att se ut framöver, med tanke på att de flesta utvecklare jag träffat på, inklusive mig själv, brukar betrakta sig som mer eller mindre odugliga när det gäller att få grafik att se riktigt bra ut i de gränssnitt som byggs… Men man kan väl alltid hoppas.

Friday, 24 July 2009 01:20:21 (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
.Net | Verktyg | WPF
# Wednesday den 22 July 2009

imageEnligt Brandon LeBlanc på Windows Team blog så trillar RTM versionen av Windows 7 ner hos TechNet och MSDN prenumeranter den 6:e augusti. Det är det engelska versionen som blir tillgänglig då, andra språk kommer den 1:a oktober.

Kanske det ändå blir ytterligare en installation med RC utgåvan av Windows 7, den här gången på min netbook. Hade tänkt vänta med att installera om den tills RTM-versionen kommer men det får nog bli tidigare.

En intressant fråga som jag funderar kring är vilken edition av Windows 7 som kan passa bäst på en netbook… Kanske inte en full Ultimate installation är det bästa med tanke på att resurserna på en Asus EEE Pc inte är oändliga.

Wednesday, 22 July 2009 00:08:04 (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
Windows 7
# Monday den 18 May 2009

Nu uppdaterad med nerladdningslänkar för alla som saknar MSDN prenumeration!

Visual Studio 2010 beta 1 finns nu tillgänglig för utvecklare med MSDN-prenumeration. Den väntas bli tillgänglig för alla från Microsoft Downloads på onsdag 20:e maj.

image

Det ska bli riktigt intressant att se hur studion utvecklats sedan PDC i höstas.

MSDN har för tillfället separata nerladdningar för betaversioner av

  • .NET Framework 4.0
  • Visual Studio 2010 Team Suite
  • Visual Studio 2010 Professional
  • Visual Studio Team Foundation Server 2010

Ramverket kommer både i fullversion för x86 och x64 processorer samt i den nerbantade sk client profile-versionen. Som tillbehör för Team System finns också testverktygen Test Load Agent och Test Load Controller.

Nerladdningar för alla:

Monday, 18 May 2009 19:29:57 (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
Visual Studio
# Monday den 11 May 2009

Kollade just på det livesända keynote föredraget från Microsoft TechEd 2009 via webben. Det var inte mycket nyheter för utvecklare, troligen en effekt av att PDC och MIX gick nyligen, kanske spelar det in att man gått tillbaks till det sammanslagna formatet med både utvecklare och IT-proffs under samma vecka. Jag hade hoppats på att de skulle släppa Visual Studio 2010 Beta men det mest intressanta för utvecklare var en annonsering att en förhandsversion av Sql Server 2008 R2 kommer mot slutet av året. Även Office 2010 kommer i en testversion under året. Intresserad? Kolla på Office 2010 the Movie.

image

Annars var det en del om releasekandidaterna av Windows 7 och Windows Server 2008 R2. Man jobbar tydligen hårt på att förbättra drivrutiner i Windows 7 nu, framför allt för grafikkort. Det är också samarbete på gång med Intel kring strömsparfunktioner och optimering av flertrådade applikationer. För övrigt var det upprepning av saker som BitLocker to Go, boot av VHD-filer.

Mot slutet övergick det till några demos av virtualisering och Exchange Server 2010.

Vill man hålla koll på det som händer under veckan så är TechEd Online ett hett tips tillsammans med bloggar på TechEd Blogs eller Twitter.

Vi får väl hoppas att det dyker upp lite coola nyheter för .NET-utvecklare längre fram i veckan.

Uppdaterat! En bra sammanställning av nya produkter som visats/pratats om på TechEd finns på: Roadmaps for Major Products Announced at TechEd

Monday, 11 May 2009 22:04:14 (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
TechEd
# Monday den 4 May 2009

Idag råkade vi på ett något märkligt problem på en utvecklingsdator där vi just hämtat ut ett projekt som innehåller en Linq To Sql modell. Vid kompilering av delprojektet med .dbml-filen fick man felmeddelandet "Could not retrieve the current project." utan vidare ledtrådar. Projektet byggde perfekt på andra datorer med identisk kod.

image

Någon exakt bakomliggande orsak har vi egentligen inte hittat men det finns massor med referenser till liknande felmeddelanden hos andra användare av Visual Studio 2008 SP1. Problemet är relaterat till modelldesignern eller hur verktyget som genererar koden bakom modellen fungerar.

Men vi fann en lösning!

  1. Stäng Visual Studio
  2. Öppna en Visual Studio Command Prompt från startmenyn, ligger under Visual Studio 2008 –> Visual Studio Tools.
  3. Kör kommandot:
    devenv /ResetSkipPkgs
  4. Öppna projektet igen och öppna även din databasmodell, dvs .dbml-filen, i designern
  5. Spara .dbml filen för att den ska generera om koden
  6. Kompilera hela projektet

Detta fungerade för oss och var enklare än det alternativa förslaget vi hittade, att ominstallera hela VS 2008 inkl SP1.

Monday, 04 May 2009 12:45:50 (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
Linq | Visual Studio
# Thursday den 30 April 2009

Helgen räddad? Ja, kanske, Windows 7 RC finns nu på MSDN/TechNet downloads för den som är prenumerant. Det som ligger ute nu direkt är x64 och x86 versioner tillsammans med SDK, debug symboler och driver kit.

image

Jag vet i alla fall att denna rätt snabbt kommer att hamna i både utvecklingslaptopen och den lite mer klent utrustade Asus EEE Pc 901 som ligger hemma och väntar med sin numera hopplöst föråldrade Beta 1 version.

Thursday, 30 April 2009 15:14:46 (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
Windows 7
# Wednesday den 29 April 2009

Felsökte en ASP.NET applikation som har sitt ursprung i version  1.1 av .NET Framework idag för att utreda varför en nybyggd funktion som bygger på ASP.NET Ajax med UpdatePanels inte fungerade.

Problemets symptom var att UpdatePanelen alltid gav en total omladdning av sidan, inga events lyckades få panelen att göra en partiell uppdatering. Ett inte helt ovanligt problem om man googlar lite på problem i samband med UpdatePanel.

Boven i dramat då? Jo, eftersom det handlar om ett webbprojekt som uppdaterats från äldre ASP.NET till 3.5 så har web.config fått en automatisk sättning av XHtml kompatibilitet som inte funkar bra ihop med ASP.NET Ajax.

Se till att du kontollerar att xhtmlConformance är satt till något annat än “Legacy”, använd tex “Transitional” eller “Strict”.

image

Wednesday, 29 April 2009 16:03:32 (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
.Net | ASP.NET | Webb
# Wednesday den 22 April 2009

Ett problem som dyker upp som utvecklare när man uppgraderar Internet Explorer till version 8 är att en del projektwizards i Visual Studio 2008, och även i 2005 om man kör den, slutar fungera. Till exempel avslutas wizarden för att skapa ett nytt smart device projekt med felmeddelandet “Project creation failed.” nere i VS statusbar. Bakgrunden till problemen är att projektwizards i t ex MFC C++ och Smart Device / Mobile projekt i C++ är beroende av att använda delar av Internet Explorer och att kunna köra ActiveX kontroller, dessa körs av Internet Explorer inne i Visual Studio och med nya IE8 fungerar inte dessa wizards pga ändringar i säkerhetsmodellen i IE.

Lösningen som finns består i att man lättar på begränsningarna i den speciella säkerhetszon som finns just för dessa Visual Studio wizards. Vad som behöver göras är:

  • Starta Regedit (Obs! om du använder 64-bitars operativsystem ska du köra 32-bitars Regedit)
  • Gå till registersökvägen HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones
  • Skapa en ny nyckel och döp den till 1000 om det inte finns en sådan nyckel redan
  • Under denna nya nyckel skapar du ett DWORD-värde med namnet 1207, typ REG_DWORD och datavärdet 0x00000000

 image

Nu ska wizards för att lägga till funktioner, lägga till variabler, nya smart device projekt i C++ och att lägga till klasser i smart device projekt fungera igen!

Wednesday, 22 April 2009 19:42:39 (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]
C++ | Internet Explorer | Visual Studio
Blog & Contact
Per Salmi
Per Salmi
Min LinkedIn Profil

Jag arbetar på Combitech AB i Linköping med konsultuppdrag och utbildning inom Microsoft .NET området. Kontakta mig gärna om ni har frågor, behov av konsulttjänster eller är intresserade av utbildning inom .NET.

Copyright © 2017 Per Salmi

Bloggmotor: newtelligence dasBlog 2.3.12105.0

Sign In
Statistics
Total Posts: 220
This Year: 1
This Month: 0
This Week: 0
Comments: 40

Datorer
All Content Copyright © 2017, Per Salmi