Atlas version 1.0

Microsoft meddelar att ramverket Atlas version 1.0 kommer att släppas innan nästa version av Visual Studio och planeras finnas tillgänglig innan årets slut.

Ramverket kommer då byta namn. Klientkoden kommer att kallas "Microsoft AJAX Library" och serverkoden "ASP.NET 2.0 AJAX Extensions".

Atlas Control Toolkit kommer också att byta namn och det kommer kallas "ASP.NET AJAX Control Toolkit".

By Jesper Lind

Tävlingar i SEO

Säga vad man vill om tävlingar i SEO. Det kan vara ganska roligt att följa vissa av dem och eventuellt kan man lära sig en del om sökmotoroptimering. Dessa tävligar handlar alltså om att komma överst i Googles sökresultat på en viss fras. Denna fras betyder oftast ingenting i sig själv för att inte förvirra för riktiga sökningar. Jag kommer här att samla lite info om tävlingar.

Precharge Projectnet
Denna tävling är på gång just nu och frasen "Precharge Projectnet" har på drygt en månad gått upp till 67,100 sökresultat på Google. Första pris är 1000 US-dollar. Man kan läsa om Precharge Projectnet tävligens regler här.

Astromusicologie 101
Endast för studenter. Avgjord nu första september. Anordnad av Bargaintix.com. Läs om mer om tävlingen "Astromusicologie 101" på en av deltagarnas sida.

Nigritude Ultramarine
Denna tävling hölls av Darkblue.com. Över en halv miljon sidor skapades under tävlingens första 30 dagar.

V7ndotcom Elursrebmem
Den största tävlingen någonsin som hölls av v7n Networks. V7ndotcom står för domännamnet V7N.com och Elursrebmem är "members rule" baklänges. Svensken Jim Westergren, som kom tvåa i tävlingen.

By Jesper Lind

Mysko fel med referens till User Control

Ibland så slutar mina applikationer helt plötsligt att hitta referensen till vissa User Controls. Vet inte exakt varför men läs om hur man kan råda bot på det. En bugg i IIS? Eller jag som bytt namn på filerna på felaktigt sätt? Nu senast hände det på produktionsservern medans koden fungerade utan problem på min lokala maskin.

Jag registrerat följande klassnamn i min User Control

<%@ Control ClassName="MyControl" %>

Så här ser delen av koden ut som felet uppstår i.

public partial class Product : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
//Instanser av klasser
protected MyControl myControl;//<---Här blir det fel
. . .

Felet i debugg texten.

Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0246: The type or namespace name 'MyControl' could not be found (are you missing a using directive or an assembly reference?)

Lösningen
Ja detta är verkligen ett mysko fel som tycks ha uppstått slumpmässigt för mig typ tre gånger. Hittills har jag löst det genom att undersöka "Show Detailed Compiler Output:" i debuggtexten och hittat sökvägen till de temporära Asp.Net filerna. Sen har jag raderat alla filer i den mappen för applikationen och sen försvinner felet. Mappen låg på typ denna sökvägen på servern.

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\re432432\h3423423

Frågan är bara - hur gör man om man själv inte har tillgång till servern? Om man ligger på ett vanligt webbhotell? Då blir det till att fråga supporten om hjälp antar jag.

By Jesper Lind

Wizards med Asp.Net

Att göra sidor som ska utföra vissa bestämda steg kan vara krångligt. Man får då själv hålla reda på vilket steg man är genom sessions-variabel eller viewstate, och programmera när paneler ska visas/gömmas själv. I Asp.Net har vi den nya Wizard-kontrollen som tar hand om allt detta för dig genom ett trevligt interface.

Tyvärr är inte rendereringen den bästa och det blandas hej vilt mellan inline CSS (<td style="height:100%;">, etc) och attribut på taggarna (td align="right", cellspacing, cellpadding, etc). Inte det lättaste att få den att se ut som man vill med andra ord. Läser ibland om andra som klagar på detta. För er som är trötta på hur kontrollerna i Asp.Net för det mesta ritas upp med tabell-layout kan jag rekommendera de Css-vänliga versioner av .NET kontrollerna. Tyvärr har de ingen adapter för Wizards ännu.

Men förutom rendereringen så är det en utmärkt kontroll läs mer på Beansoftware.com som tillhandahåller en bra guide om hur man använder den.

By Jesper Lind

Lägg till valideringsuttryck dynamiskt

Så här kan man göra för att lägga till en textbox med en valideringskontroll på en PlaceHolder. Man får max skriva in 255 stycken giltiga tecken och då räknas även mellanrum. Det regulara uttrycket (heter det så på svenska?) hittade jag här i ett forum.


//Skapa en textbox för att skriva in namn på kategorien på det speciella språket
TextBox tb = new TextBox();
tb.ID = "textbox";
tb.CssClass = "standardTextbox";

placeHolder.Controls.Add(tb);

//Lägg till validering
RegularExpressionValidator rev = new RegularExpressionValidator();
rev.ControlToValidate = "tb";
rev.ValidationExpression = @"[\w\s]{0,255}";

rev.Display = ValidatorDisplay.Dynamic;
rev.Text = " * Max antal tecken är 255!";
placeHolder.Controls.Add(rev);

Vill man släppa lite på teckenkontrollen och tex tillåta () "" så kan man byta ut mot följande uttryck.

[\S\s]{0,255}

By Jesper Lind

Felsök: Kalender visar inte valt datum

Detta hör till en av de saker som man kan få problem med vid uppdatering från ramverk 1.1 till 2.0. Symptomet är att markeringen inte syns för vilken dag som är vald. För att få detta att fungera i 2.0 måste man ändra koden enligt följande.

Detta brukade gå bra i 1.1

calendar.SelectedDate = DateTime.Now;

I ramverket 2.0 måste nyckelordet "Today" användas

calendar.SelectedDate = DateTime.Today;

By Jesper Lind

Sätt upp ett RSS-flöde

RSS står för Really Simple Syndication och är en XML-dialekt som följer XML 1.0-specifikationen. RSS är av de nya beståndsdelarna i den "nya webben" och har blivit väldigt populärt på senare tid. Användare kan med egna RSS-läsare, prenumenera på innehåll från en webbplats. Fördelen är enorm genom att man kan från en samlad plats se exakt vilka av ens favoritsajter som har skrivit något nytt. RSS skapar även möjligheten för olika nyhetssajter att publicera innehåll från en annan webbsida.

Jag använde artikeln "Skapa en RSS-feed för din webbplats" som inspiration. Jag skrev om den för att passa till ASP.NET C# samt att jag i mitt kodexempel skriver en fysisk xml fil direkt på hårddisken. I exemplet på Dileno.com läggs xml-filen i cache. Min funktion som skapar ett RSS-flöde av posterna i min blogg och ser ut ungefär så här.

//Funktion som skapar RSS flöde
protected void GenerateRss()
{
try
{

//Fysisk sökväg på servern (Byt ut mot den på din server)
string strXMLPath = "C:/ . . . /rss.xml";

FileStream objFileStream = new FileStream(strXMLPath,FileMode.Create);
XmlTextWriter xtw = new XmlTextWriter(objFileStream,System.Text.Encoding.GetEncoding("iso-8859-1"));
xtw.Formatting = Formatting.Indented;
xtw.WriteStartDocument();

//skriv ut <rss version="2.0">
xtw.WriteStartElement("rss");
xtw.WriteAttributeString("version","2.0");

//skriv ut <channel>
xtw.WriteStartElement("channel");

//skriv ut element som tillhör <channel>
xtw.WriteElementString("title","Codeodyssey.se");
xtw.WriteElementString("link","http://www.codeodyssey.se/");
xtw.WriteElementString("description","Code Odyssey - expanderar webben");
xtw.WriteElementString("language","sv-SE");
xtw.WriteElementString("copyright","Copyright (c) 2004-2006 Code Odyssey");

OleDbConnection conn = new OleDbConnection (strConn);
bool boolPermission = false;
OleDbDataReader objDataReader=null;
try
{
string strSQL = "SELECT Blog.Id, Blog.Title, Blog.Body, Blog.PublishDate FROM Blog ORDER BY Blog.PublishDate DESC";

conn.Open();

OleDbCommand objCommand = new OleDbCommand(strSQL, conn);
objDataReader = objCommand.ExecuteReader();
while (objDataReader.Read() == true)
{
int Id = Convert.ToInt32(objDataReader["Id"]);
string Title = Convert.ToString(objDataReader["Title"]);
string Body= Convert.ToString(objDataReader["Body"]);
//Se till att datum följer RFC-822 standard
string PublishDate = Convert.ToString( ((DateTime)objDataReader["PublishDate"]).ToString("r"));


//skriv ut <item> och dess innehåll
xtw.WriteStartElement("item");
xtw.WriteElementString("title",Title);
xtw.WriteElementString("link","http://www." + strUrl.ToLower() + "/Blog.aspx?id=" + Id);
xtw.WriteElementString("guid","http://www." + strUrl.ToLower() + "/Blog.aspx?id=" + Id);
xtw.WriteElementString("description",Body);
xtw.WriteElementString("pubDate",PublishDate);
xtw.WriteEndElement();
}
objCommand.Dispose();
}
catch (Exception objException)
{
Trace.Warn("GenerateRss() Fel!",objException.Message);
}
finally
{
if(objDataReader!=null)
{
objDataReader.Close();  
}
conn.Close();
}

//skriv ut </channel>
xtw.WriteEndElement();

//skriv ut </rss>
xtw.WriteEndElement();

//Stäng xml skrivaren
xtw.Close();
}
catch (Exception objException)
{
Trace.Warn("GenerateRss() Fel!",objException.Message);
}
}

Visa RSS för läsaren
Sen är det dags att lägga till en länk så att Firefox (och antagligen IE7) ska kunna se att din webbplats innehåller ett RSS-flöde och visa detta med den lilla RSS ikonen.

Denna tagg ser ut så här:

<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="xml/rss.xml" />

Vill man lägga till en länk till RSS från koden kan man göra så här:

//Lägg till RSS länk
HtmlLink link = new HtmlLink();
link.Attributes.Add("type", "application/rss+xml");
link.Attributes.Add("rel", "alternate");
link.Attributes.Add("href", "feed/rss.xml");
this.Page.Header.Controls.Add(link);

Bilder i RSS?
Först tänkte jag visa de bilder i mitt RSS-flöde men efter ha läst "RSS - bra eller dåligt?" så ångrade jag mig. Speciellt om man ska prenumenera på RSS genom en mobiltelefon så vill man ju inte ladda med en massa bilder i onödan.

Validera bloggen
Till sist är det dags att prova så att allt fungerar som det ska. Mozilla Thunderbirds inbyggda RSS läsare fungerar utmärkt till detta. Eller aktiva bokmärken i Firefox. Man bör även validera CSS-flödet, en valideringstjänst finns på Feedvalidator.org.

By Jesper Lind

Marknadsför dig på bloggportalerna

Ingen har väl missat bloggens intågande på webben. Nu poppar det även upp mängder av portaler där man kan marknasföra sin blogg. Vi testar några av dem.

Bloggtoppen.se
Först ut är Bloggtoppen.se. Registrering är lätt och man får sedan instruktioner om hur man ska gå vidare. Man får man klistra in lite kod i ens blogg för att statistik ska kunna registreras på deras hemsida. En bildlänk hamnar på ens blogg som ser ut som nedan. Sedan är det bara att vänta på att redaktionen på Bloggtoppen ska godkänna din blogg. Det kan ta några dar men de meddelar att de siktar på att godkänna bloggar inom 48 timmar.

Knuff.se
Härnäst tänkte jag prova på Knuff.se och har läst igenom hur man ska göra. Man måste ha ett RSS flöde i anknytning till sin blogg samt pinga Nyligen.se för att det ska indexeras.

Bloggkartan.se
Bloggkartan.se är en geografisk bloggportal som visar bloggar i Sverige kategoriserat efter områden. För att få med din blogg här ska man lägga in den på Nyligen.se och se till att den kommit upp i Knuff.se. Sedan ska man även länka från sin blogg till rätt område på bloggkartan. Jag har placerat min blogg i Göteborg och Majorna på bloggkartan.se. Du kan även se Bloggkartan.se som KML för Google Earth

BlogRanker
En till bloggportal som för tillfället erbjuder bloggar från USA, UK, Sverige och Kina.

By Jesper Lind