SSIS & Microsoft Live Labs Pivot

September 8, 2010 08:58 by till

Nachdem ich vor einigen Wochen einen sehr guten Vortrag zum Thema BI mit SQL Server und Sharepoint von Oliver Engels und Markus Fischer gehört habe, bin ich ziemlich angetan von einem dabei ebenfalls vorgestelltem Produkt: Microsoft Live Labs Pivot. Irgendwie quält mich auch seit dem die Idee einen kleinen Beitrag zu SSIS und Pivot zu schreiben.

In den letzten paar Tagen habe ich an meiner SSIS Komponente SSIS ImageSource ein paar Änderungen an der internen Verarbeitung vorgenommen und dem ganzen auch mal ein User Interface geschenkt. Noch reicht es zwar nicht um ein neue Release bei Codeplex zu veröffentlichen, aber für eine kleine Demo zusammen mit Microsoft Live Labs Pivot reicht es.

image image


Pivot ist eine Software der Microsoft Live Labs, die es ermöglicht in großen Datenmengen schnell und einfach zu navigieren und zu suchen. Der Kern hinter Pivot basiert auf dem ursprünglichen Projekt Seadragon, jetzt unter zoom.it zu finden. Für die Darstellung von Daten verwendet Pivot sogenannte Collections von Bildern. Beschreibende Daten innerhalb einer Collection, wie z.B. ein Änderungsdatum oder eine Dateigröße bei einem Bild, werden in Facets zusammengefasst. Der große Vorteil ist die konsistente Benutzerführung. Je nach Datentyp werden die einzelnen Facets in Pivot über spezielle Controls dargestellt, so können Zahlen z.B. über Schieberegler ausgewählt werden, Datumswerte über Gruppierungen (Jahr, Monat-Jahr) oder Kalender-Controls.

image image

Pivot eignet sich aber natürlich nicht nur für Urlaubsfotos. Microsoft zeigt dies mit den Beispiel-Collections: Sportler-Fotos, ähnlich der bekannten Sammelbilder, zusammen mit den wichtigsten Kennzahlen (dargestellt als Facet) ergeben tolle Collections, die natürlich besondere Wirkung in Verbindung mit so statistisch geprägten Sportarten wie Football oder Basketball haben. Ich finde das gute alte Quartett beschreibt sehr gut was Collections sind bzw. darstellen.

Nun aber zu meiner kleinen Spielerei mit SSIS & Pivot.

Auf der Microsoft Live Labs Pivot Seite gibt es im Bereich Developer Info die sogenannten Sample Code for Creating Just in Time Pivot Collections Beispiele. Die darin enthaltenen PivoServerTools sind eigentlich alles was man benötigt um selber Just in Time eine Pivot Collection zu erstellen.

Für die Demo habe ich knapp 700 Urlaubsfotos als Originalgröße und als Thumbnails vorliegen. Mit der SSIS ImageSource Komponente habe ich die Thumbnails geladen und dabei die entsprechenden EXIF Daten ausgelesen. Über eine abgeleitete Spalte habe ich mir zusätzlich für jedes einzelne Bild den Pfad zu dem original Bild generieren lassen und diesen dem Datenfluss hinzugefügt.

 image

Hat man das heruntergeladene JiT Collection Projekt mit dem .NET Framework 3.5 (die voreingestellte Version 4 wird nicht von der Script Komponente innerhalb der SSIS unterstützt) kompiliert, so muss die erstellte PivotServerTools Assembly noch dem GAC hinzugefügt werden und innerhalb der SSIS Script Komponente die entsprechende Assembly referenziert werden.

Die einzelnen Eingabespalten werden innerhalb der Script Komponente auf Nullwerte überprüft und dann jeweils in eine Varibale “_NAME DER SPALTE” – siehe Spalte _Artist, _ColorSpace, _Compression – geschrieben und daraus die entsprechenden Facets erstellt.

Der eigentlich Code für die Generierung der Pivot Collection sieht dann wie folgt aus:

   1: string extension = Path.GetExtension(_FullName);
   2:         bool isJpeg = (0 == string.Compare(".jpg", extension, true));
   3:         bool isPng = (0 == string.Compare(".png", extension, true));
   4:             
   5:         FileInfo info = new FileInfo(_FullName);
   6:         coll.AddItem(Path.GetFileNameWithoutExtension(_FullName)
   7:                         , _FullName
   8:                         , _ImageDescription
   9:                         , new ItemImage(_FullName_gross)
  10:                         , new Facet("File name", _FileName
  11:                             , isJpeg ? "*.jpg" : null
  12:                             , isPng ? "*.png" : null)
  13:                         , new Facet("File size", info.Length / 1000)
  14:                         , new Facet("Creation time", _CreationTime)
  15:                         , new Facet("Link:", new FacetHyperlink("click to view image", _FullName))
  16:                         , new Facet("Artist", _Artist)
  17:                         , new Facet("Color Space", _ColorSpace)
  18:                         , new Facet("Compression", _Compression)
  19:                         , new Facet("Copyright", _Copyright)
  20:                         , new Facet("Exif Version", _ExifVersion)
  21:                         , new Facet("GPS", _GPS)
  22:                         );


Die Verarbeitung der knapp 700 Fotos mit 45 Facets hat ca. 7 Sekunden gedauert und schon war meine Pivot Collection erstellt:

SSIS & Microsoft Live Labs Pivot


In den nächsten Wochen werde ich mich ein bisschen intensiver mit Pivot beschäftigen, vielleicht findet sich dann auch noch eine Demo mit besseren Daten oder es springt vielleicht eine SSIS PivotDestination Komponente heraus.


Signtool.exe mit CACert

June 23, 2010 03:21 by till

cacert4 Wer eigenen Komponenten für die Integration Services entwickelt, wird in den meisten Fällen auch einen Installer für die jeweilige Komponente erstellen. Wie man eigene erstellt, habe ich im Blog Eintrag “Windows Installer für eigene Erweiterungen” beschrieben. Da die Installer standardmäßig nicht signiert sind, weißt die UAC während der Installation darauf mit einem kleinen Warnhinweis hin.

UnknownPublisher

Um Installer zu signieren wird ein offizielles Zertifikat benötigt, im Normalfall sind dies Zertifikate von VeriSign, Thawte oder TC Trust Center. Microsoft liefert zur Signierung von MSI Files (und anderen Dateien) das Signaturtool (SignTool.exe) zusammen mit dem .NET Framework aus. Leider kosten die Zertifikate bei z. B. Verisign ca. 900 $. Gerade im Open Source Bereich setzen sich deswegen vermehrt Zertifikate der nicht kommerziellen Zertifizierungsstelle CACert (Wikipedia: CACert) durch. Der große Nachteil von CAcert ist, dass das entsprechende Stammzertifikat noch nicht in der Zertifikatsdatenbank der Standard Browsern und Email-Clients als vertrauenswürdige Zertifizierungsstelle eingetragen ist. Somit ist eine Signierung, zumindest im kommerziellen Bereich, nicht sinnvoll.

Für den privaten Bereich, eventuell im Open Source Bereich, zu Entwicklungszwecken oder in Umgebungen in denen man Einfluss auf die Stammzertifikate hat, eignen sich diese jedoch sehr gut. Wird eine MSI Datei auf einem Computer installiert, auf dem das entsprechende Stammzertifikat nicht installiert ist, verhält sich der Installer wie oben gezeigt.

Da die erste Erstellung und Signierung ein bisschen Umständlich ist, hier eine kleine Schritt für Schritt Anleitung zum signieren von MSI Files mit CACert Zertifikaten:

  1. Als Assurer bei CACert registrieren
  2. Mindestens 100 Punkte bei CACert sammeln
  3. Die Code-Signing Funktion über den CACert Support explizit freischalten lassen
  4. Mit Firefox über den Menüpunkt “Client Zertifikat” ein neues Zertifikat mit der Option “Code-Zertifikat” erstellen.
  5. Im Firefox über Extras –> Erweitert –> Zertifikat Anzeigen das Zertifikat als PKCS12-Datei speichern

    2010-06-13 01h13_33
  6. Per Doppelklick auf das Zertifikat den Zertifikatimport-Assistenten öffnen und das Zertifikat dem Zertifikatsspeicher hinzufügen
  7. Im Internet Explorer über Extras –> Internetoptionen –> Inhalte –> Zertifikate den lokalen Zertifikatsspeicher öffnen
  8. Das Zertifikat mit dem privaten Schlüssel als PFX-Datei exportieren. Hier noch einmal beachten, das das zu exportierende Zertifikat auch wirklich für den Zweck Codesignierung ausgestellt wurde. Im IE heißt das “Garantiert, dass die Software von einem Software-Herausgeber stammt” 

    2010-06-13 08h05_05
    2010-06-13 08h05_23
    2010-06-13 01h06_31
  9. MSI Datei mit dem Visual Studio erstellen
  10. MSI Datei über die Eingabeaufforderung mit folgendem Befehl signieren

    signtool.exe sign /f MyPfxFile.pfx /p Password /d "Produktname" /du "http://www.ProduktURL.com" "Installer.msi"

Nachdem das Signieren mit “Done Adding Additional Store. Successfully signed: Installer.msi” abgeschlossen wurde, ist die MSI-Datei signiert und die UAC sollte bei der Installation nun wie folgt reagieren:

2010-06-13 08h22_48

An einigen Stellen habe ich explizit auf die Verwendung des Firefox hingewiesen, da ich diese Schritte mit dem IE8 nicht ausführen konnte. Andere Browser wurden von mir an dieser Stelle nicht getestet.

Das Erstellen des eigentlichen Zertifikats ist anfänglich ein bisschen Umständlich, einmal Erstellt geht das Signieren aber sehr einfach von statten. Das Script aus Punkt 10 kann auch über das Visual Studio im Build Prozess automatisiert werden.


Expression Tester-Tool

June 10, 2010 02:01 by till

Innerhalb der Integration Services kann die Entwicklung von Expressions manchmal schon ein bisschen umständlich sein sein, wie zum Beispiel in meinen Blog-Beitrag zur ISBN Prüfung zu sehen.

Bei Codeplex ist mit dem Expression Tester-Toll genau hierfür jetzt ein schönes Projekt aufgetaucht. Darren Green, vielen wahrscheinlich durch die Seite SQLIS.com bekannt, hat einen Editor zur Entwicklung und zum Testen von Expressions entwickelt.

Das Expression Tester-Tool ist ein externer Editor, den man auch ohne ein installiertes BIDS verwenden kann. Das Programm enthält alle möglichen SSIS Funktionen und kann zusätzlich um eigenen Funktionen erweitert werden.

image

Ändert man Funktionen oder fügt eigene hinzu, wird im lokalen Benutzerverzeichnis(C:\Users\USERNAME\AppData\Roaming\Konesans Limited\Expression Editor) eine XML Datei mit allen Funktionen des Editors angelegt. Die eigenen Funktionen können recht umfangreich sein, wie die mit ausgeliefert 4 Beispiele zeigen. Dies eignet sich auch gut dafür um sich Snippets zu definieren.

Werden innerhalb der Expressions Variablen verwendet, können diese im Editor definiert und zum Testen mit eigenen Werten gefüllt werden. Meine Expression zu ISBN Prüfung gestaltet sich im Editor wie folgt:

image

Fehler einer Expression werden beim Prüfen direkt in einem Dialog angezeigt.

image

Der Editor wird auch als eigenständiges Control zur Verfügung gestellt, so dass man diesen auch in anderen Programmen oder Tasks verwenden kann.