Hösten 2008 startade Sundblad och Sundblad tillsammans med Microsoft ett nytt certifieringsprogram för mjukvaruarkitekter. Programmet består av fem stycken sammankomster med två kursdagar per sammankomst – totalt tio utbildningsdagar. Utbildningen går bland annat igenom
- en allmän överblick av området mjukvaruarkitektur och mjukvaruarkitektens ansvarsområde.
- hur ett IT-stöd kan te sig ur ett affärs- eller verksamhetsorienterat perspektiv
- hur du kan etablera en tjänsteorienterad arkitektur som är helt och hållet driven av skarpa verksamhetskrav (i motsats till en arkitektur som är driven utifrån tekniska överväganden)
- de tre centrala vyerna i arkitekturramverket 2xSundblad Framework: Business Process View, Software Process View och Business Information View.
- hur en tjänsts insida kan designas för att implementera sina kontrakt samt ge stöd för en strukturerad kontroll mot verksamhetsregler samtidigt som den låter dig hantera transaktioner på ett bra sätt
I kursen tas även upp hur olika delar i Microsoft-plattformen som WCF, Windows Server App Fabric och Windows Azure passar in i din arkitektur samt hur du använder nya verktyg som UML-stödet i Visual Studio 2010 och Expression Blend SketchFlow.
Du får då också en möjlighet att bli certifierad av Sundblad & Sundblad och Microsoft AB som mjukvaruarkitekt med specialinriktning Microsoft-teknologier. Under den tionde och sista kursdagen får du en hemuppgift att utföra för att vid ett senare tillfälle presentera och försvara den inför en panel av arkitekter.
Nu har du chansen att till ett kraftigt rabatterat pris få prova-på en första tvådagars omgång av certifieringsprogrammet. Denna kursomgång hålls den 8-9 mars i Microsofts lokaler i Akalla.
Läs mer och anmäl dig till certifieringsprogrammet på Sundblad och Sundblads webbplats.
Det är en stor buzz bland webbutvecklare just nu kring HTML 5 och de möjligheter som de olika delarna i standarden kommer föra med sig. Något som är vanligt är att man gärna vill ställa HTML 5 i skarp kontrast till andra tillgängliga tekniker för att skapa rika Internetapplikationer.
Den del av HTML 5 som har lyfts fram som mest kontroversiell är <video> –elementet. Tanken är att en enhetlig standard för hur man bäddar in video i HTML ska kunna ersätta plug-ins som Flash och Silverlight för att visa videofilm i webbsidor. Det finns dock en hel del utmaningar i dagsläget: webbläsare måste inte bara stödja de filformat (container) som ljud- och videoströmmarna transporteras i – de måste också kunna koda av strömmarna beroende på hur de kodats från början. För att kunna göra det krävs att maskinen har rätt dekoder (codec) installerad. Vilket operativssystem som har vilka codecs förinstallerade som standard skiljer sig åt. Det används också olika codecs för ljud och för bild.
Lite förenklat så ser det (i skrivande stund) ut så här:
- Firefox har stöd för Theora + Vorbis + Ogg
- Safari, IPhone, Android och Chrome har stöd för H264+ACC+ MP4.
- Internet Explorer saknar idag stöd för video-elementet (men har via Flash och Silverlight stöd för H264+ACC+MP4).
Det finns alltså inte i dagsläget någon enskild kombination av HTML 5-webbläsare, behållare och codec som fungerar över alla enheter och på alla plattformar. För att göra en video tillgänglig via video-elementet skulle du alltså behöva koda dina mediafiler i två olika format/containers – och dessutom behöva en ‘fallback’ till Flash eller Silverlight för att kunna spela upp filmen i Internet Explorer.
Microsoft deltar aktivt i arbetsgruppen för HTML 5 för att hitta en lösning kring codec-frågeställningarna, där det också finns oklarheter kring patentfrågor för vissa codecs som behöver redas ut.
När man diskuterar Internet Explorer i samband med HMTL 5 så är det för övrigt lätt att glömma bort att vi faktiskt har stöd för ett flertal andra HTML 5-funktioner i IE8: t.ex. DOM-lagring och AJAX-navigering – men det är ett ämne för en annan post.
Personligen så tycker jag att andra delar av HTML 5 är mer intressanta än video-elementet: t.ex. Web Sockets som ger dig en socket-liknande duplex kommunikation mellan webbläsaren och servern – och som går genom port 80/443 vilket gör att du traverserar brandväggar utan problem, snabbt – effektivt, dubbelriktat och utan HTTP-protokollets overhead.
Det här är vad jag tror (disclaimer – detta är min högst personliga reflektion och inte alls någon officiellt Microsoft-roadmap):
- Plattformar som Silverlight kommer att fortsätta utvecklas i en takt och med en hastighet i innovationen som standardiseringen aldrig kommer att hinna med. Misstaget man gör är att man jämför HTML 5, som förhoppningsvis kan vara klart 2012, med vad som finns i Silverlight-plattformen i befintlig version. Men naturligtvis kommer Silverlight om två år innehålla en mängd nyheter som det inte kommer finnas någon motsvarighet till i HTML 5. Ett bra exempel på sådan innovationskraft är Smooth Streaming-protokollet, som mig veterligen inte har någon motsvarighet i HTML 5-specifikationen.
- Jag är övertygad om att man kommer fortsätta hålla hårt på kravet att Silverlight ska vara plattformsöverskridande och att man ska vara en ”god citizen” i standardstödjande webbläsare. D.v.s. precis som Silverlight idag integrerar snyggt med befintlig HTML-DOM och Javascript kommer Silverlight-utvecklare kunna dra nytta av nyheterna i HTML 5 via interop mot webbläsaren.
Vad tror du?
Open Data Protocol, eller OData som det ofta förkortas, var en av de nyheter som presenterades på PDC-konferensen i november. OData är ett öppet protokoll för att hantera frågor och uppdateringar mot datakällor som exponeras med hjälp av REST-baserade tjänster. Med öppet menas att det är publicerad under Microsoft's Open Specification Promise och alltså är helt fritt att använda för implementeringar i andra teknikstackar än Microsofts egna (vilket också har skett – mer om det längre ner).
REST, som står för ‘Representational State Transfer’, är som bekant en arkitekturstil som beskriver hur du bygger tjänster som exponeras via URI:er, där du arbetar med HTTP-protokollets GET, PUT, POST och DELETE-verb för att hämta, skapa, uppdatera och radera data. REST är ett mönster som blivit mer och mer populärt som ett alternativ till SOAP i tjänstebaserade arkitekturer.
Några av anledningarna till att REST har haft såna framgångar tror jag är:
- REST-baserade tjänster är i grunden interoperabla vilket är lämpligt när man har en många olika typer av klienter.
- Tjänsterna går att skala med befintliga lastbalanserare och cache-servrar eftersom du använder HTTP-protokollets grundmetoder.
- Resurser går att upptäcka och borra sig ner i genom sin URI – d.v.s. adressen i sig är en beskrivning av resurserna som du kommer att hämta eller påverka – vilket gör det enkelt att förstå, testa och felsöka tjänsterna.
- REST är tillståndslöst i sin natur vilket tvingar in dig i ett asynkront tänk – vilket i sin tur gör det enklare att bygga skalbara tjänster.
Ett problem har varit att det har saknats bra plattformsoberoende angreppsätt för att arbeta riktigt effektivt med REST-baserade tjänster. T.ex. så har det inte funnits något standardiserat sätt att beskriva datastrukturerna som tjänsterna returnerar, vilket har gjort det svårt att automatgenerera proxy-klienter samt ge Intellisense-stöd på klientsidan. Det har också saknats ett enhetligt sätt att ange filter-utryck och andra urvalsvillkor i tjänsteanropen. Ett exempel kan vara att du t.ex. vill kunna stega dig igenom ett resultatset i en datamängd.
Open Data Protocol, som i sin tur bygger på HTTP- och AtomPub-protokollen, tillför funktionalitet för att baka in metadata som beskriver den datastruktur som en REST-baserad tjänst erbjuder. Protokollet beskriver också en syntax för hur du begär att tjänsten ska filtrera det data som den returnerar. OData är egentligen inget nytt – implementeringar har tidigare funnits under benämningarna “Astoria” Protocol och ADO.NET Data Services Protocol. OData är ett sätt att samla dessa i ett enhetligt protokoll och göra det öppet tillgängligt.
Nedan är ett exempel på hur kommunikation med hjälp av OData kan se ut. Ett GET-anrop mot min Northwind-tjänst kan returnera en Atom-feed som visar vilka entiteter som min tjänst exponerar:
GET /Northwind.svc/ HTTP/1.1
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<service xml:base=http://localhost:1308/Northwind.svc/
xmlns:atom=http://www.w3.org/2005/Atom
xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app">
<workspace>
<atom:title>Default</atom:title>
<collection href="Categories">
<atom:title>Categories</atom:title>
</collection>
<collection href="Products">
<atom:title>Products</atom:title>
</collection>
</workspace>
</service>
Genom att ange Products och ange ett id som parameter i URL:en kan jag få ut en enskild produkt:
GET /Northwind.svc/Products(1) HTTP/1.1
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xml:base="http://127.0.0.1:1308/Northwind.svc/" xmlns:d=http://schemas.microsoft.com/ado/2007/08/dataservices
xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<id>http://127.0.0.1:1308/Northwind.svc/Products(1)</id>
<title type="text"></title>
<updated>2010-01-18T21:52:38Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Product" href="Products(1)" />
<link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Category" type="application/atom+xml;type=entry"
title="Category" href="Products(1)/Category" />
<category term="NorthwindModel.Product" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
<m:properties>
<d:ProductID m:type="Edm.Int32">1</d:ProductID>
<d:ProductName>Chai</d:ProductName>
<d:QuantityPerUnit>10 boxes x 20 bags</d:QuantityPerUnit>
<d:UnitPrice m:type="Edm.Decimal">18.0000</d:UnitPrice>
<d:UnitsInStock m:type="Edm.Int16">39</d:UnitsInStock>
<d:UnitsOnOrder m:type="Edm.Int16">0</d:UnitsOnOrder>
<d:ReorderLevel m:type="Edm.Int16">10</d:ReorderLevel>
<d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
</m:properties>
</content>
</entry>
Men genom utökningen av AtomPub-protokollet och namnrymden ‘http://schemas.microsoft.com/ado/2007/08/dataservices/metadata’ (Data Services Metadata Namespace) så beskrivs också vilka datatyper som den aktuella entiteten innehåller. Till exempel att egenskapen ‘Discontinued’ är en ‘Edm.Boolean’ (Edm står för Entity Data Model). På så sätt kan en klient använda sig av metadata för t.ex. proxy-generering, typ-check och Intellisense.
Så här kan en filtrering och sortering se ut med OData-syntax:
GET /Northwind.svc/Products/?Category=Beverages&$orderby=ProductName&$top=2&$filter=Discontinued eq false HTTP/1.1
Ovanstående uttryck skulle ge de två första produkterna som har Category ‘Beverages’ där egenskapen Discontiued är satt till ‘false’ – sorterat på ProductName.
En sak som jag tycker är intressant med Open Data Protocol är att det redan finns ett antal icke-Microsoft implementeringar av protokollet – t.ex. finns det en Java-implementation, stöd inbyggt i WebSphere och en PHP-implementation. Bygger du REST-baserade tjänster i .NET och vill dra nytta av OData så kan du med fördel använda WCF Data Services (finns både för .NET 4 och 3.5 SP1). Men det finns också inbyggt stöd för OData i många produkter och plattformar som släppts eller är på väg att släppas – t.ex. Sharepoint 2010 och PowerPivot.
Här finns en bra FAQ om OData – själva protokollet hittar du på www.odata.org – missa inte heller Pablo Castros briljanta session om WCF Data Services och Odata från PDC-konferensen.
Igår annonserades att befintliga CTP-konton i Windows Azure nu kan uppgraderas till produktionskonton för fortsatt kommersiell drift.
Dock kommer all användning av Windows Azure, SQL Azure och App Fabric att vara kostnadsfri under januari månad ut. D.v.s. även om du uppgraderar ditt befintliga CTP-konto nu så kommer ingen debitering att ske för användningen i januari. Du kommer däremot att se hur mycket av plattformen som du utnyttjar under tiden och vad du alltså skulle ha betalat för utnyttjandet.
Om du väljer att inte konvertera ditt konto innan 1:a februari i år så kommer ditt konto att spärras och lagring som du använder i Azure kommer att göras ‘read-only’. För SQL Azure innebär det att inga nya databaser kommer att kunna skapas (även om befintliga databaser kommer att fortsätta fungera).
Läs mer om hur du uppgraderar ditt CTP-konto på Windows Azure –bloggen.
Signar ut mig för julen – GOD JUL och GOTT NYTT år!
Vill också passa på att puffa lite för Läkare utan gränser som jag tycker gör ett fantastiskt jobb och som jag personligen tycker det känns tryggt att skänka pengar till, där vet jag att pengarna kommer till god nytta. Fundera på att skänka en slant du med!

Såg att SL har lagt till en fiffig IE8-webslice till sin hemsida som gör att du direkt kan få uppdateringar om lokaltrafikläget i Stockholm:
Du kan testa den själv på www.sl.se
Spanska TV-kanalen Antena3 har precis lanserat sin Smooth Streaming-baserade webbtv-tjänst med en Silverlight-spelare med riktigt snygg Messenger-integration:

Tidigare i höst fick alla invånare i Västra Götalandsregionen möjlighet att välja vilken vårdcentral de skulle tillhöra. Det här är ett val som alla invånare över 16 år i Sverige kommer att få göra. Det är upp till de olika regionerna att själva skapa IT-system som stöder hanteringen. Förutom själva valet av vårdcentral ska också ersättningen till de olika vårdcentralerna hanteras baserat på vårdvalet.
Silverlight-baserad klient
Inom Västra Götalandsregionen (VGR) valde man att skapa en webbaserad lösning med en Silverlight-klient för att hantera vårdvalet på vårdinrättningarna. Utvecklingsprojektet har arbetat med mycket kort tidsmarginal. Man har från april i år till slutet på augusti lyckats skapa en väl fungerande lösning som har rullats ut till de flesta vårdinrättningarna i regionen.
Att valet föll på Silverlight som klientplattform berodde mycket på att VGR ville slippa utmaningarna att hantera tillstånd i en traditionell ASP.NET-baserad webbapplikation. Samtidigt ville man ändå ha fördelarna av en webbaserad distribution (enkel uppdatering, körs direkt i webbläsaren). Man ville också slippa anpassa lösningen för olika versioner av webbläsare, vilket ofta kan vara ett tidsödande och dyrt arbete i traditionella webblösningar.
Överlag är VGR mycket nöjda med valet av Silverlight men naturligtvis har det funnits ett antal utmaningar i projektet. I efterhand så är en av lärdomarna att de borde ha fått med sig infrastrukturansvariga mycket tidigare i projektet för att underlätta utrullningen av Silverlight. Att få till effektiva GUI-tester och bristen på utskriftsstöd i Silverlight 3 har varit två andra utmaningar i projektet.
Team Foundation Server och Scrum
En av anledningarna till att projektet över huvud taget gick att genomföra med så korta tidsramar är att de använt sig av Scrum för sin utvecklingsprocess och kört strikt testdriven utveckling samt att de hade möjlighet att använda Team Foundation Server som processmotor. Genom att köra korta iterationer (två veckors-sprintar) så har projektet kunnat hålla verksamheten konstant involverad. Beställarna har hela tiden känt att de har haft bra koll på statusen i projektet och full kontroll över prioriteringen av funktionerna.
Förutom Team Foundation Server med Conchangos Scrum-mallar så har projektet även använt ett verktyg som heter Pivotal tracker, där främst verksamheten arbetat med uppföljning och prioritering av backloggen i projektet.
En snygg sak som man har gjort i byggprocessen är att låta byggservern producera olika kataloger med korrekt konfigurerade .config-filer för test-, demo- och drift-miljöerna med hjälp av ett open source-projekt för MS Build som heter MSBuild Community Tasks Project och funktionen XmlMassUpdate.
Nedan en längre intervju från Channel9 som jag och Dag König gjorde med utvecklingsteamet: Niclas Åkerman (scrummaster) samt Mats Karlsson, Janne Hasslöf, Caroline Bornsjö, Jakob Sommer, Mikael Waltersson, Magnus Härlin, Richard Redler, Kristoffer Rhodin samt Andreas Östberg:
Windows Azure Developer Challenge är en tävling för utvecklare med målsättning att bygga lösningar på Windows Azure.
- Startdatum [har redan varit] och sista dag den 13:e januari kl 12.00*.
- Tävlingen är personlig och öppen endast för svenska medborgare.
- Du kan anmäla hur många bidrag du vill.
- Bidragen bedöms av en jury från svenska Microsoft kontoret
- Bidragen bedöms utifrån innovation, originalitet och utnyttjandet av tjänsterna i plattformen.
- Vid anmälan anger du uppgifter om dig själv så vi kan nå dig. En beskrivning av din lösning. Länk till antingen din site på Azure som är lösningen i sig eller där vi kan nå eventuell programvara som behövs.
* Perfekt julpyssel alltså :-)