TechEd 2010 Berlijn: Vierde dag

Gisteravond was het gezellig in de Tube Station, een trendy clubje in het
centrum van Berlijn. We waren uitgenodigd op de Belgian Country Drink. We hebben dus uitvoerig de voors en tegens van bier consumptie gesproken 🙂

Biertje?

Voor vandaag stonden wéér meerdere sessies op het programma. Dus net als
gisteren zal ik er enkele uitlichten.

Teched button

Managed Extensibility Framework

In het verleden heb ik meerdere ‘paraplu-applicaties’ geschreven. Hierbij was
het mogelijk om meerdere DLL’s met daarin verschillende overervingen van
dezelfde interfaces in te laten en te consumeren. Het koste wel wat werk met
reflection maar werkte heel aardig. Dit zal ook de basis zijn voor veel
factories en Inversion Of Control frameworks.

Dit kan ook met Managed Extensibility Framework. MEF is aanwezig in het
.Net 4 framework. Hierbij schijf je eerst een aantal klassen die je wilt
consumeren en die dus een Export attribuut krijgen. Met dit attribuut beschijf
je een unieke benaming van de ‘dienst’ die zo’n klasse biedt.

Vervolgens schijf je de code die gebruik maakt van een gewenste dienst en
wel door een variable met een Import attribuut te decoreren.  De Import is
uitgerust met een identificatie van wat je wilt consumeren (als identificatie
kan een string, een interface type, etc. of combinaties gebruikt worden).

Als laatste moet bij de start van het uitvoeren van de applicatie een
catalog in het geheugen opgebouwd worden van alle beschikbare Export klassen.
Dit kan bv. door een map op schijf te laten onderzoeken. Dit is dan mogelijk met
een de Directory Catalog.

Tijdens het daadwerkelijk consumeren van de variabele die met een Import
gedecoreerd is, zal via het MEF de beste match gezocht worden en de juiste
Export implementatie ingevoegd worden. Mochten er meerdere exports beschikaar zijn dan zal een exception opgeworpen worden.

Dit is een eenvoudige implementatie van MEF maar dit kan ook
uitgebreider. Ik heb een demonstratie gezien voor het automatisch inladen van
bv. meerdere validatieregels. Dit kan via door het combineren van een ImportMany attribuut en een Enumerable<> member.

De DirectoryCatelog heeft een Refresh mogelijkheid om de verzameling van
Export klassen bij te werken, bv. als er een nieuwe dll ineen map geplaatst is.
Maar dit moet je zelf aanroepen (bv. met een FileSystemWatcher). MEF is hierbij passief ingesteld.

Het is wel interessant om te zien wat gebeurt als een class met een
Export, dus welke geconsumeerd kan worden, zelf ook een Import heeft maar waar die Export niet geladen is en dus ontbreekt. MEF laat dan de gehele export
achterwege voor verbeterde stabiliteit.

Dino Esposito gaf al direct aan dat wat MEF doet, ook op andere manieren
opgelost kan worden. Maar ik ben best onder de indruk van de simpliciteit
waarmee MEF toegepast kan worden.

MEF is een soort van een Inversion of Control oplossing want je kunt code
injecteren. Maar er zijn ook een aantal verschillen (sorry, de sheet was al weer
van het scherm 😦 ). Probeer het dus eens uit.

Deep dive into EF4

Zo veel te vertellen, zo weinig tijd…

Performance

Als eerste werd er eea. over performance verteld en gedemonsteerd.
IntelliTrace is hierbij je vriend. Alle queries naar de database worden getoond.
Beperk hierbij dus het aantal roundtrips, zichtbaar in de IntelliTrace. Je kunt
ook beginnen met het vroegtijdig laten uitvoeren van alle metadata in EF4 zoals
executieplannen. Roep je LinQ statemens eerst eens aan met ToTraceString(). Er
werd ook een door TT gegeneerde Klas gedemonstreerd die alle basis queries voor EF4 genereerde. Hiermee kun je EF4 flink “opwarmen”.

Als je tabellen alleen readonly gebruikt, zet dan de ChangeTracking uit
op die tabellen. Dan worden er geen versies van de records bijgehouden. (Dit is
de MergOption op de tabel).

Gebruik ook eens de profiler om de traagste linq-queries te ontdekken en
pas die aan. Er was ook een lastige voorbeeld waarbij de linq query in code
‘gecompileerd’ werd (dit ging even te snel…). De sheets komen beschikbaar dus
ik kan ze aanbevelen om nog eens na te bladeren.

Repository patterns

Dit is de scheiding tussen Model en gebruik van de entiteiten. Hierdoor kan
je je beter concentreren op de functionaliteit en wordt de code beter
beheersbaar.  Hierdoor wordt het ook mogelijk om EF4 te vervangen door een
willekeurige andere oplossing zonder de businesslogica rond de data aan te
passen (een andere database er onder schuiven). Maar dat vonden ze minder leuk 🙂

Dus schrijf een repository class die een context als property krijgt en
gebruikt bij fucties zoals GetAll, FindOne, etc. een (Asp.Net MVC2) controller
gebruikt dan niet de context  zelf maar consumeert de repository.

Testability

Je wilt je repository ook unittesten, niet je model. Het model wordt wel
aangeroepen door de repository. Dus als je weet wat je aan de repository
meegeeft, dan weet je ook wat je er uit mag verwachten. Dus hoe bouw je een fake context?

Leidt eerst een interface af vande bewuste context. En injecteer de
interface in de repository. En de bestaande controllers worden via een extra
controllerFactory aangemaakt waarbij de EF4 context uiteindelijk in de
controllers geinjecteerd worden. En dan kan je de objectsets ‘mocken’ voor de
unittest. (code uit de demo’s komt beschikbaar). Dit heb ik in het verleden
geprobeerd maar toen werkte het  bij mij niet. Dus dit ga ik zeker nog eens goed
uitzoeken! Ik heb nog even gevraagd om de demo code en die gaat zeker online
beschikbaar komen!

N-Tier/Disconnected

Gebruik alleen een N-Tier oplossing als je dit echt nodig hebt. De
complexiteit gaat enorm omhoog en de beheersbaarheid omlaag. Maar als je het
toch wilt of nodig hebt, gebruik kan WCF samen met Self-Tracking objects uit
EF4. Je kunt TT templates laten toevoegen aan je model met daarin Self-Tracking (poco, etc.) objecten te genereren. Via de service geef je entiteiten door uit je model bij ophaalacties (Read). Maar bij update methodes (Write) krijg je
(wellicht) gewijzigde objecten terug van de clients en voer je de ApplyChanges()
op je model uit. De objecten die je uitdeelde aan gebruikers, komen dus wellicht
gewijzigd terug maar die informatie zit in de objecten zelf (vandaar
Sef-Tracking). Serverside is de context dus even onwetend. Dit zag er heel
aardig uit, zelf met een op de Database gegenereerde PK.

Dat was het weer voor vandaag. Overigens zal deze en andere informatie de
volgende maanden via XPG sessies beschikbaar komen.

Groetjes uit Berlijn!

PS: Voor degene die eens aan de slag willen met MEF… http://goo.gl/qKhLV

TechEd 2010 Berlijn: Derde dag

Gisteravond ben ik nog even naar de Watergate club geweest voor de Microsoft
Learning Community Party. Ik kwam nog wat oude bekenden tegen en dat was een leuke verrassing. We hebben veel over bier gesproken 🙂

Biertje?

Voor vandaag stonden weer meerdere sessies op de kaart. Ook vandaag waren het er teveel. Dus net als gisteren zal ik er enkele uitlichten.

Teched button

Architecture discovery with VS2010 Ultimate

Omdat bij mijn huidige project ontwikkeld wordt met de Ultimate versie van
Visual Studio leek het mij wel aardig om eens naar de Architecture tooling te
kijken. In deze sessie werden een aantal diagrammen gedemonstreerd in een
situatie dat er al bestaande, maar onbekende broncode in een solution zat. Hier
herhaal ik de hoogtepunten van de presentatie…

Dependency diagram

  • De Dependency Graph was toch wel indrukwekkend. Hiermee is het mogelijk om visueel door de code te navigeren compleet met drill-downs. Dit moet ik toch eens vaker gaan gebruiken.
  • De Dependency Graph kan via reflection ook omgaan met 3de partij
    cdll waar we de code niet van hebben.
  • Standaard gerefereerde assemblies en Generics-afgeleiden kunnen eenvoudig ge-hide worden. Dit maakt het veel overzichtelijker.
  • Hetzelfde diagram kan op veel verschillende manieren getoond worden. De representatie waarbij de paden zo kort mogelijk wordt gehouden was indrukwekkend. Omdat heel veel code je model klassen aanroept, zal dit groepje objecten al snel een cirkel vormen in je diagram. Dit maakt de code echt inzichtelijker.

Layer diagram

  • Deze toont de relaties tussen de verschillende lagen van je solution. En het kan ook gevalideerd worden. Het was niet helemaal duidelijk waar de keuzes voor de representatie op gebaseerd zijn maar ook dit zag er bruikbaar uit. Het helpt ook bij refactoring van niet-gewenste relaties (bv. een webservice aanroepen in je Business Logic Layer)
  • De Reverse Enginering (code -> model) stap kan dus ook uitgebreid worden met extra logica om eea. te verklaren
  • Even later werd verteld dat het opdelen van je solution in layers ook met de hand kan, maar daar werd niet verder op ingegaan.

Reverse Enginering met UML tooling in VS2010 Ultimate

  • Er is al enige tijd een extra Modelling Feature Pack (alleen voor MSDN subscribers) met extra diagrammen. Dit zal tzt. ook in de volgende Visual Studio zitten.
  • In de Feature Pack zag ik een echte UML klassediagram met dezelfde klassen notatie zoals in b.v. Rational Rose. Eindelijk. Dit werd gedaan via de Architectue Explorer, dus nog een nog een extra pane in je VS2010.
  • De Sequence Diagram (met opgave van de navigatie-diepte) geeft een nette beschrijving van een willekeurige methode en de onderliggende aanroepen. De leesbaarheid was heel aardig, compleet met de lifetime notatie. Helaas is het diagram niet meer aan de onderliggende code gebonden maar het is wel aan te
    passen voor nog meer informatie. Dit krijgt dan extra kleurjes want wellicht moeten de wijzigingen nog geïmplementeerd worden…

Kortom, er moet echt tijd geïnvesteerd worden om handig te worden met deze
diagrammen maar ik vind het wel een uitdaging. Dit kan ook gebruikt worden om op een eenvoudige manier tot mmer documentatie van je projecten te komen.

Building Business Applications with Visual Studio LightSwitch

<Zware stem>Is dit het einde van software-ontwikkeling door ontwikkelaars?</Zware stem> Via het pad van Start-Refine-Extend kunnen nu ook “gebruikers” in enige mate een applicatie bouwen, anders dan in Excel of
MSAccess. Dit was een presentatie van een Beta1 versie.

Start

  • Beschrijf data
  • Beschrijf schermen

Deze tooling is overigens ook relevant voor ontwikkelaars. Het lijkt mij een
aardige prototype of POC omgeving. Dit is natuurlijk gevaarlijk, het resultaat
is een toch al werkende applicatie (met alle beperkingen)..

Visual Studio LightSwitch is een aparte versie van VS2010 om standaard
gebruikers niet af te schrikken met alle developers opties. Het intergreert met
een bestaande Visual Studio als die al op de PC staat. De keuzes voor gebruikers
zijn beperkt maar ze moeten wel kiezen tussen VB.Net en C# .

De data kan uit een database, een SharePoint lijst of uit een Wcf Ria service
komen. De data moet daarna getypeerd worden (een telefoonnummer is geen string maar een PhoneNumber).

Wat opvalt is dat er wel degelijk ook code geschreven kan/moet worden. De
validatie op een dataveld kan gewoon in code geschreven worden en daar in een
Regular expression uitgechreven zijn.

Ook relaties tussen in een soort van klassendiagram aangegeven worden tussen
de entiteiten.

Vervolgens kunnen via een wizardscherm schermen toegevoegd worden. Dit zijn
voornamelijk CRUD en Search schermen en die sluiten aan op de data.

Hierna is de applicatie al te starten. Er is een menu, daarin zijn de (CRUD)
schermen als taken beschreven. En er zijn validaties, verplichte velden, etc. En
de database wordt netjes gevuld.

Overigens was het niet helemaal duidelijk of het een Winform of een Webform
applicatie was. Het kan ook door de SilverLight komen…

Refine

  • Voeg Business logic toe
  • Voeg Speciale queries toe

Er werden daarna, designtime maar ook (in een iets beperkte mate) runtime,
schermen aangepast Ik zag oa. een andere opmaak en andere controls keuze om het scherm op te leuken. Dit ging met een treeview van alle aanwezige controls op het scherm, compleet met bindingen. Schermen kunnen overigens ook vanuit code geparametriseerd aangeroepen worden.

Queries werden toegevoegd om in Search-schermen te gebruiken. De
Scherm-wizard reageerde ook dynamisch op de data die aangeboden werd.

Extend

  • Maak interactie met ‘ecosystems’
  • Voeg Silverlight toe
  • Intergreer met datasources

Deze laatste stap kwam helaas niet aan bod.

Ik zag ook nog Windowsauthentication en formauthentication voorbijkomen met
admin-tools voor users en rollen. En er kan per scherm of zelfs per tabel code
geschreven worden om de toegang te regelen.

Als je eenmaal klaar bent, kun je zelf publiceren (als 2-tier, 3-tier met
lokale client of 3-tier webserver-oplossing). Er wordt dan een soort van
installer samengesteld. Er is ook een connectionstring voor productie in
opgegeven worden.

Kortom, microsoft heeft in Visual Studio een aardige wizard toegevoegd om een
applicatie op te hoesten. Het is een prima oplossing voor hap/snap applicaties
en het is leuk voor ontwikkelaars om een voorstelling te maken van wat Microsoft op de achtergrond van de designers uitvoert. Het isi interessant genoeg om eens uit te proberen.

Kijk voor meer info http://msdn.com/LightSwitch (download, hands-on labs, blogs, forum)

TechEd 2010 Berlijn: Tweede dag

Voor vandaag stonden de eerste echte sessies op de kaart. En het waren er
zelfs zeven. Door de krappe pauzes, de enorme afstanden lopen en laptop/netwerk problemen was het wel even pezen.

biertje?

Er zaten een aantal sterke en minder sterke presentaties tussen en daarom ik
heb besloten om één sessie er speciaal uit te lichten.

Teched button

Code First for EF: “Great ideas require great data”

Het entity Framework (EF) is met Visual Studio 2010 een stuk
verbeterd. Persoonlijk werk ik er mee via ASP.Net MVC en ik vind het een heel
aardige oplossing. Het is niet heilig maar veel projecten worden er tegenwoordig
meer opgestart. Ik ging dus naar deze sessie om er nog meer van te leren.

Code First zit niet direct in EF4. Het is een CTP (nu nog versie 4) en
binnenkort komt versie 5 uit. Code First gaat uit van het eerst bouwen van
entiteiten en een entity-context vanuit code. Vervolgens wordt de code
automatisch geëvalueerd en daarna wordt volledig automatisch de database erbij
aangemaakt of onderhouden. De presentatie werd met een MVC2 applicatie demo ondersteund. Dit is wat ze deden:

Stap 1: maak enkele eintiteiten in code aan zoals Klant/Order klassen en
een DBContext afgeleide. Dit lijkt eigenlijk erg op de code die normaal door EF
wordt gegenereerd maar dan in heel veel minder regels en naar eigen smaak…

Stap 2: Codeer een  MVC controller die de DBcontext consumeert. En er
wordt nog een View bovenop gezet…

Stap 3: Compile, run en het draait. En er is ook gelijk al een database!

Bij conventie wordt gebruikt Sql Server. En er wordt een database
aangemaakt, met de context-naam, als er nog geen connectionstring is. En Code
First maakt tabellen en kolommen aan. Zelfs sleutels en relaties worden
aangemaakt. Het is zelfs zo handig om verschillen tussen database en code te
onderkennen.

Er zijn dus veel convensties. Maar die zijn veelal te overriden. Dus
draait alles om data-annotaties (attributen).

Naast de bestaande annotaties zijn er een aantal bijgekomen. Ik zag zo:
StringLength(255, MinimumLength=1) en NotMapped (dus dan wordt een
calculatie-veld niet in dataase opgeslagen).

Als je een property als Virtual aanmaakt, dan wordt die op de achtergrond
lazy opgelost. Bv. public virtual List<Order> Orders maakt dat de orders
lazy bij de klant worden opgehaald.

Bij collision tussen code (-wijziging) en de database kun je eea. handmatig
aanpassen of een Inititalzer schrijven. Bv. om de database eerst te droppen,
weer aan te maken en direct al de nieuwe database-data te vullen (bij iedere
F5). Er zijn dan geen collisions meer 🙂

Je kunt je eigen initalizers schrijven. En bij de start van de applicatie (bv. in de global.asax) moet deze even aangeroepen worden. Klaar..

De creatie van de DB kan redelijk goed gestuurd worden via het overriden
van de DBContext.OnModelCreating via fluent notatie. Zo kun je bv.
entity-overervingen in een andere tabel plaatsen dan de gewone klassen, via
code. Dit maakt wellicht ook een N op M relatie een stuk eenvoudiger. Nadeel is
wel dat je dit voor alle tabellen moet gaan uitschrijven.

Wat er in de DB gebeurt, wil je eigenlijk niet weten (..) Er is wel eea.
gedemonstreerd en dat zag er best aardig uit. Maar er zal een functie komen
waarbij DB wijzigingen zichtbaar worden van een bestaande database naar nieuwe database.

OData wordt ook ondersteund door EF4 Code First. En die kan dan bv. met
Excel powerpivot toegepast worden. Of het is via een Phone 7 (emulator) te
bekijken.

Geinteresseerd? Download dan nu Ctp4:http://Bit.ly/aCmC2H . Ikzelf wacht nog even op Ctp5, die komt binnen één maand beschikbaar. Ik heb achteraf nog met de presentator Tim Laverty gesproken. Mijn grootste probleem met EF4 is dat het amper bruikbaar is voor Unittesten. De EF tabellen en context laat zich lastig vangen in mocking frameworks. EF4 blijft maar zeuren om een connectionstring terwijl ik alle data in het geheugen wil hebben als mock.

Met Ctp5 wordt het mogelijk de data lokaal in het geheugen te houden.
Zolang je geen ApplyChanges uitvoerd, blijft het werken. Hiermee wordt het
mogelijk de context met eigen gevalideerde data te vullen om zo alle Linq
statement in de repository te testen. Eindelijk.

Code First komt uiteindelijk in Q1 van 2011 echt beschikbaar vanuit
Microsoft. En dat is dus al snel.

En dan waren er nog wat EF Futures:

  • Enums
  • Spatial types
  • Alternate keys
  • Table values functions
  • Migratie / deployment
  • Performance /scalability
  • Designer (multiple diagrams)
  • Linq

Alles bij elkaar wordt EF weer een stukje volwassener. Succes!

TechEd Berlijn 8 november 2010

Het is maandag, mijn eerste dag op de TechEd 2010 te Berlijn. Vanmorgen zijn
Tjeerd Hans, Robin en ik rustig opgestaan en naar de Messe afgereisd. Ons hotel
ligt lekker centraal aan de Kurfürstendamm en we hadden gisteren al
geregistreerd dus geen enkele haast nu.

Kurfurstendamm

Vandaag is er de keynote om 16.00uur en eerst zijn er nog oa. een aantal
pre-conferences. Wij hadden gekozen voor een aantal workshops over het testen en doorlichten van beschillende types applicaties.

TechEd Entrance

Helaas hadden meer conferentiegangers hier ook zin in en zat de sessie
steeds vol. Gelukkig worden ze komende week nog eens herhaald en dan zijn ook de ‘bugs’ er uitgehaald 🙂

Teched button

Ook waren er nog hands-on trainingen en Tjeerd Hans en ik hebben een aantal
Windows Phone 7 labs gedaan, waaronder die met SilverLight. Dit werk eigenlijk
best aardig! Mocht Silverlight het toch niet in de browser halen door de
concurrentie met HTML5, dan landt het toch nog prima in Windows Phone7.  Een aantal van deze labs zijn ook beschikbaar via http://www.freecareerkit.com/ van Microsoft.

En toen was er de Keynote zelf. Met 6000 aanwezigen was deze uitverkocht, de
zaal zat dan ook ontzettend vol.

Keynote 2010

Persoonlijk viel mij deze nogal tegen. Het grootste gedeelte was (80+
procent) van de boodschap was voor IT-Operations collega’s bestemd. Er werd voor developers alleen even over Windowns Phone 7 en Azure gepraat.

Toch wil ik een aantal opvallende zaken opsommen:

  • Brad Anderson noemde Windows Phone 7 de “Best phone ever” J . Hoewel ik er minder sceptisch tegenover sta dan veel collega’s, moet dit eerst maar eens bewezen worden.
  • De Panorama interface is wel fraai. Je ziet een gedeelte van een groter geheel dus je hoeft niet steeds op next te drukken voor de volgende pagina. Je blijft maar doorscrollen. Maar de demo stopte soms ook halverwege twee pagina’s…
  • Windows Phone 7 wordt heel goed beschikbaar door de gratis ontwikkelomgeving
    in VS2010 incl. emulators. Silverlight ontwikkelaars zijn nu ook Phone 7 ontwikkelaars.
  • Er is volop OData ondersteuning, bv. een OData collectie uit een Ebay odata proxy . Leek veel op Rest dus daar willen we wat meer over weten de komende week. wat is er zo speciaal aan? De Odata SDK is beschikbaar.
  • Microsoft ontdekt de klant: “The user has to be the center of the model” Focus on the user!
  • Windows 7 blijft hot voor MS. Schatting: 88% bedrijven gaat naar W7 over in de komende 2 jaar
  • RemoteFX biedt de mogelijkheid om op server-side de GPU te virtualiseren.
    Virtueel ziet windows er net zo uit als lokaal op de PC. Bv. Flash op de remote desktop wordt fullscreen getoond.
  • Dynamic Memory. Door het dynamisch toekennen hardware van memory aan virutele omgevingen (HyperV oplossing. Citrix werd ook bij betrokken) kunnnen 40% meer sessies per server draaien.
  • Office 360 / Windows Intune … “Enabling users with the cloud” Is dit: domeinen en users beheren en de workload (exchange, sharepoint sitecollections, lync (messenger/netmeeting) federations) onderhouden?
  • Office360 integreert in de lokale Office / met de cloud en je kun daardoor b.v. simultaan een document wijzigen.De demo was simpel maar wel aardig. Maar over geld werd niet gepraat. Wat gaat Office360 kosten?
  • ForeFront Endpoint protection 2010 RC nu beschikbaar. http://www.microoft.com/forefront (??)
  • Azure draait nu bij MS op 6 datacenters in de wereld. Maar in de toekomst kun je het ook zelf op eigen ijzer of bij je favoriete hoster Azure gaan draaien. Geen datum genoemd…

Gelukkig zijn de presentaties en de workshop van de komende dagen wel meer op Developers gericht. Dus vanaf morgen gaat het echt los.

Tot morgen,

Sander van de Velde, Tjeerd Hans Terpstra en Robin de Hart

Nog enkele links

Het laatste nieuws over de TechEd staat op http://europe.msteched.com/

Je kunt met de Twitterwall op http://mtmatters.devman.nl/ en met tag
TEE10 de alle tweets volgen.

We zijn ook afzonderlijk te volgen op http://www.twitter.com/svelde en http://twitter.com/tjeerdhans