Navigatie

Contact

Send mail to the author(s) E-mail

View Richard Soeteman's profile on LinkedIn

RSS 2.0 | Atom 1.0 | CDF

Archief

Categorieën

Blogroll

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

Sign In

Zoeken

# Wednesday, 21 January 2009
Wednesday, 21 January 2009 08:38:02 (GMT Standard Time, UTC+00:00) ( Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Voor de echte Umbracoholics in de Benelux organiseert de Umbraco gebruikersgroep Benelux op zaterdag 21 februari haar tweede gebruikersbijeenkomst in Amsterdam. Het belooft weer een zeer informatieve dag te worden waar de nadruk uiteraard zal liggen op Umbraco V4, waarvan de tweede release candidate inmiddels uit is. In een informele sfeer zullen onder andere de volgende  onderwerpen behandeld worden.

  • Umbraco een showcase. 
  • Umbraco V4, een overzicht
  • Canvas (voorheen Live Editing)
  • DataLayer.
  • Event model.
  • Uitbreiden van Umbraco.

Uiteraard bestaat er ook de mogelijkheid je eigen implementaties, of ontwikkelde packages te tonen.

De gebruikersdag wordt gehouden bij Mirabeau in Amsterdam. Mirabeau is als full service internet bureau betrokken bij enkele grotere Umbraco implementaties, waarvan er één als showcase gepresenteerd zal worden.  Klik hier voor adres informatie en een routebeschrijving.

We zullen beginnen om 9:30 en eindigen rond 16:00. De gebruikersdag is gratis, het enige dat we vragen is je even in te schrijven via dit formulier. Doe dit snel, het aantal plaatsen is beperkt.

Tot zaterdag 21 februari.  

Comments [0] | | # 
# Thursday, 08 January 2009
Thursday, 08 January 2009 21:41:44 (GMT Standard Time, UTC+00:00) ( Tools | Umbraco )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Last September I've created a package called UmbImport which is capable of importing content  from various datasources into Umbraco. For a demo of this package please checkout the video below.

UmbImport from Richard Soeteman on Vimeo.

The package was based on Beta1 of Umbraco 4 and threw errors when installing on Umbraco 4 RC.  I've fixed these bugs and created a new package. Currently I'm also working on a new version that is capable of importing members and I will add support for plugging in your own datasource, so you can import data from any datasource you like.

Download umbImport here

Comments [7] | | # 
# Thursday, 09 October 2008
Thursday, 09 October 2008 22:30:46 (GMT Daylight Time, UTC+01:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Mensen die me al wat langer kennen weten dat mijn carrière als Microsoft Developer ooit begonnen is als programmeur bij Internet Bureau Indivirtual, in de begin periode nog Netpresence. Ruim een jaar geleden heb ik Soeteman Software opgericht en wilde me weer meer met CMS implementaties bezig gaan houden. Echter heb ik niet de ambitie zelf een CMS in elkaar te zetten, wel moet een dergelijk systeem goed in elkaar zitten en het liefst Open Source  zijn. Zoekend naar een dergelijk op .NET gebaseerd Open source CMS kwam als eerste optie DotNetNuke naar voren, dit CMS is namelijk redelijk bekend. Na even met dit systeem gespeeld te hebben kwam al vrij snel naar voren dat DotNetNuke niet het pakket is wat ik mijn eindgebruiker wil aandoen. De UserInterface is alles behalve gebruikersvriendelijk en ook in layout ben je beperkt, ook al zegt men van niet.

Op een Dotned gebruikersavond kwam ik iemand tegen die me wees op Umbraco. Umbraco bied me standaard alles wat ik van een CMS verwacht. Een mooie gebruikers interface, overzichtelijk en werkt voor de eindgebruiker zeer intuïtief. Door het gebruik van templates en document types waarmee je de content onderdelen samen stelt is het in te passen in elk design. Zelfs het type content is variabel.  Zo kan content gebruikt worden voor een HTML pagina maar kan het middels een andere template ook gebruikt worden voor XML output wat erg handig is als je de content bijvoorbeeld in een flash animatie of iets dergelijks wilt gebruiken. Ook is het mogelijk je standaard .NET (user) controls die je in de site of webapplicatie wil gebruiken te koppelen via de public properties  en wil je eigen functionaliteit toevoegen aan Umbraco is daar negen van de tien keer een standaard Interface voor waardoor je eigen functionaliteit zo kan inpluggen. Oh ja het is nog Open Source ook. Al met al  heeft me dit vrij snel doen besluiten dat dit het CMS is wat ik standaard voor projecten inzet. Mocht je zelf voor de keuze staan om een CMS te selecteren en je wilt wat meer weten over Umbraco, schroom dan niet om contact op te nemen. 

clip_image002 

Umbraco kent eigenlijk slechts één nadeel en dat is dat de Nederlandse community erg klein is. Wereldwijd is de community wel redelijk groot. De content die voortaan op mijn weblog zal verschijnen zal meer Umbraco dan .NET algemeen gerelateerd zijn, Immers over .NET is het meeste wel geschreven en voor Umbraco is dit helaas nog niet het geval. Therefore future posts will be in English.

Comments [0] | | # 
# Sunday, 03 August 2008
Sunday, 03 August 2008 08:27:53 (GMT Daylight Time, UTC+01:00) ( Visual Studio )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

We kennen allemaal de kracht van een debug visualizer, even snel de data van een dataset bekijken, selecteer de juiste visualizer in Visual Studio en een mooi debugger dialog window wordt getoond met daarin je complete datastructuur en data. Het maken van een debugger visualizer is ook redelijk simpel. Voor wie dat nog nooit heeft gedaan raad ik aan deze video eens te bekijken.

Het nadeel van deze video en andere tutorials die over dit onderwerp gaan is dat ze altijd een serializable object gebruiken. Nu zijn je eigen objecten vaak wel serializable, maar er zijn ook heel veel objecten niet serializable en soms wil je daar echt een visualizer voor hebben. Probeer je deze objecten toch te gebruiken krijg je de volgende foutmelding te zien.

NonSerializableErrorMessage 

Een aantal maanden geleden werkte ik op een project waar intensief gebruik werd gemaakt van querystring- en formulierdata en wilde hiervoor een Visualizer maken. Ik werd direct geconfronteerd met bovenstaande foutmelding en besloot wat dieper in de materie te duiken. Middels onderstaand code voorbeeld zal ik uitleggen wat er gebeurd.

   1:  using System.Diagnostics;
   2:  using System.Web.UI;
   3:  using Microsoft.VisualStudio.DebuggerVisualizers;
   4:   
   5:  [assembly: DebuggerVisualizer(typeof(PageErrorVisualizer.PageErrorVisualizer), typeof(VisualizerObjectSource), Target = typeof(Page), Description = "PageErrorVisualizer Visualizer")]
   6:  namespace PageErrorVisualizer
   7:  {
   8:      /// <summary>
   9:      /// The Visualizer for type System.Web.UI.Page
  10:      /// </summary>
  11:      public class PageErrorVisualizer : DialogDebuggerVisualizer
  12:      {
  13:          /// <summary>
  14:          /// Shows the object in the visualizer form
  15:          /// </summary>
  16:          protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
  17:          {
  18:              Page page = (Page)objectProvider.GetObject();
  19:   
  20:              //Initialize the Visualizer Form and Show the data
  21:              using (VisualizerForm frm = new VisualizerForm())
  22:              {
  23:                  frm.ShowVisualizer(pageData);
  24:              }
  25:          }
  26:      }
  27:  }

Wanneer je een debug visualizer maakt zal je in het Assembly attribuut moeten aangeven dat we een DebuggerVisualizer aan het maken zijn en verwacht de volgende gegevens:

  • Het object type van de Visualizer die we gaan gebruiken
  • Het object type van de VisualizerObjectSource die we willen gebruiken
  • Het object type waar we een visualizer voor willen maken
  • De omschrijving die in Visual studio wordt getoond wannneer we de visualizer selecteren

Het VisualizerObjectSource object dat standaard in visual studio zit bleek de boosdoener. In het standaard  VisualizerObjectSource object wordt er vanuit gegaan dat een object serializable is, wat dus niet altijd het geval is en daarmee de oorzaak van bovenstaande foutmelding. Nu kunnen we van deze klasse afleiden. Eén van de methoden die we kunnen overschrijven is de methode GetData. Getdata verwacht het object waar we een visualizer voor willen maken en de stream waar de data ingeplaatst mag worden.

Onderstaand voorbeeld toont een versimpelde vorm van  de klasse die ik gebruikt heb. In GetData cast ik het target object naar een page object en creëer ik een instantie van PageData object. Het PageData object is een eigen gemaakt serializable object dat de benodigde waarden kan vasthouden.  Hier kan ik vervolgens de benodigde data op plaatsen.  Uiteindelijk vervang ik het Page object in target door mijn eigen PageData object en de base functionaliteit zorgt ervoor dat het PageData object netjes serialized wordt en in de visualizer gebruikt kan worden.

   1:  using System.Data;
   2:  using System.Web;
   3:  using Microsoft.VisualStudio.DebuggerVisualizers;
   4:   
   5:  namespace WebVisualizers.ObjectSource
   6:  {
   7:      /// <summary>
   8:      /// Specialized ObjectSource for System.Web.UI.Page
   9:      /// </summary>
  10:      /// <remarks>
  11:      /// This class is needed because the System.Web.UI.Page is not serializable and IVisualizerObjectProvider expects it to be serializable
  12:      /// In the GetData Method System.Web.UI.Page will be turned into something that is Serializable
  13:      /// </remarks>
  14:      public class WebPageObjectSource : VisualizerObjectSource
  15:      {
  16:          /// <summary>
  17:          /// Takes a Page object get Data from it and store it into PageData
  18:          /// Replace the target object wit PageData and call the base functionality
  19:          /// </summary>
  20:          /// <param name="target">System.Web.UI.Page</param>
  21:          /// <param name="outgoingData">Output stream (PageData)</param>
  22:          public override void GetData(object target, System.IO.Stream outgoingData)
  23:          {
  24:              if (target != null)
  25:              {
  26:                  Page page = (Page)target; ;
  27:                  PageData pageData = new PageData();
  28:                  //Fill Pagedata based on page object
  29:                  //example pageData.Add(page.Session)
  30:   
  31:                  //Replace target with PageData object
  32:                  target = pageData;
  33:              }
  34:              //Call Base functionality
  35:              base.GetData(target, outgoingData);
  36:          }
  37:      }
  38:  }

Op deze manier kunnen we dus voor elk gewenst object een Debug Visualizer maken, mits we in een eigen VisualizerObjectSource klasse ervoor zorgen dat het object in target vervangen wordt door een serializable object wat de benodigde data vasthoudt.  De code die ik in deze blogpost heb gebruikt, maakt deel uit van het WebVisualizer project wat ik enige tijd geleden op codeplex heb geplaatst. De volledige source code van dit project is hier te downloaden.

Comments [0] | | # 
# Wednesday, 02 January 2008
Wednesday, 02 January 2008 19:37:06 (GMT Standard Time, UTC+00:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

MCP(rgb) Onlangs was ik via LinkedIn lid geworden van een Microsoft Certified Professionals groep. Nadat mijn aanmelding goedgekeurd was viel het me op dat er voornamelijk scandinavische namen voorkwamen in de ledenlijst. Vanochtend werd me duidelijk wat de reden hiervoor was. Ze hadden de naam omgedoopt van "Microsoft Certified Professionals"  naar  "Microsoft Certified Professionals - Denmark". Voor mij had het dus geen zin om hier lid van de zijn. Het idee van deze groep sprak me destijds wel aan, daarom heb ik de groep "Microsoft Certified Professionals - Netherlands" op LinkedIn aangemeld.

Mocht je Microsoft gecertificeerd zijn en interesse hebben om deel te nemen kan je je aanmelden via deze link.

Comments [0] | | # 
# Tuesday, 25 December 2007
Tuesday, 25 December 2007 09:25:19 (GMT Standard Time, UTC+00:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Voor demo en test doeleinden maak je veelal gebruik van de AdventureWorks of Norththwind database. Lekker simpel en gevuld met data.  Onlangs heb ik een nieuwe laptop aangeschaft dus mocht ik weer op zoek naar de AdventureWorks database. De Adventureworks database is verhuisd naar CodePlex en daar kwam ik een light versie van Adventureworks tegen. Deze verschilt in de volgende opzichten van zijn grotere broer.

  • Het ontwerp is ge-denormaliseerd zodat er minder joins nodig zijn
  • De database is slechts gevuld met 7MB aan data in plaats van  183MB in de volledige versie
  • In plaats van 5 schema's in Adventureworks bestaat de light versie uit 1 schema plus een dbo schema
  • De database bestaat uit 12 tabellen in plaats van 70 in de volledige versie

Kortom ideaal voor Demo doeleinden. Klik hier voor meer informatie en download.

Comments [0] | | # 
# Monday, 17 December 2007
Monday, 17 December 2007 19:53:39 (GMT Standard Time, UTC+00:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Als Web ontwikkelaar ben je er een paar keer per jaar naar op zoek, zo'n mooie loading image om de gebruiker te vertellen dat hij/zij nog even mag wachten. Vanmiddag was het weer zover en kwam toen de site ajaxload.info tegen. Via deze site is het mogelijk zo'n afbeelding te genereren. Een aanrader!

 ajax-loader

Comments [0] | | # 
# Thursday, 13 December 2007
Thursday, 13 December 2007 14:34:59 (GMT Standard Time, UTC+00:00) ( )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Vaak kom ik op projecten waar al enige tijd op ontwikkeld is. Wanneer je Visual Studio opent en je bij de lijst met warnings bekijkt blijkt deze vaak vol te staan met de meest uiteenlopende meldingen. Veel van deze warnings zijn naar mijn mening gewoon errors en de rest slordigheid. Veel developers verschuilen zich achter het argument "Dit lossen we aan het eind van het project op", iets wat zelden gebeurd.

Momenteel ben ik werkzaam op een project wat nieuw gestart is en besloot dit meteen af te kappen. In Visual studio kan je bij de properties van het project opgeven dat warnings als errors beschouwd moeten worden. Door dit de doen dwing je jezelf (en anderen) de meldingen op te lossen, omdat anders je project niet build.

Treatwarningsaserrors

Comments [0] | | # 
# Monday, 09 July 2007
Monday, 09 July 2007 08:07:05 (GMT Daylight Time, UTC+01:00) ( Algemeen )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

 Een aantal weken terug heb ik het al eens gehad over problemen met Certificaten. Deze problemen leken opgelost te zijn totdat ik de applicatie in acceptatie ging zetten en direct de foutmelding "The request failed with HTTP status 403: Forbidden. " te zien kreeg. Via google kreeg ik vele resultaten echter was er geen van toepassing op mijn situatie.  

Mijn ASP.NET pagina roept een externe Webservice aan welke via HTTPS gehost wordt.  Wanneer ik een certificaat mee wil sturen werkt dit correct in mijn development webserver echter gehost via IIS werkt dit in het geheel niet. Het gevolg is een van onderstaande foutmeldingen:

  • The request failed with HTTP status 403: Forbidden.
  • The request was aborted: Could not create SSL/TLS secure channel
  • The underlying connection was closed: An unexpected error occurred on a send.

Het eerste waar je aan denkt is rechten. Dit bleek in mijn geval ook deels de oorzaak te zijn.  Om de rechten op het certificaat te controleren heb je de tool WinHttpCertCfg nodig.   Middels deze tool kan je per certificate store (Local_Machine of Current_User ) bekijken hoe de rechten voor een bepaald certificaat zijn ingesteld.

Current_User: "C:\Program Files\Windows Resource Kits\Tools\"winhttpcertcfg -l -c "CURRENT_USER\Root" -s "[naam van het certificaat]"
De volgende accounts dienen hier rechten op te hebben:

  • Ingelogde gebruiker
  • NT Authority\System

Local_Machine : "C:\Program Files\Windows Resource Kits\Tools\"winhttpcertcfg -l -c "LOCAL_MACHINE\Root" -s "[naam van het certificaat]"
De volgende accounts dienen hier rechten op te hebben:

  • Ingelogde gebruiker
  • NT Authority\System
  • ASP.NET Account / network service account (Windows 2003)

In mijn geval had het ASP.NET account nog geen rechten. Het instellen van de rechten doe je ook met de WinhttpCertcfg tool. Gebruik  hiervoor onderstaande parameters:

"C:\Program Files\Windows Resource Kits\Tools"\winhttpcertcfg -g -c "LOCAL_MACHINE\ROOT" -S "[naam van het certificaat]" -A "ASP.NET"

Na het toevoegen van de rechten kreeg ik echter nog steeds dezelfde foutmelding. In mijn geval had de systeembeheerder het certificaat ook in de verkeerde certificaat repository geïnstalleerd. Met de winhttpcertcfg tool kom je hier niet achter. Deze kijkt namelijk niet naar de locatie waar het certificaat geïmporteerd is.  Middels certificaten.msc te vinden onder systeembeheer heb ik vervolgens het certificaat geïmporteerd in onderstaande nodes.

Tip: Er bestaat een mogelijkheid om deze certificaten te copy/pasten. Gebruik deze optie niet met certificaten waarin een private key is opgenomen, deze wordt namelijk niet mee gekopieerd en geeft dus weer andere problemen.

Vervolgens de rechten voor ASP.NET account weer ingesteld en toen werkte alles naar behoren. Uiteindelijk een simpele oplossing van een probleem dat me een goede dag gekost heeft. 

Resources:

Comments [5] | | # 
# Wednesday, 04 July 2007
Wednesday, 04 July 2007 08:09:55 (GMT Daylight Time, UTC+01:00) ( ASP.NET AJAX )

This Blog is not active anymore, further posts will be available on my company website. Read new posts here

Gisteren liep ik tegen een bug aan in IE6 waarbij selectboxen door mijn kalender modal dialog heen schijnen. Dit is te verhelpen door de selectboxen te verbergen als de kalender getoond wordt. Uiteraard wil je dit alleen doen voor selectboxen die daadwerkelijk door de modal dialog heen gaan schijnen. Het bepalen van de absolute positie van de selectboxen en de modal dialog is dus benodigd.  Even googelen levert veel resultaat op. Dit zijn echter veelal creatieve oplossingen zoals deze, waarvan het veelal niet duidelijk is of ze andere browsers dan IE ondersteunen. Ik besloot ook even te kijken in de documentatie van de Microsoft AJAX Library  en was blij verast toen ik zag dat mijn gewenste functionaliteit is opgenomen in deze Library. Zelfs in twee vormen:

getLocation
getlocation bepaald de absolute positie van het DOMElement.

function determinePosition(){
      var domElement = $get('domelement');
      var position = Sys.UI.DomElement.getLocation(domElement)
      alert('X:' + position.x + ' Y:' + position.y );
}

getBounds
getBounds bepaald de absolute positie van het DOMElement en bepaald tevens de hoogte en breedte van het element. Bij het bepalen van de hoogte en breedte wordt tevens rekening gehouden met de border en padding van dit element.

function determinePosition(){
      var domElement = $get('domelement');
      var bounds = Sys.UI.DomElement.getBounds(domElement)
      alert('X:' + bounds.x + ' Y:' + bounds.y + ' Height:' + bounds.height + ' Width:' + bounds.width);
}
Comments [0] | | #