Michells Mesterværk

Mr. Frosts Julekalender – reglerne.

by Administrator 30. November 2009 20:58

Så er vi kommet ind i December måned. Vanen tro skal vi have kickstartet denne måneds julekalender med et par praktiske småting.

Reglerne er de samme som sidste år. Jeg offentliggøre en opgave hver dag som skal løses inden for 24 timer. Koden skal sendes til mig på email: danielmf@microsoft.com.

Emailens emne skal være “Julekalender nr. X (Dagen. f.eks 1 eller 10)”.

Jeg eller en anden kyndig finder frem til vinder(ne).

Udover det skal i sådan set bare følge den pågældende dags regler og naturligvis kunne løse opgaven :)

Der vil være en præmie til alle dem der løber afsted med sejren, og i kan godt glæde…

santa-reading2837462341

Velkommen til Julen med Mr. Frost og pøj pøj.

Tags:

Frosts Podcast Show #9 – SaaS, MVC og EnergyMap med Copenhagen Software

by Administrator 27. November 2009 09:16

Copenhagen Software er en mindre software virksomhed med specialle i SaaS applikationer samt forretning. I denne episode snakker jeg med Rune Ibsen og Stig Irming-Pedersen, som begge er partnere i virksomheden, om hvad SaaS er, hvorfor software er ved at blive en commodity vare som f.eks strøm og vand, og om hvordan de har bygget der seneste store løsning Energymap.

Du kan læse mere om SaaS, CPH software og deres ydelser på deres website.

God fornøjelse

Tags:

Hvordan profiler man sin JavaScript med IE8 ?

by Administrator 27. November 2009 09:02

Denne artikel er skrevet af Peter Davidsen, http://beddet.dk, beddet@beddet.dk, http://twitter.com/beddet.

Det her er anden artikel i en serie omkring funktionaliteten i Internet Explorer 8, mere specifik i Developer Toolbar som man kan komme ind i ved at trykke på F12 som er standard genvejstast.

Efterhånden bliver javascript mere og mere udbredt i takt med at der bliver udviklet mere brugervenlige sider. Ofte bliver sider som indeholder meget klient kode, nemmere og rarere at bruge for de fleste brugere og da man kan mindske antallet af side kald bliver siden hurtigere. Især for brugeren da der ikke skal opdateres hver enkelt menu-item, banner, reklame osv. bare for at udfylde en formular, poste til serveren og så finde ud af at man mangler at udfylde et enkelt felt for derefter at blive sendt tilbage til siden og skulle hente hele siden igen. Brugeren for en bedre oplevelse og serveren bliver ikke belastet så meget da der bliver færre kald til serveren, noget af arbejdet bliver lagt over på klienten.

Ved hjælp af Dev Toolbar har man mulighed, som udvikler, for at profile ens hjemmeside og se hvordan ens javascript opfører sig for at optimere koden for at mindske størrelsen af de renderede sider. Det kan være hvor hurtig og hvor mange gange en side kalder en funktion, hvis en funktion bliver kaldt mange gange og virker til at være lidt langsommere end andre kan det være at den skal flyttes eller skrives om.

Det var så den lidt kedelige og måske langtrukne introduktion, så nu må vi hellere komme videre med det lidt sjovere. Show me the code ! Desværre kommer der faktisk intet kode, men mere om hvordan profiling virker i dev toolbar. For det meste så vil jeg bruge ekstrabladet.dk og newz.dk til at vise mine eksempler med i nogle af artiklerne i denne serie da der er lidt mere kød på de sider.

For at profile skal man bare trykke på Start Profiling , loade ens side og så bare klikke rundt på siden, trykke på diverse knapper, links, holde musen over de forskellige steder osv for at teste ens script kald.

Under Profiler har man 2 muligheder for ens oversigt, enten Call Tree eller Functions.

clip_image002[4]

Man kan se at siden kalder 3 forskellige funktioner, og hvor mange gange hver funktion bliver kaldt og hvor lang tid kaldene tager. Det kan være meget rart at vide hvor mange gange de forskellige funktioner bliver kaldt på en side, fx onclick som er en meget anvendt funktion, som dog ikke siger ret meget om hvad de gør da onclick, mouseover, mouseout, onfocus osv bare kalder andre funktioner. De lidt mere sigende funktioner. doStuff og showStuff er lidt sjovere da de nok gør noget med siden. Men hvordan de bliver kaldt ved vi ikke noget om endnu. Siden i baggrunden er en meget simpel side med et link på som har en onclick og den funktion den kalder skriver så noget tekst ud. Før man klikker på linket er det bare en tom side.

Lad os klikke over på Call Tree fanen som siger lidt mere om hvad der egentligt sker.

clip_image004[4]

Nu har vi lige pludselig fået et tree view, før man gør noget så har man bare en linie hvor der står onclick som bliver kaldt en gang, det er jo også rigtigt, men vi kan klikke ind videre og se om onclick kalder nogle funktioner. Det gør den, kalder showStuff en gang som endda videre kalder en 3. funktion som jeg har kaldt doStuff som der bliver kaldt 3 gange. På denne måde har man et meget bedre overblik over de kald ens side laver og hvordan de hænger sammen. På min simple side er det lidt ligegyldigt, men lige så snart man kommer op og måske kalder onclick 50 gange forskellige steder så bliver det et kaos. Jeg har udvidet min side lidt og trykket på de links der er flere gange.

clip_image006[4]

Den øverste og det nederste link kalder en funktion jeg har lavet hvorimod det miderste blot kalder noget javascript som ikke er lagt i en separat funktion.

Under 2 af mine kald har jeg haft fejl i min kode og jeg får en TypeError smidt i hovedet, jeg kan også se at de kald tager længere tid. På denne måde kan jeg meget let profile mit kode, især hvis jeg har rigtig mange funktioner som bliver kaldt i hinanden på kryds og tværs. Man får også rækkefølgen fra toppen af og nedefter, så det første kald står øverst.

De 3 funktioner jeg har lavet kan ses her og html koden der hører til, altså der hvor jeg kalder mine onclick events.

function showStuff() {

document.getElementById('label').style.display = 'block';

doStuff();

doStuff();

doStuff();

}

function doStuff() {

var string = "";

for(var i = 0; i < 5; i++) { string += "Hello World <br />"; }

document.getElementById('1').innerHTML = string;

}

function color() { document.bgColor = '#bebebe'; }

<a href="#" onClick="showStuff();">Klik på mig :-D</a><br />

<a href="#" onClick="alert('hej');">Klik på mig :-D</a><br />

<a href="#" onClick="color();";>Klik på mig :-D</a><br />

<span id="label" style="display: none;">

En masse 'hemmelig' tekst.

</span>

<br />

<span id="1"> </span>

De 2 spans indeholder tekst, det “hemmelige” tekst bliver synligt når man klikker på linket. Link nummer 2 laver en popup som skriver ”hej”.

showStuff() kalder doStuff() 3 gange, det er der ingen grund til da de overskriver hinanden, det kunne have været noget copy-paste der gik galt da man skrev koden og så aldrig fik det fjernet igen. Men ved at profile siden kan vi se at funktionen bliver kaldt 3 gange og ved at se på koden er det nemt at se at det er forkert og derved kan man optimere ens side lidt. Lige her er det ligegyldigt, men når man får større sider som skal kaldes mange gange i minuttet så begynder det hurtigt at belaste serveren og klienten mere.

Tags:

Extensions – UrlEncode samt Decode.

by Administrator 25. November 2009 09:34

Jeg er som i sikkert har bemærket, ret vild med extension methods. Jeg ved ikke hvorfor de lige pludselig er blevet så meget mere værd for mig når jeg endelig får lov til at kode lidt, men jeg synes ihvertfald de er med til at pakke noget “støj” væk fra koden. Og det synes jeg Ihvertfald er meget dejligt.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
String blog = "http://danielfrost.dk/getposts/dillerdaller.aspx";

Response.Write(blog.UrlEncode() + "<br>");
Response.Write(blog.UrlDecode());
}
}

public static class StringExtensions {
public static String UrlEncode(this string url) {
return HttpUtility.UrlEncode(url);
}

public static String UrlDecode(this string url)
{
return HttpUtility.UrlDecode(url);
}
}

Tags:

Få overblik over dit website med IE8.

by Administrator 23. November 2009 12:24

Denne artikel er skrevet af Peter Davidsen, http://beddet.dk, beddet@beddet.dk, http://twitter.com/beddet.

Store websites kan godt være svære at håndtere og overskue efterhånden som de bliver større. Javascript er meget amindeligt på nutidens hjemmesider, frameworks og mange seperate klasse filer til alt muligt kan ligge i en masse mapper som gør det svært at se hvor ting bliver hentet og kaldt fra. Til dette kan man med stor success bruge profileren i developer toolbaren, men det hjælper stadig ikke meget med selve overblikket af ens site. Udover alle ens egne filer er det heller ikke ualmindeligt at have kald til sider som Google, ads, analytics, diverse bannere osv. Det som toolbaren er god til er markup og javascript filer og derfor kan man navigere rundt i disse; debugge, profile og rette lidt i dem. Til denne artikel kigger jeg på ekstrabladets hjemmeside (ekstrabladet.dk) da det har lidt af hvert.

I toolbaren har vi adgang til 3 lidt spændende faner, HTML, CSS og Script; html fanen vil jeg ikke komme meget ind på, men derimod de 2 andre.

clip_image002

Efter at have navigeret ind på ekstrabladets hjemmeside og åbnet dev toolbaren får jeg følgende skærm frem. Som standard starter man i html fanen dog går vi over under css for at kigge på de stylesheets sitet bruger. Der er automatisk loadet et stylesheet og deri kan vi se alle de tags der er inkluderet som vist på billedet. Man kan collapse dem og nemt gemme hele filen uden at skulle manuelt kopiere teksten og føre over i et nyt dokument, det kan være rart hvis man arbejder med ens eget site og er ved at lave opdateringer og derfor gerne vil have backup af de forskellige versioner man får lavet sig.

Mange sider har forskellige stylesheets alt efter hvilken underside man er på, der kan være forskellige farvetemaer der bliver anvendt, fx rød og grøn til jul. Eller generelt bare for at dele ens kode lidt op så det bliver mere overskueligt når der skal

ændres ting.

clip_image004

Vi får en drop down menu som indeholder en liste af alle de stylesheets toolbaren kan finde referrencer til og deres komplette sti, herved er det nemt at finde frem til den fil man skal bruge.

Jeg klikker frem til Script fanen for at få lidt samme stil som den skærm jeg allerede er på. Under dette punkt får man adgang til javascript debuggeren, en konsol som debuggeren bruger og endnu en drop down menu.

clip_image006

Man får en masse kildekode frem i venstre side som er det man også får at se hvis man siger ”Vis Kildekode” direkte i ens browser, blot med noget syntax farvning. Højreside er forbeholdt konsollen som viser fejl den finder eller man kan udskrive ved hjælp af console klassen i javascript. Søge feltet øverst kan også være meget praktisk når man skal lede efter bestemte ting i ens kildekode og resultaterne bliver markeret med gult.

Ligesom under css fanen får vi en drop down liste med forskellige javascript filer, den her liste er dog lidt sjovere end den sidste.

clip_image008

Som standard får vi vist ekstrabladet.dk som er under et underafsnit der simpelthen hedder http://ekstrabladet.dk. Lige under får vi linket til en mappe der ligger på serveren som indeholder 4 javascript filer som vi kan navigere ind til.

Tags:

Frosts Podcast Show #8 – Jais Pedersen omkring Workbook

by Administrator 20. November 2009 12:42

I denne episode af Frosts Podcast Show snakker jeg med Jais, som er lead udvikler og arkitket på et stort CRM/Projekt system. Jais sidder til dagligt i Saigon i Vietnam og holder styr på et team bestående af 12-14 udviklere.

Læs mere om workbook her.

Tags:

Silverlight WebSlice i IE8

by Administrator 20. November 2009 12:22

Det her kan bruges til ret mange sjove og kreative ting, så pas på :)

Jeg fik besked på, af min chef, at undersøge om man kan have en Silverlight app kørende i en WebSlice under IE8. Først drillede det lidt, men så fandt jeg pludselig ud af at det faktisk var meget simpelt, du skal nemlig bare gøre således.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div class="hslice" id="VidODay">
<span class="entry-title">Silverlight Webslice demo</span> <a rel="entry-content"
href="http://localhost:54700/SilverlightInWebSlice/SilverlightApplication1TestPage.aspx" />
</div>
</body>
</html>

SilverlightApplicationTestPage.aspx hoster vores XAP fil som i sidste ende udgør vores Silverlight app.

Nu kan du f.eks lave en Silverlight WebSlice med “dagens tip” eller “dagens joke” eller “dagens video”. Der er masser af muligheder og få restriktioner.

Tags:

Tilmelding til Scott Guthrie d. 3 December er hermed åben!

by Administrator 20. November 2009 11:03

Det bliver et heldagsarrangement fra kl. 08.30 til 16.30, som starter med at Scott gennemgår de bedste elementer fra PDC Keynoten. I dagens øvrige sessioner vil vi gå i detaljer omkring Windows Azure, .NET 4.0, og Silverlight 4 samt MVC og Visual Studio 2010.  Udover Scott kan du glæde dig til sessioner med både danske Microsoft specialister og nogle af vores superdygtige lokale partnere.

Vi forventer at få fuldt hus, så tilmeld dig allerede i dag. Det er gratis at deltage. Tilmelding er bindende, og såfremt du ikke møder op/bruger din plads forbeholder vi os ret til at opkræve et udeblivelsesgebyr på 250 kr.

Tilmelding sker her.

Vi ses :) !!!

Tags:

Irreterende load ballade med LINQ to XML

by Administrator 19. November 2009 14:35

Jeg sidder pt. og laver noget kode til at få vist nogle log filer fra en IIS. Jeg løb hertil formiddag ind i et problem, som jeg mener løsningen til, godt kunne være pakket bedre ind i .NET frameworket.

Forstil jer at skulle dette simple XML med LINQ.

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type='text/xsl' href='freb.xsl'?>
<!-- saved from url=(0014)about:internet -->
<failedRequest url="http://localhost:80/"
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
<EventID>0</EventID>
<Version>1</Version>
<Level>0</Level>
<Opcode>1</Opcode>
<Keywords>0x0</Keywords>
<TimeCreated SystemTime="2009-11-15T14:12:08.325Z"/>
<Correlation ActivityID="{00000000-0000-0000-0800-0080010000FB}"/>
<Execution ProcessID="1872" ThreadID="5176"/>
<Computer>DANIELDPEDK-PC</Computer>
</System>
</Event>
</failedRequest>

I min verden er det lige ud af landevejen. Jeg ville gøre således i første hug.

XDocument xml = XDocument.Load(@"C:\Users\danielmf\Desktop\Kode\XmlDesc\XmlDesc\XmlFile1.xml", LoadOptions.None);

var q = xml.Descendants("Event").ToList();

Ovenstående virker ikke, det fandt jeg hurtigt ud. Jeg må ærligt indrømme at det tog mig noget tid at finde frem til fejlen.

For at loade elementer som har et namespace på sig er man nødt til at gøre følgende.

XDocument xml = XDocument.Load(@"C:\Users\danielmf\Desktop\Kode\XmlDesc\XmlDesc\XmlFile1.xml", LoadOptions.None);
XNamespace ns = "http://schemas.microsoft.com/win/2004/08/events/event";

var q = xml.Descendants(ns + "Event").ToList();

Om jeg synes det er hensigtsmæssigt eller elegant. Nej.

Tags:

HttpModules i IIS 7.x

by Administrator 16. November 2009 11:31

Jeg har tidligere skrevet en post omkring HttpHandlers i IIS 7.x. Denne gang vil jeg forsøge at forklare jer lidt omkring hvad et HttpModule er og hvad man kan få ud af at bruge det.

Et HttpModule er, ligsom en HttpHandler en mulighed for at extende Windows webserveren, IIS. Forskellen på en Handler og et Module er at man i et Module for det første er et ligner ISAPI filter hvorimod en Handler ligner en ISAPI extension. Når jeg skriver “ligner” i denne sammenhæng er det fordi, at ISAPI filtre samt extensions ikke længere behøver at være skrevet i unmanaged kode, og at både “request pipelinen” samt hele IISn er lavet om, så man nu kan tilgå den og dens features via ren .NET. På den måde kan man altså extende sin webserver med lethed.

Inden vi går videre skal du måske lige have en opfrisker….kan du huske hvad der sker når der bliver lavet et request til f.eks ASP.NET ?

En af de fede ting ved IIS 7.x er at ASP.NET runtimen er blevet bygget ind i webserveren. Det betyder bla. at der er én og kun én “request cycle pipeline” for alle requests. Det kommer vi til at se nærmere på lige om lidt.

Du skal bruge HttpModules fordi…

1. Den samme pipeline raiser alle de events som er bygget ind i HttpApplication typen. Det gør det muligt at bygge egne HTTP moduler og handlers til IIS med .NET.

2. Både (un)managed HTTP moduler og handlers kan sættes på webserver, website eller applikations niveau.

3. Managed HTTP moduler kan kaldes på hvilket som helst tidspunkt i "request cycle pipelinen”. Både før og efter serveren rent faktisk gør noget ved selve requestet.

Lad os se på hvordan du laver et HttpModule. Du skal ligsom med en HttpHandler implementere et interface. Interfacet for HttpModuler hedder IHttpModule og giver dig 2 ting. Init og Dispose.

Jeg har stjålet lidt kode fra Mads Kristensens blog da han har skrevet utrolig meget omkring både HttpHandlers og HttpModules.

using System;
using System.Web;
using System.Configuration;
using System.Collections.Specialized;

public class IpBlockingModule : IHttpModule
{
void IHttpModule.Dispose()
{
// Nothing to dispose;
}

void IHttpModule.Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}

private void context_BeginRequest(object sender, EventArgs e)
{
string ip = HttpContext.Current.Request.UserHostAddress;
if (_IpAdresses.Contains(ip))
{
HttpContext.Current.Response.StatusCode = 403;
HttpContext.Current.Response.End();
}
}

private static StringCollection _IpAdresses = FillBlockedIps();

private static StringCollection FillBlockedIps()
{
StringCollection col = new StringCollection();
string raw = ConfigurationManager.AppSettings.Get("blockip");
raw = raw.Replace(",", ";");
raw = raw.Replace(" ", ";");

foreach (string ip in raw.Split(';'))
{
col.Add(ip.Trim());
}

return col;
}
}

Ovenstående HttpModule er ikke til noget nytte medmindre du også har implementeret den rigtige appsetting samt registret den i din applikation eller på website/server niveau.

<appSettings> 
<add key="blockip" value="44.0.234.122, 23.4.9.231"/>
</appSettings>

<system.webServer>
<modules>
<add name="IpBlocking" type="IpBlockingModule" />
</modules>
</system.webServer>
 
Som i kan se så er der lavet et “hook” ind i request pipelinen, ved den event der hedder BeginRequest (kig i Init metoden). Dette modul bliver tilføjet til den bunken med de andre moduler som et request skal igennem, og i dette tilfælde vil hvert request blive tjekket med denne IpBlocking rutine som Mads har været så rar at skrive.
 
Hvis du ikke allerede har extended din IIS webserver så er det med at komme igang ;0)

Tags:

VS2010

Peter Sestoft om C# 4.0 i ALT.NET Øresund

by Administrator 16. November 2009 11:27

På det næste møde i ALT.NET er der besøg fra ingen ringere end Peter Sestoft. Peter er både professor, forfatter og medlem af ECMA standard komiteen for både C# og CLI. Peter holder en præsentation om næste generation af C#, nemlig version 4.0. Selve præsentation vil omhandle nye features såsom generisk interfaces, dynamic, default method parameters og parallels.

Arrangementet afholdes d. 24 November og er helt gratis. Du tilmelder dig her.

Tags:

Et lille Visual Studio 2010 tip.

by Administrator 15. November 2009 19:38

Dobbeltklik på en tab i studiet og du vil få et vindue uden alt det omkringliggende “snask”.

tip

Tags:

VS2010

HttpHandlers (.ashx) i IIS 7.x

by Administrator 15. November 2009 14:18

En ting som rigtig mange stadigvæk ikke er klar over, er muligheden for at extende Windows web serveren, Internet Information Services. Dette emne er noget som Mads Kristensen bestemt har ydet sit for at få udbredt, men om det har nået ud til jer alle er svært at sige. Mads har gentagne gange fortalt mig, at mange af de udviklere han møder simpelthen ikke er klar over denne lækre men efterhånden gamle feature i IIS 7.x.

HttpHandlers…

Har filendelsen .ashx, bruges udelukkende til at håndtere den response der kommer tilbage fra IISn, udfra en bestemt filtype.

Er smarte hvis du f.eks laver UrlRewriting, indholds-manipulation eller andet hvor du gerne vil have fingrene i responsen før klienten modtager det.

Er nemme at bygge, du skal faktik bare have en klasse der arver fra IHttpHandler interfacet.

Behøver ikke registreres på webserveren.

using System;
using System.Web;
using System.IO;

public class TxtHandler : IHttpHandler
{
public bool IsReusable
{
get { return false; }
}

public void ProcessRequest(HttpContext context)
{
StreamReader reader = new StreamReader
(context.Server.MapPath(context.Request.FilePath));

String cardInfo = reader.ReadToEnd();

context.Response.Write(cardInfo);
}
}

Ovenstående er en HttpHandler (.ashx) og det eneste du mangler nu er at registrere den. Det kan du gøre på enten server, website eller applikations niveau.

Hvis du vil gøre det på IISn skal du finde det punkt der hedder “Handler mappings”. Her tilføjer du stien og den ønskede type der skal tage sig af responsen.

iis

Du kan også gøre det på selve applikationen, og det kræver såmænd bare tilføjelse af en handler  i din webconfig fil.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<system.webServer>
<handlers>
<add
name="txtHandler"
path="*.txt"
verb="*"
type="TxtHandler"
resourceType="Unspecified"
preCondition="integratedMode"
/>
</handlers>
</system.webServer>
</configuration>

Når nogen kalder en .txt fil på dit website vil den ovenstående HttpHandler træde i kræft og du vil have fuld adgang over det pågældende request.

Bemærk at pipeline mode på IISn skal være sat til Intergrated.

Som sagt er Mads Kristensen en haj til at lave de her HttpHandlers, så tjek hele hans bibliotek ud :)

God fornøjelse.

Tags:

ASP.NET | Udvikleren.dk | VS2010

Frosts Podcast Show #7 – Dependency Injections med Mark Seemann

by Administrator 13. November 2009 12:04

Mark Seemann er tildagligt udvikler i virksomheden Safewhere. Han er igang med at skrive en Manning bog omkring netop Dependency Injection også er Mark både tidligere MVP og nuværende MDIP.

Har du aldrig arbejdet med DI før kan du finde mere information omkring fremgangsmåderne her.

God fornøjelse.

Tags:

Udvikleren.dk

Scott Guthie i Danmark d. 3 December – kryds i kalenderen.

by Administrator 11. November 2009 12:07

Jeg har netop fået at vide at Scott Guthrie kommer til København d. 3 December. Han skal være en del af et større men stadig ret “low key” event som tager udgangspunkt i nogle af de allerbedste ting fra PDC2009. Der vil bla. blive talt om MVC, ASP.NET 4.0, VS2010 og .NET 4. Vi har ingen fast agenda endnu, det eneste vi ved er at han kommer. Udover Scott vil der med stor sandsynlighed være mulighed for at se andre præsentationer fra bla. mit team. Dog tror jeg ikke at jeg får noget airtime, men det kan jo være :)

red_polo_big

Foruden præsentationer vil der forhåbentligt være mulighed for både MVPerne og MDIPerne at få en lukket session med ham hvor deltagerne kan stille ham mange flere spørgsmål og høre et par hemmeligheder. Som sagt er agenda ikke vedtaget 100% endnu, men vi er tæt på :)

Husk at sætte et kryds i din kalender for Torsdag d. 3 December. Det bliver en rigtig god dag for alle!

Tags:

Udvikleren.dk

Find er brugerens fortrukne sprog i ASP.NET

by Administrator 11. November 2009 10:46

I kender allesammen de der websites hvor man først skal vælge et sprog eller en lokation. UPS gør det bla. CDON gør det faktisk også. Ret store sites. Jeg kan bare ikke forstå hvorfor de ikke kan finde ud af at gøre det automatisk. De kan skære et trin væk fra navigationsforløbet, og det må vel betyde bedre usability og færre klik (mindre trafik i sidste ende og en lavere regning).

Informationen omkring brugerens sprog ligger som regel i browseren. Der kan faktisk også optræde flere sprog, men det bør bare gøre det nemmere for både UPS og CDON.

Sådan indstiller sprog i din browser. (IE og FF).

ieLangs fflangs

 

I System.Web.HttpRequest klassen er der en readonly property ved navn UserLanguages hvor du netop kan få disse sprog ud. Jeg har skrevet en lille extension method som gør det nemmere at finde ud af hvilke sprog der fortrækkes af brugeren.

public static class RequestExtensions {
public static Dictionary<decimal, CultureInfo> GetUsersPreferableLanguages(this HttpRequest request)
{
string[] languages = request.UserLanguages;

if (languages != null)
{
CultureInfo culture;

Dictionary<decimal, CultureInfo> preferableLanguages =
new Dictionary<decimal, CultureInfo>();

foreach (var lang in languages)
{
if (lang.Contains(";"))
{
decimal preferRate = decimal.Parse(lang.Substring(lang.IndexOf("=") + 1),
System.Globalization.CultureInfo.InvariantCulture.NumberFormat);

culture = GetCulture(lang.Substring(0, lang.IndexOf(";")));

if (culture != null)
preferableLanguages.Add(preferRate, culture);
}
else
{
preferableLanguages.Add(1, GetCulture(lang));
}
}

return preferableLanguages;
}

return null;
}

private static CultureInfo GetCulture(string culture)
{
try
{
return new CultureInfo(culture);
}
catch (CultureNotFoundException exception)
{
return null;
}
}
}


 

Nu kan du direkte på Request objektet kalde:

protected void Page_Load(object sender, EventArgs e)
{
Request.GetUsersPreferableLanguages();
}

Tags:

VS2010

Gratis ASP.NET MVC code camp d. 30 November i Hellerup.

by Administrator 10. November 2009 22:12

Copenhagen Software og Microsoft invitere til ASP.NET MVC code camp. Et gratis event for udviklere der tænder på teknologi. Hvis du er PHP eller ASP udvikler er denne code camp en rigtig god mulighed for at lære et nyt, gratis og rigtig sejt framework.

På code camp’en vil du få indblik i, hvad Microsofts nye ASP.NET MVC framework er, hvordan det forholder sig til ASP.NET og hvad det bibringer dine projekter. Gennem skiftende præsentationer og øvelser vil du få indblik i frameworkets opbygning og praktisk erfaring med at implementere en løsning med ASP.NET MVC.

mvc

Du vil lære og se følgende blive udført:

  • Introduktion til ASP.NET MVC: hvad er det og (hvorfor) skal jeg bruge det?
  • Igang med ASP.NET MVC: hvad skal jeg bruge?
  • Hvad består en ASP.NET MVC applikation af?
  • At generere HTML: views
  • Navigering: URL’er, links og routes
  • At modtage input fra brugerne: model binding,
  • validering og fejlmeddelelser
  • Test af en ASP.NET MVC applikation
  • Brug af AJAX, JSON og jQuery
  • Cross-cutting concerns: action filters
  • Extension Points
  • Deployment
  • Hvordan kommer jeg videre?

Der er plads til 30 mennesker og du skal huske din egen bærbare hvorpå du har Visual Studio eller Visual Web Developer. HUSK AT MVC PROJEKT TYPERNE SKAL VÆRE INSTALLERET (http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&displaylang=en)!!!

Du tilmelder dig ved at skrive en email til mig på danielmf@microsoft.com med emne "MVC CODE CAMP".

Sted og tid:

Mandag d. 30/11 kl. 10:00
Microsoft Danmark
Tuborg Boulevard 12
2900 Hellerup

Vel mødt!

Tags:

Tech Eddy i Berlin – dag 2 (data centre, IIS og vietnamnam)

by Administrator 10. November 2009 21:47

Anden dag på den udsolgte TechEd konference har budt på flere spændende sessioner. Den første jeg gik til var en session omkring opbygningen af Microsoft datacentre. En meget anderledes men super spændende gennemgang af infrastruktur, research produkter, priser og afkøling. Hvordan ser et datacenter egentligt ud ? Det er et godt spørgsmål, og som regel er vi fuldstændig ligeglade med det. Men efter at Azure er kommet til, og efter at omverdenen har forstået (jeg er ikke sikker på du har forstået det endnu, men det kommer nok hen ad vejen) at cloud computing bliver en ""commodity” vare som f.eks el og vand, ja så er folk ligsom begyndt at have en holdning til hvor deres data bliver af. Hvad sker der f.eks når man skriver (pseudo)

Azure.MyHostedStorage.SaveCustomer(cust);

Det der sker er at din data ryger ud på mindst en server i en eller flere datacentre i verden. Det er noget du naturligvis selv kan sætte op i Azure, altså hvor din data skal være i verden. Serveren din data bliver gemt på kan f.eks stå i Dublin i Irland. Serveren står faktisk ikke direkte i en bygning, men i en lukket container som har 2-3 huller på siden (se billede). Et til el, et til netværk og kan også have et til vandkøling. Det sidste hul er dog så småt på vej ud da man begynder at operere mere i “chillerless” data centre. Det betyder sådan set bare at man bruger almindelig luft (udefra) til kølingen, af den simple grund at man ikke behøver så lave temperaturer som tidligere antaget, og at det naturligvis er bedre for miljøet og omkostningerne.

datacenter_3

Det seje ved at have sit datacenter bestående af containere er, at man ikke behøver en bygning til dem. De er ligsom allerede godt beskyttet af en mængde jern som både kan tåle blæst, regn, sne etc. Det betyder reel set at man kan smide et par contaínere hist og her, give dem noget strøm, noget net og måske lige hegne dem ind (tænk hvis nogle kunne finde på at stjæle et datacenter). På den måde får man lynhurtigt stablet et mobilt datacenter på benene som evt. kun kan tilgås af de “lokale”. Noget af det som vi fik at vide, som ikke engang jeg var klar over, er at Microsoft angiviligt vil tilbyde “private clouds” om nogle få år. Men så skal du også bestille min. 5 containere og selv hegne dem ind :)

Nedenstående video giver et ret cool overblik over hvordan Microsoft tænker og bygger deres data centre.


Microsoft Generation 4 Data Centers

Senere på dagen afholdte min kære kollega Nana Bule en frokost session omkring IIS 7.5 på Windows Server 2008 R2. IIS er som du sikker allerede er klar over, stærkt undervurderet. Den webserver kan simpelthen så meget mere end folk derude regner med. Jeg vil i de næste par uger forsøge at skrive et par posts omkring noget af det jeg mener er mest interessant, og nogle af de ting som du måske ikke vidste var muligt.

Jeg sluttede dagen af med rigtig god og billig mad på en vietnamesisk restaurant ved navn Monsieur Voung. Stedet kan varmt anbefales til alle der måtte være i Berlin nu eller kommer det.

Vi ses imorgen!

Tags:

Tech Eddy i Berlin - dag 1

by Administrator 9. November 2009 17:15

Jeg steg af flyet igår eftermiddags, efter at have siddet i 50 min. imellem 2 meget store og svedige mænd. Siger SAS ikke at man føler sig hjemme på deres fly ? Ellers gik min tur nu ganske fint.

Idag var det så første konfernece dag på TechEd, og jeg må ærligt indrømme at jeg ikke fik set ret meget af teknisk relevans. Jeg tror lige konferencen “skal være varm” som man siger. Jow..jeg fik da set lidt om vores relationelle database i skyen. SQL Azure. Før jeg tog afsted har jeg måtte leve med en René Løhde, der udover at (omend meget kort) have anlagt et fuldskæg af frustration over vores egen teknologi også har haft en nærmest aggrasiv adfærd overfor os andre i gruppen. Men det betyder ikke at du ikke skal bruge SQL Azure, for det skal du…så længe du ikke gemmer mine kreditkort oplysninger i din database :0)

SQL Azure er en relativt simpel SQL server database i “skyen”. Skyen er internettet og SQL serveren kender du måske allerede. MEEEN…. nu kan du altså kommunikere med en SQL server database over internettet, det er helt nyt og frækt. Nu sidder du sikkert og tænker det samme som dem der udvikler SQL serveren: “det kunne vi også for 10 år siden”. Dengang hed det bare SQL 7.0, eller 2000 hvis man var “edgy”. Så hvad fa…. er forskellen ? Det skal jeg sige dig. Skalerbarhed og pris.

sql-azure-logo-lg

Hvorfor vil du hoste dine egne SQL servere ? Helt ærligt, hvorfor ? Så du har mere kontrol over dine data ? Så du er sikker på at det hele køre som du gerne vil have det ? Så du selv skal ned i serverrummet og skifte en disk eller måske en hel server ?

Tænk tilbage på de mennesker, der for omtrent 150 år siden stadig havde en vandmølle så de kunne male deres korn og slebet deres værktøj. Tænk hvis det stadig var tilfældet ? Om 5 år vil folk grine af dig hvis du siger du hoster dine egne SQL servere, og selv sørger for hardwaren og databasen køre optimalt. Hvorfor i alverden vil du bruge tid på det når det kan ligges i hænderne på nogle andre (og måske mere professionelle) ?

Med SQL Azure ligger du de tungere SQL administrative opgaver over på ryggen af Microsoft. Vi skal nok sørge for du ikke mister din data og at svartiden fra centeret er overkommeligt. Til gengæld skal du sørge for at dine datamodel er nem for dig at arbejde med, ikke tager for lang tid om at udføre dens opgaver etc. Men hvis du skulle komme i problemer kan du jo altid skalere op…eller ned.

SQL Azure kommer om 8 dage (skrivende stund) og version 1 er…well…version 1. Men når så er sagt så kan det måske være en god idé for dig at kigge nærmere på, du bliver trods alt ikke bonet for noget før 1. Februar. Så kør nu den test på dit system!!!

Læs mere og sign up her.

Udover at høre noget omkring SQL Azure så fandt jeg også en sjov bog. Jeg er ikke sikker på at den fortæller hele sandheden om Microsofts “et i alt” produkt ;!)

november 041

Tags:

Frosts Podcast Show #6 – Kim Nielsen omkring BizSpark

by Administrator 6. November 2009 12:26

I denne episode af podcasten har jeg inviteret Kim Nielsen fra Microsoft western europe. Kim er til dagligt chef for programmet BizSpark, og han rejser bla. meget rundt i Europa for at snakke med både kunder og partnere om deres løsninger, såvel med den lokale Microsoft branch.

Jeg har bla. tidligere blogget om BizSpark og WebsiteSpark.

Du kan fange Kim på twitter.

God fornøjelse.

Tags:

Powered by BlogEngine.NET 1.6.0.0
Theme by Mads Kristensen