Na een leuk avondje voetbal en lopen over de grasmat van Ajax kwam er weer een nieuwe dag op de TechEd.
Vandaag begon ik met een sessie rond Deep dive into TFS Agile tools. Waar we gisteren vooral oveerviews zagen, was het nu tijd voor wat diepgang.
Per medewerker in het Scrum team kan de workload per dag opgegeven worden. Hiermee wordt de overbelasting van medewerkers vastgesteld.
Microsoft heeft geen directe relatie gelegd tussen Effort (geschat met planning poker) van een story en de daadwerkelijke workload van de gecombineerde taken achter de story. Vanuit Scrum oogpunt is dit ook hoe het moet.
Wat ook leuk was, was de distributie van de story prioritering. Als de prioriteiten te dicht op elkaat stonden, dan werd er automatisch gehernummerd met gaten ertussen. Dit is praktisch.
Ook werd gedemonstreerd hoe de onderdelen van TFS aan elkaar gekoppeld werden. Dit werd steeds getoond via de achterliggende XML waar TFS de regels uithaalt. Er werd gevraagd of deze basale XML functionaliteit ook met visuele tooling ondersteund zou worden. De spreker gaf aan dat het op de backlog staat.
De wijzigingen zijn beperkt tot het team project waar je mee bezig bent. Of je moet de process template bijwerken en nieuwe projecten uitrollen.
De Agile process template kan dus helemaal bijgewerkt worden. Het werd met een leuke demo vergezeld, heel TFS kreeg een Dungeons and Dragons thema. De task werd een quest, etc.

Het area pad is inmiddels veranderd van functionaliteit. Het wordt nu gebruikt om userstories onder teams te hangen. Wil je een story aan een ander team vergeven, dan moet simpel het pad aangepast worden.
Vertrekkende collega’s uit een team met toegewezen taken, krijgen gewoon een lage capaciteit (0, oftewel hij kan geen bijdrage meer leveren). Voor de rest lijken deze oud-collega’s wel genoemd. De planning blijft overeind staan. Maar dit kan op de lange duur met een komen en gaan van collega’s wel vreemde effecten geven (wie is collega X en wie is die Y???).
De sprintkeuze wordt bepaald door de toegewezen start- en einddatums. De tijdzone op de server is hierbij leidend.
En helaas custimization kan alleen in de eigen TFS plaatsvinden. Dit is niet beschikbaar in de cloud…
Bugs zijn user stories, geen taken. Ze krijgen een effortschatting en zijn direct active.
De volgende sessie ging over ontwikkelen vor Azure. Hoe moet ik mijn Asp.Net voor Azure geschikt maken. Sayed I Hashimi is onze gastheer.
Azure betekent:
– websites (er is een optie voor 10 gratis wewbsites en een sql database)
– Cloud services (data, workflow, etc..)
– virtual machines
Een website is zo opgezet, zelf een manager (Luc) moet dit kunnen. En de Azure SDK is ook zo opgehaald. makkelijk.
Er was een demo om met Code First even snel een model en database aan te maken vanuit code. En dit werd in een Asp.Net MVC omgeving aangeroepen. Deze werd even lokaal uitgevoerd.
Die site werd naar Azure gebracht. Eerst moest in Azure een (lege) website met database bepaald. Een naam, regio waar je klantwen zitten, de subscription en een database type moest bepaald worden. De database kan overigens afgeschermd worden zodat alleen jouw site er bij kan.
Daarna was het tijd voor publiceren. VS2012 wist eigenlijk alles al wat er ingesteld was in Azure. Je kon de codefirst ook weer uitzetten. Dit voorkomt ongewenst wissen van de data of de complete database. De preview van de acties op de Azure site gaf een veilig gevoel.

En toen was de site zo uitgerold. Perfect.
Maar wat als de database veranderd? Of als schermen veranderen?
Hij gebruikte een bepaalde Nuget packege om database wijzigingen te faciliteren. Er werd voor iedere wijziging een UP en een DOWN in code ondersteund. Ik moet die package nog achterhalen.
En de publish gaf nu in de preview een aantal updates aan. En na de nieuwe publish was alles bijgewerkt. Prima.
Ik weet alleen niet hoe dit in een OTAP situatie moet gaan werken… Hoe laat ik de buildserver een automatisch een testversie uitrollen?
Er is eerst een commandline versie van de publish gedemonstreerd.
Daarna werd TFS Online getoond. In VS2012 werd het project daarin geplaatst. En Nuget Package Restore werd aangezet.
Erg gaaf. Doordat de Azure website, TFS Online en VS2012 aan elkaar gekoppeld zijn, kan nu bij iedere check-in een uitrol plaatsvinden na een succesvolle build. Maar een echte continuous build lijkt me een dure zaak. Persoonlijk zou ik een aantal build opsparen om de kosten te beperken. Tenzij het heeeeel goedkoop is, natuurljik.
Een lokale build kan wel degelijk ook direct deployen. Ergens in een schermpje moet een regeltje tekst ingetypt worden. 🙂 (te beginnen bij Build definitions; Process; ???)
OTAP zou ondersteund kunnen worden door verschillende builds (een continuous build en bv. een gold build) en die release naar een test site danwel de productie.
Hoe zit het met Cloud services zoals bv. worker roles en Azure queues. Hiervoor is de nieuwe Azure Services project bedacht. Haal eerst even je Azure certificaat lokaal. En in Azure moet een (lege) Azure service beschikbaar gemaakt worden. Hieraan wordt door het (lokale) project gerefereerd.
Storage is ook typisch iets van Azure. Er zijn een aantal smaken (SQL, blob, tables, queues).
Voor blob heeft een account meerdere containers (als in folders) en daarin de blobs zelf. Blogstorage kent geen state en het bespaart je computing cycles.
De volgende sessie ging over Debuggen in VS2012: going beyond F11.
Sinds VS2010 SP1 zijn er een aantal zaken veranderd. Zo zijn Phone7 en Azure nog belangrijker geworden. En met VS2012 moet ook Win8 ondersteund worden.
De VS2012 Express versie is nu beschikbaar voor Windows8, Web en alsnog voor de overige desktop applicaties.
Debugging is stiekem ook verder geevolueerd. Daar ging de sessie over.
Ten eerste bevat VS2012 een quick launch als aanvulling op het menu. Je kunt nu naar alle menu’s via tekstinvoer.
En zet dan in de options|debug even Enable Only my code even uit. Je krijg meer ruis maar je kunt nu ook dieper de stack in (voorbij External Code). Met source stepping kun je dan zelfs nog dieper en in delen van het .Net framework duiken. Ook hier is ook een vinkje voor. De symbols komen dan van Microsoft af via het web.
Er kwamen een paar basis debugging dingetjes voorbij. Breakpoints kunnen conditioneel gemaakt worden, je kunt ze labelen en groeperen om aan en uit te zetten (dan hoef je niet steeds de punten aan te maken en later weer te verwijderen) en importeren en exporteren (handig als je er een heleboel labels, condities aan gehangen hebt).
Variabelen kunnen ook gepint worden. Dan zie je zonder ‘hoveren’ de waarde tijdens het debuggen.
Remote debuggen zit nu ook in de express editie voor Win8. Het gaat ook op ARM werken. En anders werkt het vanaf de professional versie. En het mooie is dat het nu eenvoudig uit te rollen is en het werkt ook over WIFI.

Er moet op de doel machine gewoon “Remote tools” geinstalleerd worden. Het staat op de ISO en daarin op de remote tools folder. De firewall wordt wel even aangepast. Start dan een gecompileerde versie van de applicatie op gelijk aan de VS2012 versie. En attach nu VS2012 aan de draaiende applicatie op de doelmachine.
Voor Win8 Metro applicaties is er een simulator beschikbaar voor arm tablets. dit geeft een simulatie van een tablet met verschillende resoluties, basic touch en geo locatie. De simulator is ook praktisch om naast VS2012 een app te debuggen. Win8 apps draaien namelijk fullscreen.
De profiling is nu ook beschikbaar voor VS2012 Express Win8 editie. Profiling meet executietijden van methodes. Ik heb het zelf ook wel eens gebruikt en is best handig. Maar ik pak het meestal pas als ik de code verdacht langzaam vind. En de CPU sampling werkt op zich goed genoeg. Dit is dan ook de aanbevolen manier van profilen.
De pieken in de rapportage achteraf zijn het interessantste, dat is de ‘langzaamste’ code. En daarna refactoren daarna.
PDB’s bevatten de symbols die naast de code een complete debug versie vormen, ook na release. In TFS kun je een symbolserver opgeven die je symbols veilig stelt voor later gebruik.
Intellitrace kan uit een (debug) sessie de flow tonen maar ook heen en terug spoelen. Het is dus een soort van mediaplayer (voorheen videorecorder) van de flow. En er kunnen ook breakpoint in geplaatst worden. Intellitrace staat standaard aan, als het in je VS versie zit. Je krijgt dan ook een extra tabblad die de flow door de app toont. En je kunt terug gaan naar een eerdere versie om even opnieuw de flow door te lopen, in dezelfde sessie.
Een tracepoint lijkt op een breakpoint en wordt in Intellitrace opgenomen maar breakt de code niet.
Intellitrace werkt niet direct remote maar er is een Intellitrace Everywhere… Het is een mini VS2012 en die verzamelt de diagnostiek.
Na een kleine presentatie rond Phone 8 (komt niet op de lumia 800 en 900, sorry) op naar de Asp.Net Web Api sessie.
Het is niet de eerste poging rond Rest maar nu is het bovenop MVC gezet.
Ze hebben flink gewinkelt in de mogelijkheden van MVC zoals routing, binding validatie en filters, etc.

Web Api is inmiddels onderdeel van de MVC solution dus starten is eenvoudig. Maar out-of-bound komen binnenkort nog updates, het is tenslotte een open source project!
Dus bij het starten van een MVC4 solution, kan naast een aantal andere keuzes ook voor webapi gekozen worden. Na de benodigde installatie en het laden van nuget packages, staat daar opeens een (Api)Controller met een setje get, post, put en delete methodes.
Dit wordt via routing (Api is de differentiatie) als Rest opdrachten gezien en hoeft dus niet voorzien te worden van HTTPGet etc. De service snapt ook of deze JSon danwel Xml terug moetgeven (content negotiation).
Content Negotiation is via een extension method geregeld. Dit bespaart flink wat lastige code.
Een Entity Framework context kan ook eenvoudig als Rest aangeleverd worden. Hier is een aparte controller voor beschikbaar. Er zit ook een wizard voor beschikbaar maar die voegt niet zoveel toe. Nu wordt voor iedere entiteit (zeg Klant) een GetKlant, PostKlant, etc. aangemaakt. Zo kan heel eenvoudig een database of andere EF bron via het web beschikbaar gemaakt worden.
En we hebben nog steeds de beschikking over een ModelState.IsValid om de entiteiten te valideren. In de demo werd dit door Sayed Hashimi met Fiddler een Post samengesteld. Een Post was in de response met een Location Url en een primaire sleutel verrijkt.
Er zijn ook filters voor actions, authorisatie en exception.

En dan OData ondersteuning. Door een set van object als IQueryable te retourneren in een GET met daarop het attribuut [Queryably], is de GET een OData service geworden. Gaaf!
De Api is ook zelfbeschrijvend met de IApiExplorer. het is mogelijk om documentatie op te vragen over de methodes en deze zijn ook te verrijken met voorbeelden voor b.v. Xml en Json.
Hosting kan in IIS over via Selfhosting. Er werd een demo gegeven maar voor Unittests waarbij een API geinstancieerd werd, in memory. zag er wel spannend uit!
Uiteindelijk kwam er ook nog een HttpSelfHostingapplication voorbeeld naar voren. Self Hosting is lichtgewicht en heeft een performance voordeel als er geen visuele schermen aangemaakt moeten worden.
Web Api werkt voor MVC4 en hoger.
En dan eindelijk de door mij langverwachte OData sessie. Die werd gegeven door Paul Yuknewwicz. Het draait hierbij om het aanmaken en consumeren van OData, hopelijk.
OData is een eenvoudig formaat voor het serialiseren van data over het lijntje, met een query syntax om zoekopdrachten te verwerken en met metadata om de data zichzelf te laten beschrijven. OData is dus een service om data te openbaren en om data in op te slaan.
De demo van de GET met een aantal aardige filters was een NetFlix demo die al enkele jaren meegaat 😦 Maar de boodschap is nog steeds goed: de consument van de service kan een vraag stellen in de vorm van: geef mij alle films met de tekst ‘evans’ in de titel.
De output kan zowel het verbose XML als het zeer lichte JSon zijn. Dit werd met Fiddler aangetoond. Iedere taal of omgeving die met HTTP kan omgaan, is een potentiele consument.
Let wel even op de versie van de server, OData heeft een aantal versies, versie 2 is momenteel het meest gangbare. controleer dit dus even, anders krijg je niks of iets anders terug.
Van Microsoft producten die OData aanleveren werden genoemd oa. Excel Powerpivot, LightSwitch2011, SharePoint, Azure Marketplace en Azure zelf.
De volgende demo was erg leuk. Hij ontsloot de processen op een pc in Redmond. Dat is dus live data, geen gevulde database or zo. Vervolgens werd die met LightSwitch geconsumeerd in een visualisatie.

En hij kon ook in de gevisualiseerde data, een grid de read/write data aanpassen. In dit geval kreeg een service een andere naam.
LightSwitch kan ook OData produceren. Alles wat LightSwitch consumeert, wordt ook weer geproduceerd! Dus LightSwitch kan er een aardige MashUp van maken.
Azure DataMarket is data-as-a-service. Zo is er een air-carrier delay service om vertragingen van vliegtuigmaatschappijen op te zoeken. Dit werd met PowerPivot geconsumeerd.
Je produceert dus met:
– WCF Dataservices (voeg aan een standaard project een dataservice item template in VS2012 toe)
– Web Api – wordt steeds uitgebreider
– OData Library – ruw om eigen implementatie te maken
– LightSwitch
Er werd een Dataservice gebouwd rondom een Azure database. Dit is prima als je breed (alles) wilt vrijgeven of dit daarna wilt gaan beperken.
In versie drie wordt oa. Geo spatial data ondersteund en de Json is nog lichter gemaakt in JsonLight.
Daarna werd een service via WebApi aangeboden. Deze is zeer specifiek over wat je vrijgeeft. Begin met weinig en kan groeien.

Het voordeel van WebApi is dat deze alleen nog maar geinteresseerd is in IQueryable listen, geen datacontext meer. De data kan nu dus overal vandaan komen.
De laatste demo was een javascript voorbeeld.
En OData is gestandaardiseerd. Overheden kunnen hier dus gewoon gebruik van maken zonder dat ze voor Microsoft kiezen.