Op 15 februari vanaf 18u15 geeft Beth Massi een gratis Masterclass Visual Studio LightSwitch. Wees er snel bij, want je kunt je tot 10 februari inschrijven en er is een beperkt aantal plaatsen. Zie de uitnodiging hieronder voor meer informatie.
Soms verandert de realiteit zo snel dat iets wat in een magazine bij mensen op de deurmat valt alweer verkeerde informatie staat (tja, dat heb je als op de PDC weer van alles aangekondigd wordt). In mijn artikel voor SDN Magazine 103 - ASP.NET onder de motorkap: ASP.NET op bezoek bij de browser staat een link naar de ASP.NET AJAX Library die inmiddels al verouderd is en een foutmelding oplevert. Je kunt nu naar http://ajax.codeplex.com/. Met dank aan Leo Broos die me liet weten dat de oude link niet meer werkt.
Iedereen die mijn sessie bezocht heeft tijdens de SDE van 30 maart bedankt voor het luisteren. Hieronder vind je links naar de slides en voorbeeldcode.
Geavanceerde UI Technieken voor SharePoint Slides (126.2 KB) | Samples (447.66 KB)
De voorbeeldcode bevat ook een installer om de WebParts uit te rollen. Je moet wel even uploadskinfeature.bat aanpassen om naar de juiste server te wijzen.
Microsoft heeft ten aanzien van jQuery een opmerkelijke stap gemaakt. In plaats van zelf iets jQuery-achtigs te maken, heeft Microsoft aangekondigd jQuery zelf te gaan ondersteunen en nieuwe onderdelen van ASP.NET AJAX op jQuery te baseren. Dit is zowel door jQuery als door Microsoft bevestigd. Ik ben hier persoonlijk zeer verheugd over en ik hoop dan ook van harte dat Microsoft deze lijn doorzet. Ik heb veel liever dat Microsoft ondersteuning biedt voor (toonaangevende) bibliotheken dan er zelf een (vaak minder goede) kopie van te maken. Overigens is het niet alleen zo dat Visual Studio jQuery technisch gaat ondersteunen, maar ook dat klanten van Microsoft support kunnen krijgen via Microsoft. Ik ben benieuwd of er nog meer gaat volgen in deze richting.
LINQ to SQL ontwikkelt heerlijk als je weet dat je alleen tegen SQL Server hoeft te praten. Maar LINQ to SQL voegt wel weer een extra laagje toe, waardoor de kans groot is dat er vertraging optreedt. Hoewel... LINQ to SQL doet ook aan caching, dus als je veel met dezelfde data moet werken, hoef je niets extra's to doen om code aanzienlijk sneller te laten lopen dan wanneer de database iedere keer benaderd moet worden. Rico Mariani geeft in vijf delen een aardig inzicht in de performance van LINQ to SQL en wat je kunt doen (of niet hoeft te doen) om de performance te verbeteren. Het eerste deel, met links naar de andere delen, vind je hier.
Ik kan soms best vergeetachtig zijn. In dit geval wel schandelijk, want ik ben volkomen vergeten te melden dat ik een nieuw boek uit heb: ASP.NET 3.5 - de basis. Net als z'n voorganger ASP.NET 2.0 - de basis een boek om te leren werken met ASP.NET. Het is gebaseerd op z'n voorganger, maar bevat behoorlijk wat nieuw materiaal over o.a. ASP.NET AJAX en Language Integrated Query (LINQ). Uiteraard komen ook de nieuwe ASP.NET server controls aan bod.
Op zaterdag 6 september organiseren dotNED, SDN en VBCentral samen Code Camp 2008. Vorig jaar kon ik er helaas niet bij zijn, maar dit jaar zal ik er niet alleen bij zijn, maar ook een sessie doen. Omdat ik heel erg hou van interactie doe ik een zogenaamde Chalk & Talk. Dat is een sessie waarbij interactie met de groep voorop staat en er niet een vooraf vastgestelde agenda is. Het onderwerp van de sessie in Omgaan met data in een Service Oriented Architecture. In een SOA is een service namelijk verantwoordelijk voor een bepaald domein en de data die daarbij hoort. Een join doen met in de database met data van een andere service bijvoorbeeld is uit den boze... of toch niet? Dat zijn het soort vragen die aan bod komen in deze sessie. Hopelijk tot ziens op Code Camp 2008!
JavaScript Intellisense in Visual Studio 2008 is een prachtig stukje demoware. Het lijkt op het eerste gezicht allemaal heel aardig te werken... totdat je er zelf echt mee aan de slag gaat. En met "echt" bedoel ik voor productie, niet die leuke demotjes. Dan loop je tegen zoveel problemen aan dat je wat mij betreft moet concluderen dat het (op z'n zachts gezegd) "nog niet biedt wat je ervan zou verwachten". Ik heb al heel wat tijd verspijkerd om de comments van mijn scripts goed te krijgen, zodat VS ermee overweg kan. Niet zelden zonder het gewenste resultaat. Deze blogpost van OpenSource Connections geeft een goede opsomming van wat ik bedoel.
Ik wist dat het ooit eens zou gebeuren, maar ooit is sneller gekomen dan ik dacht. Ik ga Ordina verlaten en ga naar Batavia Software. Wie? Batavia Software. Dat je daar nog nooit van gehoord hebt kan kloppen. Het is een nieuw bedrijf dat ik samen met drie andere mensen begin. Een kleine FAQ over Batavia Software (zie voor mee informatie de kersverse website):
Wat gaan we doen? Software projecten op basis van een hoog kwaliteitsconcept.
Met welke technologie? Microsoft .NET natuurlijk, en daarbij SharePoint, BizTalk, Commerce Server en nog wat aanverwante artikelen.
Wat maakt ons anders? Onze aanpak, maar meer nog de manier waarop we onze medewerkers begeleiden. We besteden elke week enkele uren aan het verbeteren van de kennis van onze medewerkers. Daarnaast werken we binnen projecten met methodes waardoor onze medewerkers ook tijdens projectwerkzaamheden groeien. Tot slot werken we niet alleen met Nederlandse ontwikkelaars, maar ook met Indonesische mensen die hier als kennismigrant voor een aantal jaar naartoe komen. Hiertoe zijn wij geautoriseerd door de IND.
Ik wil meer weten! Kijk op onze website en/of neem contact met me op.
Mijn nieuwe boek XML - de basis ligt vanaf 1 oktober in de winkel. Het behandelt de belangrijkste onderdelen van XML, zoals de opbouw van XML zelf, XML Schema, DOM, XPath, XSLT en XQuery.
Op 17 en 18 september is in ons land weer de Software Developer Conference (SDC) georganiseerd door het Software Developer Network. Hier zijn een aantal toonaangevende internationale sprekers te zien waarvoor je normaal gezien naar het buitenland moet. Zeker de moeite waard dus. Zie http://www.sdc.nl voor meer info. Ik weet zelf helaas nog niet of ik erbij kan zijn, hoewel Ordina wel een stand heeft.
Dino Esposito gaf vanmorgen een sessie over Async Pages in ASP.NET. Toevallig heb ik op VSLive een vergelijkbare sessie gedaan en Dino wist dat ik daar een demo in heb zitten die laat zien wat de schaalbaarheids voordelen zijn van Async Pages. Dino is een goede bekende van me en hij nodigde me uit om mijn demo aan het eind van zijn sessie te doen. Het was leuk om weer eens met Dino op het podium te staan en wat toe te kunnen voegen aan zijn verhaal. De demo code is te vinden bij de demo's van VSLive. De tool die ik gebruikte was Application Center Test van Visual Studio 2003. Ik vind die tool handiger voor dit soort tests dan de tools in VS2005.
De dag na DevDays organiseert DevConnections twee workshops:
- ASP.NET AJAX Extensions Inside Out door Dino Esposito
- Optimising and best practices for all SQL Server 2005 features door Bob Beauchemin
Als je nog wat wilt leren na DevDays, dan is dit een hele goede kans. Beide sprekers kennen het onderwerp van haver tot gort, dus het is zeker de moeite waard. Nog niet helemaal overtuigd? Bob en Dino spreken allebei op DevDays, dus als je daar bent kun je eerst even een kijkje nemen. Je kunt je op de DevDays eventueel ook inschrijven voor een van de workshops.
Het Office platform is zo onderhand behoorlijk groot aan het worden en je weg vinden wordt dan ook steeds lastiger. Met de Microsoft Office Interactive Developer Map kun je de weg weer vinden. De Developer Map is een WPF applicatie met een overzicht van alle technologieen de van toepassing zijn op het Office platform. Door te klikken op een bepaalde technologie krijg je allerlei detailinformatie en documentatie, of wordt je naar het betreffende MSDN Developer Center gestuurd. De definitie van de "kaart" werkt zichzelf bij van de servers van Microsoft als er zaken veranderen dankzij het gebruik van WPF/XAML. Cool!
.jpg)
Een goed overzicht met tips van Scott Hanselman.
Dat er in 2007 geen PDC zal zijn verbaast me weinig. De meeste grote aankondigingen zijn al gedaan op de MIX. De zaken die daaruit komen, zijn eind dit jaar begin volgend jaar beschikbaar. De PDC zou dus moeten gaan over wat er daarna komt en dat is nog te verweg om echt wat zinnigs over te zeggen. Volgend jaar beter. Het scheelt in elk geval weer een tripje naar de VS.
Ik werk al zo lang met ASP.NET 2.0 dat ik dacht alles wel een keer gezien te hebben, maar nu blijkt er toch iets aan mijn aandacht ontsnapt te zijn: de Health Monitoring API. Deze API is qua functionaliteit vergelijkbaar met log4net en het logging Application Block van Enterprise Library. Hoewel dat beide goede logging biedt ben ik toch altijd wel een voorstander van functionaliteit die "out-of-the-box" beschikbaar is, omdat je daarmee zekerder bent van de levensduur en bugfixes. Ook als je een ander loggingmechanisme gebruikt is het dus zeker de moeite waard om even naar de Health Monitoring API te kijken. Een goed startpunt is How To: Use Health Monitoring in ASP.NET 2.0 van de Pattern & Practices groep.
ODF is in feite een concurrent van Microsoft's Open XML bestandsformaat. Opmerkelijk is dan ook dat Microsoft voor gestemd heeft voor de toevoegen aan American National Standards list van ANSI. Wellicht dat dit politieke goodwil tonen is om in een later stadium ook Open XML op de lijst te krijgen.
Wil je meer weten over Silverlight? Dan is silverlight.net een goed startpunt, met onder andere een aantal video tutorials. Een aantal sessies van de MIX conference en meer informatie over Sliverlight kun je vinden in deze blogpost van Scott Guthrie. Scott Hanselman heeft daarnaast een lijst met voorbeelden verzameld in zijn post Silverlight samples.
Windows "Longhorn" Server Beta 3 is te downloaden van het MSDN Evaluation Center. Onderdeel van deze release is ook IIS7 die te gebruiken is met een Go Live License. Dat betekent dat je er mee in productie mag gaan, maar wel voor eigen risico. Meer over de mogelijkheden van IIS7 is te lezen in deze blogpost of op www.iis.net.
Het gebeurt niet vaak dat ik schrijf over dingen die niets met techniek te maken hebben, maar soms maak ik graag een uitzondering, zo ook nu...
Wij waren vandaag uitgenodigd voor een brunch waar iemand wat ging vertellen, meer was ons niet verteld. De vertelling was van Marieke de Lange, die op eigen houtje en uit eigen zak naar Afrika gegaan om daar kinderen te helpen door met ze een theatervoorstelling te maken. De beste vergelijking die je kunt trekken is met de organisatie Right To Play van Johan Olaf Koss, en in die lijn is Marieke nu ook meer mensen bij het project aan het betrekken. Met een kleine subsidie en donaties van particulieren en bedrijven gaat ze verder met het helpen van (kans)arme jongeren in de derde wereld. Ik kan het lang niet zo goed zelf vertellen, dus neem de moeite eens om op Marieke's blog te kijken. It blew me away!
Ik kreeg net de email van Microsoft binnen dat ik weer de gelukkige ontvanger ben van de Microsoft Most Valuable Professional (MVP) Award. Die erkenning is natuurlijk altijd weer leuk. Bedankt Microsoft. Hopelijk kan ik ook komend jaar eer doen aan de award.
Reflector is een heerlijke tool waarmee je dde code kunt bekijken in asemblies, ook de System... assmeblies van Microsoft (heeeel leerzaam). Als je Reflector nog niet kent, haast je naar http://www.aisto.com/roeder/dotnet/ om 'm te downloaden. Ken je 'm wel al, haast je dan ook naar http://www.aisto.com/roeder/dotnet/ (of doe Check for Updates in je huidige versie).
Het is heel gewoon om classes in een library public te maken, maar eigenlijk is dit helemaal niet handig. Dat betekent namelijk dat de class vanuit alle code die de library gebruikt beschikbaar is. Met andere woorden de class maakt onderdeel uit van de interface van de library. Er zijn meerdere redenen waarom dit onwenselijk is:
- De interface is onnodig groot en voor gebruiker van de library kan het daarom onduidelijk zijn welke classes gebruikt moeten worden.
- Het is veel lastiger om te achterhalen welke verbindingen er bestaan tussen de library en eventuele clients. Dit is bijvoorbeeld lastig bij refactoring.
- Het is in een client mogelijk om een sub-class te maken, terwijl dit wellicht niet de bedoeling is.
Veel beter is om classes internal te maken. Dit is ook standaard zo als je geen access modifier plaatst. Daarmee zijn classes alleen beschikbaar voor code binnen dezelfde assembly (tenzij men reflection gebruikt).
Het is verstandig om opo dezelfde manier even stil te staan bij class members. Die zijn standaard private, en als je dat verandert kun je ze protected (alleen beschikibaar voor de class zelf en sub-classes), internal, protected internal (protected of internal) of public maken. Als je dit consequent toepast kun je ook reflection tegengaan door de class te markeren met [ReflectionPermission(SecurityAction.Deny)]. Daarmee is de boel niet alleen veel handiger, maar ook veel veiliger.
Ik zie in code geregeld dat het Session object op allerlei plaatsen gebruikt wordt, met name in pagina's en controls, als volgt:
public void Page_Load(object sender, EventArgs e) { Session["MySessionVar"] += 1; }
public void Page_PreRender(object sender, EventArgs e) { Label1.Text = Session["MySessionVar"].ToString(); }
Dit is om meerdere redenen niet aan te raden:
- Omdat de collectie loosely typed is, is er geen compile-time check bij het benaderen van de elementen in de collectie. Het is daarom heel makkelijk om een typfoutje te maken, waardoor je tegen het verkeerde object aan praat.
- Door elementen in het Session object te stoppen in de pagina, is er geen centrale administratie van de namen (keys) die in gebruik zijn.
Je kunt beide zaken oplossen door een centraal object te maken waarmee je de elementen in het Session-object benaderd, als volgt:
/// <summary> /// Strongly typed toegang tot Session-object. /// </summary> internal static class TypedSession { public static int MySessionVar { get { object o = HttpContext.Current.Session["MySessionVar"]; if(o == null) return 0; return (int)o; } set { HttpContext.Current.Session["MySessionVar"] = value; } } }
public void Page_Load(object sender, EventArgs e) { TypedSession.MySessionVar += 1; }
public void Page_PreRender(object sender, EventArgs e) { Label1.Text = TypedSession.MySessionVar.ToString(); }
Merk op dat bij de get-accessor eerst gekeken wordt of het object null is. Dit is nodig omdat een int niet null mag zijn. Voor objecten waarvoor dat wel mag kun je desondanks besluiten dat er een standaardwaarde moet zijn, bijvoorbeeld een nieuw object.
Deze methodiek werkt ook uitstekend voor de Request.QueryString collectie en meer van dat soort collecties die je normaal gezien loosely typed gebruikt. Die zal je niet zo snel centraliseren, omdat het juist op een bepaalde pagina van toepassing is, maar daarmee strongly typed kunnen werken is nog steeds minder foutgevoelig. Bovendien hoeft de ontwikkelaar niet te weten waar de data vandaan komt.
Onlangs kreeg ik de volgende melding in Visual Studio 2005: The project file ' ' has been renamed or is no longer in the solution. Hierdoor was het niet meer mogelijk om ook maar iets van het project te bouwen. Het vervelende aan dit probleem is dat je geen idee hebt wat er nu eigenlijk aan de hand is. Na enige tijd vond ik uit dat dit gebeurt als een Web Project referenties bevat naar assemblies of projecten die het niet kan vinden. Je lost dit als volgt op:
- Rechts-klik op het Web project en kies Property Pages.
- Er verschijnt een venster met alle referenties, zowel naar de bin-map, GAC of andere projecten in de solution.
- Verwijderer de referenties gemarkeerd met (unavailable).
- Waarschijnlijk kun je nu niet bouwen omdat je assemblies mist. Als je de referenties daar naartoe maakt zou alles moeten werken.
XQuery 1.0 en XSLT 2.0 hebben heel lang op zich laten wachten. Al drie jaar geleden wilde ik een boek schrijven over XQuery en toen was volgens W3C de specificatie bijna klaar. Dat "bijna" was dus een ruim begrip... maar goed, ze hebben nu eindelijk W3C Recommendation status verworven. Moet ik de voorgestelde inhoudsopgave voor m'n te schrijven XML boek helaas wel aanpassen :(.
Hoera! ASP.NET Ajax 1.0 is beschikbaar. Met ASP.NET Ajax kun je pagina's maken die alleen die delen van de pagina verversen die ook daadwerkelijk gewijzigd moeten worden. Dat scheelt netwerkverkeer, maar maakt bovendien de gebruikerssinterface veel mooier.
Maar, het is nog beter. Microsoft geeft ook de source code vrij van ASP.NET Ajax! Je kunt de source code hier downloaden. De source code wordt uitgegeven onder de Microsoft Permissive License (Ms-Pl), die het toestaat om de broncode aan te passen en in aangepast vorm te gebruiken en te verspreiden. Dat smaakt dus min of meer als open source.
Onlangs schreef ik ASP.NET 2.0 - de basis, een boek voor de beginnende ASP.NET ontwikkelaar. In dezelfde serie ga ik nu ook nog een boek schrijven over mijn oude liefde XML. 6 jaar geleden heb ik al eens een boek geschreven over XSLT, Sams Teach Yourself XSLT in 21 Days, en nu komt daar een soort vervolg op voor mij. Ik vind het daarom leuk dat de uitgever mij gevraagd heeft of ik het XML boek in de serie voor m'n rekening wilde nemen. De goede samenwerking rond het ASP.NET boek was voor mij een belangrijke reden om daarop "ja" te zeggen.
Van 25 t/m 29 maart is in San Fransisco VSLive (ASPLive) waar ik twee sessie ga doen over ASP.NET:
- Understanding Multi-Threading (in ASP.NET)
- Creating Scalable Apps with Asynchronous Processing
De eerste sessie gaat in op het feit dat ASP.NET een multi-threaded omgeving is en bekijkt wanneer en hoe dat relevant is voor ons als (web) ontwikkelaars. De tweede sessie bespreekt asynchronous pages, handlers en modules, waarmee je de schallbaarheid van je applicatie kunt verbeteren zonder extra hardware. Zie voor meer informatie de sessieomschrijvingen op de site van VSLive.
Sinds 1 januari gebruikt slovenie de euro en dus moeten alle e-commerce sites over op de euro. Of eigenlijk beter gezegd, de culture settings van Windows moeten nu gebruik maken van de euro voor Slovenie. Helaas is dit niet aan te passen (verandert automatisch terug) en zou er dus een Windows update moeten komen. Zolang die er niet is, moet je de standaardinstellingen overschrijven. Dit kan met de volgende code:
CultureInfo culture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone(); culture.NumberFormat.CurrencySymbol = "€"; culture.NumberFormat.CurrencyPositivePattern = 2; // € 19.95 culture.NumberFormat.CurrencyNegativePattern = 12; // € -19.85 Thread.CurrentThread.CurrentCulture = culture;
Hiermee wordt op thread niveau de CultureInfo aangepast. Deze zet je tijdelijk in Application_BeginRequest van global.asax en dan werkt het prima. Overigens niet vergeten of the thread wel Sloveens is om mee te beginnen...
Via het blog van m'n collega's bij Ordina Development Center Microsoft kwam ik deze aardige IE add-in (IEeee) tegen. Geweldig voor testers omdat ze vanuit IE de bug kunnen rapporteren. Daarbij worden de volgende gegevens toegevoegd aan het item in Team System:
- Screenshot
- HTML Van de pagina en alle frames/iframes
- Stylesheets en scripts die door de pagina gebruikt worden
- Details over de machine en de browser van de gebruiker
Deze fout schijnt nogal vaak voor te komen bij het installeren van Visual Studio 2005 SP1. Dit knowledgebase artikel vertelt wat je eraan kunt doen.
Om een of andere duistere reden is de traffic op mijn blog enorm toegenomen. Zoveel, dat ik voor het eerst in m'n leven traffickosten moet betalen aan m'n hosting provider. Niet te zuinig ook, want ik zit 10 GB over de maand limiet heen. De boosdoener? Trackback en Pingback, elk log staat vol met aanvragen naar die twee diensten. Ik heb ze dus maar uitgezet, want ik heb geen tijd (en zin) om uit te zoeken wat er precies mis is.
UPDATE: Trackback blijft uit, want ik weet nu waardoor de traffic zo hoog was. M'n blog was slachtoffer van een ordinaire spam aanval om zo trackback URLs te laten tonen. Ik moet dus maar eens gaan kijken naar een update van Dasblog dat dit tegengaat, hoewel ik eigenlijk gewoon niet meer van plan ben om trackback ooit weer aan te zetten.
Visual Studio 2005 SP1 is beschikbaar. Het lost allerlei bugs op en biedt een aantal verbeteringen, waaronder - Nieuwe project types voor ASP.NET
- Ondersteuning voor nieuwe processor types voor code generatie en profiling
- Integratie van Excel 2007 en Project 2007 met Team Foundation Server
- Ondersteuning voor Windows Embedded 6.0 platform en tools
Meer informatie is te vinden op de MSDN pagina Visual Studio 2005 Service Pack 1 (SP1).
Microsoft heeft een security patch uitgebracht voor Visual Studio. Het "gat" in VS2005 wordt als kritiek beschouwd, dus is het heeeel verstandig de patch te installeren. Zie voor meer informatie en download Microsoft Security Bulletin MS06-073.
Alex Thissen meldt op deze blogpost dat het probeert om zoveel mogelijk te programmeren met alleen z'n keyboard, omdat keyboard+muis vertragend werkt. De assumptie daarbij is uiteraard
1) Je kan alle shortcuts onthouden. 2) Je hebt de shortcuts vaak genoeg nodig om ze te onthouden.
In beide gevallen moet ik helaas zeggen "lukt me niet". Vandaag de dag spendeer ik minder uren aan programmeren en meer aan zaken die om het ontwikkelproces heen liggen. Voor hardcode programmeurs is dit wel handig lijkt me, hoewel ik wel een beetje flashbacks heb naar discussies over waarom VI beter is dan Emacs (of andersom).
Nu Internet Explorer 7 uitgerold wordt op de meeste computers ontstaat de situatie dat sites zowel met IE6 als IE7 goed moeten werken. Dit testen vanaf 1 machine is lastig omdat IE7 over IE6 heen gezet wordt. Maar geen nood, je kunt altijd nog gebruik maken van Virtual PC om in een virtuele machine met IE6 te testen (of IE7 natuurlijk als IE6 op je eigen machine staat). Microsoft biedt hiervoor een kant-en-klare Virtual PC. Meer informatie en de nodige download links vind je op het IEBlog. Bij The Vision Web werken we al tijden met Virtual PC voor het ontwikkelen en testen van applicaties, dus waren we zelf ook al op deze oplossing gekomen. Het is echter wel erg handig dat Microsoft een standaard Virtual PC aanbiedit hiervoor.
Serieus over beveiliging? Dan is de Threat Analysis & Modeling tool een goede toevoeging aan je arsenaal. Met deze tool kun je in kaart brengen welke (mogelijke) beveiligingsproblemen je applicatie heeft. Versie 2.1 verbetert een aantal zaken, waaronder export naar Work Items voor Visual Studio team System en voegt zaken als Auto Save toe. Download Threat Analysis & Modeling v2.1
Vandaag ontving ik met de post het eerste exemplaar van mijn nieuwe boek ASP.NET 2.0 - de basis. Het ziet er mooi uit en ik ben er dan ook trots op. Het behandelt de beginselen van ASP.NET 2.0 op zo'n manier dat je na het lezen van het boek ook echt wesites kunt maken met beveiliging, gegevens in een database, gebruikersprofielen en nog meer. Het boek is uiteraard verkrijgbaar via de boekhandel en diverse websites, maar kan ook besteld worden bij uitgever Pearson Education.
Ik wil bij deze alle mensen die meegewerkt hebben aan het boek hartelijk bedanken. John Numan die mij gevraagd heeft het boek te schrijven, Sandra Wouters die alles in goede banen geleid heeft en Cynthia van Heusden voor de tekstcorrectie. Tenslotte ben ik een enorme dank verschuldigd aan mijn vrouw Annette. Niet alleen voor haar tekstcorrectie en suggesties om het boek beter te maken, maar ook voor ruimte die ze me gegeven heeft om het boek te schrijven.
Commerce Server is een van die producten die altijd net buiten m'n gezichtsveld ligt. Binnen The Vision Web hebben we een aantal experts op het gebied, dus het is niet echt nodig om me daar mee te bemoeien. Nu CS2007 gebaseerd is op ASP.NET 2.0 weet ik echter ineens veel meer van de algemene werking dan voorheen. Door het baseren op ASP.NET 2.0 is CS2007 overigens niet meer bruikbaar met ASP, omdat er geen COM interfaces meer zijn. Die zou je wel weer kunnen maken door de Web Services interface te wrappen, maar dat moet je niet willen.
De spreker (Ryan Dononvan) weet waar hij het over heeft, maar dat mag ook wel als je onderdeel bent van het team dat het maakt. Wel lopen z'n demo's nog redelijk stroef. Dat een iisreset nodig is om een nieuw thema (look & feel) toe te passen vind ik wel dubieus. Een half uur in de sessie heb ik alleen nog maar ASP.NET 2.0 dingen gezien, met uitzondering van de standaard globalization zaken.
Wat me vooral opvalt is dat CS2007 niet een beetje, maar echt veeeeel beter doordacht is dan z'n voorloper. Het is niet meer een verzameling losse handige tools, maar veel meer gericht op het proces. Zo kunnen allerlei business rules gedeeld worden tussen verschillende onderdelen, zodat je niet meer op meerdere plaatsen dezelfde rules moet implementeren. De BizDesk is ook weg en vevangen door een Windows SmartClient applicatie die communiceert via de Web Services interface. De code van de SmartClient is beschikbaar in de Partner SDK en je kunt 'm daarom aanpassen aan eigen wensen. Dat geldt ook voor de rapportage, omdat die gedaan wordt via Reporting Services. Gek genoeg voor zowel SQL 2000 als SQL 2005, terwijl CS2007 alleen draait op SQL 2005 (althans dat zei Ryan eerder in z'n presentatie).
Tip voor de spreker (demo's geven les 1): zorg dat je alle updates geinstalleerd hebt en zet auto update daarna uit! Nu moest hij wachten tot zijn VPC opnieuw opgestart was na het installeren van updates.
Het jaarlijkse TechEd "feest" is weer begonnen. Gisteren al met een etentje met de MVP's waar ik weer eens heb kunnen praten met m'n mede-MVP's, waaronder Andre Obelink en Sander Gerz die boeken over VB en C# hebben geschreven in dezelfde serie waarvoor ik net een boek geschreven heb (De Basis). Leuk om ervaringen uit te wisselen.
Vanmorgen de keynote van Eric Rudder, die vooraf gegaan werd door Simon Brown. Simon had een leuk intermezzo met Arfa Karim, de jongste Microsoft Certified Professional (11 jaar, uit Pakistan). Arfa liet een zelf geprogrammeerde calculator zien en de code zag er netjes uit. De demo's tijdens Eric Rudder's keynote waren ook leuk om te zien. Als je de afgelopen twee jaar met je kop in het zand hebt gezet waren ze zelfs indrukwekkend.
Later meer over de sessies...
Vandaag was ik met stomheid geslagen toen ik hoorde dat de buurman van mijn ouders, waar ik zelf 22 jaar lang naast gewoond heb overleden is aan een hersenbloeding. Hans was pas net met pensioen en dan is het heel sneu dat dit gebeurt, vooral voor de mensen om hem heen. Omdat zijn zoon Bernd niet veel ouder is dan ik kwam ik als kind vaak over de vloer. Daardoor kwam ik al vroeg in aanraking met een computer, want Hans had een TRS-80, waar Bernd en ik (toen misschien 8 jaar oud) mee mochten spelen. Hans was zo bedreven met de computer dat hij op de school waar hij werkte het IT-onderwijs opgezet heeft en het boekje Disk IT geschreven heeft (ik meen eind jaren tachtig), een boekje om de eerste stappen te zetten in de wereld van de computer. Dat zowel Bernd als ik in de IT beland zijn (Bernd is IT Pro, ik Developer) zal voor een groot deel te danken zijn aan Hans en zijn interesse in computers. Ik zal hem daarom niet vergeten.
Ik wens zijn vrouw, kinderen, kleinkinderen, en iedereen die dichtbij Hans stond heel veel sterkte.
Ik open net m'n blog en het is wel heel erg opvallend hoe lang ik niets geschreven heb... meer dan 1 maand. De reden daarvoor is simpel, alles gebeurde even tegelijk. Ik zat in de afrondende fase van mijn nieuwe boek ASP.NET 2.0 - de basis, zit in de afrondende fase van een groot project (waarbij ik ook nog eens niet goed bij m'n blog kan), en we zijn druk aan het verbouwen en verhuizen (inclusief de internetverbinding). Het boek is zo goed als af en we zijn ook bijna verhuisd, waardoor alles wel in een rustiger vaarwater zou moeten komen en ik ook wat meer tijd heb voor blog, website enzovoorts. Tot gauw dus!
Als je kolommen onzichtbaar maakt in een GridView-control worden de waardes daarvan niet meegestuurd als je een update gaat doen. Als je werkt met CollisionDetection="CompareValues" betekent dit dat de update niet goed gaat als de stored procedure of functie die je gebruikt de originele waardes ook verwacht.
De oplossing: - Voeg de kolommen die je niet zichtbaar maakt (of uberhaupt niet invoegt) toe aan de DataKeyNames-eigenschap, gescheiden door een komma. - Maak een EventHandler voor GridView.RowUpdating en zet daar de onderstaande code in. Hiermee worden alle keys toegevoegd aan de oude en nieuwe waardes (die voor die kolommen toch niet verandert).
IDictionaryEnumerator restoreOldValues = e.Keys.GetEnumerator(); while (restoreOldValues.MoveNext()) { e.OldValues.Add(restoreOldValues.Key.ToString(), restoreOldValues.Value.ToString()); e.NewValues.Add(restoreOldValues.Key.ToString(), restoreOldValues.Value.ToString()); }
Het gebeurt me nog wel eens dat ik een SQL Server database aangeleverd krijg en dan wil ik graag een diagram hebben van de tabellen en relaties. Zo'n diagram kun je maken door er een toe te voegen in de Database Diagram map die te zien is in SQL Enterprise Manager (2000) of SQL Management Studio (2005). Vaak krijg je dan de melding hieronder:

Helaas kun je de Database Properties in dat geval niet opvragen (in elk geval niet in SQL Management Studio), dus kun je het niet aanpassen. Door de volgende query uit te voeren is het euvel ook opgelost
ALTER AUTHORIZATION ON Database::[Database Name] TO [sa]
Kan met de Augustus CTP van Microsoft Robotics Studio. Zo te zien zijn er ook al heel wat (verkrijgbare) robots die hiermee aan te sturen zijn... leuk speelgoed.
Onlangs heb ik Office 2007 Beta op mijn werkmachine gezet. Waarom? Een aantal features (zoals contstant de woord-count in de taakbalk zichbaar) zijn erg handig nu ik een boek aan het schrijven ben. Nu dacht ik dat dit geen neveneffecten had, maar ik heb er inmiddels een gevonden: Desktop Search is weg. Nou ja, niet helemaal. Het is nog geinstalleerd, maar er is geen zoekvakje meer waar je iets kunt invullen (wat het geheel redelijk nutteloos maakt). De oorzaak is volgens een post van Chris Pratley dat Office 2007 Beta ook WDS 3.0 installeert zodat je ook de nieuwe documentformaten van Office 2007 kunt doorzoeken. En daar gaat het dus mis... WDS werkt wel in de applicaties afzonderlijk, dus in Outlook (waarvoor ik het 't meest gebruik) kan ik gewoon zoeken. Voor bestanden moet ik even wachten tot er een fix is. Heb je dit echt nodig zul je dus Office 2007 moeten verwijderen en WDS moeten herinstalleren.
Ted Neward legt in zijn blogpost The Vietnam of Computer Science uit welke problemen zich voordoen bij object-relational mapping (de overgang van de database naar objecten en weer terug). Het stuk is behoorlijk lang, dus neem er even de tijd voor.
Met behulp van Typed DataSets en TableAdapters kun je een volwaardige Data Access laag maken voor je applicatie, en kun je met behulp van de ObjectDataSource control de nodige data in je applicatie tonen en bewerken. Hoe je dit allemaal kunt doen (en nog veel meer) is te lezen in een serie tutorials geschreven door ASP.NET guru Scott Mitchell.
Threat Modeling van een applicatie, het identificeren van mogelijke bedreigingen en het registreren van de genomen maatregelen, wordt steeds belangrijker bij het maken van veilige applicaties. Zonder Threat Modeling is het eigenlijk niet mogelijk om te weten of een applicatie veilig is of niet. Aangezien Threat Modeling best lastig is, heeft Microsoft een tool om dit te doen, Microsoft Threat Analysis & Modeling. Hiervan is momenteel versie 2.0 Release Candidate 1 te downloaden, en binnenkort zal de uiteindelijke versie verschijnen. Deze tool bevat een wizard om je applicatie mee te definieren, waaruit de mogelijke threats worden gegenereerd. Zonodig kun je op basis van de Attack Library meer zaken toevoegen aan je model. Doe er je voordeel mee!
Overigens staat deze tool nog los van Visual Studio, hoewel je wel work items kunt maken en exporteren naar VS. Het schijnt de bedoeling te zijn dat deze tool t.z.t. onderdeel wordt van Visual Studio.
WinFS, het op de PDC 2003 aangekondigde relationele file systeem, is op sterven na dood. Oorspronkelijk zou deze technologie in Windows Vista komen en zou je makkelijk je bestanden kunnen organiseren. Op het WinFS blog van Microsoft is nu aangekondigd wat er gaat gebeuren met WinFS. In het kort: onderdelen van de technologie komen in de volgende versie van ADO.NET en SQL Server terecht, maar het zal niet meer geleverd worden als aparte technologie. Daarmee is de gedachte van het relationele file systeem min of meer van de baan zo lijkt het. De kritiek op dit bericht is niet van de lucht (zie comments bij het bericht), en terecht. Door deze koerswijziging is iets wat geweldig is voor zowel bedrijven als consumenten de nek opgedraaied en wordt het expliciet in de bedrijfssfeer neergezet.
Ik ben nooit zo van de command line geweest, maar Windows Powershell (voorheen bekend als "Monad") is wel heel cool. Om het makkelijker te maken om Powershell scfiprts te maken is het toch wel prettig dat er ook weer een IDE is. Zie deze post van Scott Hanselman.
Het scenario: Een bestaande applicatie schrijft (Word) bestanden in een image-field in een SQL Server database, en jij moet ze er weer uithalen en naar een browser sturen.
De oplossing: Je zou zeggen "no problemo", met een DataReader kan ik bytes uit het betreffende veld lezen, en als ik gebruik maak van een DataAdapter+DataSet dan heb ik de hele byte array. Vervolgens gebruik je gewoon Response.BinaryWrite. Dat dacht ik eerst ook, totdat ik het deed en Word niet met het bestand overweg bleek te kunnen.
In dit saoort gevallen is een HEX viewer onmisbaar. Trek een bestaand document open en kijk hoe die er op byte niveau uitziet, en doe hetzelfde met het foute bestand. In mijn geval viel op dat we dezelfde karakters erin stonden, maar in het foute bestand staat een extra byte tussen alle karakters. Het foute bestand maakt dus kennelijk gebruik van 16-bits karakters, vermoedelijk UTF-16 (Unicode). Om dat te verhelpen kun je gebruik maken van de System.Text.Encoding class:
Encoding.Convert(Encoding sourceEncoding, Encoding destinationEncoding, byte[] sourceByteArray);
Mijn eerste gok was UTF-16 naar UTF-8, maar dat bleek niet goed te zijn. Ook de andere in .NET bekende encodings (UTF-7, ASCII) leverden niets op. Terug naar de Windows code pages dus... Mijn eerste gok was meteen goed: windows-1252, waardoor de code hieronder het gewenste resultaat leverde (GetDocument is een functie die en byte array teruggeeft van het bestand in de database):
Encoding targetEncoding = Encoding.GetEncoding(1252); Response.Clear(); Response.ContentType = "application/ms-word"; Response.AddHeader("Content-Disposition", "attachment;filename=bestand.doc"); Response.BinaryWrite(Encoding.Convert(Encoding.Unicode, targetEncoding, DocDataAccess.GetDocument(documentId)));
Je kunt de beste sessies (inclusief die van Ome Bill) nu bekijken op It's Showtime, evenals sessies van o.a. TechEd.
Microsoft heeft een wijs besluit genomen door de term WinFX te laten vallen ten faveure van .NET Framework 3.0. WinFX leverde ten eerste naamsverwarring op ten opzicht van WinFS en ten tweede was het niet voor iedereen duidelijk wat nu het verschil was tussen het .NET Framework en WinFX (wat er eigenlijk ook niet echt is). Overigens schept het versienummer 3.0 wel weer een beetje verwarring, omdat er hele delen zijn die niet aangepast worden.
Dit is trouwens ook heugelijk nieuws voor de .NET gebruikersgroep dotNED, omdat hiermee een naamsverandering in de toekomst niet nodig is.
Om een of andere reden denken kopstukken uit het Nederlandse bedrijfsleven dat wij als zorgconsument marktwerking in de zorg willen. Nou, ik niet! Ik wil dat als ik het dichtsbijzijnde ziekenhuis binnenloop, ik zo snel en zo goed mogelijk geholpen wordt. Zorg is geen mobieltje waar ik desnoods kilometers voor omrij om een betere prijs-kwaliteitsverhouding te krijgen. Door keuze en marktwerking loop ik het risico dat het dichtsbijzijnde ziekenhuis straks 10 km verderweg is, omdat de goede ziekenhuizen meer geld krijgen. Dat kan het verschil zijn tussen leven en dood. We moeten niet zorgen dat sommige ziekenhuizen beter worden dan anderen, we moeten zorgen dat alle ziekenhuizen beter worden.
Eigenlijk zouden we een voorbeeld moeten nemen aan de Scandinavische landen die de top-5 van beste zorg in Europa domineren. Daar heeft de overheid het voor het zeggen in de zorg, en zo zou het ook moeten zijn met dit soort onmisbare voorzieningen. Dat zijn wat mij betreft zorg, onderwijs, politie en brandweer, en mogelijk ook gas, elektra en water. Ik moet er niet aan denken dat er in Nederland mensen zonder energie komen te zitten omdat Engeland bereid is een hogere prijs te betalen. Bovendien zou er veel meer geinvesteerd moeten worden in duurzame energie, iets wat blijkbaar ook niet kan zonder de overheid.
Vandaag heb ik een presentatie gegeven over Windows Workflow Foundation (WF) aan onze .NET thema groep binnen The Vision Web. Gezien mijn laatste ervaring met WF nog met Beta 1 was, en ik keurig een Beta 2 omgeving had opgezet in een Virtual PC, was het even schrikken toen ik aan m'n demo's ging werken. De API is op sommige plaatsen behoorlijk aangepast, die me vooral even teruggooiden toen ik met State Machine workflow aan de gang ging. Ik dacht gered te zijn toen ik op windowsworkflow.net Beta 2 demo's tegen kwam en later de WF Hands On Labs Beta 2. Sommige voorbeelden uit de Hands On Labs werken echter niet, sterker nog ze builden niet eens! Ik vermoed dat dit nog pre-beta 2 voorbeelden zijn die nog net niet helemaal bijgewerk zijn.
Relationele data en objecten passen over het algemeen niet echt lekker op elkaar. Daarom zijn er ook behoorlijk wat Object-Relation Mapping tools (O/R Mappers) op de markt. Met LINQ en DLINQ brengt Microsoft relationele data en objecten dichter tot elkaar. Scott Guthrie heeft twee uitgebreide blog posts gemaakt over hoe dit in ASP.NET gebruikt kan worden. Zie Using LINQ with ASP.NET (Part 1) en Using DLINQ with ASP.NET (Part 2 of my LINQ series)
Aangezien wij niet in een Engelstalig land wonen zou localisatie van applicaties voor ons best belangrijk moeten zijn, maar in de praktijk weten weinig mensen er echt goed mee overweg te kunnen (mezelf incluis). Scott Guthrie heeft op zijn blog een bericht met allemaal goede informatiebronnen hierover, waaronder een webcast van 13 minuten. Zie ASP.NET 2.0 Localization (Video, Whitepaper, and Database Provider Support)
Het hing al een tijdje in de lucht, maar ik ben er eindelijk toe gekomen om het ook daadwerkelijk te doen: m'n blog verhuizen van http://aspnl.blogspot.com naar http://www.vanotegem.nl. Waarom? Omdat ik op mijn eigen site iets meer controle heb dan bij Blogger. Bovendien heeft dasBlog meer mogelijkheden dan Blogger, zoals categorieen. Aangezien ik nu in twee talen ga bloggen, is dat ook best wel belangrijk. De berichten op de home pagina zullen in het Engels zijn. Wie de Nederlands berichten wil zien kan kijken/abonneren op http://www.vanotegem.nl/CategoryView,category,Nederlands.aspx.
|