Integrera W3C Validation Service i dina projekt

När man tillhandahåller ett CMS-system åt en kund så är det nästan oundvikligt att kunderna kommer att skriva in ogiltig XHTML. Alla kan helt enkelt inte vara webbstandard-freaks och det är inget man kan kräva av någon.

Då skulle det vara perfekt om man kunde få en varning så fort ogiltig kod har publiserats, så man kan gå in och rätta till den.

Blitz Labs har gjort en sådan lösning och delar med sig av .NET-koden. Funktionen tar emot en url som ska kontrolleras. Skickar ett anrop till W3C Markup Validation Service. Tar emot resultatet genom deras SOAP-tjänst och transformerar det till RSS med hjälp av en XSLT-fil.

Prenumenera sedan på den RSS som skapats och få meddelande så fort någon ogiltig kod har publiserats.

By Jesper Lind

Debugga AJAX med Nikhil's Web Development Helper

Att programmera AJAX är roligt, men när något går fel är det inte lika kul längre. Den vanliga tracern i .NET går ju inte att köra samtidigt. Sökte lite efter tips hur man kunde felsöka lättare och hittade ScottGu's inlägg om Nikhil's Web Development Helper.

Det handlar om ett suveränt tillägg till Internet Explorer som är till stor hjälp när man felsöker Ajax-applikationer. Läs mer om det hos Nikhil och kolla även in dokumentationen (PDF).

By Jesper Lind

Funktion för att avgöra om ett land är med i EU

Här visas en funktion för att se om ett land är med i EU. Inparameter är landets ISO-landskod och den returnerar en boolean. Mer information om EU-länderna finns på Europa.eu.

private bool isMemberOfEU(string CountryCode)
{
if (CountryCode == "AT" || CountryCode == "BE" || CountryCode == "BG" || CountryCode == "BG" || CountryCode == "CY" || CountryCode == "CZ" || CountryCode == "DK" || CountryCode == "EE" || CountryCode == "FI" || CountryCode == "FR" || CountryCode == "DE" || CountryCode == "GR" || CountryCode == "HU" || CountryCode == "IE" || CountryCode == "IT" || CountryCode == "LV" || CountryCode == "LT" || CountryCode == "LU" || CountryCode == "MT" || CountryCode == "NL" || CountryCode == "PL" || CountryCode == "PT" || CountryCode == "RO" || CountryCode == "SK" || CountryCode == "SI" || CountryCode == "ES" || CountryCode == "SE" || CountryCode == "GB")
{
return true;
}
else
{
return false;
}
}

By Jesper Lind

Lista över världens länder med .NET

Eftersom lokaliserings-funktionerna i ASP.NET är baserade på kulturer (MSDN:CultureInfo) kan det vara lite knepigt att generera en lista över alla världens länder.

Om man även vill ha dem i bokstavsordning får man se till att sortera dem själv. Jag la till alla länderna som nycklar i en SortedList, eftersom denna typ av datasamling automatiskt sorteras efter värdet i nycklarna.

Jag visar länderna och deras landskoder i en DropDownList som läggs till på .aspx-sidan.

<asp:DropDownList id="ddlCountry" DataValueField="CountryCode" DataTextField="CountryName" style="width:200px;" runat="server" />

I kodfilens Page_Load-event binder jag denna DropDown till en DataView.

void Page_Load(object Source, EventArgs E)
{
if((!Page.IsPostBack)
{
ddlCountry.DataSource = GetAllCountriesDataView();
ddlCountry.DataBind();
}
}

Funktionen för att skapa datakällan ser ut så här:

protected DataView GetAllCountriesDataView()
{
DataTable objTable = new DataTable("Countries");
objTable.Columns.Add("CountryName", typeof(string));
objTable.Columns.Add("CountryCode", typeof(string));

DataRow objDataRowTitle = objTable.NewRow();
objDataRowTitle["CountryCode"] = 0;
objDataRowTitle["CountryName"] = "Välj land";
objTable.Rows.InsertAt(objDataRowTitle, 0);

//Skapa en SortedList för att spara alla länderna med tillhörande landskoder
SortedList slAddedCountries = new SortedList();

//Skapa en array av CultureInfo från alla kulturer
//Vi använder SpecificCultures men NeutralCultures är ett annat alternativ
CultureInfo[] arrayAllCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);

try
{
foreach (CultureInfo ci in arrayAllCultures)
{

string country = new RegionInfo(ci.LCID).EnglishName;
string countryCode = ci.Name.Substring(3, 2);

if (!slAddedCountries.ContainsKey(country))
{
//Spara landets namn som nyckel och landskoden som värde
slAddedCountries.Add(country, countryCode);
}
}

//Lägg till länder som saknas
//Cypern
slAddedCountries.Add("Cyprus", "CY");

//Loopa igenom SortedList och vi får länderna i bokstavsordning
foreach (DictionaryEntry de in slAddedCountries)
{
Trace.Write("-"+de.Key);
DataRow objDataRow = objTable.NewRow();
objDataRow["CountryCode"] = de.Value;
objDataRow["CountryName"] = de.Key;
objTable.Rows.Add(objDataRow);
}
}
catch (Exception objException)
{
Trace.Warn("BindCultureSelector() Fel!", objException.Message);
}
finally
{

}

return objTable.DefaultView;
}

Här kommer ett del av den html-kod som skapas med de länder som ligger runt Sverige (i bokstavsordning alltså).

<option value="ZA">South Africa</option>
<option value="ES">Spain</option>
<option value="SE">Sweden</option>
<option value="CH">Switzerland</option>
<option value="-S">Syria</option>
<option value="TW">Taiwan</option>
<option value="TH">Thailand</option>
<option value="TT">Trinidad and Tobago</option>

Inte helt självklart alltså. Det går säkert att göra på något bättre sätt men detta är den bästa lösning jag kommit på. Annars kan man ju prova med en fristående databas över länder, t ex från GeoNames.

Uppdatering: Märkte att Cypern inte är med i ramverket av någon anledning. Konstigt eftersom landet blev självständigt 1960. Jag har lagt till en extra rad i koden som lägger till Cypern manuellt.

By Jesper Lind

Gratis ikoner till webbprojekt

http://www.codeodyssey.se/upload/resource/blog/brandspankingnew-mini-icons.png

Backend Media bjuder på en lista med ikonsamlingar från famfamfam, Tangi Icon Gallery och Crystal Clear.

Jag skulle även vilja komplettera med några minimalistiska ikoner från BrandSpankingNew som ni kan se exempel på här ovan. På samma sajt finns även ikoner för DocTypes, samling 1 och 2.

Uppdatering: Webbsnack har också hittat massa snygga ikoner i Apple's Icosystem, David Lanham's samling, IconFactory och även en riktigt användbar sökmotor specialiserad på ikoner.

Smashing Magazine: 20+ Free And Fresh Icon Sets 

By Jesper Lind

Ljudspelare i flash från 1 Pixel Out

Letar efter en bra flashspelare för att spela upp mp3-filer eftersom vi behöver det till ett projekt.

Gillar verkligen 1 Pixel Out - Audio Player som finns som en tilläggsmodul till Wordpress. Den är lätt att installera och fungerar utmärkt. Det enda jag saknar är en volymkontroll.

Vill man lägga till spelaren på en annan plattform som inte använder Wordpress, går det också bra. Mindy McAdams har skrivit bra instruktioner för hur man går till väga.

Orginalfilerna för spelaren finns att ladda hem på Wordpress Plugin-sajten och det är fritt fram att modifiera den enligt GNU-licensen.

Exempel

Här kommer några exempel på hur spelaren ser ut och fungerar. Mixarna är lånade från vår vän DJ JayStarSeven.

Warmup.Karizma:

Puzzle.mix.vol.1:

By Jesper Lind

Blogghosting är en väldigt bra idé

Emellan varven smider vi lite planer på vad vi ska hitta på för kul på Code Odyssey i framtiden. Just nu är det fullt ös att leverera till våra nuvarande kunder. Men en dag planerar vi utveckla en egen spännade tjänst till en större målgrupp.

Vi pratade om det senast idag, vad vore kul att satsa på? Blogghosting är ju väldigt intressant, speciellt eftersom vi i stort sätt redan har en färdigt gränssnitt. Att göra det på större skala kräver ju dock en hel del planering.

Som sagt - blogghosting är en väldigt bra idé...

By Jesper Lind

RobotReplay - spelar in besökarnas interaktivitet från din sajt

Backend Media tipsar om en webbtjänst som heter RobotReplay och erbjuder inspelning av besökarnas musrörelser på dina egna sajter. Grundtjänsten är gratis att använda och kommer förbli det. De meddelar dock i sin FAQ att de kommer släppa en typ av premiumkonto i framtiden som kommer kosta pengar.

Vi har precis lagt in det på denna webbplatsen för att prova på det och det hela fungerar väldigt bra. Efter ha registrerat ett konto och lagt in en rad Javascript så börjar tjänsten att spela in besökarnas musrörelse med en gång. Det tar sedan 10 minuter för sessionerna att dyka upp i gränssnittet på RobotReplay.

Ett perfekt verktyg för att studera hur användarvänlig och lättförstålig din webbplats är.

Obs. Fungerar ej med Snap Preview Anywhere

När jag skulle kolla in den första sessionen så blev det någon bugg på återspelningen. Webbplatsens grafik syntes bara en liten stund och det hela hängde sig när uppspelningen skulle starta. Misstänkte att det hade att göra med en konfikt med något annat skript, och det visade sig stämma. Efter jag stängde av Snap Preview Anywhere fungerade återspelningen av sessionen.

By Jesper Lind