Jag bloggar numera på http://blog.dileno.com ».

Prenumerera på RSS

Arkiv för mars 2009:

5 tips för hur du blir bättre på det du gör

Att bli bättre på det du gör är ingen självklarhet. Oftast så måste du själv ta tag i hur du gör saker, för att kunna förbättra dig själv och dina kunskaper. Jag delar med mig av 5 tips för att du ska kunna bli bättre på det du gör.

Bli bättre på det du görJobba med folk som är bättre än du själv

Det finns alltid rum för förbättring. Om du redan är bäst på det du gör så är det bra - men du kommer troligtvis inte att bli bättre i samma takt som om du skulle jobba med någon som är bättre än du själv.

Att jobba med folk som är bättre än du själv har flera fördelar - ni kan bolla idéer, du lär dig mer och blir varje dag lite bättre än tidigare. Efter en viss tid kommer du själv märka att du blivit bättre.

Jobba med det du tycker är intressant

Fakta: du jobbar som bäst när du tycker att det du jobbar med är intressant.

Ju fler saker du är intresserad av som har att göra med ditt jobb, desto bättre kommer ditt arbete att bli.

Det är alldeles för få förunnat att jobba med något som man har en passion, ett brinnande intresse för. Att jobba med ett av sina intressen är ett privilegium och ska tas till vara.

Tänk på att det aldrig är för sent att tänka om, och att prova på många arbeten är bra när man har chansen - så att du senare har en förståelse för vad du själv tycker om att jobba med eller inte.

Sätt upp mål för dig själv

Utan mål är det lite svårare att utvecklas. Sätt upp specifika mål för dig själv och när de senast ska vara uppfyllda. Målen ska vara konkreta och bör såklart vara något du har nytta av - så att du är motiverad att jobba för att uppnå målen. När du klarat av dina mål - sätt nya, svårare mål.

Läs och gör

Läs om det du vill bli bättre på. Böcker, tidningar och framför allt på Internet. Prenumerera på intressanta bloggars RSS-flöden, häng med i diskussionerna på nätet och delta själv. När du läst, gör det du har läst om. Det är bra att läsa teori, men man behöver även praktisera.

Inse dina begränsningar

Inse dina begränsningar och förstå vad du kan göra åt dem. Om du vet vad du är dålig på är det lätt att börja förbättra det du är dålig på. Om du är expert inom ett visst område - välj att arbeta med ett annat område du inte är lika bra på. Initialt sett kommer det att ta mer tid - eftersom du lär dig - men så småningom kommer du att bli expert på det "nya" området också. Övning ger färdighet, som det heter.

En god idé är att fråga dina närmsta vilka dina svagheter är. Såväl kompisar som kollegor och släktingar. Allt eftersom kommer du att börja inse vad du är lite sämre på än vad du borde - och börja jobba på att förbättra detta.

Windows Installer CleanUp Utility fixar problem med dina installationer

Har du någon gång stött på problem med att en installation i Windows avbryts, inte kan genomföras eller liknande? Då kommer det lilla verktyget Windows Installer CleanUp Utility till räddningen.

Vad verktyget gör är att rensa installationer som inte genomförts. CleanUp Utility kommer även att ta bort installationsfiler som ligger och skräpar sedan tidigare (och kan hindra nya installationer av programversioner).

Notera att programmet enbart fungerar för Windows Installer-installationer.

Läs mer om och ladda ner Windows Installer CleanUp Utility

Build Events i Visual Studio och Command copy exited with code 1

Build Events i Visual Studio är ett trevligt sätt att köra vissa script när man bygger ett projekt. Du hittar Build Events genom att högerklicka på ditt projekt i Visual Studio, välja Project Properties och sedan fliken Build Events.

Jag stötte på två felmeddelanden när jag skulle bygga ett projekt som hade en händelse kopplat till sig.

Det händelsen gjorde var att helt enkelt kopiera innehåll från en mapp i projektet och klistra in det i rotmappen. När jag byggde projektet fick jag först detta felmeddelande:

Command copy exited with code 1.

Jag upptäckte att om jag raderade denna händelse så fungerade det att bygga projektet. Detta är vad man dock bör tänka på när man använder sig av build events i Visual Studio:

  • Se till att hantera mellanslag, exempelvis genom att använda dubbla citattecken:
    copy "sökväg/fil.*" "nysökväg"
    Ett annat lite omständigare sätt att hantera mellanslag på är att helt enkelt inte ha mellanslag i mappnamn, filnamn, användarnamn med mera.
  • Se till att mappen du skriver till inte har skrivskydd.

För min egen del fungerade inget av ovanstående - jag fick ta bort händelsen och manuellt kopiera de filer som skulle kopieras när projektet skulle byggas. Jag stötte dock på ett till problem som var ett hinder för att projektet byggdes - nämligen följande:

The "Exec" task needs a command to execute.

Detta felmeddelande berodde på att det fanns en ny rad i händelsen, som annars var tom. Ta bort den tomma raden och det fungerade att bygga projektet.

Att felsöka MissingMethodException i ASP.NET

Om du får MissingMethodException på din webbplats så beror detta på att det är en binär som orsakar problemet.

Här är några tips gällande MissingMethodException:

Tredjepartskomponenter?

Har du nyligen installerat tredjepartskomponenter på webbplatsen? Undersök om dessa kan ha upphov till problemet.

Jämför assemblys

I Web.Config (under <runtime>) finner du alla assemblys och deras versioner. Jämför dessa med de motsvarande fysiska binärerna som finns i bin-mappen.

Vilken metod saknas var?

ASP.NET-errorsidan talar om vilken metod som saknas. Errorsidan talar även om var metoden anropas någonstans. Ta en noggrann titt här.

Loggning

Om du använder loggning - ta en titt i loggfilen. log4net är ett utmärkt verktyg för loggning. Jag har skrivit om log4net tidigare.

Reflector

Använd Reflector för att undersöka olika versioner av samma binär. Detta verktyg är absolut oumbärligt för att göra en djupdykning i vad som faktiskt sker i metoder, med mera.

Övriga tips

Debugging a MissingMethodException, MissingFieldException, TypeLoadException

I mitt fall så fick jag MissingMethodException på grund av att en metod anropades från en klass som inte ens användes. Det jag gjorde var att radera binären som klassen fanns i - och detta löste problemet.

Lös problemet Token StartElement in state Epilog i ASP.NET

Om du jobbar med ASP.NET och XML så kan du stöta på följande felmeddelande:

Token StartElement in state Epilog would result in an invalid XML document.

Detta felmeddelande dyker oftast upp när något av följande inträffar:

  • Du har inget startelement i ditt XML-dokument
  • Du stänger inte XML-element ordentligt

Följande metoder ska du använda dig av så fort du skriver till XML-dokument på något sätt:

  • WriteStartDocument
  • WriteEndDocument
  • WriteStartElement
  • WriteEndElement

Samtliga metoder finns i XmlWriter-objektet.

Var noga med att öppna och stänga XML-dokumentet och element i själva dokumentet, så kommer du att lösa problemet.

Vad en webbredaktör bör kunna

Igår fokuserade jag på design och utveckling av webbplatser när jag skrev om vikten av att använda rätt kompetens till rätt uppgifter för att få bättre produktivitet och högre kvalité i webbprojekt. Idag tänkte jag lyfta fram den kompetens en webbredaktör bör ha för att göra mer än att bara publicera innehåll.

Jag har sett ett antal annonser där tyngdpunkten på en webbredaktörs jobb ligger på publicering av innehåll. Publicering i all ära, men en bra webbredaktör ska kunna så mycket mer. En riktigt bra webbredaktör vet hur man skriver texter för webben, hur man positionerar sig bättre i sökmotorer och hur man sprider sitt innehåll (för externa webbplatser, det finns intranät också).

Webbcopy - att skriva för webben

Webbcopy är att skriva för webben. Internet är inte som traditionell media. Vi läser och agerar på ett helt annat sätt på Internet än vad vi gör framför en tidning eller tv. Då gäller det att kunna anpassa sig efter målgruppen.

En webbredaktör bör vara duktig på webbcopy och att uttrycka sig kort, tydligt och exakt, gärna genom exempelvis punktlistor som underlättar när innehåll ska konsumeras på webben.

Sökmotoroptimering

Det skrivna ordet är otroligt viktigt för en god positionering i sökmotorer. En rätt skriven text med fetmarkerade nyckelord, god länkning till liknande resurser och bra struktur innebär ofta en högre positionering i sökmotorer.

Idag blir det mer och mer vanligt med sökmotorvänliga länkar, det vill säga länkar där man faktiskt förstår vad för innehåll som ligger bakom länken. Ett bra CMS hanterar sökmotorvänliga länkar och en bra webbredaktör vet vad denne ska ange för huvudrubrik på publikationer för att länken ska bli så bra som möjligt - och underlätta för sökmotorer.

Spridning av innehåll

Publicerar man på webben vill man att innehållet ska spridas och läsas. Det enklaste tipset är att erbjuda innehållet som RSS-flöden så att webbplatsens besökare kan prenumerera på webbplatsens innehåll - och återkomma när något nytt har skrivits.

Vidare kan man använda sig av externa tjänster såsom Twitter (och bloggy), Youtube, Slideshare med flera, för att i stort driva trafik till sin webbplats. Detta innebär att man bör posta filmklipp på Youtube, dela med sig av presentationer på Slideshare och skriva om sitt vardagliga jobb på Twitter och bloggy. Det handlar om att synas i de så kallade sociala medierna.

En kravprofil

En kravprofil för en webbredaktör skulle kunna se ut så här:

  • Mycket god erfarenhet av CMS och publicering av innehåll
  • Mycket god erfarenhet av webbcopy
  • God kommunikativ förmåga i såväl tal som text
  • Förståelse för webben, sociala medier och att bidra till att bygga ett varumärke
  • Kunskaper i sökmotoroptimering
  • Kunskaper i bildredigering med t.ex. Photoshop
  • Grundläggande kunskap i HTML och semantik på webben

Givetvis är ovanstående en grundläggande kravprofil som kan utökas och göras mer detaljerad. Huvudregeln bör dock vara att en webbredaktör kan webbcopy, har en god förståelse för hur webben fungerar och vet hur man sprider information.

Rätt kompetens vid rätt tillfälle för ökad produktivitet och högre kvalité

När man jobbar med ett projekt är det mycket viktigt att hela tiden vara produktiv och att leverera ett kvalitativt arbete. Detta kan åstadkommas med olika stora arbetsinsatser beroende på vilken projektmodell man väljer, men man kan även påverka genom att se till att rätt kompetens är på rätt plats i projektet. I webbprojekt är det särskilt viktigt att skilja på tre olika kompetenser - systemutveckling, gränssnittsutveckling och grafisk design.

Roller i webbprojekt

I ett typiskt webbprojekt som handlar om produktion av en webbplats ingår oftast

  • projektledare
  • designer
  • gränssnittsutvecklare
  • systemutvecklare

Övriga projektmedlemmar som bör förekomma är

  • teknisk projektledare
  • systemarkitekt
  • interaktionsdesigner
  • testare

Lite beroende på webbprojektets karaktär finjusteras behovet av de olika kompetenserna.

Jag tänkte särskilt gå in på vikten av att förstå vad en designer, gränssnittsutvecklare och systemutvecklare gör i ett webbprojekt - och hur man på bästa sätt använder dessa kompetenser.

Jag ska förtydliga att en gränssnittsutvecklares och en systemutvecklares arbetsuppgifter till stor del består av programmering. En gränssnittsutvecklare arbetar med det som syns utåt - det yttre lagret - det vill säga programmering av den grafiska designen och hur väl en webbplats syns i sökmotorer (bland annat). En systemutvecklare jobbar med det bakomliggande lagret som inte syns, men i högsta grad märks. Det handlar bland annat om databaskopplingar och logik för att hantera vad som sker när en besökare interagerar med webbplatsen, exempelvis skickar iväg ett formulär.

Ett vanligt missförstånd i webbprojekt

Om och om igen stöter jag på webbprojekt där de olika kompetenserna grafisk design, gränssnittsutveckling och systemutveckling slås ihop och får utföras av en person. Jag skulle vilja säga att det är fel att låta en person jobba med vitt skilda kompetenser. Det är i väldigt få fall resultatet blir bra och dessutom inom tid och budget för projektet.

Jag är medveten om att det finns många mindre byråer där det krävs flexibilitet och en bred kunskap hos den specifika projektmedlemmen, för att kunna utföra jobbet. På större byråer är denna flexibilitet och kunskap vanligt förekommande också - men jag lovar - någon del i projektet kommer att bli lidande om en och samma person ska utföra arbete som tre personer normalt sett bör göra.

Varför är det så här då?

Det behövs expertis inom olika kompetenser

För att man ska kunna vara så effektiv och produktiv som möjligt i projekt så krävs det att rätt kompetens jobbar med rätt uppgifter. Detta innebär att den som är expert inom ett område jobbar med just det området - och inget annat. För att åstadkomma detta behövs självfallet projektmedlemmar med rätt expertis, och i webbprojekt innebär detta att så olika kompetenser som grafisk design, gränssnittsutveckling och systemutveckling bör utföras av åtminstone en person per kompetens.

Om man inte har kompetensen i huset så finns det bra expertis att få tag på utifrån till en godtagbar penning. Man behöver inte alltid anlita dyra konsulter för att utföra jobb, även om en duktig konsult innebär att jobbet blir väldigt väl genomfört.

Skilj på designers och utvecklare!

Vad gäller kompetenserna grafisk designer, gränssnittsutvecklare och systemutvecklare så går de hand i hand - vilket troligtvis är anledningen till att ett missförstånd gällande dessa kompetenser finns. Det råder en generell tro att kan en person ebbdesign så kan den också webbutveckling. Fel! Webbdesign jobbar en grafisk designer med. Webbutveckling är det en programmerare jobbar med.

Just uttrycket programmerare är ett i många fall vedertaget (och ofta felaktigt) uttryck för någon som utvecklar webbplatser - det vill säga både gränssnittsutvecklare och systemutvecklare. Det är viktigt att skilja på dessa olika kompetenser och få en förståelse för dem, för att kunna leverera mer framgångsrikt i webbprojekt.

Det finns givetvis undantag - en designer kan vara en god gränssnittsutvecklare eller tvärtom. Däremot är en designer eller gränssnittsutvecklare sällan en bra systemutvecklare.

Huvudregeln när ett projektteam ska sättas ihop, bör vara att olika personer behövs för dessa olika kompetenser - alltså grafisk design, gränssnittsutveckling och systemutveckling.

Slutresultatet blir bättre

Genom att skilja på olika kompetenser och ha expertis inom de olika kompetenserna som krävs i ett webbprojekt är det större sannolikhet att projektet blir framgångsrikt. Det kan till en början vara knepigt med intern kommunikation mellan de olika kompetenserna, men det handlar om att utbilda varandra så att de olika projektmedlemmarna får förståelse för vad övriga personer i projektet gör - och hur alla kan interagera med varandra.

Slutresultatet kommer att innebära en vinst i produktivitet, med högre kvalité på projektet och en kund som är nöjd.

Internet Explorer 8 ute

Microsoft har nu släppt sin senaste webbläsare, Internet Explorer 8.

IE 8 bjuder på en hel del nya nyttiga funktioner, bland annat är webbläsaren snabbare, har bättre säkerhet och större integritetstänk med privat surfande.

ASP.NET, XML och teckenkodning

Jag gjorde en djupdykning i ASP.NETs XML-hantering när jag skulle skrev inlägget om hur du skapar ett RSS-flöde i ASP.NET. Jag stötte på problem gällande framför allt teckenkodningen i XML-dokument och tänkte nu dela med mig av mina erfarenheter.

XmlTextWriter ger dig UTF-16

Använder du dig av XmlTextWriter tillsammans med StringWriter, så kommer XML-dokumentet du skapar att få teckenkodningen UTF-16, i stället för UTF-8 som oftast är önskvärt.

Detta beror på att en sträng i .NET alltid är UTF-16.

XML-deklarationen för ett XML-dokument som har teckenkodningen UTF-16 ser ut så här:

<?xml version="1.0" encoding="utf-16"?>

Det finns flera problem med UTF-16. Till att börja med renderas XML-dokument med UTF-16 ironiskt nog inte alls i Internet Explorer 7, utan ger i stället Feed code error. Detta är bra att ha i minnet, för att spara tid vid framtida felsökning.

Tittar man sedan närmre på StringWriter inser man att den ärver från TextWriter, som XmlTextWriter accepterar som indata. TextWriter har egenskapen Encoding för att hantera teckenkodning – men denna egenskap är read-only, vilket gör att man inte kan sätta en teckenkodning.

Detta lämnar två alternativ för att få teckenkodningen UTF-8:

  • Använd MemoryStream
  • Skapa en klass som ärver från StringWriter och tillåter att Encoding-egenskapen sätts

MemoryStream och StreamWriter

Med MemoryStream och StreamWriter kan du skicka ut XML-data med UTF-8. Det finns två metoder som fungerar bra för detta, och en metod som inte fungerar lika bra.

Alla tre metoder går ut på att man instansierar en MemoryStream och en StreamWriter och sedan använder sig av StreamWritern tillsammans med XmlTextReader:

MemoryStream ms = new MemoryStream();
StreamWriter objWriter = new StreamWriter(ms);

XmlWriter objXml = XmlWriter.Create(objWriter, settings);

Skillnaden är sedan metoden för att skriva ut själva XML-dokumentet. Här är följande tre metoder som alla skriver ut innehållet i MemoryStream-strömmen:

  1. ToBuffer

    Encoding.UTF8.GetString(ms.ToBuffer())

  2. ToArray

    Encoding.UTF8.GetString(ms.ToArray())

  3. StreamReader

    StreamReader objReader = new StreamReader(ms);
    ms.Seek(0, SeekOrigin.Begin);
    string rssFeed = objReader.ReadToEnd();

ToBuffer()-metoden kan till en början verka fungera, men rekommenderas inte. Den skapar tomt utrymme i XML-datat och gör så att XML-dokumentet inte validerar – och i Internet Explorer 7 inte ens visas!

För att XML-datat ska visas bör du använda ToArray() i stället, eller i vissa fall när du närmre vill specifiera vad som ska visas från XML:en – använda dig av en StreamReader.

Modiferad StringWriter-klass med Encoding

En snitsig lösning på problemet med att kunna sätta teckenkodning för en StringWriter är att helt enkelt skapa en egen klass som ärver från StringWriter och tillåter att en specifik teckenkodning sätts. Så här ser den klassen ut:

public sealed class StringWriterWithEncoding : StringWriter
{
private readonly Encoding encoding;

public StringWriterWithEncoding(Encoding encoding)
{
this.encoding = encoding;
}

public override Encoding Encoding
{
get { return encoding; }
}
}

Glöm inte att lägga till using-direktiv för System.IO och System.Text. Du använder sedan StringWriterWithEncoding-objektet så här:

StringWriterWithEncoding objWriter = new StringWriterWithEncoding(Encoding.UTF8);

Mer läsning

Det finns en hel del intressant läsning om ASP.NET, XML och teckenkodning. Nedanstående rekommenderas för närmre läsning:

Skapa ett RSS-flöde i ASP.NET

Att skapa ett RSS-flöde i ASP.NET är inga problem. Däremot finns det en mängd olika tillvägagångssätt och det är inte alltid lätt att veta hur man ska skapa sitt flöde. Jag visar dig hur du skapar ett lättviktigt RSS-flöde genom att använda en ashx-handler i ASP.NET.

Kort om ashx-handlers

När man använder sig av en aspx-sida för att visa innehåll så sker ett antal anrop, bland annat till Web.Config och IIS:en. När det är HTML som ska visas på en webbsida så är det naturligt att använda sig av en vanlig aspx-sida, men aspx-sidor behövs inte för att visa exempelvis XML - och det är här den mer lättviktiga ashx-handlern kommer in. En ashx-handler skapar helt enkelt inte lika många anrop som en aspx-sida och är därför bättre att använda sig av för att visa exempelvis simpel XML-data.

Skapa en ashx-handler för RSS-flödet

I Visual Studio, högerklicka på ditt projekt, välj Add new item, gå till Web och välj Generic Handler. Döp filen till Rss.ashx. Se bild.

Två metoder skapas, ProcessRequest och IsReusable. Det är i ProcessRequest som koden sedan körs för en ashx handler, motsvarande Page_Load för vanliga aspx-sidor.

RSS-specifikation och exempel

För att vårt RSS-flöde ska tolkas korrekt av webbläsare och andra klientet som läser av RSS-flödet så behöver flödet vara ett XML-dokument med ett antal element som krävs av RSS-formatet. För att få grundläggande teori kring RSS-formatet föreslår jag att du läser RSS-specifikationen och kikar på hur själva XML-dokumentet ska se ut.

Använd XmlWriter i ASP.NET för att bygga RSS-flödet

För att bygga vårt RSS-flöde kommer vi att använda oss av XmlWriter-objektet i ASP.NET. XmlWriter är riktigt smidigt att jobba med och har allt vi behöver.

För att vara säkra på det verkligen är XML som skrivs ut i vår ashx-handler och att det är rätt format så behöver vi först lägga till två rader i ProcessRequest-metoden:

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "text/xml";

Vi rensar Response-bufferten och talar om att utdatat ska vara i XML-format. Sedan kombinerar jag MemoryStream och StreamWriter för att börja skriva ut RSS-flödet med hjälp av XmlWriter-objektet. Så här:

MemoryStream ms = new MemoryStream();
StreamWriter objWriter = new StreamWriter(ms);

XmlWriter objXml = XmlWriter.Create(objWriter, settings);

objXml.WriteStartDocument();
objXml.WriteStartElement("rss");
objXml.WriteAttributeString("version", "2.0");
objXml.WriteStartElement("channel");
objXml.WriteElementString("title", _siteTitle);
objXml.WriteElementString("link", _siteUrl);
objXml.WriteElementString("description", "RSS för tio senaste inläggen på " + _siteTitle);
objXml.WriteElementString("copyright", "&copy; Martin Söderlund");
objXml.WriteElementString("ttl", "15");

Ovanstående kod skapar själva huvudet för RSS-flödet, med XML- och RSS-deklaration, samt grundläggande information om vad RSS-flödet innehåller. Det mesta är ganska så självbeskrivande. ttl talar om hur ofta det ska vara tillåtet för RSS-läsare att läsa av ditt RSS-flöde. I ovanstående exempel är detta satt till 15 minuter.

Det som dock utgör huvuddelen av RSS-flödet måste kopplas samman med en datakälla, såsom en XML-fil eller oftare en databas som innehåller det vi vill skriva ut i RSS-flödet.

Hämta information från databas och skriv till RSS-flödet

För att hämta data från databasen använder jag mig av SqlDataReader, loopar igenom resultatet jag får från min SQL-fråga och skriver XML till RSS-flödet med hjälp av XmlWriter. Notera att jag använder mig av WriteCData-metoden när jag skriver ut själva inlägget. Detta är för att HTML ska visas korrekt i RSS-flödet och slutligen i olika RSS-läsare.

Kod för att hämta tio inlägg från en databas och lägga till i RSS-flödet:

string strSQL = "SELECT TOP 10 id,heading,intro,entry,url,dt FROM tblEntries ORDER BY id DESC";
SqlConnection objConn = new SqlConnection(ConfigurationManager.ConnectionStrings["dbEntries"].ConnectionString);
SqlCommand objCmd = new SqlCommand(strSQL, objConn);

try
{
objConn.Open();
SqlDataReader sdr = objCmd.ExecuteReader();

while (sdr.Read())
{
objXml.WriteStartElement("item");
objXml.WriteStartElement("title");
objXml.WriteCData(sdr.GetValue(1).ToString());
objXml.WriteEndElement();
objXml.WriteElementString("link", _siteUrl + "entry.aspx?id=" + sdr["id"].ToString());
objXml.WriteStartElement("description");
objXml.WriteCData(sdr["intro"].ToString() + sdr["entry"].ToString());
objXml.WriteEndElement();
objXml.WriteElementString("guid", _siteUrl + "entry.aspx?id=" + sdr["id"].ToString());
objXml.WriteElementString("pubDate", Convert.ToDateTime(sdr["dt"]).ToString("R"));
objXml.WriteEndElement();
}
}

catch { }
finally
{
objConn.Close();
}

Cacha RSS-flödet

Det är en god idé att cacha RSS-flödet för att öka prestanda. Som du såg tidigare kan man ange hur ofta en RSS-läsare ska läsa av ditt flöde, men detta är ingen garanti för god prestanda. I stället bör man använda sig av ASP.NETs inbyggda cachning.

RSS-flödet cachar du enkelt med följande kodsnutt, där rssFeed innehållet det vi ska cacha:

HttpContext.Current.Cache.Insert(_feedCacheName, rssFeed, null, DateTime.Now.AddHours(8), TimeSpan.Zero);

Vi skapar ett cacheobjekt som heter RssFeedCache och talar om att cachen ska gälla i åtta timmar. Sedan kan du använda följande kod när du vill läsa från cachen:

Object objFeed = context.Cache.Get(_feedCacheName);

if (objFeed == null) CreateFeedCache();

HttpContext.Current.Response.Write(context.Cache.Get(_feedCacheName).ToString());

Det kan också vara en god idé att använda sig av Remove-metoden för att radera cacheobjektet. Remove är användbart när nytt innehåll lagts till som du vill ska hamna i RSS-flödet. Du når metoden genom Cache.Remove("RssFeedCache").

Komplett kodlistning och nedladdning

Komplett kodlistning för ashx-handlern, med vissa modifikationer för smartare implementation, kan du titta på hos pastebin och ladda ner:

Excitera Enterprise Forum

ExciteraJag var ikväll på Excitera Enterprise Forum, ett nätverk för framför allt studenter och yngre som brinner för entreprenörsskap och företagande.

Gänget bakom Excitera anordnar träffar där de bjuder in till presentationer och öppna diskussioner, i syfte att inspirera och väcka intresse hos blivande entreprenörer.

Kvällens gäster var Elby Kwok Drewsen (Lotus Travel), Ola Ahlvarsson (Result och Nöjesguiden) och Pontus Lindwall (vd på Betsson), som alla höll en varsin presentation, inspirerade och talade om vikten av att jobba hårt och tro på det man gör - och samtidigt ha kul.

Jag måste dessutom säga att det var ett riktigt bra ordnat event ikväll, på Näringslivets hus mitt i stan. Elby, Ola och Pontus är alla drivna entreprenörer som brinner för sin sak och det var lätt att få igång entreprenörsstämningen.

Efteråt var det mingel. Bland annat advokatbyrån Vinge var med och sponsrade eventet, med hela fyra unga advokater i sin monter, och det var mycket givande att prata med dem. Betsson hade ett spelbord och när man gick hem fick man bland annat en goodiebag och tidningen Entreprenör.

Excitera Enterprise Forum är ett givet event för framtiden och jag väntar med spänning på nästa tillfälle.

Använd EasyIIS för att administrera dina webbplatser

EasyIISOm du använder Windows XP så har du vid säkert fler än ett tillfälle svurit över att IIS 5.1 i grundutförandet inte tillåter dig att ha flera webbplatser vid sidan om varandra. Du måste alltid köra en standardwebbplats i IIS:en och byta ut hemkatalogen för den varje gång du ska utveckla en ny webbplats. Knepigt värra att administrera. Det är här EasyIIS kommer in!

EasyIIS låter dig ha flera webbplatser bredvid varann

EasyIIS är det lilla, smarta verktyget som låter dig installera flera webbplatser och ha dem vid sidan om varandra i IIS:en. Du kan starta och stoppa webbplatser som du vill, och skapa nya. I IIS:en dyker dessa sedan upp automatiskt för mer avancerad konfiguration.

Själv har jag en genväg till EasyIIS nere i snabbstartfältet, för lätt åtkomst.

Ladda ner EasyIIS

EasyIIS är givetvis gratis och laddas ner på Code Project.

Så skriver du ut HTML i Flash med WriteRaw-metoden

Man vill ofta att Flash-filmer ska vara flexibla och hämta data från en dynamisk XML-fil. När man jobbar med Flash och XML kan man dock stöta på problem vad gäller HTML-formatterad text som ska hämtas från en XML-fil.

Jag har tidigare skrivit om hur du skriver ut HTML-kod som ligger i XML-block. Det man gör är att använda sig av CDATA och bädda in HTML-kod i CDATA-blocket. Det fungerar dock inte alltid.

I mitt fall byggde jag en ashx-handler som returnerade XML-data. En del av XML-datan skulle vara HTML-formaterad text som skulle visas i Flash-filmen. Jag använde mig av XmlWriter och WriteCData-metoden i ASP.NET för detta ändamål - precis som man ska - men HTML-formateringen i Flash-filmen uteblev och i stället renderades alla taggar tillsammans med texten.

Efter en stunds testning kom jag fram till att man kan använda sig av WriteRaw-metoden i stället. Exempel:

_xmlWriter.WriteStartElement("slide");
_xmlWriter.WriteStartElement("message");
_xmlWriter.WriteRaw("<p>Test:</p><ul><li>First item</li></li>Second item</li></ul>");
_xmlWriter.WriteEndElement();
_xmlWriter.WriteEndElement();

Notera att det är viktigt att XML-datat är korrekt formatterat och validerar när du använder dig av WriteRaw-metoden. Annars är risken för problem överhängande.

Automatisk inloggning på en EPiServer-webbplats

Det finns vissa fall när du vill att inloggningen till en EPiServer-webbplats ska ske automatiskt, exempelvis när det handlar om ett intranät. Det som då behövs är att göra inställningar i IIS och i Web.Config för webbplatsen.

IIS-inställningar

I IIS, gå in i egenskaperna för din webbplats. Välj Directory Security -> Edit (under Anonymous access and authentication control) och se till följande:

  • Anonymous access ska ej vara ikryssat
  • Digest authentication och Basic authentication ska inte heller vara ikryssat
  • Integrated Windows authentication ska vara ikryssat

Bild på inställningar för Authentication Methods i IIS

Web.Config-inställningar

I Web.Config för EPiServer-webbplatsen behövs följande:

  • WindowsRoleProvider ska användas för rollhantering
  • Windows-autentisering ska vara aktiverat

Använd WindowsRoleProvider

Under <system.web> finns elementet roleManager där du kan ange ett antal inställningar för vilken rollhantering som ska användas på webbplatsen. WindowsRoleProvider ska vara standardhanteraren. Så här ska sektionen i Web.Config se ut:

<system.web>
<roleManager enabled="true" defaultProvider="WindowsRoleProvider" cacheRolesInCookie="true">
<providers>
<clear />
<add name="WindowsRoleProvider" applicationName="EPiWebsite" type="EPiServer.Security.WindowsRoleProvider, EPiServer" />
</providers>
</roleManager>
</system.web>

Det är även en god idé att elementet membership (ligger nedanför roleManager i Web.Config) använder sig av WindowsMemberShipProvider.

Windows-autentisering

Det sista steget för att slippa inloggningsrutan till en EPiServer-webbplats är att använda sig av Windows-autentisering i stället för Forms. Det gör du genom att använda dig av elementet authentication:

<authentication mode="Windows" />

Börja komprimera med 7-Zip i stället för zip

Jag har länge varit en förespråkare av WinRAR och RAR-formatet för att komprimera filer. WinRAR har vunnit flera utmärkelser genom åren och RAR-komprimerade filer tar dessutom mindre plats än zip-komprimerade filer. Nu har det dock blivit dags att överväga ett nytt skifte - nämligen att gå över till 7-Zip som är gratis och komprimerar bäst.

7-Zip7-Zip idag ger minst filer och är snabbast

För några år sedan komprimerade 7-Zip bäst men var även långsammast. Det var helt enkelt inte värt att använda 7-Zip för att spara på extra hårddiskutrymme - det tog oacceptabelt mycket längre tid att få till de mindre arkiven. Utvecklarna bakom 7-Zip har dock jobbat hårt med detta och nu är 7-Zip både effektivast och snabbast vad gäller komprimering.

Jag gjorde en snabb jämförelse mellan 7-Zip och WinRAR och 7-Zip skapar mindre arkiv för både mp3-filer och Office-dokument. Dessutom komprimerar 7-Zip betydligt snabbare än WinRAR.

Ladda ner 7-Zip

7-Zip är gratis och kan laddas ner på 7-zip.org.

När du laddat ner och installerat programmet så lägger det sig som ett alternativ i högerklicksmenyn, utan att ta upp för mycket plats (som WinRAR enligt mig gör) vilket gör det hela grymt smidigt.

Till sidhuvudet

Clicky Web Analytics