2006-09-23

Kortare byggtider för webbutveckling med Visual Studio 2005

Scott Guthrie har publicerat en mycket intressant artikel om hur du kan få kortare byggtider för webbutvecklingsprojekt i Visual Studio 2005. Förutom en rad generella tips skriver Guthrie en del, och länkar till ännu mer, om skillnaderna mellan Web Site Projects, som är den nya modellen för VS 2005, och Web Applications Projects, som kommer med Service Pack 1, mer liknar modellen i VS 2003 med bl.a. en enda assembly och som redan nu finns att ladda ned "fully supported" från Microsoft.

2006-09-22

Access to the path 'C:\Documents and Settings\username\Local Settings\Temp\~5a72\bin\App_Code.compiled' is denied

Häromdagen råkade vi ut för felmeddelandet "Access to the path 'C:\Documents and Settings\username\Local
Settings\Temp\~5a72\bin\App_Code.compiled' is denied" när vi försökte göra en "Publish Web Site" i Visual Studio 2005. Efter en del efterforskningar, bland annat med hjälp av utmärkta verktyget FileMon från SysInternals (numera uppköpta av Microsoft!), lyckades vi hitta problemets orsak. Det visade sig att det användarkonto vi angivit för identity impersonate i Web.config måste ha rättigheter att skriva till den kompilerande användarens lokala temp-mapp (C:\Documents and Settings\username\Local Settings\Temp\)! Det enklaste, och förmodligen även säkraste, sättet att komma runt problemet är förstås att tillfälligt kommentera bort denna rad i Web.config medan man kör "Publish Web Site".

2006-09-17

Bloggändringar

Om du inte följer denna blogg via en RSS-läsare borde du vid det här laget ha upptäckt att jag ändrat utseendet på min blogg. Det gamla formatet utnyttjade inte riktigt utrymmet på moderna bildskärmar och jag hoppas att det här utseendet ska kännas lite läsvänligare.

Jag har också lagt till statistik för bloggen via SiteMeter och jag måste säga att jag är något överraskad av vilka som besöker min blogg. Nu har det förvisso bara gått ett par veckor sedan jag började kolla, men det verkar som om majoriteten av mina läsare faktiskt inte är mina närmast sörjande (jag har inte precis marknadsfört min blogg), utan folk som hamnar här efter att ha sökt information eller lösningar på problem via Google. Detta är en positiv överraskning eftersom ett av huvudsyftena med bloggen är att hjälpa människor att enkelt hitta lösningar på de problem som jag själv varit tvungen brottas med.

Med tanke på denna besöksstatistik och med tanke på att jag just nu sitter i ett uppdrag där jag dagligen hjälper utvecklare med .NET 2.0 tänkte jag den närmaste tiden försöka posta en del inlägg om olika problem jag stött på den senaste tiden. Jag hoppas att det blir till hjälp för någon.

Jag funderar också på att testa Google AdSense och se hur det fungerar; med min blygsamma trafik blir det knappast mer än kaffepengar, men det kan bli en intressant erfarenhet.

2006-09-11

Adjö Atlas, välkommen AJAX Library och AJAX Extensions

Atlas finns inte längre. Eller rättare sagt, kodnamnet Atlas har nu blivit ersatt av ett officiellt namn eftersom Microsoft nu har besämt sig för att göra produkten "fully supported" och kommer att leverera en 1.0-version i slutet av året. Det blev tyvärr inget av de roliga namnen från Atlas Naming Game, till exempel Client-side Rich Asynchronous Product (CRAP) och Asynchrounous POST Platform Leveraging Enterprise Javascript And XML (APPLEJAX).

Klientdelen kommer att få namnet Microsoft AJAX Library och serverdelen får heta ASP.NET 2.0 AJAX Extensions. Serverkontrollerna kommer att finnas med i ASP.NET "Orcas" (kodnamnet för nästa version) och det kommer att finnas WYSIWYG-designstöd för dem i Visual Studio "Orcas", som också kommer att få bättre JavaScript-IntelliSense och -debugging.

Läs mer om nya namnen, leveransplaner m.m. på Scott Guthries blogg.

Ny version av CSS-vänliga ASP.NET-kontroller

Nu finns det en ny version av kontrolladaptrarna för att bygga CSS-vänliga (icke-TABLE) ASP.NET-kontroller som jag bloggat om tidigare. Nedladdningen innehåller också ytterligare ett antal nya tabellfria implementationer av ASP.NET-kontroller. Läs mer på Scott Guthries blogg.

2006-09-10

Lyssna på podcasts!

Ett bra och roligt sätt att lära sig mer om utveckling och arkitektur är att lyssna på några av de många podcasts som finns i dessa ämnen. Det senaste halvåret har jag tagit för vana att ladda ned podcasts till min Qtek-telefon, eller bränt dem på CD för bilen, som jag sedan passat på att lyssna på när jag skottat jord, klippt gräsmattan, kört bil till jobbet eller utfört någon annan monoton syssla.

Mina favoritställen att ladda ned podcasts från är Channel 9 (som jag bloggat om tidigare) och Dag Königs (numera evangelist hos Microsoft) "Another Visitor".

2006-09-06

Framework Design Guidelines

Sedan ett halvår eller så tillbaka i tiden har jag följt Brad Abrams blogg, inte minst genom hans inblandning i Microsofts Atlas-projekt (faktum är att jag växlade några ord med honom om detta på Mix06 i våras). Brad Abrams är Lead Program Manager för Microsofts .NET Framework Team, en position han tidigare haft också i Common Language Runtime Team. Han har designat olika delar av .NET Framework sedan 1998, var Lead Editor för Common Language Specification (CLS) och ECMA/ISO CLI Standard. Med denna bakgrund är det inte konstigt att hans bok Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (en bok i Microsofts .NET Development Series) är så full av goda råd. Att hans medförfattare heter Krzysztof Cwalina och är Program Manager för Common Language Runtime Team med ansvar för namespaces som System.Collections, System.Diagnostics m.m., gör förstås också sitt till.

Under de år .NET Framework har funnits har Microsoft förstås fått enormt mycket återkoppling från mjukvaruindustrin och utvecklarcommunityn kring ramverket. Man har dessutom själva bedrivit omfattande användbarhetstester och ägnat mycket tid åt att internt utveckla designriktlinjer för såväl .NET Framework som andra produkter. Det är erfarenheterna från denna tid som författarna vill dela med sig av i Framework Design Guidelines.

Boken täcker allt från den grundläggande filosofin bakom ramverksdesign till designriktlinjer som när du bör välja en struct framför en class till specifika detaljer för hur du bör namnge dina parametrar ("endpoint" ska till exempel skrivas just så och inte "endPoint"). Det går alldeles utmärkt att läsa de ca 350 sidorna från pärm till pärm, men man kan också nöja sig med de första 30 sidorna om "Framework Design Fundamentals", skumma igenom intressanta riktlinjer och i övrigt använda boken som referens. Riktlinjerna är indelade efter ämnen som "Naming Guidelines", "Type Design Guidelines", "Usage Guidelines" och "Common Design Patterns", och finns av fyra olika slag: "Do", "Don't", "Consider" och "Avoid". Naturligtvis åtföljs riktlinjerna av resonemang och exempel. Dessutom, och det här är verkligen en av bokens stora behållningar, har man överallt sprängt in typografiskt distinkta kommentarer/anekdoter från ett 20-tal microsoftare och Microsoft-nära industriexperter som t.ex. Jeffrey Richter ("Applied Microsoft .NET Framework Programming") och Anders Hejlsberg (skaparen av C#). I kommentarerna kan man läsa många intressanta resonemang och motiveringar till varför .NET Framework ser ut som det gör och man kan även skönja en del av de trätoämnen som omgärdat utvecklingen av ramverket (prestanda- och C++-gänget mot lättanvänt- och VB-gänget, förenklat uttryckt).

Riktlinjerna i Framework Design Guidelines är i första hand utformade för att passa just ramverk och publika API:er, särskilt sådana som bokens författare kallar "progressive frameworks" och definierar sålunda:

"Framework that is easy to use in basic scenarios yet powerful enough to be used in advanced scenarios."

Och man kan lugnt säga att "easy to use" är den princip som väger tyngst i riktlinjerna; ofta får lösningar som kanske är mer finurliga eller skulle ge bättre prestanda vika på foten för de som är mer lättanvända, och av utvecklarna förväntade, enligt Microsofts erfarenheter och användbarhetstester. Det gör att alla råd kanske inte passar lika bra för just ditt ramverk, men enligt min mening är majoriteten av riktlinjerna tillämpliga även vid applikationsutveckling. Dessutom är det ju så som en av kommentatorerna skriver: "Performance gets better over time, ease of use doesn't."

Framework Design Guidelines är en mycket bra bok som egentligen alla .NET-utvecklare borde läsa, i synnerhet de med intresse/ansvar för design- och arkitekturfrågor.

2006-09-03

Vad gick egentligen snett när du råkat ut för System.Data.ConstraintException?

Det händer då och då att man som utvecklare råkar ut för System.Data.ConstraintException när man via DataAdapter.Merge försökt fylla ett typed DataSet med data. Felmeddelandets detaljrikedom lämnar en del att önska:

"System.Data.ConstraintException: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints."

Det kan alltså vara i princip vad som helst som gått snett och om ditt DataSet är någorlunda komplext är det inte särskilt lätt att gissa sig till det heller. Lösningen ligger i att fånga detta exception och använda DataSet.GetErrors() för att få reda på exakt vilka rader det var problem med och vilka problemen var:

try
{
myTypedDataSet1.Merge(ds.Tables[0], false,
MissingSchemaAction.Error);
}
catch(System.Data.ConstraintException exc)
{
DataRow[] rows = myTypedDataSet1.myDataTable.GetErrors();
foreach(DataRow row in rows)
{
string error = row.RowError; // Visa/logga felmeddelande etc.
}
}