11juni

Microsoft DevDays 2009

Om bij te blijven en mezelf te blijven ontwikkelen, bezoek ik voor mijn werk regelmatig ICT-congressen en -bijeenkomsten. Vaak ben ik zelf een van de sprekers, maar nog vaker ga ik gewoon als mezelf – een geïnteresseerde professional en liefhebber. Eerder al blogde ik hier over onder meer

Vorige week (28 en 29 mei) was het de beurt aan de Microsoft DevDays, een evenement dat geheel is gericht op de developer die werkt met (voornamelijk) Microsoft tools – ofschoon dit jaar voor het eerst ook een aantal sessies was gewijd aan de integratie van het Microsoft-platform met onder meer PHP. Aangezien ik voor mijn dagelijks werk het meest met Microsoft-toepassingen ontwikkel (Visual Studio, SQL Server, Internet Information Server), is de DevDays bijna een verplicht nummer.

De DevDays waren dit jaar groter dan ooit te voren, met meer dan 80 sessies in twee dagen (tien parallelsessies tegelijk). Hierdoor is er letterlijk voor elk wat wils. Maar is het ook moeilijk om te kiezen. Gelukkig zijn alle sessies op videotape opgenomen, ze zullen online beschikbaar komen zodat je de sessies die je moest missen alsnog kunt volgen.

Daarnaast was er natuurlijk een grote informatiemarkt, kon je terecht voor boeken en opleidingen en tal van bedrijven hadden 'specialists corners' ingericht waar je over code kon discussiëren, vragen kon stellen of gewoon wat kon babbelen. Een paradijs voor geeks en nerds. Zolang je Microsoft-techniek een warm hart toedraagt, tenminste.

Hieronder een kort verslagje van de sessies die ik heb bezocht met waar mogelijk links naar meer informatie, zodat je zelf verder kunt zoeken.

Foto 1: De entree van de DevDays 2009 (photo: Rob Miles)

Dag 1 – donderdag 28 mei 2009

1. Keynote – The Azure platform, a perspective (David Chapell)

De kickoff voor de DevDays werd gegeven door topspreker David Chapell. In een zowel humoristische als buitengewoon (werkelijk buitengewoon) informatieve sessie over het nieuwe Microsoft Azure platform kreeg je in ruim een uur een prima overzicht van wat dit cloud-platform betekent, hoe het is opgebouwd en wat het heeft te bieden vanuit het oogpunt van de programmeur.

Erg goed vond ik met name dat het hele Azure-platform niet alleen maar werd opgehemeld, maar goed in een context werd geplaatst. Zo was er bijvoorbeeld ook aandacht voor de reeds bestaande cloud-architecturen van Amazon (Amazon Web Services, AWS) en Google (Google App Engine) en werd uitgelegd wat de overeenkomsten en verschillen met Azure waren.

Chapell is een begenadigd spreker en entertainer. Ook is hij een verklaard fan van internet als systeem op zich. 'Isn't it amazing that this whole cloud computing thing first took off by, of all means, a bookstore?!'(hij doelt op Amazon, dat AWS als eerste grote partij openstelde voor ontwikkelaars van derde partijen).

Cloud computing en het programmeren voor applicaties in de cloud is volgens hem nog maar de zesde grote ontwikkeling in inmiddels meer dan vijftig jaar computerhistorie. Na de mainframes in de jaren 50 en 60 ('they weren't called mainframes at that time, they were just computers. They're only called mainframes in hindsight'), de minicomputer in de jaren 60 en 70, de microcomputer (eind jaren 70), de personal computer (jaren 80 en 90) en het mobiele platform (2000-) is het cloud-platform het nieuwe, grote platform voor het programmeren en distribueren van applicaties.

'En of dat nu via de methode van Google, Amazon of Microsoft is, is minder belangrijk. Het is fantastisch om nu een developer te zijn, en dit te mogen meemaken. Geniet er van', zo stuurde Chapell zijn publiek de rest van de sessies in.

2. C# 4.0, the future of C# (Krishnan Subramanian)

Krishnan Subramanian (of kortweg 'Krish') werkt sinds 2005 als senior consultant voor Microsoft Nederland en is gespecialiseerd in .NET, Linq, C# en Visual Studio Team System. In deze sessie liet hij in een kort geschiedenislesje zien hoe C# is ontwikkeld (toch ook al weer tien jaar geleden, sinds 1998) via de verschillende versies en wat de highlights per versie waren. In het kort:

  • C# 1.0 – kickoff, eerste versie, eigenlijk nog niet helemaal gereed, onder tijdsdruk (van het nieuwe .NET-platform) op de markt gezet.
  • C# 2.0 – 'filling in the blanks', om er een volwaardige programmeertaal van te maken, met als belangrijkste nieuwe feature de toevoeging van Generics.
  • C# 3.0 – Mogelijkheden voor de eerste echte uitbreidingen op conceptueel niveau, zoals het toevoegen van LINQ.
  • C# 4.0 – Meer nieuwe opties om C# breder toepasbaar te maken.

De belangrijkste vernieuwingen die in de komende versie van C# beschikbaar komen, liet hij allemaal al werkend zien in een binnenshuis-build van Microsoft en het nieuwe .NET 4.0-platform. We moeten er nog even op wachten, maar daarna krijgen we onder meer (in een notendop):

Ondersteuning voor dynamische talen zoals Ruby en Python. Introductie van het nieuwe keyword dynamic. Hierbij wordt het type van een variabele dus pas runtime bepaald (dus: C# loosely typed, in tegenstelling tot het huidige strong typed-only model van C# 3.0 en eerder). Dit werkt ongeveer vergelijkbaar als dynamische variabelen in JavaScript en PHP, zo leek het. Een groot gemis is m.i. dan wel dat je (uiteraard) Intellisense in de Visual Studio IDE moet missen. Omdat er design time over het type immers niets bekend is.

Optionele parameters en benoemde parameters. Hoera! Eindelijk iets dat ik zo uitermate handig vind in Objective C (dat voor ontwikkelen voor de Mac en iPhone gebruikt wordt). Het is nu mogelijk parameters in een functiedefinitie een naam mee te geven en tegelijkertijd een default waarde. Dit gaat enorm veel tijd schelen in het schrijven van overloaded functies. Argumenten die je weglaat in een functie-aanroep, krijgen binnen de functie vanzelf hun defaultwaarden die je in de functiedefinitie hebt geschreven. Superhandig.

Bovendien wordt de functie-aanroep een stuk leesbaarder, omdat de naam van een parameter en zijn waarde tegelijkertijd in de functieaanroep geschreven kunnen worden, zoals in openFile(name:"file.txt", bufferSize:8012). Dit is beter dan een huidige aanroep als openFile("file.txt", 8012). Voor file.txt kun je in dat geval nog wel raden dat het hier om de filenaam gaat, maar waar de waarde 8012 op slaat moet je in dat geval maar gokken (of: via Intellisense of function insight opvragen, wat natuurlijk weer een extra stap is). Oftewel de C# 4.0-code is veel meer self-explainable dan eerdere versies en dat is een goed ding.

Beter COM-interoperabiliteit. Door het beschikbaar komen van optional parameters, is het schrijven van ellenlange functie-aanroepen naar COM-componenten (zoals Office-componenten) verleden tijd. Alle 'missing'-parameters mag je in C# 4.0 gewoon weglaten, omdat ze hun defaultwaarden krijgen. Ook dit zorgt voor veel compactere en meer leesbare code. En het scheel enorm veel ontwikkel- en debugtijd (ooit urenlang gezocht in een functie-aanroep waar uiteindelijk het elfde argument in een serie van achttien bleek te missen? Dat hoeft nu niet meer!)

Covariantie en contravariantie. Hier haakte ik even af – ik begreep het toen hij het uitlegde, maar kan het nu niet reproduceren. Ik heb er in mijn programmeerpraktijk nog niet mee te maken gehad, maar het zal ongetwijfeld een belangrijke stap voorwaarts zijn.

3. Visual Studio IDE Tips and Tricks (Sara Ford)

De goedlachse Amerikaanse Sara 'Tools, Options' Ford is een attractie op zich om naar te kijken. Oorspronkelijk kwam ze bij Microsoft te werken als tester van Visual Studio. Haar verantwoordelijkheid was er voor te zorgen dat de interface van VS voldeed aan de standaarden voor toegankelijke interfaces ('section 508'in Amerika) zodat ook blinde gebruikers overweg kunnen met het programma. Dus toen ze bij Microsoft kwam werken vroeg ze aan haar manager:

-'OK, ik moet dus Visual Studio testen met een screenreader. Hoe gebruik je zo'n screenreader eigenlijk op de beste manier?'

- 'Nou, ehh, dat weet ik niet. Probeer het eens met door je monitor uit te zetten?'

En dus, zo vertelde zij 'Heb ik Visual Studio drie maanden lang gebruikt, dag in, dag uit, 8 tot 10 uur per dag, alles getest en alles beschreven, zonder monitor'.

Dit heeft er toe geleid dat zij in de wereld waarschijnlijk het beste op de hoogte is van alle sneltoetsen, mogelijkheden en shortcuts die maar in de Visual Studio Interface aanwezig zijn. Ze heeft daartoe anderhalf jaar lang elke dag een 'tip van de dag' gepubliceerd op haar blog en deze ook gebundeld in een boek (waarvan de opbrengsten ten goede komen aan studiebeurzen voor kinderen uit haar geboortedorp aan de mond van de Mississippi, dat enkele jaren zwaar werd getroffen door de orkaan Katrina).

Een groot deel van de tips kende ik al en gebruik ik ook zelf dagelijks. En dan is zo'n sessie leuk om te zien dat je kennelijk op de juiste weg bezig bent. Een aantal andere tips waren ook voor mij eye-openers en zal ik zeker gaan gebruiken (Ctrl+Shift+V, cycle door het clipboard! Ctrl+ . om een smart tag te openen!). Een compleet overzicht van alle gepresenteerde tips vind je hier.

4. ASP.NET AJAX 4.0 (Fritz Onion)

Fritz Onion is medeoprichter van het bedrijf PluralSight en ASP.NET AJAX-specialist. In zijn sessie ging hij in op de komende vernieuwingen van het 4.0-platform. Onderwerpen waarvan hij demo's liet zien en ze toelichtte zijn onder meer

  • Live Data Binding (AJAX databinding op een template-achtige wijze). In HTML-code kun je placeholders aangeven als {{naam}} en {{product}}, waarna deze templates runtime worden vervangen door hun echte waarden (die achter de schermen uit de database worden gehaald).
  • Een JavaScript-dataContext (vergelijkbaar met de huidige server sided datacontexts waar je tegenaan kunt programmeren, maar dan geheel client-sided).
  • Script library refactoring,
  • Insluiting en ondersteuning van de JavaScript-bibliotheek jQuery.

De presentaties en demo's van Fritz Onion.

5. What's New in Silverlight 3 (Mike Taulty)

Mike Taulty liet zien welke items nieuw zijn in Silverlight 3. Het was het einde van een lange dag, en ik moet eerlijk bekennen dat ik dit deel niet meer helemaal heb meegekregen. Zelf doe ik (nog) niet veel met Silverlight, reden waarom dit waarschijnlijk een beetje is blijven hangen. Mocht je de blog-post van Taulty hierover zelf willen lezen, dan kun je dat doen op zijn blog.

Dag 2 – vrijdag 29 mei 2009

De eerste sessie van de tweede dag heb ik moeten missen, omdat ik pas om 11.00 uur in Den Haag kon zijn (Dieren - Den Haag is toch altijd nog een kleine 2 uur treinen), maar er bleef nog genoeg over om ook van deze dag een succes te maken.

6. Building RESTful Services with ADO.NET Data Services (Jurgen Postelmans)

Het maken van RESTful services met ADO.NET (voorheen: Project Astoria) is iets dat redelijk nieuw is, en dat ook (nog?) niet veel wordt gebruikt. Er was dan ook niet zo'n grote zaal gereserveerd voor dit onderwerp. Tot verbazing van Jurgen Postelmans puilde de zaal echter uit. Postelmans liet zien hoe op basis van de standaard Northwind-database via RESTful services gegevens konden worden opgevraagd. Via de querystring/URL zijn deze gegevens met eenvoudige functies nog te bewerken, zoals sorteren, filteren of pagineren.

Dit is een technologie waarvan ik waarschijnlijk niet veel gebruik zal gaan maken (ik gebruik meestal plain old SOAP webservices, voldoet tot nu toe altijd), maar het is goed voor je begrip en complete context van het .NET-platform om te weten dat het bestaat.

Wat -voor mij- wel enorm nuttig was aan deze sessie is dat Postelmans aan het einde tussen neus en lippen door even liet zien hoe je vanuit een ASP.NET-pagina lokaal de gegevens uit een webservice kunt consumeren (dit mag elke gewenste webservice zijn). Hier liep ik toevallig zelf de afgelopen week tegenaan bij het debuggen van webservices die ik had geschreven voor een project waaraan ik momenteel werk. Ik kon prima webservices schrijven en aanbieden, maar het zelf verwerken van gegevens uit een webservice (bijvoorbeeld in een GridView) had ik nog nooit gedaan. Nu weet ik hoe het moet, bedankt Jurgen!

7. Make yourself Rich with XNA (Rob Miles)

Rob Miles is docent aan de University van Hull en geeft daar onder meer lessen in programmeren met C#, waarbij veel gebruik wordt gemaakt van XNA om de basisbeginselen van programmeren op een leuke manier (namelijk: door het schrijven van eigen games) te leren. Deze presentatie was hilarisch van vorm en werd mede een groot succes door de typisch Britse humor van Miles ("Wait a minute, I've got to get my paper with Bad Jokes, in case of me getting stuck. If you've ever seen another presentation of mine, the jokes are still the same. Which makes them even worse, I guess").

Een eye-opener voor mij was dat games niet altijd afhankelijk zijn van flitsende graphics en spetterende high scores, maar dat vooral een origineel idee er aan te grondslag ligt. Nu weet iedereen dat natuurlijk wel, maar als je het gedemonstreerd ziet door Rob Miles, zie je hoe waar dat is. Hij kan complete competities verzinnen met alleen een Xbox-controller en een paar regels C# (verstop de controller ergens in de kamer en laat hem trillen. Een persoon moet de controller zien te vinden en op de A-knop drukken voordat de tijd voorbij is. Doet het ongetwijfeld goed op dronken feestjes). Deze, en meer van dit soort eenvoudige maar doeltreffende voorbeelden heeft Miles verzameld/verzonnen als grondlegger van verysillygames.com.

Zo had hij nog een aantal voorbeelden die wat mij betreft een treffende illustratie zijn van het 'out of the box' denken dat noodzakelijk is voor verdere innovatie. Iets dat in theorie iedereen zal beamen, maar in de praktijk o zo weerbarstig blijkt. Omdat het nu eenmaal makkelijker is reeds gebaande paden nogmaals te begaan, of omdat je opdrachtgever vind dat je nu wel erg ver out of the box bent gaan denken, enzovoort, enzovoort. Sinds deze lezing heeft het blog van Rob Miles een vast plekje in mijn RSS-reader gekregen.

In het technische deel van zijn presentatie liet Miles zien hoe de architectuur van een XNA-game er uitziet en wat er op de achtergrond allemaal gebeurt bij het laden van assets en het verwerken van graphics, sound en code. De voorbeelden zijn hier te downloaden: http://www.robmiles.com/journal/2009/5/29/xna-at-devdays-09.html

8. How Development is done @ Microsoft (Gert Drapers)

Gert Drapers is sinds 1991 werkzaam bij Microsoft en woont sinds 1996 ook in Redmond, USA. Hier is hij teammanager voor diverse productteams bij Microsoft (waaronder SQL Server, Windows Server en meer). Ik denk dat dit de enige sessie is waarbij ik geen regel code heb gezien, maar alleen maar werd gesproken over mensen, methoden en structuren.

In zijn openhartige presentatie gaf hij een kijkje in de keuken bij Microsoft. Hij besprak onder meer de manier waarop productteams zijn opgebouwd ([project]managers, developers en testers), hoe de onderlinge verhoudingen ongeveer zijn (1:5:5) en wanneer en waarom daarvan afgeweken kan worden. Ook liet hij zien welke methodieken en planningstools worden gebruikt tijdens het proces van het bouwen van nieuwe software. Drapers vertelde meer over de manier waarop hij mensen selecteerde voor zijn productteams en welke scholing ze verder nog moeten doorlopen voordat ze ook maar één regel code mogen bijdragen aan het eindproduct.

Wat ik echt opmerkelijk vond in zijn verhaal, was dat het proces van dogfooding bij Microsoft erg ver is doorgevoerd. Zo is op dit moment het pakket Visual Studio 2010 in ontwikkeling. De release hiervan wordt dit najaar (2009) verwacht, in combinatie met het .NET platform 4.0, nieuwe AJAX-tools, nieuwe taalversies (C#, VB.NET), enzovoort). Drapers vertelde dat binnen Microsoft iedereen al met VS2010 werkt, vanaf het moment dat de eerste interne build werd vrijgegeven.

Met andere woorden: binnen Microsoft worden nieuwe producten gemaakt met een versie van Visual Studio, die op dat moment nog niet eens klaar is. Het lijkt een beetje te werken als een hijskraan die zichzelf omhoog takelt tijdens het maken van een gebouw.

Oftewel: als je een bug vind in iets dat je hebt gemaakt, is dat dan je eigen schuld, of komt het misschien door de compiler die nog niet helemaal gefinetuned is? Dat moeten enorm lastige momenten zijn voor developers. Hetzelfde geldt voor Windows 7. Binnen Microsoft wordt alleen nog maar ontwikkeld op de nieuwste versie van Windows, een product dat eveneens zelf nog in het ontwikkelstadium verkeerd.

Na afloop van zijn presentatie vroeg ik hem hiernaar en Drapers zij zoiets als "tja, dat is inderdaad lastig, maar dat is nu eenmaal het gevolg van het feit dat wij Microsoft zijn. Wij maken het Operating System. Wij maken Visual Studio. We kunnen nu eenmaal niet naar iemand toestappen om te vragen of het beter kan, als we een fout vermoeden. We zullen alles zelf moeten ontdekken en deze fout rapporteren aan de respectievelijke ontwikkelteams. "

"Het zorgt er voor dat onze producten beter en stabieler worden, maar zorgt tevens voor een langere ontwikkeltijd omdat we noodgedwongen zelf werken met tools die nog niet klaar zijn. Hier moet ik als projectmanager in mijn estimates rekening mee houden".

9. ASP.NET AJAX Tips and Tricks (Gill Cleeren)

De laatste sessie van de devdays 2009 die ik bezocht was van Gill Cleeren, Regional Director voor Microsoft in België en MVP op het gebied van ASP.NET. Cleeren had acht AJAX tips voorbereid, die vanwege de beperkte tijd helaas niet allemaal aan bod konden komen. De tips die wel getoond konden worden waren zonder uitzondering erg nuttig voor webdevelopers.

En ondanks dat ik goed thuis ben op dit gebied, ging het toch wel erg snel. Natuurlijk, het is goed om code alvast voorbereid te hebben en deze in een demo-applicatie te plakken (in plaats van ter plekke alle code zelf te moeten typen), maar op deze manier gaat het vaak wel heel snel. Het zelf typen van code zorgt ook voor een rustpunt in de sessie, waarbij de luisteraar het getoonde even op zich kan laten inwerken en vooral verwerken en in een context plaatsen.

Dat bleef nu achterwege. Cleeren jaagde van voorbeeld naar voorbeeld, en sleepte grote stukken code binnen de demo-applicaties die aan het eind -niet verrassend- probleemloos bleken te werken. Het zou mijns inziens goed zijn om A) het aantal tips wat in te perken in een sessie van ruim een uur, bijvoorbeeld van acht naar zes en B) om de korte code samples toch zelf te typen, om even wat rust te kweken in de sessie.

Hoe dan ook, de inhoud was waanzinnig informatief. Cleeren besprak de volgende onderwerpen:

  • Een eigen Custom Extender maken in ASP.NET Ajax
  • Het History object gebruiken in AJAX, zowel client-sided als server-sided (een must voor alle AJAX-programmeur, wat mij betreft. Dit zou verplicht geïmplementeerd moeten worden :-).
  • ASP.NET authenticatie gebruiken in AJAX (super! Dit ga ik direct doen voor mijn applicaties - inloggen zonder de standaard ASP.NET-controls en verplichte postbacks)
  • Controls dynamisch toevoegen met het AJAX UpdatePanel
  • Sites lokaliseren (=meertalig/multicultureel) maken met ASP.NET Ajax (dit is een voorbeeld van demo die wat mij betreft veel te snel ging en daarmee zijn doel voorbij schoot)
  • Slider extender gebruiken voor een textbox (idem)
  • AJAX-animaties gebruiken (door tijdgebrek kwam dit item maar kort aan bod)
  • (zoek)Robots weren van je site (vervallen, eveneens door tijdgebrek).

Meer informatie over deze onderwerpen en de slides en demo's van de sessie van Gill Cleeren staan op zijn weblog.

Wat heb ik moeten overslaan?

Er waren nog tal van andere sessies die er op papier enorm interessant uitzagen, maar helaas parallel liepen met de sessies die ik heb bezocht (opmerking aan organisator Arie Leeuwesteijn: graag minder paralleltracks volgend jaar - of uitbreiden naar drie dagen :-). Ik hoop dat de video's online snel beschikbaar komen, zodat ik ze alsnog kan bekijken:

  • Building better User Interfaces - Jason Beres
  • Tasks and threading in .NET 4.0 - Ingo Rammer
  • Attack and Defense - securing ASP.NET applications - Keith Brown
  • Production Debugging of ASP.NET applications - Alex Thissen
  • Extending the Visual Studio 2010 Environment - Martijn Beenes
  • Functional Programming in C# - Oliver Sturm

Zodra de DevDays-video's beschikbaar zijn, zal ik bovenstaande sessies (en alle uitgebreid besproken sessies) linken naar de juiste video's online.

Peter Kassenaar
-- 01-10 juni 2009

Reacties zijn gesloten