.NET


Free Photo Editor PEdit Na wat snuffelen aan versie Silverlight 1 een tijd geleden had ik deze materie even niet meer in beeld. Een interessante SDN sessie in december over RIA (Rich Internet Application) services ben ik vol goede moed weer eens in Silverlight gedoken. En ik moet zeggen… er is een hoop veranderd! Silverlight 3 is spannend en 4 is veelbelovend. Tijd voor een RIA appje dacht ik.

Aangezien Silverlight 3 beschikt over de WriteableBitmap en GDI+ me jaren geleden al mateloos intrigreerde kwam ik al gauw uit op een Online Photo Editor. Sinds 13 januari 2010 is het apparaatje live. Voor de geinteresseerde:

http://www.free-photo-editor.org

Je vindt op de homepage een overzicht van de actuele features. Ik moet zeggen, ik heb er echt lol in en hoop er een volwassen tool van te maken. Voorlopig ben ik er wel even zoet mee. Kijk ook op de Twitter pagina voor updates.

en… laat even weten wat je ervan vindt!

1 Reactie | Printversie

In de vorige posts heb ik proberen uit te leggen op welke manier data kan worden gekoppeld aan Visio diagrammen. In deze laatste post over dit onderwerp wil ik uitleggen hoe een C# tool kan worden geschreven die geautomatiseerd de gekoppelde data van het Visiodiagram ververst en wegschrijft als webpagina.

De stappen

  1. Open Visual Studio en creeer een nieuw project.
  2. Klik met de rechtermuisknop in de Solution Explorer op References en kies Add Reference.
  3. Voeg een referentie toe naar Microsoft.Office.Interop.Visio en Microsoft.Office.Interop.Visio.SaveAsWeb.

    De Code
    De complete code ziet er alsvolgt uit:

    string DataSourcePassword = “MyPassword”;

    InvisibleAppClass VisioApplication = new
    InvisibleAppClass();

    VisSaveAsWeb VisioSaveAsWebObject = (VisSaveAsWeb)VisioApplication.SaveAsWebObject;

    VisWebPageSettings VisioSaveAsWebSettings = (VisWebPageSettings)VisioSaveAsWebObject.WebPageSettings;

    VisioSaveAsWebSettings.QuietMode = int.MaxValue;

    VisioSaveAsWebSettings.SilentMode = int.MaxValue;

    VisioSaveAsWebSettings.TargetPath = @”c:\temp\visiodiagram.html”;

    Document VisioDocument = VisioApplication.Documents.Open(@”c:\temp\visiodiagram.vsd”);

    //Refresh Data

    foreach (DataRecordset DataRecordset in VisioDocument.DataRecordsets)

    {

    DataRecordset.DataConnection.ConnectionString += string.Format(“;password={0}”, DataSourcePassword);

    DataRecordset.Refresh();

    }

    VisioSaveAsWebObject.AttachToVisioDoc(VisioDocument);

    //Save as webpages

    VisioSaveAsWebObject.CreatePages();

    //Save, else it will ask to save it when closing the document.

    VisioDocument.Save();

    VisioDocument.Close();

    Wat doet de code
    Om te zorgen dat we een ‘onzichtbare’ versie van Visio draaien maken we gebruik van de InvisibleAppClass:

    InvisibleAppClass VisioApplication = new
    InvisibleAppClass();

    Helemaal onzichtbaar is Visio niet maar daar kom ik zo op terug.

    VisWebPageSettings VisioSaveAsWebSettings = (VisWebPageSettings)VisioSaveAsWebObject.WebPageSettings;

    VisioSaveAsWebSettings.QuietMode = int.MaxValue;

    VisioSaveAsWebSettings.SilentMode = int.MaxValue;

    VisioSaveAsWebSettings.TargetPath = @”c:\temp\visiodiagram.html”;

    Met de VisWebPageSettings class kunnen we een export voor elkaar krijgen naar html pagina’s en gif images.

    Document VisioDocument = VisioApplication.Documents.Open(@”c:\temp\visiodiagram.vsd”);

    Het openen van het betreffende VisioDiagram.

    //Refresh Data

    foreach (DataRecordset DataRecordset in VisioDocument.DataRecordsets)

    {

    DataRecordset.DataConnection.ConnectionString += string.Format(“;password={0}”, DataSourcePassword);

    DataRecordset.Refresh();

    }

    Met bovenstaande code worden alle gekoppelde recordsets doorgelopen in het diagram en wordt de data ververst. De constructie met het DataSourcePassword is bruikbaar in het geval dat er een wachtwoord noodzakelijk is in de connectionstring van de datasource. Deze wachtwoorden worden niet in het Visio diagram opgeslagen en zullen dus per connectiestring separaat moeten worden opgegeven. In dit geval ben ik er vanuit gegaan dat alle connectiestrings hetzelfde wachtwoord hebben.

    VisioSaveAsWebObject.AttachToVisioDoc(VisioDocument);

    //Save as webpages

    VisioSaveAsWebObject.CreatePages();

    Deze code zorgt daadwerkelijk voor het creeeren van de html pagina’s.

    VisioDocument.Save();

    VisioDocument.Close();

    De save methode wordt aangeroepen omdat, ondanks het feit dat we hier de InvisibleAppClass gebruiken, er wordt gevraagd of we het betreffende document op willen slaan als we direct de VisioDocument.Close() methode aanroepen.

    Samenvattend
    Met deze code kun je aan de slag om een geautomatiseerd proces te schrijven wat zorgdraagt voor het automatisch hergeneren van diagrammen met een bepaalde tijdsinterval naar html. Je kunt deze diagrammen tonen in een browser en automatisch laten verversen zodat je continue zicht hebt op de status van de systemen die gemonitord moeten worden. Overigens wil Internet Explorer 6 of 7 er dan na een uur of 12 de brui aan geven (oorzaak: Slecht memorymanagement). Je kunt natuurlijk ook een tool schrijven die de door Visio geexpoteerde gif images toont.

    Kanttekening
    Wat mij opviel is dat de namen van de klassen in de Visio libraries bijzonder slecht gekozen zijn. Een class met de naam Document of InvisibileAppClass getuigt niet echt van vindingrijkheid bij het Microsoft Visio Development team.

    Conclusie
    Dit is het laatste blog artikel in de serie. Met de aangedragen oplossing zou je op een simpele automatische manier je systemen moeten kunnen monitoren. Het is vooral leuke materie omdat er bijzondere visuele resultaten kunnen worden behaald. Succes!

Geen Reacties | Printversie

In de voorgaande post heb ik proberen uit te leggen hoe data kan worden gekoppeld aan Visio diagrammen. Om dat te kunnen doen is het natuurlijk van belang zinnige monitoringgegevens te hebben. In deze post wil ik uitleggen hoe je met behulp van ActiveXperts Networkmonitor (nee, ik heb geen aandelen) gegevens kunt verzamelen in een MS SQL-Server database en hoe je deze kunt gebruiken voor de Visiodiagrammen. Het is zoals ik in de eerste post in de reeks al aangaf ook mogelijk om zelf een tool te maken om meetgegevens op te slaan of een andere tool te gebruiken.

Ik ga er vanuit dat je ActiveXperts Networkmonitor is geinstalleerd en dat je een aantal checks (ping, cpu, disk space etc.. hebt geconfigureerd.

Open ActiveXperts Networkmonitor en zorg dat er via het “Tools”-menu > Options > Logging Tab een SQL Server database is ingesteld. Meer informatie daarover is hier te vinden. Zet vervolgens de logging aan en selecteer “Log all monitoring activities”. Dit betekent dat alle monitoring acties worden gelogd.


Omdat het aantal records dat wordt weggeschreven door het loggen van alle monitoring activiteiten flink kan oplopen is het aan te raden een job in te regelen die regelmatig de database schoont. De query zou er zo uit kunnen zien:

DELETE FROM Events WHERE TimeSecs <= (SELECT MAX(TimeSecs)-(60*60*2) FROM Events)

Om uiteindelijk tot meetgegevens te komen die binnen Visio gebruikt kunnen worden moet er een view binnen SQL Server worden aangemaakt. Deze ziet kan er zo uit zien:

SELECT
CurrentStatus.CheckID,
CurrentStatus.EventID,
Events_1.ID,
Events_1.TimeSecs,
Events_1.TimeString,
Events_1.CheckID AS Expr1,
Events_1.CheckName,
Events_1.CheckTypeID,
Events_1.ResultID,
Events_1.DataVal,
Events_1.Explanation,
dbo.Checks.ID AS Expr2,
dbo.Checks.Name,
CASE WHEN ISNUMERIC(Events_1.DataVal) =1 THEN CONVERT(FLOAT, Events_1.DataVal) ELSE 0 END AS DataValFloat
FROM (SELECT
CheckID,
MAX(ID) AS EventID
FROM dbo.Events WITH (NOLOCK)
GROUP BY CheckID) AS CurrentStatus
LEFT OUTER JOIN dbo.Events AS Events_1 WITH (NOLOCK) ON Events_1.ID = CurrentStatus.EventID
LEFT OUTER JOIN dbo.Checks WITH (NOLOCK) ON dbo.Checks.ID = CurrentStatus.CheckID

Bovenstaande query zorgt dat uit de logginggegevens de laatste status van elke check wordt opgehaald. Met deze resultaten kunnen Visiodiagrammen worden opgebouwd zoals beschreven in de vorige post. Er zit hier en daar wat conversies tussen die het makkelijk maken met de meetdata om te gaan. Probeer eens aan de hand van de voorgaande post gebruik te maken van deze data.

In de volgende post, de C# applicatie die data van Visiodiagrammen ververst en de diagrammen exporteert naar html (en .gif bestanden).

Geen Reacties | Printversie

Dit is het vervolg op mijn vorige post over monitoren van systeem met behulp van Visio diagrams. In deze post zal ik uitleggen hoe data gekoppeld kan worden aan Visio shapes waardoor de visualisatie van de shape kan worden beinvloed.

Stap 1 - Data Downloaden
Download dit Excel bestand. Hierin bevinden zich voorbeeld meetgegevens. Aan de data worden niet veel bijzondere eisen gesteld behalve dat elke regel met een meetgegeven een unieke id bevat. De te downloaden meetgegevens bevatten per regel een Id, een meetwaarde, een status (0=OK, 1=Warning, 2=Error, 3=Niet meetbaar), een omschrijving en een timestamp

Stap 2 - Diagram aanmaken
Start Visio Professional 2007 en selecteer File > New > Network > Detailed Network Diagram (Metric). Je hebt nu een diagram met aan de linkerkant een keuze uit diverse networkshapes zoals servers etc…

Stap 3 - Excel data koppelen
We gaan nu de Excelsheet (het had ook SQL data kunnen zijn) koppelen aan het nieuwe diagram. Kies in het menu Data > Link Data To Shapes… Selecteer Microsoft Excel Workbook kies “Browse…” en selecteer het zojuist gedownloade excel sheet. Klik op “Next” en kies “Sheet1$”. Klik op 2x “Next” en vink “Id” aan als unique identifier kolom. Klik “Next” en dan “Finish”. Voila, data is gekoppeld aan het diagram.

Stap 4 - Fields gebruiken
Plaats nu linksboven de text “Systeemstatus” en zet de fontsize naar 20 en bold. Om er duidelijk te maken hoe recent de gegevens van het diagram zijn kunnen we datum naast deze kop plaatsen.

Zoals je misschien hebt gezien vind je onderin de Visio applicatie een lijst met records uit het Excel sheet. Mocht je die niet terug kunnen vinden selecteer dan in het View menu “External Data”.


Selecteer een van de records en sleep deze op de zojuist gecreeerde tekst. Je zult nu mogelijk naast de tekst een zogenaamd “Data Graphic” zien verschijnen


en aan de rechterkant zal onderstaand Data Graphic venster worden geopend. Zo niet kies dan in het Data menu “Display Data On Shapes”. Selecteer de tekst en klik in het Data Graphic-venster op “None”.


Nu gaan we de datum toevoegen. Zet de cursor achter de tekst “Systeemstatus “. Kies in het menu Insert > Field en dan als Category:Shape Data en Field Name: Timestamp.


We hebben nu fielddata gekoppeld.

Stap 5 - Shapes gebruiken
Selecteer nu uit de shapegroep bij “Netwerk and Pheripherals” de server shape. Sleep deze op het diagram. Sleep nu een het ping record van het Peregrijn system uit het external data venster op deze shape. We gaan nu een nieuw Data Graphic maken.

Klik linksboven op “New Data Graphic”


Klik in het nieuw geopende venster op New Item > Color By Value


Selecteer als Data Field “Status”. Op basis van de waardes van dit veld kan een kleur worden gegeven aan deze shape. Voeg 3 kleuren toe zoals in onderstaande screenshot te zien is.

Klik op OK en nogmaals in het andere venster op OK.

Klik daarna op “Yes” om aan te geven dat deze nieuwe Data Graphic moet worden toegepast op de geselecteerde shape.


Teken nu een rechthoek onder de zojuiste geplaatste shape.

Dubbelklik er op en vul de tekst “CPU” in.

Sleep het CPU Usage record van Peregrijn op deze rechthoek. De rechthoek zal nu automatisch dezelfde data graphic toegekend krijgen als de server shape.

Maak een kopie van de data graphic door op de datagraphic aan de rechterkant het menu open te klikken en “Duplicate” te selecteren.

Klik op de gedupliceerde data graphic om deze toe te kennen aan de rechthoek.

Klik in het menu (het pijltje aan de rechterkant) van de gedupliceerde data graphic op “Edit Data Graphic…”. Klik op New Item > Data Bar.

Selecteer als “Data Field”: “Value”.

Selecteer als “Callout”: “Speedometer”.

Zet “Label Position” en “Value Position” op “Not Shown”. Klik op OK.


Dubbelklik op de tekst van de rechthoek en zet de cursor achter “CPU “.

Kies in het menu Insert > Field en dan Category Shape Data en Field Name “Value”.

Druk op OK en voeg een procent teken toe.

We zijn klaar. Onderstaand het resultaat.


Niets houd je nu meer tegen om een fantastisch diagram in elkaar te knutselen. Je kunt elke willekeurige shape en tekst gebruiken om bovengenoemde acties op toe te passen.

Volgende post zal ik uitleggen hoe ActiveXperts Networkmonitor kan worden ingeregeld om de meetdata toegankelijk te maken voor een Visiodiagram als dit.

Geen Reacties | Printversie

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.
Geen Reacties | Printversie

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

    Geen Reacties | Printversie

    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.

    Geen Reacties | Printversie

    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.

    Geen Reacties | Printversie

    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

    Geen Reacties | Printversie

    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.

    Geen Reacties | Printversie

    Next Page »