donderdag 26 maart 2009

Installeer SCSI hard disk in VMWare Virtual Machine met Windows XP

Wanneer je in een VMWare virtual machine Windows XP wilt installeren met een Hard Disk van het type SCSI, dan heb je een probleem met de drivers. De benodigde drivers zitten namelijk niet in een standaard Windows XP installatie wat veroorzaakt dat de Windows XP installatie de hard disk niet 'ziet' en dus de installatie niet kan voltooien.

VMWare heeft wel een driver hiervoor beschikbaar gestelt, welke je kan downloaden op http://www.vmware.com/download/ws/drivers_tools.html onder het kopje SCSI Disk Drivers. Dit is een Floppy image die je in je Virtuele Machine kan koppelen aan de floppy drive. In de Windows XP installatie kies je dan de optie "Druk op F6 om een niet-Microsoft SCSI/RAID stuurprogramma te installeren". Daarna kies je "E=Extra apparaat opgeven" en Enter om de "VMWare SCSI Controller" te selecteren. Wanneer je daarna de installatie probeert te voltooien krijg je, tijdens het kopiëren van de bestanden, de foutmelding "Setup kan het bestand vmscsi.sys niet kopiëren". Helaas kan je nu de installatie niet goed voltooien.

Een simpele manier (en eentje die zeker werkt) is het 'slipstreamen' van de SCSI driver in de Windows XP installatie. Ik heb hiervoor nLite gebruikt. Met behulp van nLite kan je de gehele Windows XP installatie aanpassen. Ik richt me in dit artikel alleen op het integreren van de driver:
  • Download de laatste versie van nLite op hun website en installeer deze
  • Start nLite op en selecteer de directory waar de Windows XP installatie staat. Dit kan ook de CD-ROM drive (waar de installatie CD van Windows in zit) zijn
  • Klik een aantal keer op Next totdat je onderstaand venster te zien krijgt:

    Selecteer hier de opties Drivers en Bootable ISO
  • Klik hierna op Next totdat je onderstaand venster te zien krijgt:

    Download hier het ZIP bestand met de VMWare SCSI Driver en extract de inhoud naar een folder.
    Klik hier op Insert en selecteer daarna Single Driver. Nu heb je de mogelijkheid om de SCSI driver te selecteren welke in de Windows XP installatie toegevoegd zal worden.

    Selecteer de VMWare SCSI Controler en klik op OK
  • Klik een aantal keer op Next totdat je onderstaand venster te zien krijgt:

    Klik op Make ISO om een ISO bestand te genereren welke je daarna kan branden op CD óf aan een VMWare CD Drive kan koppelen
  • De installatie van Windows XP kan nu op een 'normale' manier uitgevoerd worden. De installatie zal automatisch de HD 'zien' en de juiste drivers installeren.

Succes ermee !

vrijdag 13 maart 2009

Leuke Speech gadgets bij Acapela.tv

Ik ben momenteel bezig met het uitzoeken van de Speech API van Microsoft welke in het .Net framework geïntegreerd is (System.Speech). Via Google kwam ik op de website van Acapela en Acapelat.tv. Daar heb je een aantal zeer leuke gadgets, waaronder deze hieronder. Klik op de 'Play' knop en laat je verrassen. Erg indrukwekkend hoor !!!

donderdag 12 maart 2009

Analyseren van het gedrag van bezoekers aan je website (Mouse Tracking)

Tegenwoordig is het mogelijk het echte gedrag van bezoekers op je website te meten. Daarmee bedoel ik dat alle muisbewegingen en klikken van de muis gevolgd kunen worden.

Een aantal bedrijven (o.a. TrackConsole, ClickTale, OpenCube) hebben reeds software ontwikkelt om dit mogelijk te maken. Met behulp van deze software kan je de weg die een bezoeker met zijn muis heeft gevolgt 'naspelen', waardoor het daadwerkelijke gedrag van de bezoeker inzichtelijk wordt gemaakt. Met behulp van de verzamelde gegevens kan je je website beter optimaliseren, waardoor bezoeken (hopelijk) tot een hoger rendement zullen leiden.

Mouse Tracking moet je niet vergelijken met Eye Tracking. Eye Tracking analyseert het kijkgedrag van een bezoeker aan een website d.m.v. dure (camera-)apparatuur. De resultaten die hieruit volgen zijn wel vergelijkbaar met Mouse Tracking en zouden op dezelfde manier gebruikt kunnen worden voor website optimalisatie.

Ik denk dat ik me in eerste instantie maar even bezig ga houden met de goedkopere Mouse Tracking methode. Ik ben benieuwd wat de resultaten ervan zullen zijn én of/hoe websites echt, op basis van deze resultaten, geoptimaliseert kunnen worden. Indien ik hier meer over weet zal ik het in mijn blog schrijven.

Velden gebruiken in de header van een SQL Server Reporting rapport

Hoe kan je velden uit je dataset gebruiken in de header of footer van een rapport in SQL Server Reporting?

Helaas kan je dit niet zomaar doen. Wanneer je een veld uit de Datasets toolbar sleept in de header of footer van een rapport, dan krijg je bij het uitvoeren van het rapport de volgende melding: "The Value expression for the textbox ‘[FieldName]’ refers to a field. Fields cannot be used in page headers or footers."

Hoe krijg je dit nu wél voor elkaar?
De simpelste oplossing is om aan de rapport parameters een nieuw veld toe te voegen.
  • Hierbij selecteer je dan de optie 'Hidden', zodat de gebruiker niet wordt gevraagd om de nieuwe parameter in te vullen.
  • Onder de sectie "Default values", selecteer je de optie "From query". Hierbij maak je de keuze voor de betreffende Dataset en voor "Value field" selecteer je het betreffende veld uit deze dataset

Hierna kan je een nieuwe 'Textbox' in de header of footer van het rapport slepen en de rapport parameter er aan toe kennen. Bijvoorbeeld: "=Parameters!EmployeeName.Value"

Dat is alles. Succes ermee !

vrijdag 6 maart 2009

API van TransIP.nl aanroepen vanuit .Net

Smallweb maakt sinds kort gebruikt van een aantal diensten van TransIP. TransIP biedt hierbij de mogelijkheid om gebruik te maken van een API. Deze API is een service die SOAP gebaseerd is en biedt functionaliteit om domeinen te bekijken die je via TransIP geregistreerd hebt, maar ook om domeinen te registreren, DNS records te wijzigen, enz.

TransIP heeft op haar website documentatie geplaatst welke PHP gerelateerd is. Zelf ontwikkel ik voornamelijk op het Microsoft platform en had dus de behoefte om deze API in .Net te gebruiken. Hieronder een korte uitleg om dit eenvoudig op te zetten.

  1. Om gebruik van de API te kunnen maken dien je eerst klant te worden bij TransIP. Hierna kan je in het controlepaneel de API inschakelen, waarbij je een wachtwoord voor je gebruikersnaam op kan geven.
    Let op: dit wachtwoord hoeft niet hetzelfde wachtwoord te zijn als van je reguliere TransIP account.

  2. Maak in Microsoft Visual Studio een project aan (in dit voorbeeld heb ik een Web Application project in Visual Studio 2008 aangemaakt)

  3. Voeg aan dit project een web reference toe door met de rechter muisknop op het project in de Solution Explorer te klikken en Add Web Reference te selecteren.

  4. Vul in het nieuwe venster de volgende URL in: https://api.transip.nl/wsdl/?service=DomainService (deze kan je terugvinden in de API documentatie van TransIP) en klik op Go.
    Hierna krijg je een aantal keer onderstaand venster te zien, maar hier kan je gewoon op Ja / Yes klikken.


    Geef de service reference de naam 'DomainService' en klik op "Add reference"


    De Web Reference wordt nu aan het project toegevoegd.


  5. Om met de API van TransIP te kunnen communiceren dien je 3 cookies in het service request mee te sturen, namelijk:
    login = het account bij TransIP
    hash = een string die volgens het volgende formaat opgebouwd is: 'login:password@ipadres', waarbij login het account bij TransIP is; het password is het wachtwoord wat je hebt ingesteld bij de API instellingen in het controlepaneel van TransIP; het IP adres is het internet IP adres van de computer waarmee je een verbinding maakt met de SOAP service.
    Deze string dient geëncrypt te worden met behulp van MD5.
    mode = readonly of readwrite. Met readonly kan je de API testen en met readwrite worden wijzigingen daadwerkelijk doorgevoerd.
    Voor het doorgeven van deze waardes heb ik een aantal constanten aangemaakt. Natuurlijk is het veel beter om deze waardes uit een configuratiebestand te lezen, maar voor dit voorbeeld houden we het even simpel.

    private const string TransIpLogin = "username";
    private const string TransIpPassword = "password";
    private const string TransIpIpAddress = "192.168.1.1";
    private const string TransIpMode = "readonly";

  6. Nu voegen we een 'Connect' methode toe aan de klasse waarin we aan het programmeren zijn, om de verbinding met de SOAP service tot stand te brengen

    public DomainServiceService Connect()
    {
    //Instancieer service
    DomainServiceService service = new DomainServiceService();

    //Valideer de server certicicaat (vanwegde de HTTPS conenctie)
    ServicePointManager.ServerCertificateValidationCallback =
    new RemoteCertificateValidationCallback(
    delegate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
    return true;
    });

    //Genereer de hash voor authenticatie
    string hashData = string.Format("{0}:{1}@{2}", TransIpLogin, TransIpPassword, TransIpIpAddress);
    string hash = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(hashData, "MD5").ToLower();

    //Voeg de 3 authenticatie/configuratie cookies toe
    CookieContainer cookies = new CookieContainer();
    cookies.SetCookies(new Uri(service.Url), string.Format("login={0}", TransIpLogin));
    cookies.SetCookies(new Uri(service.Url), string.Format("hash={0}", hash));
    cookies.SetCookies(new Uri(service.Url), string.Format("mode={0}", TransIpMode));
    service.CookieContainer = cookies;

    //Retourneer de service instantie
    return service;
    }
    Deze 'Connect' methode geeft een instantie van de service klasse terug, waarmee we domeinen kunnen gaan beheren.

  7. Nu kunnen we bijvoorbeeld de lijst met geregistreerde domeinnamen (geregistreerd via TransIP) ophalen:

    DomainServiceService service = this.Connect();
    this.txtDomains.Text = string.Join("\r\n", service.getDomainNames());
    In dit voorbeeld wordt de lijst met domeinen in een TextBox control getoont

    óf WHOIS gegevens van een domein ophalen:

    DomainServiceService service = this.Connect();
    this.txtWhois.Text = service.getWhois(this.txtDomain.Text);
    In dit voorbeeld wordt de WHOIS informatie in een TextBox control getoont.

  8. Voor een overzicht van alle functies in de API verwijs ik je door naar de API documentatie van TransIP

Bovenstaande voorbeeld Web Project kan je hier eventueel downloaden.

Succes ermee !!

donderdag 5 maart 2009

Smallweb verlaagt prijzen voor domeinregistraties

Smallweb verlaagt de prijzen voor domeinregistraties. De prijs voor de registratie van een .nl domein kost nu nog maar € 7,50 per jaar zonder eenmalige registratiekosten.

Maar, bij Smallweb kan je natuurlijk naast de domeinregistratie ook meteen je website laten hosten (overigens zijn we momenteel bezig met het verlagen van de prijzen voor hosting én het opwaarderen van deze pakketten. Denk hierbij aan beschikbare schijfruimte en maximaal toegestaan dataverkeer).
Het voordeel van Smallweb is dat het alleen maar zeer hoge kwaliteit biedt.

Check de website van Smallweb of registreer direct je domeinnaam !!!

maandag 2 maart 2009

Eenvoudig RSS feeds maken in ASP.NET 3.5

In ASP.NET 3.5 is het zeer eenvouding om RSS feeds te maken voor je website. Hieronder probeer ik dan ook eenvoudig uit te leggen hoe je dit snel voor elkaar kunt krijgen:
  1. Voeg aan je web project een nieuw item toe door met de rechter muisknop op het project te klikken en "Add/New item" te selecteren
  2. Selecteer de "Generic Handler" template en geef deze de naam 'rss.ashx'

    Het *.ashx bestand met het code-behind klasse bestand (*.cs) wordt gegenereerd

  3. De klasse implementeert de interface IHttpHandler en de bijbehorende methodes en eigenschappen zijn hierbij reeds aangemaakt.

  4. We gaan nu de methode 'ProcessRequest' aanpassen om een RSS feed in het Response object te schrijven. Verwijder eerst de bestaande voorbeeld code

  5. Om RSS feeds te genereren hebben we een extra reference in het project nodig, namelijk: "System.ServiceMode.Web". Klik in het webproject met de rechter muisknop op 'References' en selecteer "Add Reference". Selecteer in de lijs met .Net componenten het betreffende component.


  6. Maak een instantie van de klasse 'SyndicationFeed':
    SyndicationFeed feed = new SyndicationFeed("RSS titel", "RSS omschrijving", new Uri("http://localhost"));
    Voeg hiervoor de volgende "using directive" (bonvenin de klasse) toe:
    using System.ServiceModel.Syndication;

  7. Voeg (als voorbeeld) twee items aan de RSS feed toe:
    feed.Items = new List
    {
    new SyndicationItem("Item 1", "Het 1e RSS item", new Uri("
    http://localhost/item1.aspx")),
    new SyndicationItem("Item 2", "Het 2e RSS item", new Uri("
    http://localhost/item2.aspx"))
    };

  8. Schrijf de RSS feed naar het Response object:
    using (System.IO.StringWriter output = new System.IO.StringWriter())
    {
    System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(output);
    new Rss20FeedFormatter(feed).WriteTo(writer);
    context.Response.ContentType = "application/rss+xml";
    context.Response.Write(output.ToString());
    }

  9. Als je nu rss.ashx opstart in je webproject dan zul je zien dat er netjes een RSS feed wordt 'gerendert'.

In punt 7 zou je natuurlijk een database (of andere databron) uit kunnen lezen om automatisch RSS items toe te voegen aan je feed.


Succes ermee !!!