avatar
Today is Sunday
August 20, 2017

July 2, 2011

Mobile app development

by tsnoei — Categories: Android — Tags: , , , , , , No Comments - Afdrukken Afdrukken

Marktaandeel Mobile

Stel je bent van plan een mobile app te bouwen, welke platform is dan het meest geschikt om mee te beginnen? Marktaandeel is dan natuurlijk erg belangrijk en dan blijkt dat kiezen voor Microsoft niet meer zo heel vanzelfsprekend is. Hoe ziet de mobiele-platformwereld er tegenwoordig uit?

Microsoft
Microsofts Windows Phone 7, opvolger van het al niet erg populaire Windows Mobile is nog geen succes. Overigens zijn gebruikers van de Mango variant van WP7 erg enthousiast. Het zijn er alleen niet zo veel.

Nokia
Nokia speelt weliswaar nog een grote rol op de smartphone markt, echt populair zijn de met Symbian uitgeruste telefoons niet meer. CEO Stephen Elop noemt het bedrijf zelfs een zinkend schip al hebben ze (nu) nog een behoorlijk marktaandeel.

RIM
RIM (Blackberry) lijkt op dit moment de plank mis te slaan en gaat niet echt voor de wind. De eerste ontslagronde is al aangekondigd. Bovendien keren developers zich af van het Blackberry platform omdat het te ingewikkeld zou zijn door de variatie aan bedieningsmogelijkheden.

Apple
Het aandeel Apple neemt niet echt af maar ook niet toe. Apple blijft populair maar is duur en heeft een negatieve naam door de sterke controle die zij uitoefenen op Apps en content.

Android
Kijkend naar het lijstje hiernaast is Android als enige besturingssysteem voor de mobiele markt ECHT booming. Het marktaandeel is de afgelopen tijd fors toegenomen. Android heeft Symbian, voorheen de grootste, snel ingehaald.

Wat Android natuurlijk echt mee heeft is het open besturingssysteem en de gratis beschikbare ontwikkeltools. Als app developer kun je zo aan de slag. Publiceren van je app hoeft niet perse via een market maar kan direct vanaf je eigen website. Er zijn meerdere Android markets beschikbaar waarvan de Google Android market de meest bekende en meest populaire market is. Als developer in Nederland kun je voor omgerekend € 17,- je apps in deze market plaatsen.

Android wordt nog interessanter doordat er op dit moment veelbelovende Android tablets op de markt beginnen te komen die serieus de concurrentie aan kunnen met de Apple iPad.

Wat nu?
Tijd om je als developer voor mobile eens achter de oren te krabben. Als rechtgeaard Microsoft developer kom je dan in een soort identiteitscrisis. Apps ontwikkelen voor Android betekent namelijk het omarmen van Java. …en van C# naar Java geeft toch meer het gevoel dat je achteruit gaat dan vooruit. Toch heeft ook Java een hoop in huis. Een mooi OO-taal die draait op veel operating systemen. Tools te over die toch niet echt onderdoen voor de tools die Microsoft biedt, daarbij zijn ze ook nog eens gratis.

Persoonlijk heb ik toch mijn keuze gemaakt. Android heeft op mobiele apparaten de toekomst, voorlopig in ieder geval. Wat voor mij ook een belangrijke overweging is. Ik mis de laatste tijd de dynamiek die Microsoft altijd had. De Microsoft Developer Days waren dit jaar bijvoorbeeld wat saai. Men had eigenlijk maar weinig ECHT nieuws te melden. Daarentegen gebeurd er in de Android-wereld een heleboel. Daarbij is er zeker een vergelijkbare en minstens zo enthousiaste community en dat motiveert!

Nee, Microsoft zeg  ik zeker geen vaarwel. Maar ik ga mijn aandacht toch wat meer verdelen.

 

Om nog eens na te lezen:

January 10, 2011

Assembly (DLL) naar broncode en obfuscation

by tsnoei — Categories: .NET — Tags: , No Comments - Afdrukken Afdrukken
Assembly naar broncode

Assembly naar broncode met de gratis .NET Reflector van Red Gate

Zou je graag eens een kijkje nemen in de code van een collegadeveloper maar heb je alleen de gecompileerde code? Red Gate heeft een prachtige tool waarmee zogenaamde code disassembler. Ofwel de tool, .NET reflector, bouwt assemblies terug naar sourcecode. Er is zowel een gratis als een betaalde versie beschikbaar.

Niet leuk?

Gebruik obfuscator software om je sourcecode zo onleesbaar te maken dat ook na disassembling onnavolgbare code onstaat. Een aantal pakketten die dit doen zijn o.a.:

  • CodeVeil
  • Dotfuscator
  • Deepsea
  • CryptoObfuscator
  • SmartAssembly
  • January 7, 2011

    Regex Deel 3 – De puntjes op de i

    by tsnoei — Categories: .NET — Tags: , No Comments - Afdrukken Afdrukken

    Zoals je in het vorig deel hebt kunnen lezen is de regular expression tester te gebruiken om je regex kennis te praktiseren en expressies uit te testen.

    Speciale karakters

    Begin van een woord matchen

    Het speciale karakter “\b” match een begin van een woord. Hebben we te doorzoeken tekst “Jan loopt met an in het bos met zijn os.” dan vinden we met de volgende reguliere expressie alleen een match op het woord “os”:

    \bos

    Een match op de naam “an” maar niet op “Jan” (in dit voorbeeld zonder hoofdletters) verkrijgen we door:

    \ban

    Om op elk woord een match te krijgen kan de volgende expressie worden gebruikt:

    \b\w+

    Match op alle karakters

    De “.” staat voor een match van alle karakters behalve row breaks en new line karakters:

    .+

    Bovenstaande matcht de volledige tekst. Overigens heeft de punt (“.”) binnen een karakterklasse (“[.]“) geen speciale betekenis.

    Carriage return, Line Feed en Tab

    Carriage return en Line Feed worden binnen regex hetzelfde aangeduidt als binnen .NET strings.
    De carriage return:

    \r

    De line feed:

    \n

    De tab:

    \t

    Bij het matchen van meerder regels binnen een tekst zijn de karakters van groot belang.

    Alternatieven (Alternation)

    Binnen karakterklassen wordt er gematcht op karakters binnen de klasse. Dit werkt altijd als een OF. Buiten de klassen wordt standaard als EN gematcht. Een OF match maken op “maandag” of “dinsdag” of “woensdag” gaat via de volgende reguliere expressie:

    (maandag|dinsdag|woensdag)

    De haken groeperen de opdracht. De pipes (“|”) zorgen voor de OF instructies.

    Case (in)sensitive

    (?i)

    Bovenstaande reguliere expressie maakt alles wat volgt case insensitive. De regulier expressie “(?i)jan” op de te doorzoeken tekst “Jan loopt in het bos” resulteert in een match op “Jan”.

    (?-i)

    Bovenstaande expressie heft case insensivity weer op.

    Gretig of lui repeteren

    Stel we hebben de tekst “Jan loopt in het bos. Hij speelt op zijn contrabas.” Als we elke zin willen matchen kunnen we de volgende reguliere expressie maken:

    [a-zA-Z\s]+

    Dit zal resulteren in 2 resultaten (gebruik tab 2 in de test tool). Dit is een voorbeeld van Greedy repetition. Het matchende resultaat wordt zo lang als mogelijk.
    Voegen we echter een “?” aan het speciale repetitiekarakter (“+”) dan schakelen we over naar lazy repetition:

    [a-zA-Z\s]+?

    Dit resulteert in 49 resultaten, voor elke letter en spatie 1 resultaat. Zodra er een match is is het afgelopen.

    Vooruit en achteruit kijken

    Het is mogelijk een match te maken op onderdelen in de tekst zonder ze mee te nemen in het resultaat. We hebben de tekst “Jan loopt in het bos.”. We willen een match op alles wat komt na de tekst “Jan”.

    (?<=Jan).*

    .* staat voor alle karakters. ?<=Jan is een lookbehind naar de tekst "Jan" zonder deze mee te nemen in het resultaat.
    Willen we een match op alles wat komt voor de tekst "bos" dan gebruiken we de volgende regex:

    .*(?=bos)

    Een combinatie van beide is:
    (?<=Jan).*(?=bos)
    Alles tussen "Jan" en "bos" wordt gematcht.

    Groeperen, verschillende resultaten in een keer matchen

    In de tekst: "12 december 2010 19:34:44.999" zouden we bijvoorbeeld de dag en maand + het uur en de minuten kunnen halen. Groepen met namen zijn hier de oplossing. Zo kunnen in een keer op verschillende onderdelen van de tekst matches accuraat worden opgehaald. Dit is vooral handig bij het gebruik in .NET code. Een voorbeeld volgt iets verderop in dit artikel.

    (?<DATUM>[1-9][0-9]{0,1}\s[a-zA-Z]+)\s[1-9][0-9]{3}\s(?<TIJD>[1-9][0-9]{0,1}:[0-9]{2}):[0-9]{2}[.][0-9]{3}

    De syntax:

    ?<GROEPNAAM>

    binnen de ronde haken zorgt voor naamgeving van een groep. In .NET bevat elke match een groepcollectie waarin de namen en resultaten zijn terug te vinden.

    Gebruik van reguliere expressies in .NET

    Zoals in de eerste deel van de regex artikelen aangegeven bevindt de regex functionaliteit zich binnen .NET in de System.Text.RegularExpressions namespace. De methode die vooral worden gebruikt voor het valideren en zoeken in de class Regex zijn:

  • IsMatch(string Text, string RegexPattern) resultaat Boolean
  • Matches(string Text, string RegexPattern) resultaat MatchCollection object
  • Belangrijk is om NIET te vergeten de patterns te escapen:

    ^\sbos.$

    Wordt in code:

    Regex.IsMatch("Jan loopt in het bos.", "\\sbos.$");

    Bij het gebruik van de Matches functie wordt een MatchCollection object geretourneerd. Dit is een collectie met alle gevonden matches (Match objecten). De gevonden frase kan worden terug in de value property van het Match object.

    MatchCollection AllMatches = Regex.Matches("Jan loopt in het bos.", "n");
    foreach (Match m in AllMatches)
    {
           string Frase = m.Value;
    }
    

    Zoals eerder genoemd kan het gebruik van groepsnamen heel handig zijn. In het derde tabblad van de regular expression tester kun je testen met groepen. Voorbeeld:

    string text = "12 december 2010 19:34:44.999";
    string regexPattern = "(?<DATUM>[1-9][0-9]{0,1}\\s[a-zA-Z]+)\\s[1-9][0-9]{3}\\s(?<TIJD>[1-9][0-9]{0,1}:[0-9]{2}):[0-9]{2}[.][0-9]{3}"
    MatchCollection Matches = Regex.Match(text, regexPattern); //er is 1 match
    int GroupCount = Matches[0].Groups.Count; //3 groepen, nl: 1. de gehele match, 2. Groep: DATUM en 3. Groep: TIJD)
    string Datum = Matches[0].Groups["DATUM"].Value; //of Matches[0].Groups[1].Value
    string Tijd = Matches[0].Groups["TIJD"].Value;
    
    Regular Expressions en groepen in .NET.

    Gebruik van het derde tabblad van de regular expression tester.

    Conclusie

    Er is nog veel meer te vertellen over regular expressions. Ik hoop dat dit helpt om een eind op weg te komen met regular expressions. Echt de puntjes op de spreekwoordelijke "i" ?. Onderstaand boek vond ik heel leerzaam, het behandeld ook de toepassing van reguliere expressies in .NET.

    Mastering Regular Expressions

    Mastering Regular Expressions


    Vragen of opmerkingen? Aarzel niet, elke reactie is van harte welkom!

    Regex Deel 2 – Quick start

    by tsnoei — Categories: .NET — Tags: No Comments - Afdrukken Afdrukken

    snoei.net Regular Expression testerOm direct met de regels aan de slag te kunnen die we hieronder gaan bespreken is het handig de snoei.net Regex Tester silverlight applicatie te gebruiken. Denk nu vooral niet dat dit een hele spannende applicatie is. Het stelt weinig voor, net zoals het gebruik van reguliere expressies binnen het .NET framework.

    Door veel softwareontwikkelaars worden regular expressions gebruikt voor de validatie van velden zoals e-mailadres, url, postcode etc… Voor het zoeken van gegevens in grote stukken tekst wordt regex over het algemeen minder gebruikt. De manier waarop regex wordt gebruikt verschilt in beide gevallen niet veel van elkaar. Op beide zijn dezelfde regels van toepassing. We beginnen met de uitleg voor het doorzoeken van tekst. Het valideren van gegevens is dan appeltje/eitje.

    In de voorbeelden hieronder worden dubbele quotes (“) gebruikt om een bepaalde tekst, frase of regex aan te duiden. Neem deze dus niet mee in de tests.

    Hieronder overzichtelijk een aantal voorbeelden met een stuk tekst en een regular expression om bepaalde gegevens uit de tekst te halen.

    Voorbeelden

    ‘Gewone’ karakters (literals) gebruiken

    Tekst: “Jan loopt in het bos”
    Zoekopdracht: Komt het woord: “loopt” voor?
    Regex:

    "loopt"

    Uitleg: Voer dit bovenstaande voorbeeld in in op het eerste tabblad van de regular expression tester. Resultaat: een match. Het woord “loopt” komt tenminste 1 keer voor.
    Reguliere expressie tester voorbeeld

    Het gebruik van ^ en $

    Tekst: “Jan loopt in het bos.”
    Zoekopdracht: Bevat de zin exact “Jan loopt in het bos.”?
    Regex:

    "^Jan loopt in het bos.$"

    Uitleg: Het dakje (“^”) duidt aan dat de daaropvolgende tekst aan het begin van de te doorzoeken tekst moet staan. De reguliere expressie “^Jan” levert bijvoorbeeld een match op bij alle teksten die beginnen met “Jan”. Het dollar-teken (“$”) duidt het einde van de tekst aan. De regex “bos.$” levert een match op bij alle teksten die eindigen met “bos.”. Deze 2 in combinatie gebruiken betekent dat alles tussen deze 2-tekens exact overeen moet komen met de te doorzoeken tekst. Herkenbaar? Ja, deze worden bijna altijd samen gebruikt bij validaties.

    Omzeilen van speciale karakters
    ^ en $ zijn dus speciale karakters en geen literals. Als met speciale tekens toch als literals wil gebruiken. Stel je wil een match maken op een dollar teken. Plaats dan een “\” voor het speciale teken. Dus tekst: “$500,-”, regex: “\$500,-” geeft een match.

    Wat is een karakter klassen (character classes)

    Tekst: “Jan loopt in het bos. Hij speelt op zijn contrabas.”
    Zoekopdracht: De termen “bos” en “bas”.
    Regex:

    "b[oa]s"

    Uitleg: Gebruik voor deze test het tweede tabblad van de Regular Expression tester.

    Regular Expression tester - teksten doorzoeken

    Er zijn 2 resultaten, “bos” en “bas”. We maken gebruiken van de zogenaamde character classes. Character classes zijn verzamelingen van karakters die worden omsloten met rechte haken (“[" en "]“). Een karakter klasse definieert welke karakters mogen voorkomen op een bepaalde positie binnen de tekst. In dit geval mag “o” OF “a” voorkomen op een plek tussen “b” en “s”. Het wordt “boos”, “boas” of “baas” zal dus niet in de zoekresultaten voorkomen omdat het hier slechts om 1 positie gaat.

    Karakter klassen en karakterreeksen (a-z A-Z)

    Tekst: “Jan loopt in het bos. Hij speelt op zijn contrabas.”
    Zoekopdracht: Alle termen die beginnen met een “b” en eindigen op een “s” met daartussen 1 ander willekeurig karakter.
    Regex:

    "b[a-zA-Z]s"

    Uitleg: a-z duiden alle kleine letters in het alfabet aan. A-Z alle hoofdletters. “b[a-z]s” zou dus alleen resulteren in een match als er een kleine letter tussen de “b” en de “s” staan. Alle reeksen op een rij:

    a-z Kleine letters van “a” tot “z”. Mogelijke variatie: “a-f” = alle kleine letters van “a” tot en met “f”.
    A-Z Hoofdletters van “A” tot en met “Z”.
    0-9 Alle cijfers van “0″ tot en met “9″.
    \d Cijfers.
    \w Alle woord karakters (alle alfanumerieke karakters inclusief underscore “_”).

    Uitsluiten van karakters in een klasse

    Tekst: “Jan loopt in het bos. Hij speelt op zijn contrabas.”
    Zoekopdracht: Alle termen die beginnen met een “b” en eindigen op een “s” met daartussen 1 ander willekeurig karakter behalve de “a”.
    Regex:

    "b[^a]s"

    Uitleg: Het dakje (“^”) binnen een karakterklasse heeft een geheel andere betekenis als daarbuiten (begin van de te doorzoeken tekst). Met het dakje binnen een karakterklasse wordt een uitsluiting aangeduidt. Er is 1 resultaat: “bos”.

    Karakter klasse en herhaling

    Tekst: “Jan loopt in het bos. Hij speelt op zijn contrabas.”
    Zoekopdracht: Alle termen die beginnen met een “l” en eindigen op een “pt” met daartussen een willekeurig aantal karakters.
    Regex;

    "l[o]+pt"

    Uitleg:Direct achter een karakter klasse kan een herhaling worden aangeduid. “+” staat voor 1 of meer. In dit geval matcht “loopt” omdat tussen “l” en “pt” 1 of meerdere o’s voorkomen.

    + 1 of meer
    * 0 of meer
    {x} (vb. {3}) x aantal keer zoals aangeduid. (vb. 3 keer)
    {x,y} (vb. {1,3}) x tot y keer. (vb. 1 tot 3 keer)
    \w Alle woord karakters (alle alfanumerieke karakters inclusief underscore “_”).

    Conclusie

    Een hoop informatie. Met deze informatie zou je al behoorlijk uit de voeten moeten kunnen met regulier expressies. In het 3de een laatste deel de puntjes op de i met betrekking tot reguliere expressies.

    In deel 3:

  • Alternation
  • Ankers (Anchors)
  • Special Characters
  • Reguliere expressies in .NET
  • Groeperen
  • Heb je vragen? Stuur een reactie.

    Regex Deel 1 – Wat zijn Regular Expressions?

    by tsnoei — Categories: .NET — Tags: , No Comments - Afdrukken Afdrukken

    Regular Expressions, Wikipedia zegt er het volgende over:

    Een reguliere expressie (afgekort tot “regexp”, “regex” of RE) is een manier om patronen te beschrijven waarmee een computer tekst kan herkennen. Er bestaat hiervoor een formele syntaxis, die grotendeels gestandaardiseerd is.

    Kortom regular expressions zijn een krachtige manier om teksten te doorzoeken. Iets om niet zomaar naast je neer te leggen. Een krachtiger taal om tekst te doorzoeken is er bijna niet. Regex worden veel gebruikt voor de validatie van datainvoer zoals het verifiëren van e-mail invoer, numerieke invoer, datums (data ;-) ) etc…

    Wat ik persoonlijk de moeilijkheid aan regex vond is het onthouden van de regels die erbij horen. Regex is typisch iets wat je in vlagen gebruikt. Zit er een wat langere tijd tussen het toepassen ervan dan zakt alle kennis weer weg. In eerste instantie lijken regular expressions behoorlijk ingewikkeld. Dat dat best meevalt zul je kunnen lezen in de rest van de serie.

    Het mooie is dat regex ook in Microsoft .NET goed wordt ondersteund. De regex functionaliteit is terug te vinden in de namespace System.Text.RegularExpressions.

    Een goed startpunt is de .NET regular expressions testapplicatie. In deel 2 aandacht voor het het onder de knie krijgen van de regels met behulp van de Snoei.net Regex Tester. Deze Silverlight testapplicatie is een handig hulpmiddel voor mensen die minder van lezen houden en meer van ‘hands-on’ oplossingen.

    C# codevoorbeeld:

    using System.Text.RegularExpressions;
    
    public void Test()
    {
    	string Value = "12345";
    	string RegexPattern = "^[0-9]{5}$"
    	bool Match = Regex.IsMatch(Value, RegexPattern); //Match = true;
    }

    December 23, 2010

    Website voor DevDays 2011 online

    by tsnoei — Categories: .NET — Tags: No Comments - Afdrukken Afdrukken

    DevDays 2011De website voor de Microsoft Developer Days 2011 is online. De Developer Days zullen plaatsvinden op 28 en 29 april. Locatie is wederom het World Forum in Den Haag (voorheen Congresgebouw). Schrijf je je voor 16 januari in, dan krijg je nog een behoorlijke early bird korting. Welke sprekers er komen is nog niet (officieel) bekend.

    February 6, 2010

    Silverlight Photo Editor

    by tsnoei — Categories: .NET — Tags: No Comments - Afdrukken Afdrukken

    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!

    August 3, 2009

    Systeem- en softwaremonitoring met Visio 2007- 4 van 4 – De Software

    by tsnoei — Categories: .NET — Tags: , , No Comments - Afdrukken Afdrukken

    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!

    July 30, 2009

    Systeem- en softwaremonitoring met Visio 2007- 3 van 4 – De monitoring software

    by tsnoei — Categories: .NET — Tags: , No Comments - Afdrukken Afdrukken

    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).

    July 27, 2009

    Systeem- en softwaremonitoring met Visio 2007 – 2 van 4

    by tsnoei — Categories: .NET — Tags: , No Comments - Afdrukken Afdrukken

    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.

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