avatar
Today is Friday
October 18, 2019

July 23, 2009

Systeem- en softwaremonitoring met Visio 2007- 1 van 4

by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

De utopie van elke systeembeheerder, een videowall met een overzicht van alle systemen. Uitgebreide informatie over de status van deze systemen bijv pingtijden, schijfruimte, bandbreedte, systemperformance, geheugengebruik etc… Kortom, in zijn wildste droom zou het eerste diagrammetje er zo uit kunnen zien:Systeem monitoring Visio diagram.

Dat ziet er leuk uit, toch? Bovendien is dit ontzettend functioneel, in een oogopslag is te zien hoe het er met de systemen en verbindingen voorstaat. Leuke bijkomstigheid is dat je er nog indruk mee kunt maken ook! Ingewikkeld? Tja, het is wel wat werk maar nee, je moet alleen weten hoe je dit voor elkaar kunt krijgen en dat ga ik proberen uit te leggen in deze en de komende 3 posts. Voor ik deze oplossing vond ben ik minstens een jaar op zoek geweest en die tijd kan jij nu besparen!

Wat heb je nodig?

  • Microsoft Visio Professional 2007
  • Database met monitoringgegevens.
  • Kleine C# applicatie voor het bijwerken van de diagrammen naar de meest recente monitorgegevens.

Microsoft Visio Professional
Met behulp van Visio Professional 2007 kunnen de benodigde diagrammen worden gemaakt. De ‘Professional’ variant van deze software bevat de mogelijkheid data te koppelen aan shapes en data.

Database met monitoringgegevens
Deze database bevat data met monitoringgegevens die worden verzameld door een daarvoor geschikte tool. Een voorbeeld van een goede monitoringtool is ActiveXperts Networkmonitor. Deze heeft de mogelijkheid meetgegevens zoals pingtijden, schijfruimte, systemperformance, bandwidthusage weg te schrijven naar een SQL Server of MS Access Database. Je kunt natuurlijk ook zelf een applicatiemaken die dit soort gegevens verzamelt en in een database wegschrijft.

Kleine C# applicatie
Een kleine C# applicatie die zorgdraagt voor het verversen van de monitoringdata in de Visiodiagrammen en de export naar html.

  • In de volgende post zal ik uitleggen hoe de koppeling van data aan Visio shapes gedaan kan worden.
  • In de 3e post zal ik uitleggen hoe met ActiveXperts Networkmonitor data kan worden gekoppeld aan Visiodiagrammen.
  • In de 4e post zal ik uitleggen hoe het verversen van de Visiodiagrammen op basis van de meest recente verzamelde data kan worden uitgevoerd.

June 29, 2009

Text-To-Speech en Speech Recognition met .NET

by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

Microsoft Speech API 5.1Sinds .NET framework 3.0 is er de system.speech.dll beschikbaar. Hiermee is het mogelijk tekst naar spraak of spraak naar tekst (speech recognition) te vertalen. Hoe werkt het?

  • Maak een reference naar de system.speech.dll
  • Voer de volgende code uit:
  • SpeechSynthesizer s = new SpeechSynthesizer();
    s.Speak("Hello world");

    Hartstikke simpel en leuk om eens mee te experimenteren. Download de Microsoft Speech API SDK

    May 29, 2009

    Lang geleden: Visio naar XAML

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Het is treurig gesteld met mijn blog updates. Zo treurig dat ik het wachtwoord om een post te schrijven niet meer wist. Eigenlijk nog treuriger dan het feit dat ik als .NET blogger gebruik maak van een PHP gedreven blog. Maar ja, ik heb in de tijd dat ik niet blogde wel veel interessants gedaan waar ik weer veel over kan bloggen. Maar, geen beloften, want ik ga nog veel meer boeiende tijdrovende zaken doen die kunnen maken dat ik geen tijd heb om te bloggen.

    Maar goed, de rede dat ik dit schrijf, ik kwam iets leuks tegen. Visio diagrams omzetten naar XAML (WPF). Je leest er hier meer over.

    Binnenkort hoop ik verder in te gaan op het gebruik van Visio om systemen en software te monitoren.

    October 30, 2008

    Gratis CodeRush Xpress for C#

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Developer Express en Microsoft hebben een versie beschikbaar gesteld van een combinatie van de 2 software pakketten CodeRush en Refactor!Pro. Deze draagt de naam CodeRush Xpress. Download en meer over de beschikbare features is te vinden op deze website. Dit pakket integreert in Visual Studio 2008 en voegt handige editing features en krachtige refactoring features toe.

    July 4, 2008

    Een hartelijk welkom bij de Postbank

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Tja, er zal maar iets mis gaan in je programmatuur. Zo probeerde ik deze week in te loggen op mijn online rekening bij de Postbank.
    Dat de software dan wat onbeschoft en dement wordt is wat jammer ;-)

    De normale vs onbeleefde benadering
    Postbank.jpg

    Reporting Services de weg kwijt

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Een paar weken geleden liep ik tegen het volgende probleem aan. Bij het opstarten van mijn Reporting Services web interface kreeg ik de volgende foutmelding:

    System.Web.Services.Protocols.SoapException: Server was unable to process request.
    ---> System.NullReferenceException: Object reference not set to an instance of an object.
    at Microsoft.ReportingServices.Diagnostics.ExtensionClassFactory
         .GetExtensionConfigurationInfo(String extensionType, String extensionName)
    at Microsoft.ReportingServices.Diagnostics.
         AuthenticationExtensionFactory.get_AuthenticationExtension()
    at Microsoft.ReportingServices.WebServer.ReportingService2005..ctor()
    --- End of inner exception stack trace ---

    SSRS.jpgIIS draaide als een zonnetje. Herstarten van IIS of SQL Server hielp geen zier. De RS configuration manager melde geen vreemde dingen. Het heractiveren van RS webfunctionaliteit hielp ook niets. Ga er maar aan staan. Er zijn Fora die deze issue melden, oplossing SQL Server verwijderen en opnieuw installeren. Hmmmm, dat is wel erg veel werk.

    Uiteindelijk heb ik de inhoud van de Reporting Services webdirectory vergeleken met een andere server, en wat bleek. De directories C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer kwamen niet overeen. Er waren 5 files verdwenen:

  • Catalog.sql
  • CatalogTempDB.sql
  • Global.asax!!!!
  • ModelGenerationRules.smgl
  • ReportExecution2005.asmx
  • Gotcha! Alle bestanden gekopieerd vanuit de goed functionerende server en draaien maar weer.

    Tja, hoe is dat mogelijk?? Dat het probleem vaker voorkomt lijdt geen twijfel.

    May 24, 2008

    Nabeschouwing Developer Days 2008

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Even terzijde… Het is weer even geleden sinds m’n laatste artikeltje. Privé omstandigheden maakte echter dat van bloggen de laatste tijd niet veel is gekomen. Ik hoop de komende tijd weer wat frequenter te bloggen.

    DevDays.jpg
    Tja, de Developer Days, er waren wat plus en minpunten. De keynote van David Platt was meer dan de moeite waard. Met een goed en humoristisch verhaal over hoe en waarom we software maken en “Why software sucks” was een leuke binnenkomer. Het serieuze ICT wereldje kan naar mijn idee af en toe wel eens wat meer humor gebruiken. Dit deed overigens geen afbreuk aan het punt dat hij maakte. Het boek “Why software sucks” heb ik dan ook maar direct aangeschaft, goed voor inspiratie en hopelijk… goed voor de gebruikers van mijn software.

    BufferOverflow.jpgDe tweede sessie die ik bezocht vond ik eerlijk gezegd wat minder interessant. Met de essentie van “19 deadly sins of software security” was in principe niets mis, maar het grootste deel van de presentatie ging over C/C++ buffer overflows, het bleef onduidelijk in hoeverre het .NET framework last zou kunnen hebben van dit fenomeen. Met de presentatie was overigens niets mis en het laatste deel over SQL injection en Cross Site Scripting sprak zeker aan. Punt blijft dat je op de Developer Days komt voor nieuwe technologieën en ontwikkelingen en deze presentatie wat dat betreft een beetje uit de toon viel omdat er weinig is gezegd over security in de huidige .NET omgeving. Nu kan ik me voorstellen dat Microsoft niet heel blij zou zijn als iemand zou vertellen hoe binnen .NET software een buffer overflow kan worden veroorzaakt ;-) . BTW: Ze bestaan, alleen jammer dat die niet werden aangetipt en verteld hoe te voorkomen.

    De pauze, tja, een beetje rondkijken bij de diverse stands. Hier en daar een leuk spelendingetje scoren om de kids ’s avonds mee blij te maken en natuurlijk de lunch. Wat me dit jaar opviel en als ik even naga ook de voorgaande jaren is dat er weinig plaats is om te zitten of je eten neer te zetten. Wat je dan ook zag bij “Park Foyer” is dat elk plekje op 1 meter hoogte van de grond werd benut om glaasje drinken of tas neer te zetten. En die plaatsen waren er niet zoveel. Echt waar, het is heel vervelend als je met in je ene hand een tasje met gadgets, een laptop aan je schouder en een bordje met een beker drinken er op in je andere handen staat te bedenken hoe je dit nu weer gaat regelen (en dan maar hopen dat je telefoon niet gaat 8-) ). Kortom een paar statafels moet toch een kleine moeite zijn in 2009.

    Silverlight.jpgNa de pauze bezocht in de presentatie van Peter Himschoot die tijdens de sessie een Silverlight 2.0 bierbrowser applicatie in elkaar knutselde. Interessant, want Silverlight lijkt nu echt volwassen te worden. Er zijn intussen een keur aan controls voor Silverlight beschikbaar. Ten opzicht van versie 1.0 een hele verbetering waarin enkel maar een paar basiscontrols gebruikt konden worden. Vooral de DataGrid is een interessante en handige control. Overigens is Silverlight 2.0 nog in beta stadium maar wordt uitgegeven met een Go-Live licentie. Er is een setup beschikbaar waarbij Visual Studio 2008 kan worden gebruikt om Silverlight 2.0 applicaties te bouwen. Verder is het aan te raden Blend 2.5 March Preview te downloaden aangezien de Visual Designer in VS 2008 nog niet zo heel best werkt (mijn VS crashte meerdere keren op de designer) of je bent natuurlijk een echt XAML guru. Peter durfde het overigens ook niet aan met de Visual Studio Designer en schakelde deze direct aan het begin van zijn presentatie uit. Al met al interessant voer om op de late avond eens mee aan het vogelen te gaan. Meer info…

    Om de dag in stijl af te sluiten heb ik als laatste de WPF sessie bezocht van David Platt. Voortbordurend op de keynote liet hij voorbeelden zien van hoe WPF wel en niet gebruikt zou moeten worden. Verhelderend en leerzaam. We moeten voor ogen houden dat developers van een ander soort zijn dan gebruikers van onze software. Volgens Platt: “Op deze Developer Days waren slechts 80 vrouwelijke developers aanwezig terwijl in het dagelijks leven +/- 52% vrouwelijke software gebruikers zijn.” Goed punt toch!?

    Kortom een geslaagde dag, het geeft mij toch elk jaar weer stof tot nadenken en een stimulans om het volgende jaar maar eens 2 dagen te gaan. Ik ben benieuwd of de baas dat goed vindt…

    P.S. Ben je er niet geweest of heb je een sessie gezien die je niet had willen missen? Microsoft plaats alle sessies na verloop van tijd op internet. Als het zover is lees je het hier.

    March 15, 2008

    Developer Days 2008

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Dit jaar zullen de Developer Days plaatsvinden op 22 en 23 mei in de RAI in Amsterdam. Meer hierover is te vinden op de website van Microsoft. Ook dit jaar wordt het evenement weer gecombineerd met het MIX event.

    March 14, 2008

    IIS v6 (Windows 2003) en gecomprimeerde communicatie – Deel II

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    compression.JPGIn deel I was te lezen hoe je IIS 6 kunt configureren zodat er gecomprimeerd communicatie plaatsvindt. Vooral bij webservice implementaties kan dit leiden tot een reductie van de traffic van 90%. Bij beschikbaarheid van slechts een beperkte bandbreedte is het dus zeker handig na te gaan of gecomprimeerde communicatie een optie is. In deel II (en tevens het laatste deel) probeer ik te beschrijven hoe je gebruik kunt maken met een .NET webservice client van een webserver die gecomprimeerde communicatie toestaat. Standaard ondersteund .NET dit niet. Er zal dus wat moeten worden gedaan om te zorgen dat de client gecomprimeerde communicatie gaat gebruiken.

    Om te beginnen is het library SharpZibLib noodzakelijk. Dit library gaat zorgdragen voor de decompressie van de te ontvangen data van een bepaalde webservice. De webservice client moet aan de server aangeven dat hij overweg kan met gecomprimeerde data. Daarom moet er in de http-header van de SOAP-request de key “Accept-Encoding” worden meegegeven met als waarden de type encodings die kunnen worden geaccepteerd, in dit geval gzip en deflate. Om te zorgen dat dit makkelijk te implementeren is in verschillende clients is het niet handig deze code op te nemen in de webservice proxyclass. De hieronder beschreven oplossing houdt daar rekening mee.

    Onderstaande class verzorgt de decompressie van data:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Net;
    using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
    using ICSharpCode.SharpZipLib.GZip;
    
    namespace snoei.net.utils
    {
        public class HttpWebResponseDecompressed : WebResponse
        {
            public static string _LastCompressionMethod = "-";
    
            public static string LastCompressionMethod
            {
                get { return _LastCompressionMethod; }
                set { _LastCompressionMethod = value; }
            }
    
            private HttpWebResponse mResponse;
            internal HttpWebResponseDecompressed(WebResponse response)
            {
                mResponse = (HttpWebResponse)response;
            }
    
            public override long ContentLength
            {
                get { return mResponse.ContentLength; }
                set { mResponse.ContentLength = value; }
            }
    
            public override string ContentType
            {
                get { return mResponse.ContentType; }
                set { mResponse.ContentType = value; }
            }
    
            public override Uri ResponseUri
            {
                get { return mResponse.ResponseUri; }
            }
    
            public override WebHeaderCollection Headers
            {
                get { return mResponse.Headers; }
            }
    
            public override Stream GetResponseStream()
            {
                Stream compressedStream = null;
    
                // select decompression method
                if (mResponse.ContentEncoding == "gzip")
                {
                    LastCompressionMethod = "gzip";
                    compressedStream = new GZipInputStream(mResponse.GetResponseStream());
                }
                else if (mResponse.ContentEncoding == "deflate")
                {
                    LastCompressionMethod = "deflate";
                    compressedStream = new InflaterInputStream(mResponse.GetResponseStream());
                }
    
                if (compressedStream != null)
                {
                    // decompress
                    MemoryStream decompressedStream = new MemoryStream();
                    int size = 2048;
                    byte[] writeData = new byte[2048];
                    while (true)
                    {
                        size = compressedStream.Read(writeData, 0, size);
                        if (size > 0)
                        {
                            decompressedStream.Write(writeData, 0, size);
                        }
                        else
                        {
                            break;
                        }
                    }
                    decompressedStream.Seek(0, SeekOrigin.Begin);
                    return decompressedStream;
                }
                else
                {
                    LastCompressionMethod = "-";
                    return mResponse.GetResponseStream();
                }
            }
        }
    }

    Deze class is een overerfde van de WebResponse class. Deze class kunnen we vervolgens gebruiken in elke overerfde van een webservice client proxy class zoals hieronder beschreven. De overerfde van de proxy class maken we simpelweg aan op de volgende manier:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    
    namespace snoei.net.webservices
    {
        public class MyWebServiceWithUsingCompression : snoei.net.webservices.MyWebService
        {
            protected override System.Net.WebRequest GetWebRequest(Uri uri)
            {
                WebRequest request = base.GetWebRequest(uri);
                request.Headers.Add("Accept-Encoding", "gzip, deflate");
                return request;
            }
    
            protected override WebResponse GetWebResponse(WebRequest request)
            {
                try
                {
                    return new info18xy.vsearchwingui.HttpWebResponseDecompressed(request.GetResponse());
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }
    }

    snoei.net.webservices.MyWebService is een door .NET gegenereerde proxy class. In bovenstaande overerfde wordt gezorgt dat automatisch bij het aanroepen van de webmethods in proxy class, in de soapheader wordt meegegeven dat de client overweg kan met compressie. Bij de ontvangst van de data wordt gecomprimeerde dan automatisch gedecomprimeerd. Als er geen compressie is ondersteund door de webserver dan functioneert de code ook gewoon correct.

    Compressie kan bijzonder handig zijn in situaties met beperkte bandbreedte en overwegend communicatie van data. Kijk eens in de log files van IIS daar zijn de verschillen tussen communicatie zonder en met compressie goed te zien.

    February 22, 2008

    IIS v6 (Windows 2003) en gecomprimeerde communicatie – Deel I

    by tsnoei — Categories: Uncategorized — No Comments - Afdrukken Afdrukken

    Om optimaal gebruik te kunnen maken van de verbinding naar je IIS webserver is het handig om eens te kijken naar hoe de webserver communiceert. Standaard communiceert de IIS server v6 zonder de communicatie te comprimeren. Aangezien over het algemeen plaatjes niet meer hoeven te worden gecomprimeerd omdat vooral formaten zoals gif, jpeg en png zijn geoptimaliseerd zodat er geen bitje te veel over de lijn gaat is het comprimeren alleen relevant voor de ASCII die heen en weer wordt gestuurd. Situaties waarbij vooral ASCII (lees html, xml etc) wordt gecommuniceerd zijn vooral webservice implementaties. Hierbij worden nauwelijks plaatjes gecommuniceerd en met name heel veel XML. Het mooie is dat ASCII heel goed te comprimeren is.

    In de komende 2 artikelen van alles om gecomprimeerde communicatie tussen webservice server en client met IIS 6 voor elkaar te krijgen. In dit eerste deel uitleg over hoe IIS server te configureren om te zorgen dat compressie wordt geaccepteerd. Dit is niet zomaar een kwestie van een paar vinkjes zetten, maar ook het aanpassen van de IIS Metabase.

    In de praktijk werkt compressie eigenlijk als volgt. Een client doet een request naar een webserver en geeft in de hostheader aan dat een gecomprimeerde reactie van de webserver wordt geaccepteerd en geeft aan met welke compressiemethode de client overweg kan. Ondersteund de webserver 1 van de gegeven compressiemethoden dan zal het antwoord van de webserver gecomprimeerd worden teruggestuurd naar de client met in de hostheader de aanduiding welke compressie is toegepast. De mate van compressie is in de webserver in te stellen.

    Compressie inschakelen

    1. Start de Internet Information Services Snap-in
    2. Klik met de rechtermuisknop op de “Web Sites” > Properties
    3. Kies de Service tab.
    4. Zet Compress Application Files aan.
    5. Zet Compress Static Files aan.
    6. Controleer of de directory aangegeven bij “Temporary Directory” bestaat en lees- en schrijfrechten geeft aan de Internet Guest = IUSR_[COMPUTERNAME].
    7. Zet de max. directory size waarde op een redelijke waarde.

    IIS6Comp2.jpg

    Web Extensie toevoegen
    Om te zorgen dat compressie qua beveiliging is toegestaan moet de compressie extensie worden toegevoegd.

    1. Klik met de rechtermuisknop op de “Web Service Extensions” > “Add new Web Service Extension”.
    2. Geef een duidelijke extensienaam bijv “HTTP Compression”.
    3. Kies Add > “C:\WINDOWS\system32\inetsrv\gzip.dll”.
    4. Zet “Set extension status to allowed” aan.

    IISComp1.jpg

    IIS v6 MetaBase aanpassen

    1. Stop IIS
    2. Open het metabase bestand met een editor zoals Notepad via “c:\windows\system32\inetsrv\metabase.xml”.
    3. Zoek naar “
    4. Voeg binnen het element “HcScriptFileExtensions” (Dus niet “HcFileExtensions”) van beide compressiemethoden de extensies “aspx” en “asmx” toe en eventueel “php”. Houdt de bestaande uitlijning aan om te zorgen dat het metabase bestand niet corrupt raakt.
    5. Pas vervolgens de waarde van “HcDynamicCompressionLevel” aan. De waarde staat op “0″, maak er “9″ van. Deze waarde geeft de mate van compressie aan. Een test overzicht van Chris Adams (Microsoft) toont aan dat een compressie van 9 prima is, maar 10, de hoogste waarde, de CPU erg zwaar belast. Terwijl de compressie bijna even goed is.
    6. Start IIS

    IIS v6 is nu klaar voor gebruik wat betreft compressie. Nu is het nog zaak een .NET webserviceclient te implementeren die overweg kan met compressie. Meer hierover in deel II.
    IIS6Comp3.jpg

    © 2019 Snoei's .NET blog All rights reserved - Wallow theme v0.44 by ([][]) TwoBeers - Powered by WordPress - Have fun!