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

Prenumerera på RSS

Arkiv för december 2008:

RSS-läsare online - Bloglines eller Google Reader?

I begynnelsen var Bloglines

Jag har ända sedan jag började prenumerera på RSS-feeds använt Bloglines för att läsa RSS-feeds online. Det finns många alternativ, men jag har aldrig fastnat för en annan RSS-läsare. Dessutom älskar jag möjligheten att läsa de nyheter jag prenumererar på online - bara jag har tillgång till Internet så kan jag logga in på mitt Bloglines-konto och läsa., var jag än är. Betydligt smidigare än att exempelvis använda webbläsarens inbyggda RSS-läsare, eller till och med e-postprogrammets RSS-läsare.

Google Reader gör sitt intåg

När så Google lanserade sin Reader för några år sedan fick min Bloglines en konkurrent. Bloglines låg dock länge före i utvecklingen, men i takt med att Google Reader uppdaterades och fick fler och fler nyttiga funktioner var valet inte lika enkelt längre. Jag testade Google Reader i några veckor, men gick tillbaka till Bloglines.

Bloglines Beta!

Bloglines Beta är en fenomenal RSS-läsare. Den är snabb, den är enkel att jobba med och den är tydlig. Det mesta man kan önska sig av en betatjänst finns där. Som gammal Bloglines-användare känner man dessutom igen sig, vilket är en fördel.

Bloglines Beta

När Bloglines lanserade sin fenomenala beta-läsare tyckte jag att jag var hemma. Jag har använt betatjänsten i snart 1,5 år och har i princip hela tiden varit mycket nöjd - tills nyligen.

Bloglines har haft oacceptabel nertid nyligen

Den senaste tiden, speciellt i december, har Bloglines ett flertal gånger varit nere - utan att jag har fått reda på information om det innan. Senast igår kunde jag inte läsa mina feeds under hela eftermiddagen. Detta är för mig totalt oacceptabelt - jag vill kunna läsa mina feeds när som helst, var som helst, hur som helst. Stora krav, men just detta är möjligt med Bloglines och det är därför jag använder Bloglines. När så Bloglines inte fungerar blir man såklart besviken.

Jag har försökt leta reda på orsaker till Bloglines nertid, men det enda jag har funnit är att Bloglines själva i början på december flyttade sitt datacenter - något som var klart den 6:e december. Om de har haft problem med sitt datacenter eller om det är något annat vet jag inte - men det jag känner är att jag inte har fått tillräckligt med information från Bloglines, vilket föranleder till att jag har övervägt att gå över till Google Reader under en period - åtminstone tills Bloglines rett ut sina problem.

Alternativen till Bloglines

För min del är Google Reader tyvärr det enda fullgoda alternativet just nu, Jag har hittat andra RSS-läsare online, såsom Gritwire och NewsAlloy, men har inte hunnit testa dem än - varpå Google Reader blir mitt enda alternativ.

Egentligen gillar jag inte att använda Googles tjänster, på grund av att jag inte gillar deras sätt att hantera integritet. Jag är dock beredd att göra avkall på detta under en period, för att Google Reader är så pass bra. När jag dessutom läser Olas inlägg om Google Reader på OHSOHIGTECH blir jag än mer säker på min sak.

Google Reader

Till dess att Bloglines återigen visar stabilitet i sin RSS-läsare kommer jag att använda Google Reader. Om jag inte hittar ett annat fullgott alternativ, det vill säga.

Så positionerar du legend-elementet i formulär

Att positionera legend-elementet korrekt i ett formulär och få det att se likadant ut i alla webbläsare är omöjligt. Ett sätt att lösa problemet är att lägga in ett nytt element inuti legend-elementet och positionera det nya elementet - exempelvis en <span>:

<fieldset>
<legend><span>Registrera dig</span></legend>
...
</fieldset>

Med hjälp av CSS kan du sedan använda position-egenskapen för att positionera span-elementet:

fieldset { position: relative }

legend span {
position: absolute;
top: -16px;
left: 0
}

Om du inte tycker om den extra markup:en så kan du använda JavaScript för att lägga in det extra span-elementet. Du kan även skippa <legend> helt och hållet och i stället använda dig av en vanlig rubrik, exempelvis <h2>.

Skapa en modifierad knapp i TinyMCE

TinyMCE är en texteditor som är enkel att integrera in i webbapplikationer. Det finns mycket goda möjligheter till att anpassa editorn efter eget tycke. I detta inlägg visar jag dig hur du skapar en knapp för att infoga specifik kod för markerad text i TinyMCE.

Jag ville ha möjligheten att markera text i ett formulärfält, trycka på en knapp i TinyMCE-fältet och förändra den markerade texten. I mitt fall ville jag kunna lägga in den markerade texten i <code>.

Använd avancerat tema och setup-alternativet

TinyMCE är väldokumenterat och jag hittade kod för att skapa en modiferad knapp. Det som behövs för att kunna skapa en egen knapp i TinyMCE är att i tinyMCE.init använda sig av avancerat tema och setup-alternativet, så här:

<script type="text/javascript">
tinyMCE.init({
mode: "textareas",
theme: "advanced",
theme_advanced_buttons1: "codebtn,|,bold,italic,underline,strikethrough,|,bullist,numlist,undo,redo,link,unlink",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
theme_advanced_statusbar_location: "bottom",

setup: function(ed) {
ed.addButton("codebtn", {
title: "Code sample",
image: "js/tiny_mce/themes/advanced/img/code.png",
onclick: function() {
ed.selection.setContent("<code>" + ed.selection.getContent() + "</code>");
}
});
}
});
</script>

Det jag gör i koden ovan är att:

  • skapa en knapp som heter codebtn
  • ge knappen ett antal egenskaper, såsom en titel, en ikon och en onclick-händelse
  • lägga till knappen i fältet theme_advanced_buttons1, så att knappen syns i TinyMCE-fältet

Metoder i TinyMCE och mitt resultat

I onclick-händelsen så fick jag leta i dokumentationen och hittade en sida med alla metoder i TinyMCE. Jag använde mig av metoden getContent för att lägga in markerad text i en <code>-tagg.

Resultatet av min modifierade knapp:

Exempel på en modifierad knapp i TinyMCE

Mer om TinyMCE

Du kan ladda ner och läsa mer om TinyMCE på hemsidan: http://tinymce.moxiecode.com/.

Använd log4net för loggning till filer i .NET

log4net är ett open source-bibliotek för loggning och kan användas för loggning till ett antal olika källor i ASP.NET. I denna artikel visar jag dig hur du loggar till filer.

Ladda ner log4net

För att kunna använda log4net behöver du först ladda ner zip-filen innehållandes dll-filen vi behöver för vårt projekt:

Ladda ner log4net från Apaches hemsida

Lägg till en referens till log4net i ditt projekt

För att kunna använda log4net behöver du lägga till log4net-binären i ditt projekt. I zip-filen du laddade ner bör log4net.dll som du ska lägga till finnas här: \log4net-1.2.10\bin\net\2.0\release.

Kopiera över log4net.dll till din bin-mapp och lägg till referensen:

  • Högerklicka på ditt projekt i Visual Studio, välj Add Reference.
  • Gå till fliken Browse, leta upp log4net.dll och klicka på Ok.

Lägg till log4net-konfiguration i Web.config

I Web.config, lägg till följande i <configSections>:

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

Lägg även till en referens till filen log4net.config som vi ska använda oss av, nedanför <configSections>, så att det ser ut så här:

<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net configSource="log4net.config" />

Skapa filen log4net.config

Lägg till en ny konfigurationsfil i roten för ditt projekt och döp den till log4net.config. log4net.config ska sedan se ut så här:

<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="c:\logs\applogg.txt" />
<appendToFile value="true" />
<maximumFileSize value="1024KB" />
<maxSizeRollBackups value="20" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="ERROR" />
<appender-ref ref="RollingFile" />
</root>
<logger name="TestLogger">
<level value="DEBUG" />
<appender-ref ref="RollingFile" />
</logger>
</log4net>

I log4net pekar vi ut var loggfilen för applikationen ska finnas (c:\logs\applogg.txt). Vi talar även om att en loggfil får vara max 1024 kB och om den överstiger denna filstorlek så skapas en ny loggfil med namnet applogg.log.1 ända upp till 20. I <root> anger vi rotinställningar, men man kan skapa en loggning med annorlunda egenskaper, som TestLogger ovan. Du kan även ange loggningsnivå, de som finns (i prioriterad ordning) är dessa:

  • ALL
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL
  • OFF

Loggning på sidnivå

För att du ska kunna logga på sidnivå behöver du lägga till följande i Application_Start i Global.asax:

log4net.Config.XmlConfigurator.Configure();

I sidan du ska använda loggningen på måste du först importera log4net via using-direktivet och sedan lägga till följande variabel:

ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

Ovanstående variabel går mot rotinställningarna för loggningen. Vill du använda de inställningar du har specifierat själv (exempelvis loggen med namnet TestLogger, se tidigare kod) så anropar du bara loggnamnet så här:

ILog log = log4net.LogManager.GetLogger("TestLogger");

För själva loggningen använder du sedan någon av följande metoder:

log.Debug("...");
log.Error("...");
log.Fatal("...");
log.Info("...");
log.Warn("...");

log4net-manual

Detta är ett exempel på hur du loggar till filer med log4net. Vill du bygga vidare på din loggning finns massa nyttig information i log4net-manualen.

5 gratis verktyg till Visual Studio 2008

Det finns ett flertal bra verktyg som gör utveckingen i Visual Studio till en än mer trevlig bekantskap än den normalt sett är. Här är fem gratis verkyg som gör ditt arbete i Visual Studio 2008 smidigare.

PowerCommands for Visual Studio 2008

Power Commands används framför allt till att utöka grundläggande Visual Studio-funktionalitet. Några av funktionerna:

  • Ta bort och sortera Using-direktiv
  • Redigera projektfilen direkt i Visual Studio
  • Öppna upp senaste filen du stängde
  • Exempel på nya alternativ i högerklicksmenyn för ett projekt:
    Alternativ i högerklicksmenyn om man använder PowerCommands

CodeRush Express

CodeRush är ett verktyg för att öka produktiviteten i Visual Studio och Express är gratisvarianten. Du får bland annat smidigare refaktorering och ett gäng andra bra funktioner.

Det blir smidigare att refaktorera med CodeRush Express

AnkhSVN

För versionshantering i Visual Studio kan man använda open source-baserade AnkhSVN. Bland annat kan du jobba med versionshanteringen av ditt projekt direkt från Visual Studio-fönstret.

Några av alternativen för AnkhSVN.

Läs mer om och ladda ner AnkhSVN

GhostDoc

Att dokumentera kod blir smidigare med hjälp av GhostDoc. Du kan högerklicka på en metod och välja alternativet Document this så får du automatiskt genererade XML-kommentarer som du själv kan ändra i.

Använd GhostDoc för att dokumentera metoder

Ladda ner GhostDoc

Code Style Enforcer

Skriv snyggare och bättre kod med hjälp av Code Style Enforcer. Detta tillägg jämför din kod mot IDesigns kodstandard för C# och talar om för dig hur du ska döpa dina metoder, variabler, med mera.

Code Style Enforcer markerar med rött var du ska ändra i din kod

Du behöver först ladda ner och installera DXCore för att kunna använda Code Style Enforcer.

Så löser du problemet med knappar och padding i Internet Explorer

Internet Explorer (version 6 och 7) renderar felaktigt extra padding på knappar i formulär. Se jämförelsen mellan Internet Explorer (till vänster) och Firefox (till höger):

Exempel på rendering av knappar i Internet Explorer och Firefox

Som du ser renderar Internet Explorer extra utrymme till vänster och höger om texten i knappen.

Problemet löser du med hjälp av overflow och width i CSS, så här:

input {
overflow: visible;
width: auto
}

Få bättre koll på konfigurationen av din webbapplikation genom att använda configSource i Web.Config

All konfiguration för en ASP.NET-applikation lagras i standardläget i Web.Config. När applikationen växer tenderar dock Web.Config att växa och det blir svårare att hålla reda på informationen i config-filen. Då är det en god idé att nyttja configSource-attributet och separera konfigurationsfiler från Web.Config.

Några fördelar med att separera konfigurationsfiler i Web.Config:

  • Du får mer struktur på din konfiguration - du vet var du ska leta om något behöves ändras i en konfigurationsfil.
  • Du slipper ladda upp en ny Web.Config varje gång du har gjort en förändring i konfigurationen.

De flesta Web.Config-filer har ett appSettings-element och ett connectionStrings-element. Det kan se ut så här:

<configuration>
...
<appSettings>
<add key="KeyName" value="Key value" />
</appSettings>
<connectionStrings>
<add name="connString" connectionString="Data Source=sqlserver2008;Initial Catalog=dbExempel;User ID=user;Password=pwd" providerName="System.Data.SqlClient"/>
</connectionStrings>
...
</configuration>

Det man kan göra i stället är att ange configSource-attributet för connectionStrings och appSettings och länka in externa konfigurationsfiler, så här:

<configuration>
...
<appSettings configSource="appSettings.Config" />
<connectionStrings configSource="connectionStrings.Config" />
...
</configuration>

Då måste konfigurationsfilerna som länkas in se ut enligt följande:

appSettings.Config:

<appSettings>
<add key="KeyName" value="Key value" />
</appSettings>

connectionStrings.Config:

<connectionStrings>
<add name="connString" connectionString="Data Source=sqlserver2008;Initial Catalog=dbExemple;User ID=user;Password=pwd" providerName="System.Data.SqlClient"/>
</connectionStrings>

Du kan även använda dig av file-attributet för appSettings.Config. Då tillåts du ha appSettings-nycklar i Web.Config också, fast Web.Config läser in den externa appSettings.Config-filen. Kom dock ihåg att appSettings-nycklarna i Web.Config skriver över dem som finns i appSettings.Config.

Så stänger du av validering av HTML och CSS i Visual Studio

Visual Studio klagar emellanåt på att HTML och CSS i ett projekt inte validerar. Det kan vara nog så irriterande, speciellt om du ska försöka hitta övriga fel (tex kompileringsfel) som kan dyka upp i listan med fel och varningar. Dessutom är det en mycket bättre idé att låta webbläsaren och tillägg som Firebug och IE Developer Toolbar att ta hand om validering av HTML-markup och CSS.

Så här kan det se ut när du möts av valideringsfel i Visual Studio:

Valideringsfel HTML och CSS i Visual Studio

Instruktioner för att stänga av validering

  1. I Visual Studio, gå till Tools, Options och expandera noden Text Editor.
  2. För att stänga av HTML-validering, expandera noden HTML, välj Validation och kryssa ur alternativet Show errors under Options. Tryck Ok.
  3. För att stänga av CSS-validering, expandera noden CSS, välj CSS Specific och kryssa ur alternativet Detect errors under Errors. Tryck Ok.
  4. Klart!

Stäng av sökindexering i Windows Vista

En av de stora nyheterna i Windows Vista var en ny indexeringstjänst som förbättrade sökning i operativsystemet. Windows Vistas sök är trevlig - man kan till exempel starta program genom att söka efter dem direkt från startmenyn - men det finns tillfällen då man inte vill att innehållet på hårddisken ska indexeras.

Varför stänga av indexering?

Det finns flera anledningar till att stänga av indexeringstjänsten i Windows Vista:

  1. Den är prestandakrävande. Vistas indexeringstjänst indexerar innehåll fast du använder datorn, vilket gör datorn långsammare.
  2. Det finns andra indexeringstjänster som är snabbare och mer effektiva, exempelvis Google Desktop.
  3. Du använder inte sökfunktionaliteten i Windows Vista.

Hur du stänger av indexeringen helt och hållet

Det enklaste sättet att stänga av indexeringen helt och hållet är att inaktivera tjänsten Windows Search Service. Det gör du så här:

  1. Gå till Services (använd sök i startmenyn och sök på services).
  2. Leta upp tjänsten som heter Windows Search, högerklicka på den och välj Properties.
  3. Till höger om Startup type, välj Disabled.
  4. Under Service status, tryck på Stop.

Hur du inaktiverar Windows Search-tjänsten

Stäng av indexering för en specifik hårddisk

Om du inte vill stänga av indexeringen helt och hållet, så finns alternativet att stänga av indexering för en specifik hårddisk. Det gör du så här:

  1. Öppna Utforskaren och högerklicka på hårddisken du vill stänga av indexeringen för. Välj Properties.
  2. Bocka ur alternativet Index this drive for faster searching, tryck Apply.
    Inaktivera indexering för en specifik hårddisk
  3. I rutan som dyker upp, Confirm Attribute Changes, välj alternativet Apply changes to drive C:\, subfolders and files och tryck på Ok.

Integrera tredjepartssök i Vista Service Pack 1

I Windows Vista Service Pack 1 är det möjligt att välja en annan applikation för sök än Vistas inbyggda. Exempelvis kan du associera sökprotokollet med en tredjepartsappikation för sök. Läs mer om detta: Overview of Windows Vista desktop search changes in Windows Vista Service Pack 1

Jämför datum och tid i C#

Vill man jämföra datum och tid i C# så behöver man jobba lite mer än i VB.NET där man kan använda sig av DateDiff().

I C# kan man använda sig av TimeSpan för att jämföra datum. Här är en metod i C# som använder TimeSpan för att få ut antalet dagar mellan två datum (metoden är public static för att enkelt kunna anropas via en basklass):

/// <summary>
/// Compare two given dates
/// </summary>
/// <returns>Number of days between days</returns>
public static int DateDiff(DateTime dt1, DateTime dt2)
{
int diff;

TimeSpan ts = dt1 - dt2;
diff = ts.Days;

return diff;
}

Metoden anropas på detta sätt, där jag väljer att räkna ner antalet dagar till nyårsafton:

try
{
litDiff.Text = DateDiff(DateTime.Now, new DateTime(2008, 12, 31)).ToString();
}
catch { }

Tänk på att det alltid är bra att använda sig av felhantering, i exemplet ovan med hjälp av try catch när jag skriver ut värdet till en Literal-kontroll.

I metoden DateDiff så valde jag att jämföra dagar mellan de givna datumen. Det går lika bra att jämföra på Hours, Milliseconds, Minutes och Seconds.

Lägg till din webbplats i Googles sökindex med Google Webmaster Tools

Du kan använda Google Webmaster Tools för att lägga till din webbplats i Googles sökindex. Googles verktyg innehåller även massa annat bra för att hålla koll och uppdatera data hos Google för din webbplats.

När man har startat en ny webbplats så vill man självklart att webbplatsen ska visas i sökresultaten på relevanta sökord hos sökmotorer - framför allt Google. Det kan ta ett tag innan sökspindlarna som sökmotorerna använder sig av hittar just din webbplats. För att snabba upp processen lite så kan du låta Google få kännedom om din webbplats via deras smidiga verktyg Google Webmaster Tools.

Lägg till din webbplats

För att kunna använda sig av Google Webmaster Tools behöver man ha ett Google-konto. När du väl skaffat dig ett konto och loggat in så kan du välja att lägga till en webbplats direkt på startsidan. Fyll i adressen till din webbplats och tryck på Add site:

Hur du lägger till din webbplats på startsidan i Google Webmaster Tools

När du lagt till din webbplats behöver du verifiera att webbplatsen är just din. Detta kan du göra på två sätt:

  1. Genom att lägga till en meta-tagg på din webbplats, så att Google kan läsa av meta-taggens innehåll
  2. Genom att ladda upp en html-fil med ett specifikt filnamn som Google ger dig

De olika verifieringsalternativen i Google Webmaster Tools

När du gjort något av ovanstående kan du verifiera att det är din webbplats du har lagt till. Om verifiering har lyckats kommer det att se ut så här under Overview för din nya webbplats:

Gröna ikoner visar att verifieringen av din webbplats har lyckats.

Ha tålamod - det kan ta tid att få din webbplats indexerad

Trots att du har lagt till din webbplats i Google Webmaster Tools betyder det inte att din webbplats är indexerad än. Det kan ta ett tag innan webbplatsen kommer med i Googles sökindex och ännu längre tid innan webbplatsen syns högt upp i relevanta sökresultat. Detta är det första steget man bör ta för att visa Google att det finns en ny webbplats att indexera.

Uppdatering: Denna blogg hamnade i Googles sökindex mindre än ett dygn efter att jag lagt till bloggen med Google Webmaster Tools.

Många nyttiga funktioner i Google Webmaster Tools

Google Webmaster Tools innehåller väldigt mycket mer än funktionen för att skicka in sin webbplats. Du kan även:

  • få statistik på sökord för din webbplats
  • få reda på när din webbplats senast indexerades
  • välja vad som ska indexeras på din webbplats
  • plus massa mer

Google Webmaster Tools är ett verktyg för att hålla reda på din webbplats och underhålla den vid behov. Att lägga till din webbplats till Googles index är alltså första steget som sedan leder till fler alternativ.

Google Webmaster Tools

Team Foundation Server 2008 Power Tools och problem med Windows Live Messenger

Om du använder Team Foundation Server 2008 i din utvecklingsmiljö så finns det ett verktyg med extra funktioner du kan installera - Power Tools för Team Foundation Server 2008.

Med hjälp av Power Tools för TFS 2008 kan du bland annat:

  • Sköta versionshanteringen via Utforskaren (alternativet Team Foundation Server dyker upp i högerklicksmenyn i Utforskaren)
  • Jobba utan åtkomst till TFS:en
  • Hantera projektmedlemmar via nya noden Team Members

Riktigt trevligt, med andra ord!

När jag installerade Power Tools så fick jag dock upp ett felmeddelande varje gång jag startade en Visual Studio-instans som använde sig av TFS 2008. Felmeddelandet jag fick var:

Creating an instance of the COM component with CLSID {B69003B3-C55E-4B48-836C-BC5946FC3B28} from the IClassFactory failed due to the following error: 8007000e.

Det visade sig att detta problem var relaterat till beroendet av Windows Live Messenger (msnmsgr.exe) som kan användas för att kommunicera i TFS 2008.

Jag löste problemet genom att helt stänga av möjligheten att kommunicera via Windows Live Messenger:

  1. I Team Explorer, högerklicka på Team Members för ett projekt och välj Settings
  2. Tryck på Change-knappen under Collaboration
  3. Välj alternativet <None> i fönstret Choose a Collaboration Provider och tryck Ok

I Windows Vista löser man problemet genom att köra Windows Live Messenger som administratör (högerklicka på msnmsgr.exe, välj fliken Compatibility och kryssa i "Run this program as an Administrator".)

Använder du en betaversion av Windows Live Messenger måste du in i registret och hacka i stället. Läs på Stuart Prestons blogg hur du löser problemet.

Fixa buggen med overflow och vertikal scrollningslist i IE

Använder man overflow: auto på ett HTML-element (exempelvis <pre>) får man alltid en vertikal scrollningslist i Internet Explorer-webbläsare (jag har testat i version 6 och 7)  - oavsett om innehållet får plats inuti HTML-elementet eller inte. Så här kan det se ut:

IE overflow scrollningslist-bugg

Vad man kan göra är att använda overflow: visible samt overflow-x och overflow-y i stället:

pre {
overflow: visible;
overflow-x: auto;
overflow-y: hidden;
padding-bottom: 18px
}

Då slipper man den vertikala scrollningslisten. Observera att man även behöver lägga till en padding-bottom som är lika hög som en scrollningslist , det vill säga 18px. Detta för att innehållet på sista raden inte ska vara dolt.

Använd CultureInfo och TryParse för hantering av decimaler i ASP.NET

Om man ska formatera tal i .NET behöver man tänka på att olika länder har olika decimalavgränsare. Exempelvis används punkt som decimalavgränsare i England, medan vi i Sverige använder kommatecken.

För att visa rätt avgränsare för rätt språk bör man använda sig av klassen CultureInfo i .NET och kombinera den med TryParse-felhantering.

Importera System.Globalization och använd CultureInfo

För att kunna använda sig av CultureInfo måste man importera namespacet System.Globalization. Sedan använder vi oss av CultureInfo och NumberFormatInfo för att visa rätt decimalavgränsare:

// set correct CultureInfo to output correct number format
CultureInfo cultureInfo = CultureInfo.CurrentCulture;
NumberFormatInfo nfi = cultureInfo.NumberFormat;
nfi.CurrencyDecimalSeparator = ".";

double price = 14.90;

if (Double.TryParse(price.ToString(), NumberStyles.Any, nfi, out price) == false) price = 0.00;

litPrice.Text = price.ToString();

CultureInfo.CurrentCulture returnerar exempelvis sv-SE för Sverige och en-GB för England. I .NET finns automatiskt stöd för olika länders talhantering, vilket gör att vi får ut rätt decimalavgränsare för rätt land.

Felhantering med TryParse

En tumregel när man jobbar med tal i .NET är att använda TryParse för att kolla att det verkligen är rätt datatyp som returneras. Du kan använda TryParse för ett flertal datatyper, exempelvis Double och Int32.

I exemplet ovan ger jag slutligen Literalen litPrice ett värde, som ges av price.ToString().

Att skapa en favicon

En favicon är en ikon som representerar en webbplats. Vanligtvis visas ikonen till vänster om adressen i webbläsarens adressfält och kan även visas i menyer och bokmärksfält, för att identifiera en webbplats lättare.

Faviconen för denna blogg är ikonen till vänster om adressen i denna bild:

Favicon-exempel

Att tänka på när man skapar en favicon

  1. Ikonen ska vara 16x16 pixlar stor.
  2. Ikonen ska placeras i roten på din webbplats.
  3. Filändelsen bör vara .ico (moderna webbläsare stödjer även .gif och .png, men för bakåtkompatibilitetens skull så är .ico bäst att använda)

För att faviconen ska synas behöver man sedan lägga till följande i <head>:

<link rel="shortcut icon" type="image/ico" href="/favicon.ico" />

Det finns ett alternativ, där man byter ut "shortcut icon" mot enbart "icon", men jag har upptäckt att "shortcut icon" fungerar i betydligt fler webbläsare.

Tips och ett verktyg

Ibland syns inte faviconen direkt när man laddar om webbsidan i webbläsaren. I så fall måste man rensa webbläsarcachen och starta om webbläsaren.

Ett bra verktyg för att skapa en favicon: http://www.favicon.cc/

Google Chrome i skarp version!

I veckan så släppte Google webbläsaren Google Chrome i en ny version, och passade samtidigt på att ta bort betastämpeln.

Nyheter i nya versionen:

  • Stabilare webbläsare med förbättrad hantering av plug-ins, exempelvis för video.
  • Snabbare rendering av webbsidor.
  • Utökad bokmärksfunktionalitet.

Jag har inte använt Google Chrome speciellt mycket, men det är imponerande att webbläsaren är så otroligt snabb. Enligt mätningar så är deras JavaScript-motor nu upp till 1,5 ggr snabbare än i första betan, och renderingen av webbsidor över huvud taget är bland den snabbaste som finns när man jämför dagens webbläsare.

Jag är inte tillräckligt övertygad än för att ta steget över till Chrome helt och hållet, men om Google fortsätter i den här takten så kommer min Firefox att få en riktig konkurrent.

Ladda ner senaste versionen av Google Chrome

 

Att fokusera ett formulärfält inuti en container som är dold

Att med JavaScript-kod försöka förändra ett objekt i en container (exempelvis en div) som är dold, är inte helt enkelt. Det fungerar bra i Firefox och flera andra webbläsare - men inte i Internet Explorer (version 6 och 7).

Jag använde följande JavaScript-kod för att fokusera ett formulärfält:

if (objTextfield) objTextfield.focus();

I Internet Explorer fick jag detta felmeddelande:

Can’t move focus to the control because it is invisible, not enabled, or of a type that does not accept the focus.

För att komma runt problemet kan man använda sig av felhantering med try catch i JavaScript, så här:

try {
	if (objTextfield) objTextfield.focus();
}
catch (err) { }

HeaderTemplate och FooterTemplate renderas trots att en Repeater är tom

Ett problem jag stötte på i ett projekt här om veckan var att HTML-kod jag skrivit i HeaderTemplate och FooterTemplate för en Repeater-kontroll renderades, fast Repeatern inte innehöll någon data.

Jag gjorde lite efterforskningar och kom fram till följande:

  • Om det finns en datakälla för Repeatern, så renderas innehållet i HeaderTemplate och FooterTemplate, fast datakällan inte har någon data.
  • Om det inte finns en datakälla, det vill säga datakällan returnerar ett nullvärde, så renderas inte Repeatern över huvud taget.

Lösning på problemet: kolla att datakällan existerar och att den har fler än noll poster i sig:

if (myList != null && myList.Count>0)
{
	rptListing.DataSource = myList;
	rptListing.DataBind();
}

Uppdatering: Använder du exempelvis en SqlDataReader så får du kolla om den booleska egenskapen HasRows är sann i stället för att använda Count.

Dags att börja blogga!

Jag kände för ett tag sedan att det var dags att börja blogga om ett av mina största intressen - webben och det som hör därtill. Envis och kunskapstörstande som jag är, valde jag att bygga en bloggmotor själv, i stället för att använda någon som redan fanns. Betydligt mer lärorikt och desto roligare.

Efter ett antal iterationer kom jag fram till den blogg som du nu har framför dig. Här kommer jag bland annat att skriva om webbutveckling med webbstandarder, ASP.NET och annat relaterat till webbutveckling och webbteknik.

Välkommen!

Till sidhuvudet

Clicky Web Analytics