# Monday, January 07, 2008

Mit OutlookMoveTo kann man sehr schnell Objekte innerhalb der Outlook Verzeichnisstruktur verschieben. Entstanden ist dieses kleine Outlook Add-In zunächst für Outlook 2003. Inzwischen arbeite ich mit Outlook 2007, und mit Visual Studio 2008 gibt es jetzt auch das passenden Visual Studio Tools  for Office (VSTO). Es war also dringend eine Version für das neueste Outlook fällig.

Die Motivation für die erste Version und eine kleine Anleitung findet sich bei den älteren Beiträgen.

Die Anpassung verlief einfach. Aus der Entwicklungsumgebung heraus lief die neue Version sehr bald, aber wie sieht es mit dem Setup aus? Bei VSTO für Visual Studio 2005 und Office 2003 war dieser Schritt relativ aufwendig. Zu meiner großen Freude wird in Visual Studio 2008 auch bei VSTO für Office 2007 Add-Ins das ClickOnce Deployment unterstützt. Für Office 2003 gibt es diesen Komfort noch nicht.

Die naheliegendste Verwendung von ClickOnce, auf dem Web Server, scheidet für mich aus. Mein ASP.NET Hoster, erlaubt mir im Moment leider nicht, die Mime-Types zu editieren. Das wäre aber nötig, um das VSTO Manifest auf dem Server so zu registrieren, dass es richtig ausgeliefert wird. Und auch dann wäre ClickOnce nur möglich, wenn der zugreifende Client schon die Visual Studio Tools for the Office system 3.0 Runtime bereits installiert hätte. Das ist eine zu starke Einschränkung.

Alternativ kann man als auch CD/DVD als Verteilungsmedium wählen. Man erhält dann einfach ein Verzeichnis mit allen nötigen Setup-Dateien. Aus Platzgründen habe ich das benötigte .NET Framework 3.5 weggelassen.

Viel Spass mit dem Add-In und bitte die MIT/X11 Lizenz in der Zip-Datei beachten:

OutlookMoveTo2007.zip (4.5 MB)

.NET | Admin | Tools
Monday, January 07, 2008 9:54:17 AM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [1]  | 
# Friday, November 23, 2007

Der Zugriff auf den Team Foundation Server 2008 mit Authentifizierung und über eine SSL Verbindung ist fast identisch zu dem Vorgehen mit der Version 2005. Leider hat sich aber auch nichts verbessert. Es ist die gleiche, fehleranfällige Bastelei: Walkthrough: Setting up Team Foundation Server with Secure Sockets Layer (SSL) and an ISAPI Filter

Dieser Artikel ist fast identisch zur vorherigen Version. Bei den Unterschieden ist der Artikel aber noch inkonsistent. Zum Beispiel ist der neue ISAPI FIlter AuthenticationFilter.dll im Tools Verzeichnis. An einigen Stellen nennt der Walkthrough aber noch fälschlich das TF Setup Verzeichnis. Amüsanterweise gibt es genau dazu noch eine Important Note ohne echte Aussage:

Do not change the directory of either the AuthenticationFilter.ini file or the AuthenticationFilter.dll file. Doing so increases the likelihood that you will have problems upgrading from Team Foundation SP1 to Team Foundation SP1.

Wenn man der Anleitung gründlich folgt, klappt es Ende tatsächlich und der externe Zugriff ist möglich.

Ich empfehle, dabei wirklich sorgfältig zu sein. Ich habe an einer Stelle den TFS Application Server und das SharePoint Portal vertauscht. Irgendwann sehen die Port Adressen alle so ähnlich aus. Die resultierenden Fehlermeldungen haben mich leider eine Zeit beschäftigt.

Zusätzlich sollte man auch alle ursprünglichen Einstellungen und die vorgenommen Änderungen dokumentieren. Es ist damit zu rechnen, dass auch das nächste Update nur eingespielt werden kann, wenn das System wieder im Ausgangszustand ist. Zumindest erging es mir bei diesem Update so.

.NET | Admin | Tools
Friday, November 23, 2007 3:09:02 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# Wednesday, November 21, 2007

In allen Blogs ist es zu lesen: Visual Studio 2008 ist fertig. MSDN Abonnenten können die RTM Version downloaden. Zusammen mit dem Visual Studio gibt es auch einen neuen Team Foundation Server (TFS).

Nach meinen Erfahrungen beim Service Pack 1 für die Version 2005, habe ich vor dem Upgrade ein Image der Serverplatte angelegt. Und natürlich kam beim Setup eine Fehlermeldung:

TF220064: An error occurred while the Setup program was querying the settings from the server that is running SQL Server Reporting Services. This error is most likely caused by your account not having the required administrative permissions on the server that is running Reporting Services. Click Next to try again. For more information about this error, see the installation logs. For more information about the installation logs, see “Troubleshooting Installation for Team Foundation” in the Team Foundation Installation Guide.

Der Setup kann nicht mit den SQL Server Reporting Services reden. Die Konfiguration der Schnittstelle zu den Reporting Services findet sich in der TfsIntegration Datenbank in der Tabelle tbl_service_interface. Die Einstellungen hatte ich aber geändert. Mein TFS war so konfiguriert, dass er auch externe Verbindungen zulässt. Der Setup kann offensichtlich nicht über eine https-Verbindung mit Authentifizierung kommunizieren. Das nehme ich ihm nicht übel und habe wieder die unverschlüsselten, lokalen http-Endpunkte eingetragen.

Vorher:

3    BaseReportsUrl    https://team.cptec.org:589/Reports
3    DataSourceServer    https://team.cptec.org:589/ReportServer
3    ReportsService    https://team.cptec.org:589/ReportServer/ReportService.asmx
4    BaseServerUrl    https://team.cptec.org:589
4    BaseSiteUrl    https://team.cptec.org:589/sites
4    WssAdminService    https://team.cptec.org:590/_vti_adm/admin.asmx

Nacher:

3    BaseReportsUrl    http://r8/Reports
3    DataSourceServer    http://r8/ReportServer
3    ReportsService    http://r8/ReportServer/ReportService.asmx
4    BaseServerUrl    http://r8
4    BaseSiteUrl    http://r8/sites
4    WssAdminService    http://r8:17012/_vti_adm/admin.asmx

Praktischerweise hatte der Fehler Dialog einen Retry Button. Man kann also schnell im offenen Herzen operieren und es noch mal probieren. Damit lief der Setup dann auch wieder einige Zeit weiter.

Error 28925.TFServerStatusValidator: The tool could not call the Team Foundation Server ServerStatus Web service. Verify that your network is configured to allow communication between the Team Foundation application tier and the Team Foundation data tier. For more information, see the setup log.

Jetzt können die einzelnen Schichten vom TFS nicht miteinander reden. Bestimmt auch wegen den nachträglich konfigurierten externen Verbindungen. Und richtig, diesmal war es der zusätzliche ISAPI Filter AuthenticationFilter.dll. Nachdem der Filter im IIS Manager wieder entfernt war, ging auch an dieser Stelle wieder der Retry. Diesmal ohne weitere Fehler und der interne Zugriff mit Visual Studio 2008 funktioniert.

Man sollte alle Änderungen am TFS 2005, die im Walkthrough: Setting up Team Foundation Server with Secure Sockets Layer (SSL) and an ISAPI Filter durchgeführt werden vor dem Upgrade rückgängig machen.

Jetzt kommt der nächste Schritt: Auch TFS 2008 möchte ich von Heimarbeitsplatz erreichen. Die externe Verbindung muss also wieder eingerichtet werden...

.NET | Admin | Tools
Wednesday, November 21, 2007 5:12:38 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# Sunday, November 04, 2007

Ich finde es ist wichtig, für jede Aufgabe das geeignete Tool einzusetzen. In der Technischen Dokumentation arbeitet der Redakteur häufig in MS Word oder in Adobe FrameMaker. Beide ermöglichen das Erstellen der entsprechenden Inhalte. Ohne weitere Unterstützung liegen diese Inhalte dann als Dokumente in Verzeichnissen des Dateisystems. Die Verzeichnisstruktur wird typischerweise die Projekte, Sprachen und Versionen wiederspiegeln. Die Dokumente selbst stellen meist große Informationseinheiten dar: Kapitel oder vielleicht sogar die komplette Dokumentation.

Ein kleines Team, gut organisierter Redakteure, kann bei dieser Vorgehensweise effizient arbeiten. Es gibt kaum Verwaltungsaufwand. In vielen Fällen müssen die Informationseinheiten aber besser verwaltet werden. Größere Teams, viele Übersetzungen, viele Varianten und unterschiedliche Ausgabeformate sind Gründe für eine umfassendere Lösung.

Man braucht also ein Inhaltsverwaltungssystem oder Englisch Content-Management-System (CMS). Offensichtlich denken bei dem Begriff CMS inzwischen zu viele an die weborientierte WCMS Variante. Für Systeme die nicht nur Webseiten, sondern auch Druck und andere Ausgabeformate unterstützen verwendet man deshalb auch den Begriff Redaktionssystem.

Wir haben uns näher mit SCHEMA ST4 befasst, einem sehr mächtigen Vertreter unter den Redaktionssystemen. Dabei haben wir uns soweit eingearbeitet, dass wir SCHEMA Certified Partner wurden. Wir betreiben eine Testinstallation und eine Kollege und ich waren bei SCHEMA zu einer mehrtägigen Konfigurationsschulung.

SCHEMA Certified Partner 

Eine SCHEMA Konfiguration hat sehr viel mit XML/XSL Programmierung zu tun. Das System ist sehr offen und modifizierbar. Es ist wirklich sehr viel möglich, man darf aber keine Angst vor spitzen Klammern haben.

Ansonsten gefällt mir als .NET Entwickler natürlich der Technologie-Stack: Als Datenbank kommt standardmäßig ein SQL Server 2005 zum Einsatz, darüber kommt ein .NET basierter Applikationsserver auf den wiederum .NET Clients zugreifen. Alle Daten treten als XML in Erscheinung und werden über XSL formatiert. Selbst die in der Benutzeroberfläche dargestellten Elemente werden über XPath gesteuert.

TD | Tools
Sunday, November 04, 2007 8:18:26 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# Monday, October 22, 2007

Bisher hatten wir einen FTP Server um größere Datenmengen mit unseren Kunden und Übersetzern auszutauschen. Aber FTP ist nicht mehr zeitgemäß: FTP muss sterben. Deswegen betreiben wir jetzt einen WebDAV Server der nur über eine sichere https-Verbindung zu erreichen ist.

Zu einem neuen Protokoll braucht es auch einen neuen Client um darauf zuzugreifen. Ich habe einige ausprobiert und am Ende sind zwei sinnvolle Möglichkeiten übrig geblieben:

Internet Explorer

Der Internet Explorer hat den Vorteil, dass er bereits installiert ist und der Zugriff sehr einfach zu konfigurieren ist. Man muss lediglich darauf achten, dass man die Adresse nicht direkt in Adresszeile tippt, sondern einen Web Folder öffnet.

Dazu wählt man Datei - Öffnen... (File - Open...) im Menü aus. Tippt dort die Adresse ein und setzt das passend Häkchen:

Open File Dialog Internet Explorer

Danach kann man per Copy & Paste Dateien und Verzeichnisse übertragen. Über die rechte Maustaste erhält man ein Kontext-Menü für weitere Aktionen.

Ein Nachteil vom Internet Explorer als WebDAV Client ist, dass er keinen sinnvollen Übertragungsstatus anzeigt und sich während der Übertragung tot stellt. Man hat das Gefühl, IE oder die Verbindung "klemmt". Wir hatten schon den Fall, dass dabei dann per Task Manager iexplorer.exe und damit die Übertragung beendet wurde.

Außerdem kann man im IE über das Ziel hinaus navigieren. Wir haben für jeden Kunden einen eigenen Unterordner angelegt. Nur CPTec Mitarbeiter dürfen auf den ganzen Server zugreifen. Jeder Kunde hat nur Zugriff auf seinen Ordner. Dennoch erlaubt es der Internet Explorer eine Ebene nach oben zu navigieren. Dort gilt das Kunden Passwort natürlich nicht mehr, also frägt der Internet Explorer nach einem Passwort. Der Kunde gibt natürlich wieder sein Passwort ein. Das gilt für diese Ebene aber trotzdem nicht.

Das führt leider sehr schnell zu einer Support-Anfrage. Deswegen empfehle ich den Total Commander. Der erkennt, mit welcher URL die Verbindung gestartet wurde.

Total Commander + WebDAV Plug-in

Der beliebt Dateimanager Total Commander hat bereits einen sehr guten, integrierten FTP Client. Für den WebDAV Zugriff ist ein kostenloses WebDAV Plug-in nötig.

Die heruntergeladene Zip-Datei mit dem Plug-in einfach in Total Commander öffnen. Das Programm erkennt das Plug-in und bietet die Installation an:

WebDAV_TotalCommander

Weniger intuitiv ist dann die Aktivierung des Plug-ins. Man muss über die Laufwerksauswahl die Netzwerkumgebung (Network Neighborhood) auswählen:

Total Commander - Network Neighborhood

Bei den Netzwerklaufwerken taucht der zusätzliche Eintrag WebDAV auf. Den wählt man aus und gelangt zu den WebDAV Verbindungen:

Total Commander - WebDAV Selection

Über F7 kann eine neue Verbindung angelegt werden. Obwohl der dabei auftauchende Dialog von einen neuen Verzeichnis spricht, wird trotzdem eine WebDAV Verbindung angelegt!

Total Commander - New Connection

Wenn man einen Namen für die Verbindung vergeben hat, erscheint der Optionen Dialog:

Total Commander - WebDAV Config

Praktischerweise steht unser Server-Typ als Standardeinstellung zur Verfügung: Microsoft IIS (Secure). Damit werden die unteren Parameter automatisch richtig konfiguriert. Es muss hier nur noch die URL zum Server, der Benutzername und das Passwort konfiguriert werden. Die Proxy Einstellung vom Internet Explorer (im Dialog unten) sollte in den allermeisten Fällen stimmen.

Danach kann die neue Verbindung ausgewählt werden. Mit den üblichen Befehlen von Total Commander können Dateien in beide Richtungen übertragen und gelöscht werden.

Die Eigenschaften einer bestehenden Verbindung stehen über das Kontext-Menü oder Alt+Enter zur Verfügung.

Falls man die Verbindung häufiger benutzt, kann man diese wie ein normales Verzeichnis zur Directory Hotlist hinzufügen (CTRL+D). Der Verbindungsaufbau ist dann nur eine Frage von ganz wenigen Tasten.

Update:

Unser erster Kunde hat tatsächlich versucht, nach dieser Anleitung den Total Commander zu konfigurieren. Dabei sind zwei Dinge aufgefallen:

  1. Die Auswahl-Liste mit den Server Einstellungen setzt bei einer Auswahl nur die Checkboxen weiter unten. Die Einstellung der Liste selbst wird nicht gespeichert. Das heißt beim nächsten Aufruf der Optionen steht dort wieder: <Choose new server type from list>. Das verwirrt, aber die Einstellung unten sollten trotzdem stimmen.
  2. Das Plug-in kommt mit bestimmten Sonderzeichen als Passwort nicht zurecht. In unserem Fall hatten wir das Zeichen § im Passwort. Das führte dazu, dass das Passwort nicht gespeichert wurde. Nachdem wir ein anderes Zeichen verwendet haben, funktioniert auch das.
Monday, October 22, 2007 12:29:45 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Tuesday, October 16, 2007

(Deutsche Version)

In my article Acrobat PDF Form Felder auf Ebenen I have explained the problem in detail: I want to create layers in a PDF file and put Form Fields or Annotations into these layers or Optional Content Groups (OCG).

Back then, I solved the problem by means of Acrobat SDK Snippet Runner. An architecture that enables you to run individual Snippets as a plug-in in Acrobat. Quite nice for a first try, but in the end not a solution that should be distributed. Developery only.

For this reason, I took a closer look at the SDK and built a proper plug-in:

Acrobat CPTec Layer Plugin Menu

The plug-in links into the Advanced menu of Acrobat and is only active when a document is loaded. When called, it asks for a text file. This file determines which annotations are put into which layers. Layers that are not present will be created.

The structure of the text file is very simple. Each line contains the name of an annotation, the | character, and then the name of the related layer:

TestAnnotation1|TestLayer1
TestAnnotation2|TestLayer2

When editing in Acrobat, it is possible that the layer information for the Annotations gets lost. In this case, simply run the same text file again. Assigning fields that are already present does not have any negative effect.

Disclaimer:

  • I am not much of a C++ programmer.
  • This is my first Adobe Acrobat plug-in.
  • The plug-in has only been tested with Acrobat 8.1 Professional.
  • I do not assume responsibility for anything: If Acrobat crashes or all PDF files are destroyed, it is not my fault.
  • Use at your own risk.
  • Please pay attention to the MIT/X11 License in the Zip file.

Have fun with the plug-in, and maybe you want to send me a feedback:

CPTecLayerPlugin.zip (180 KB)

Tuesday, October 16, 2007 5:25:09 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [1]  | 

(English version)

In meinem Beitrag Acrobat PDF Form Felder auf Ebenen habe ich das Problem ausführlich erklärt: Ich möchte in einem PDF Ebenen erzeugen und Form Fields bzw. Annotations auf diese Ebenen oder Optional Content Groups (OCG) legen.

Damals kam ich zu einer Lösung über den Acrobat SDK Snippet Runner. Einer Architektur, die es ermöglicht einzelne Snippets als Plug-in im Acrobat laufen zu lassen. Für erste Schritte ist das ganz nett, aber man hat am Ende leider keine verteilbare Lösung. Ein Entwickler Tool eben.

Also habe ich mich noch weiter in die SDK gestürzt und ein richtiges Plug-in gebastelt:

Acrobat CPTec Layer Plugin Menu 

Das Plug-in bindet sich in das Advanced Menü von Acrobat ein und ist nur aktiv, wenn ein Dokument geladen ist. Beim Aufruf verlangt es nach einer Textdatei. Diese Datei steuert, welche Annotations auf welche Ebene gelegt werden sollen. Nicht vorhandene Ebenen werden erzeugt.

Die Struktur der Datei ist sehr einfach. Pro Zeile wird der Name einer Annotation und durch ein | getrennt der Name der zugehörigen Ebene angegeben:

TestAnnotation1|TestLayer1
TestAnnotation2|TestLayer2

Beim Editieren in Acrobat kann eventuell die Ebenen-Information der Annotations verloren gehen. Dann hilft einfach ein erneuter Lauf mit der gleichen Textdatei. Eine erneute Zuordnung vorhandener Felder hat keine nachteiligen Effekte.

Disclaimer / Haftungsausschluss:

  • Ich kann eigentlich nicht in C++ programmieren.
  • Das ist mein erstes Adobe Acrobat Plug-in.
  • Das Plug-in wurde nur mit Acrobat 8.1 Professional getestet.
  • Ich übernehme keine Verantwortung für Irgendwas: Ob Acrobat abstürzt oder alle PDFs zerstört werden ist nicht meine Schuld.
  • Benutzung auf eigene Gefahr.
  • Bitte die MIT/X11 Lizenz in der Zip-Datei beachten.

Dann viel Spaß damit und vielleicht gibt es ja Rückmeldungen:

CPTecLayerPlugin.zip (180 KB)

Tuesday, October 16, 2007 4:23:01 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Tuesday, October 09, 2007

In einem PDF können verschiedene Ebenen definiert werden. Ebenen heißen auf Englisch Layers. Diese Layers gibt es in vielen Zeichen- und Designprogrammen. So auch im Adobe Illustrator oder im Adobe Photoshop. Auf diesen Layern können Objekte gruppiert werden, die irgendwie zusammengehören. Man kann diese Ebenen sperren oder unsichtbar machen. Das hilft beim Arbeiten, man behält die Übersicht.

Acrobat PDF Layers

Mit den PDF Annotations / Form Fields hat man in einem PDF die Möglichkeit mit dem Benutzer zu interagieren. Da wäre es sehr praktisch, diese UI-Elemente auf Layern anzuordnen und in Abhängigkeit des Zustandes des Formulars sichtbar zu machen. In Windows Forms gibt es dazu das beispielsweise das TabControl.

Leider fehlt im Adobe Acrobat die Möglichkeit Ebenen zu erzeugen! Wie? Da oben ist doch ein Screenshot mit dem Layers Dialog? Tja, der kann aber nur Ebenen umschalten oder zusammenfassen.

Schade, Ebenen erzeugt man in der Adobe Welt mit dem Illustrator oder InDesign. Beide Tools können die internen Ebenen in ein PDF exportieren. Das geht auch mit einem ansonsten leeren Dokument. Sehr umständlich, aber wenn es den sein muss.

Das leere, aber mit Ebenen versehene PDF (Layered PDF) kann man in Acrobat laden und die Ebenen selektieren. Also wähle ich die gewünschte Ebene aus und erzeuge eine List Box. Ups, die landet nicht in der Ebene sondern im Dokument selbst. Was mache ich falsch? Wo kann man Objekte den Ebenen zuweisen? Irgendwann rückt die Acrobat Hilfe damit raus:

You can add content, such as review comments, stamps, or form fields, to layered documents just as you would to any other PDF document. However, the content is not added to a specific layer, even if that layer is selected when the content is added. Rather, the content is added to the entire document.

An der Stelle würde ich normalerweise aufgeben. Acrobat kann einfach mit Ebenen nicht umgehen. Fertig!

Ich habe aber bereits ein PDF mit Form Objekten auf Ebenen gesehen. Das PDF habe ich noch mal in Acrobat geladen. Keine Täuschung, es stimmt. Wie haben die das nur gemacht? Vielleicht mit JavaScript?

In der JavaScript SDK finden sich tatsächlich einige Methoden zur Manipulation von Layern. Nur dauert das ein bisschen. Außer in der Benutzeroberfläche heißen die Layers bei Acrobat nämlich Optional Content Groups (OCG). Aber auch in JavaScript kann man keine Objekte gezielt diesen OCGs zuweisen.

Mit diesem Terminus findet Google aber jetzt auch mehr technische Beiträge. Zum Beispiel diesen Trick: Buttons on Adobe PDF Layers. Es werden per InDesign CS3 Buttons auf Ebenen erzeugt, die beim PDF Export zu PDF Form Buttons werden. Die Ebeneninformation bleibt dabei erhalten. Leider schließt der Beitrag mit:

What about Text fields? Unfortunately we don’t yet have an option in InDesign to convert a text frame to an Acrobat text form field. Any fields you create in Acrobat will be visible on all layers.

Ich will aber meine List Box! Es geht, ich habe den Beweis! In der Adobe Acrobat User Community gibt es die Rubrik Ask an expert. Die Antwort zum Thema Move an object to an existing layer:

Unfortunately, you can't change layer data in Acrobat. You can neither add new layers to a PDF, move data between layers, or introduce new data on a given layer. You need to return to Illustrator and recreate the PDF if you want to change the layer data.

Jetzt kommt der finale C++ Hammer: In der Acrobat API Referenz findet sich die Methode PDAnnotSetOCMD. Damit kann man eine Annotation (Form Field) einem optional-content membership dictionary (OCMD) zuweisen. Dieses Dictionary stellt die Verbindung von OCG und Annotation dar. Genau was ich brauche. Nebenbei findet sich dann noch die Methode PDOCGCreate um Ebenen zu erzeugen.

Diese API steht aber nur einem C++ Acrobat Plug-In zur Verfügung. Aber auch hier hilft die SDK weiter: Adobe hat einen Snippet Runner beigelegt. Zusammen mit einer Visual Studio Solution und einigen Beispiel Snippets. Der Snippet Runner kompiliert zu einem Acrobat Plug-In, das man in das Acrobat Verzeichnis kopiert. Beim nächsten Start von Acrobat, startet das Plug-In mit und startet dient als Server. Auf diesen Server wiederum greift das Snippet Runner Common Interface 2.0 zu. Witzigerweise eine Adobe Flex 2 Applikation. Also quasi eine getarnte Flash Applikation:

SnippetRunner

Über dieses Interface kann man gezielt sein eigenen Snippets im Acrobat Plug-In Kontext laufen lassen. Der Code der Snippets ist dabei mit in den Server kompiliert. Das Frontend liefert den Auswahl Mechanismus und die Konsolen-Ausgabe.

Ich kann mich nicht erinnern, wann ich zuletzt in C++ unterwegs war. Es ist sehr lange her und war auch damals nur sehr kurz. Sprich, ich habe eigentlich keine Ahnung. Aber irgendwie hat es für diese Funktionalität gereicht und ich kann jetzt mit zwei Methoden meine Ebenen erzeugen und Form Objekte anhand deren Namen in diese Ebenen verschieben:

PDOCG ocgSubparts = CPTecCreateOCG("Subparts", true);
PDOCG ocgAssembly = CPTecCreateOCG("Assembly", false);
CPTecMoveAnnot("TestSubparts", ocgSubparts);
CPTecMoveAnnot("TestAssembly", ocgAssembly);

Der zweite Parameter bei CPTecCreateOCG gibt an, ob die Ebene beim Laden das PDFs sichtbar sein soll. Falls bereits eine Ebene mit dem gewünschten Namen vorhanden ist, wird diese zurückgegeben. Die zweite Methode CPTecMoveAnnot weist der Annotation mit dem übergebenenNamen die entsprechende Ebene zu. Damit ist ein mehrfacher Lauf des Snippets problemlos möglich.

Und so sieht das Ergebnis im PDF aus. Zwei List Boxen, die auf Ebenen liegen, die man später auch programmatisch umschalten kann.

PDF Layers On

PDF Layers Subparts

PDF Layers Assembly

Ist das Ergebnis den Aufwand wert? Ja klar. Ärgerlich wäre nur, wenn Acrobat 8.2 den Layer Dialog um diese Funktionen erweitern würde. Bis dahin kann ich ja noch grübeln, ob ich meine beiden C++ Plug-In Methoden vielleicht veröffentliche :)

Update:
Ich habe nicht den Code, sondern gleich ein fertiges Plug-in veröffentlicht: CPTec Layer Plugin für Acrobat

Tuesday, October 09, 2007 7:00:13 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [1]  | 
# Wednesday, September 05, 2007

Gehört hatte ich schon öfters von dem Foxit Reader: Einem kleinen, schnellen Ersatz für den Adobe Acrobat Reader. Aber in einigen Applikation verwende ich den Acrobat Reader als Komponente zur PDF Darstellung. Das heißt der Acrobat Reader ist ohnehin notwendig auf meinem Rechner installiert. Auch selbst erzeugte PDFs sollen in erster Linie im Acrobat Reader funktionieren. Da hilft Foxit nicht viel.

Und so schlimm empfand ich das Original von Adobe dann auch nicht, dass der mentale Aufwand für einen weiteren PDF Reader gerechtfertigt war. Jetzt beschäftige ich mich bei einem aktuellen Projekt intensiver mit der Adobe Acrobat Linie und der zugehörigen SDK. Auf einmal benötige ich einen zusätzlichen PDF Reader. Wieso kann man nicht mit den Adobe Tools alleine die Aufgabe lösen?

Das Problem liegt in der Architektur von Adobe Acrobat Professional und dem Adobe Reader. Es ist vielleicht schon aufgefallen, dass wenn man einmal ein PDF mit einem der beiden geöffnet hat, das andere Tool nicht mehr funktioniert. War der Reader offen, geht kein Acrobat Professional mehr und umgekehrt. Klemmt irgendwie eine (scheinbare) Instanz der Tools, geht gar nichts mehr. Auch wenn mehrere Acrobat Fenster offen sind und eines einen modalen Dialog darstellt, geht im anderen Fenster nichts mehr.

Das fällt vielleicht normalerweise nicht auf, aber wer die SDK Dokumentation noch nicht auswendig kann, wird sich wundern: Man öffnet den JavaScript Editor in Acrobat und möchte seinen Code bearbeiten. Natürlich ließt man parallel die API Dokumentation. Nur was macht der arme Entwickler mit einer PDF Dokumentation, während er in einem PDF arbeitet? Gar nichts, zumindest nicht mit Adobe-Mitteln. Erst wenn man den Editor beendet, erwacht Acrobat wieder und die Dokumentation steht zur Verfügung. Nur wer vorher die richtige Seite in der SDK geöffnet hat, kann Code und Erklärung gleichzeitig studieren.

Die einfachste Lösung war für mich, den Foxit Reader für die Adobe Acrobat SDK zu verwenden. Ironie des großen Softwarehauses.

  Foxit Reader
Wednesday, September 05, 2007 1:18:51 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Wednesday, August 22, 2007

Früher waren Webseiten in HTML codiert und animierte Gifs haben für ein bisschen Bewegung gesorgt. Ein paar besonders tolle Entwickler konnten per JavaScript Bilder austauschen, wenn sich der Mauszeiger darüber bewegt hat. Daten wurden in ein Formular eingegeben und per Submit an den Server übertragen. Damals war alles aus heutiger Sicht überschaubar.

Das Web 2.0 hat uns AJAX und damit den nach Hause telefonierenden, per JavaScript programmierten Browser gebracht. Damit erstellte Webanwendungen stehen in ihrer Funktionalität in manchen Bereichen Desktop Applikationen in nicht mehr nach. Aber ohne JavaScript geht auf diesen Seiten gar nichts mehr.

Gleichzeitig können fast alle neueren Browser-Schwachstellen mit deaktiviertem JavaScript umgangen werden. Also ohne JavaScript ist man sicherer, aber es funktioniert nicht mehr sehr viel. Was tun?

noscript_logo

NoScript ist ein Firefox Add-on, dass es ermöglicht JavaScript in Abhängigkeit der besuchten Webseite an- und abzuschalten. Bei der ersten Installation ist JavaScript auf allen Webseiten verboten. Besucht man vertrauenswürdige Seite, die JavaScript benötigt, kann man die Ausführung von JavaScript erlauben und NoScript merkt sich diese Einstellung. Im Laufe der Zeit erstellt man sich damit eine eigene Whitelist der erlaubten Seiten und bemerkt NoScript dann eigentlich nicht mehr.

NoScript ermöglicht es auch, JavaScript generell wieder zu aktivieren. Dieser Versuchung sollte man aber widerstehen.

Inzwischen sind noch ein paar weitere Funktionen für ein sichereres Browsen in NoScript implementiert worden. Es können Java, Flash und andere Plug-ins von nicht vertrauenswürdigen Seiten blockiert werden. Auch gegen Cross-Site Scripting (XSS) Angriffe versucht NoScript zu schützen.

Ich selbst verwende seit einiger Zeit NoScript und würde nicht mehr ohne diese zusätzliche Sicherheit surfen. Diese Woche hat hier bei CPTec ein Kollege einen Virus in Quarantäne geschickt. In den eher dubiosen Ecken des WWW hat unser Virenscanner in seinem HTTP Traffic den Bösewicht entdeckt. Noch mal Glück gehabt. Aber selbst bei täglichen Updates der Patterns ist die Scan Engine potentiell immer zu langsam für den jeweils neuesten Schädling. Jetzt wird bei uns NoScript zur Pflichtinstallation.

Wednesday, August 22, 2007 10:26:45 AM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Monday, August 20, 2007

Innerhalb der Acrobat Welt gibt es einige Integrations-Technologien von Adobe: Für die PDF Erzeugung ist die teure, exklusive PDF Library sicher am Besten geeignet und Plug-Ins schreibt man eher mit der Acrobat SDK in C. Für Interaktionen und einfache Automatisierungen im PDF Dokument ist JavaScript gedacht.

Eine standardisierte Skriptsprache (ECMA) auf dem Niveau von JavaScript ist sicher besser als zum Beispiel VBA (Visual Basic for Applications), mit dem man in Microsoft Office seit Jahrzehnten (ab 1995) seine Makros bastelt. Adobe hat eine dynamische, objektorientierte und modernere Sprache gewählt. Aber manches ist bei VBA besser gewesen.

Ich weiß jetzt nicht mehr, wann ich das erste mal den Microsoft VBA Editor geöffnet hatte. Es ist sehr lange her,  aber IntelliSense war damals schon vorhanden. Auch war der Code in Abhängigkeit von seiner Eigenschaft farbig markiert. Syntax highlighting nennt man das im Englischen. Was hat Adobe da zu bieten?

Acrobat JavaScript Editor

So sieht also der JavaScript Edit in Acrobat aus. Ganze 3 Buttons, farbloser Text, keinerlei Code Unterstützung und auch keine kontextsensitiven Menüs. Zum Glück kann man in den Eigenschaften einen externen Editor angeben. Am Besten einen, der JavaScript kennt.

Ohne externen Editor geht es bei längerem Code auch gar nicht mehr:

Adobe Acrobat Error

Nun quält der Microsoft Visual Studio verwöhnte Entwickler sein JavaScript irgendwie in die PDF Datei und macht dabei einen Fehler. Fehler machen gehört dazu, der Debugger hoffentlich auch.

Acrobat JavaScript Debugger

Das ist im Vergleich zum Editor jetzt fast schon eine überladene Benutzeroberfläche. Oben links finden sich die Buttons zur Ablaufsteuerung: Resume Execution, Interrupt, Quit, Step over, Step into, Step out

Dazu gibt es keine mir bekannten Hotkeys. Also fleißig mit der Maus die kleinen Knöpfchen angepeilt. Ist man an einer interessanten Stelle im Code angelangt, will man natürlich in das Code Fenster wechseln. Wer versucht mit Tabulator-Taste das aktive Steuerelement zu wechseln ist natürlich zu sehr von einem Windows Standard geblendet. Dieser Dialog will die Maus bewegt sehen!

Aber jetzt kommt der Clou! Zwischen dem aktuellen Skript und den obigen Buttons liegt ein Fenster mit der Skript Hierarchie:

Adobe_JavaScript_Debugger

Na gut, so ist das nun mal, irgendwo muss die Maus ja immer drüber. Denkste! Das Steuerelement im rot markierten Bereich hat Hot Tracking aktiviert. Die bloße Berührung mit dem Mauszeiger lässt den Code an die entsprechende Stelle springen. Weg ist der Kontext. Also die Übung wiederholen und diesmal die Maus im weiten Bogen bewegen. Na also geht doch!

Acrobat_Debugger_LineColumn

Im unteren Teil werden zwei Textboxen und einmal die aktuelle Zeile und Spalte angezeigt. Aber Vorsicht, die Anzeige gehört nur zur unteren Textbox, zur Console. Die aktuelle Zeile im Script-Fenster muss man selber zählen. Wer gut im Raten ist, kann auch das kleine Gitter # anklicken und zu einer Zeilennummer springen.

Puh! Diese kleine Lästerei musste jetzt sein. Das Nervenkostüm und die Produktivität leidet in der Adobe Welt aus meiner Sicht sehr. Ich erwarte ja keine Visual Studio oder Eclipse Umgebung, aber diesen Dialog verwendet Adobe-Intern sicher niemand. Heute will man doch eigentlich in der eigenen Infrastruktur externe Entwickler fördern. Das ist gut für das Hauptprodukt. Microsoft ist da meines Erachtens ein paar Schritte weiter.

Monday, August 20, 2007 10:42:57 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Tuesday, August 14, 2007

Die Überschrift ist kein Roman, sondern, auch wenn die Länge es nicht erahnen lässt, eine Erweiterung der Team Edition for Database Professionals. Microsoft setzt damit die Tradition fort, dass es zu vielen Produkten ein paar kostenlose Erweiterung direkt aus den Entwickler Teams gibt. Über diese Power Tools kann Microsoft auch zwischen den großen Release Zyklen neue Funktionen veröffentlichen:

Microsoft® Visual Studio® 2005 Team Edition for Database Professionals Service Release 1 (Voraussetzung für die Power Tools)

Microsoft® Visual Studio® 2005 Team Edition for Database Professionals Power Tools

Details zu den neuen Funktionen gibt es beim DataDude:

    • Dependency Viewer
    • Refactoring
      • Move Schema
      • Expand Wildcard
      • Fully Quality Name
      • Refactor in to strongly typed DataSet definitions
      • Refactor Command Generator
    • Data Generation
      • Sequential Data Bound Generator
      • Editors for the Data Bound Generator, Sequential Data Bound Generator and RegEx String Generator to make configuration easier
      • The RegEx editor also tries to interpret your CHECK CONSTRAINTs and create a matching RegEx expression that you can use to generate data values that match the constraint definition
      • The RegEx editor can also be used for interactively defining and testing RegEx expressions and evaluate the output visually, which makes it a lot easier to create the right RegEx expression for your value domain.
    • MSBuild Tasks
      • SqlSchemaCompareTask; allows you to compare schemas between two database from the command line using MSBuild.
      • SqlDataCompareTask; allows you to compare the content of tables within two databases from the command line using MSBuild.
    • T-SQL Static Code Analysis
    •  Miscellaneous tools
      • SQL script pre-processor command-line utility, which will expand all SQLCMD includes and variable definitions (sqlspp.exe)
    • Schema Manager API

 

Vorsicht: Nach diesen Updates werden Database Projekte beim ersten Öffnen durch einen Wizard konvertiert und sind dann für ältere Versionen von Visual Studio unbrauchbar.

Viel gespielt habe noch nicht mit den Tools:

Die statische Code Analyse hat mir aber schon mal 66 Warnings in einem Projekt ausgespuckt. Keine dramatischen Verfehlungen, aber leider funktioniert bei mir die "Show Error Help" Funktion nicht. Auch die ausgegeben IDs findet Google noch nicht. Mir fehlen also die Erläuterungen zu den Ausgaben.

Der Schema Dependency Viewer gefällt mir auch sehr gut. Als CodeRush Anwender ist man von dessen References Viewer im C# Code aber verwöhnt. Einfach Shift+F12 und alle Referenzen werden blitzartig dargestellt. Das Gleiche im T-SQL Editor wäre super. Bis dahin dürfen wir jetzt wenigstens schon mit der Maus im Schema Viewer das Kontext Menü aufrufen.

Tuesday, August 14, 2007 11:10:41 AM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Tuesday, July 31, 2007

Im Moment bleibe ich 2 Tage pro Woche zu Hause und arbeite an meinem Heimarbeitsplatz. Die restlichen Tage fahre ich ins Büro an arbeite dort an meinem Büro-PC. Sehr schnell habe ich bei diesen häufigen Wechseln festgestellt, dass die Gefahr besteht sehr viel Zeit in den Datenabgleich zu stecken. In diversen Programmen bearbeite ich Daten, die am anderen PC nicht automatisch wieder zur Verfügung stehen.

Einige Tools und Vorgehensweisen helfen mir inzwischen dabei, wirklich fast reibungslos den Arbeitsplatz zu wechseln. In manchen Bereichen wäre aber noch eine Verbesserung wünschenswert. Grundsätzlich bevorzuge ich für die tägliche Arbeit Desktop-Applikationen. Web (2.0) Applikationen haben an manchen Bereichen ihre Berechtigung, aber im Browser möchte ich nur in Ausnahmefällen arbeiten.

OpenVPN

Damit habe ich Zugriff auf das Intranet von CPTec und kann auf alle dortigen Dienste zugreifen:

  • Exchange-Server über Outlook
  • File-Server
  • Arbeitszeiterfassung über selbst gestrickte Intranet-Applikation
  • Remote Desktop zur Windows Server Administration
  • Putty zur Linux Server Administration

Aus Sicherheitsgründen läuft aber die VPN Verbindung nur in einer Virtuellen Maschine. Das bedeutet, dass mein Heimarbeitsplatz nicht Mitglied der Domäne ist. Das ist so gewollt, aber Roaming Profiles scheiden damit aus.

Team Foundation Server

Alle aktuellen Projekte sind darin unter Versionsverwaltung. Seit dem Service Pack 1 sind damit auch gesicherte externe Verbindungen möglich. Einfach Abends immer brav einchecken und am nächsten Tag am anderen Arbeitsplatz Get Latest ausführen.

Google Browser Sync

Mit dieser Firefox Add-on lassen sich automatisch alle Bookmarks synchronisieren. Wenn mir in der Arbeit eine interessante Seite unterkommt und ich einen Bookmark setze, dann ist der ganz einfach zu Hause auch vorhanden. Das ganze funktioniert so unauffällig und gut, dass man fast vergessen könnte, dass Browser nicht automatisch überall meine Bookmarks haben.

Mozy online backup

Zusätzlich zur Datensicherung hat man über den Web Restore von Mozy, die Möglichkeit Daten in Arbeit auf heimische Daten zuzugreifen. Dabei muss weder zu Hause der PC laufen, noch muss ich vorher schon daran gedacht haben, dass ich etwas brauchen könnte. Die letzte Tätigkeit am Ende das Heimarbeitstags sollte ein Mozy Backup sein. Aber dank inkrementeller Sicherungen und der schnellen ADSL2 (16000/800 kbit/s) Verbindung geht das ganz hurtig.

RSS-Bandit

Ein RSS Aggregator in .NET, der toll funktioniert. Der Reader hat eine Funktion um die Feed Liste inklusive der Information, welche Beiträge gelesen sind, remote zu speichern. Mit einem Tastenklick wird der komplette Status auf meinen FTP Server übertragen oder von dort eingelesen.
Praktischerweise ist der Autor auch noch ein interessanter Blogger: Dare Obasanjo aka Carnage4Life

E-Mail

Verwende ich eigentlich im Rahmen der Synchronisierung fast ausschließlich um Erinnerung von der Arbeit nach Hause zu transferieren. In die andere Richtung kann ich ja einfach auf dem Exchange Server per VPN eine Erinnerung setzen. Manchmal schicke ich auch Termine hin und her. Aber den Kalender habe ich noch nicht sauber synchronisiert. Google + Outlook ist noch zu holprig. Outlook + live.com ist auch noch nichts.

Google Docs & Spreadsheets

Bei weitem nicht so schön wie Excel oder Word und sicher kein genereller Ersatz. Aber für die gelegentliche, verteilte Tabelle durchaus brauchbar.

 

Wichtige bei allen diesen Vorgehensweisen ist mir, dass ich zu Hause wirklich alles abschalten kann. Es soll nicht die ganze Zeit irgendwas laufen, nur damit ich mal schnell ein paar Daten übertragen kann.

Gibt es noch mehr Tools die mir den Wechsel des Arbeitsplatzes vereinfachen können?

Tuesday, July 31, 2007 11:30:35 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Tuesday, July 24, 2007

Ich habe mich geirrt! Adobe FrameMaker wird so schnell nicht sterben. Vor fast einem Jahr hatte ich das noch befürchtet: Adobe SVG-Viewer tot

Jetzt ist die FrameMaker Version 8 veröffentlicht worden. Bisher kann ich mich auch nur über die Webseite über die neuen Features informieren. Selbst getestet habe ich diese Version noch nicht. Interessant sind sicherlich die DITA Unterstützung und alle XML Verbesserungen.

Aber aus tiefsitzenden Argwohn kann es keine Adobe Erwähnung ohne Häme geben:

  • Unicode Unterstützung: Willkommen im neuen Jahrtausend! Wow! Wurde da etwa gegen eine neue C Library gelinkt?
  • Flash Unterstützung: Jetzt auch tolle, bunte Werbebanner in der TD?
  • Mehrfaches Undo: Ein eigentlich selbstverständliches Feature. Jetzt neu bei Adobe.
  • 3D Modelle in PDF Dateien integrieren: Drucker bitte separat bestellen!

Da fällt mir auch der Adobe Illustrator CS3 wieder ein. In der CS2 gab es beim Autocad DWG Import einen Schalter Flatten Layers. Wenn die ausgeschalten war, wurden die Autocad Ebenen in Illustrator übernommen. In CS3 fehlt jetzt einfach dieser Schalter. Die Funktion ist fest an. Auf Wiedersehen Autocad Ebenen. Ein Nachbearbeiten ist nicht mehr sinnvoll möglich. Von Adobe fehlt jede Reaktion: Illustrator CS3 and Autocad DWG layers

Tuesday, July 24, 2007 1:38:03 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Tuesday, July 17, 2007

Auf ars technica wurden 4 Online Backup Dienste verglichen:

  • Carbonite
  • Mozy Online
  • XDrive
  • Iron Mountain's Connected Backup/PC service

Dabei schnitt Mozy Online am Besten ab:

Of the services we tested here, Mozy Online struck the best balance between functionality and flexibility and is our overall top pick for an online backup service. The free version of the service is also worth using, but the delay between restoration requests and restoration file availability under the free service make the paid version more attractive.

Das deckt sich mit meiner Erfahrung. Ich bin mit dem Dienst wirklich sehr zufrieden. Da ich die Rücksicherung zum Teil auch für den Datentransfer an einen anderen Rechner nutze, starte ich den Restore oft erst, wenn ich die Daten wirklich brauche. Da ist die übliche Wartezeit von einigen Minuten störend. Einmal hat es auch deutlich länger gedauert. Das war aber bisher eine Ausnahme. Bis jetzt kann ich noch gut bei der kostenlosen Version bleiben. Aber $4.95 pro Monat für die unlimitierte Version ist immer noch sehr fair.

Für große Datenmengen würde ich den Dienst im Moment aber nicht verwenden. Eine abgerauchte 500 GB Platte per Download zu restaurieren ist bestimmt kein Spaß. In den USA kann man sich den Restore auch auf DVDs schicken lassen. Das geht in Deutschland noch nicht.

Auch nach 3 monatiger Nutzung empfehle ich diesen Dienst gerne weiter. Deswegen auch nochmal mein Referral Code 67F8A2, bzw. der Referral Link. Bei einer Neuanmeldung gibt es beim kostenlosen Dienst gleich 256MB Platz zusätzlich :)

Tuesday, July 17, 2007 10:59:23 AM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Saturday, May 19, 2007

Visual Studio Edition Team Edition for Database Professionals ist (noch) kein Werkzeug zur Datenbank Modellierung. Das Tool spricht eigentlich nur reines T-SQL. Wobei hilft es dann dem Datenbank Entwickler?

Die Datenbank oder genauer das Datenbank Schema wird sehr weitgehend in die Entwicklungsumgebung integriert. Am wichtigsten ist dabei die gelungene Integration in die Versionsverwaltung. Wie der restliche Source Code auch, steckt das Datenbank Schema im Source Control.

Das ging vorher auch schon ansatzweise. Über den Server Explorer konnte man sich alle Objekte aus der Datenbank in ein SQL Server Projekt als Skript importieren lassen. Dabei hat man ein paar Nachteile:

  • Aus den Skripten kann man nicht direkt die Datenbank erzeugen.
  • Die Daten aus der Datenbank stehen nicht zur Verfügung.
  • Die erzeugten T-SQL Skripte enthalten meist mehrere Datenbank Objekte.
  • Änderungen sind schwer nachzuvollziehen.
  • Man hatte keinerlei Unterstützung bezüglich des Inhalts der Skripte.
  • Es ist nicht sichergestellt, dass die Schema Version zum restlichen Code passt.

Natürlich ist es trotzdem wichtig, dass die Datenbank unter Versionskontrolle kommt. Aber bisher war das eher eine Einbahnstraße. Die T-SQL Skripte sind zwar gesichert und versioniert. Man kann mit einiger Handarbeit daraus auch wieder die gewünschte Datenbank erzeugen. Eine echte Integration ist das aber nicht.

Falls man die erzeugenden Skripte einer Datenbank hat, kann man diese einfach mit einem Wizard importieren:

Bei dem Import wird die Information in möglichst kleine Einheiten aufgeteilt, die einzeln als SQL Skripte gespeichert werden.

Eine Testtabelle wird dann wie hier automatisch in unterschiedliche Skripte zerlegt abgespeichert. Dadurch lassen sich Änderungen später leichter nachvollziehen. Der Vergleich mit älteren Versionen im Source Control fällt leichter und ist sinnvoller.

Falls man anschließend an der originalen Datenbank weiter arbeitet, dann ist es nicht praktisch, jedesmal das Schema über diesen Import Wizard zu laden. Dazu gibt es ein sehr mächtiges Tool, den Schema Compare.

Update: Hier geht es weiter: VSTS Database Professional (3)

Saturday, May 19, 2007 7:43:07 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Friday, May 11, 2007

Ursprünglich gab es für die Visual Studio Team System 3 Editionen:

  • Team Edition for Software Architects
  • Team Edition for Software Develepers
  • Team Edition for Software Testers

Mittlerweile hat Microsoft eine weitere Edition nachgereicht, die Team Edition for Database Professionals.

Ich bin kein Database Administrator (DBA) und erst recht kein Database Professional. Dennoch ist die meiste Zeit das SQL Server Management Studio offen, denn das Datenbank Design kann ich leider nicht delegieren. Somit ist jede Tool-Unterstützung willkommen, insbesondere in Form einer integrierten Team Edition.

Der Einstieg in die Team Edition begann mit einer Enttäuschung. Ich habe eine neues Database Projekt angelegt und Add New Table gewählt:

Ups, kein Table-Designer? T-SQL ist nicht meine Muttersprache. Die üblichen Selects und Joins kriege ich schon hin. Meine Tabellen möchte ich aber mit mehr Unterstützung entwerfen. Wir werden später noch erfahren, dass hier ein anderes Konzept verfolgt wird. Hinter vorgehaltener Hand erfährt man auch, dass für spätere Versionen eventuell mehr Unterstützung geplant ist. Im Moment sollten man seine Schema Objekte anders erzeugen.

Wenn auch ohne Designer kriegt man aber bezüglich Schema Visualisierung und Validierung schon einiges geboten:

Schema View

Im Schema View sieht man alle Schema Objekte, die in vielen einzelnen sql-Dateien definiert werden, übersichtlich angeordnet. Änderungen am Schema werden direkt validiert und man erhält entsprechende Warnungen.

Man kann auch die Eigenschaften der Objekte sich im Property Grid darstellen lassen:

Properties

Es hat einige Zeit gedauert, aber irgendwann habe ich aufgegeben dieser Eigenschaften Anzeige das graue Mäntelchen auszuziehen. Es ist nur eine Anzeige. Ändern kann man nichts.

An der Stelle sollte man aber nicht aufgeben. Wie bei vielen Tools, muss man erst die Philosophie verstehen. Dann arbeitet man nicht mehr gegen das Tool, sondern damit. In Kürze werde ich mehr dazu schreiben, wie ich mittlerweile den Datenbank Profi einsetze. (Update: VSTS Database Professional (2))

Friday, May 11, 2007 11:34:29 AM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Friday, April 13, 2007

Es gibt diese kleinen unscheinbaren Tools, die man erst vermisst, wenn man an einem anderen Rechner darauf verzichten muss. Notepad kennt jeder. Das ist bei Windows schon lange dabei und hat sich eigentlich nie grundsätzlich geändert. Leider auch nicht verbessert.

Rory Blyth hat in seinem Blog zwar seinen Job riskiert und einen Ausblick auf Notepad V.Next gegeben: Let's put my job in jeopardy

Daraus ist aber nie etwas geworden :).

Deswegen sucht man sich einen geeigneten Ersatz. Notepad++ verwende ich hin und wieder. Das ist aber schon zu anders als Notepad. Nicht mehr ganz der kleine Helfer, schon ein eher ein mächtiger Editor. Und damit auch gewöhnungsbedürftiger.

Um Besten gefällt mir Notepad2. Insbesondere der einfache Umgang mit den verschiedenen Codierungen (Ansi, UTF8, etc.) hilft. Leider ist die neueste Version vom 25. Juni 2004 gewesen. Die hat zwar toll funktioniert. Das ganze sah aber noch einem beendeten Projekt aus. Doch ganz unverhofft gibt es jetzt eine Version 2.0.15. Und damit lebt das "zweite" Notepad hoffentlich noch eine Weile weiter.

Friday, April 13, 2007 8:29:10 AM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Monday, February 12, 2007

Auf THG (Tom's Hardware Guide) ist ein interessanter Artikel zur Datensicherung veröffentlicht worden. Unter anderem geht es darum, ob und wie es Sinn macht, auf Festplatten zu sichern: Band oder Speicherplatten? Moderne Backup-Produkte im Vergleich

Der Artikel ist etwas vorsichtig damit, externe Festplatten wirklich zu empfehlen. Ist auch verständlich, da die Gefahr eines Datenverlustes durch Beschädigung zu groß ist. Dank billiger Platten sollte man die Daten immer auf 2 Platten sichern und eine nicht transportieren. Mehr zu unserer Strategie haben wir hier dokumentiert: Backup-Software für Festplatten-Medien

Monday, February 12, 2007 1:16:36 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# Saturday, August 26, 2006
Stark verdichtete gute Informationen gibt es immer bei Scott Hanselman und seinem Podcast Hanselminutes.

Die neueste Episode Hanselminutes Podcast 30 - Outlook Add-Ins and Personal Productivity Enhancers ist diese Woche erschienen. Natürlich wird unser kleines Outlook Tool nicht erwähnt :). Dabei ist unser Konzept zum Zugriff auf verschiedene Folder mit weniger Tasten als bei Speedfiler möglich. Dafür muss man sich lediglich die Abkürzungen einmal definieren. Außerdem sind wir billiger.

"Zero Inbox Messages" ist ein schöner Zustand. Kein Schaudern mehr, wenn sich Outlook öffnet.
Meine Inbox ist jetzt seit Wochen "leer". Mein Outlook schreit nicht mehr bei jeder eingehenden Nachricht. Es bleibt mehr Zeit für wichtigere Dinge.

.NET | Admin | Tools
Saturday, August 26, 2006 9:18:56 AM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [1]  | 
# Friday, July 21, 2006
Das Add-In OutlookMoveTo ist bei uns jetzt seit einiger Zeit im Einsatz. Ein paar kleine Verbesserung hat es erfahren und der Setup scheint inzwischen zu funktionieren.
Für mich ist es aber noch keine Software, die man ernsthaft verkaufen kann. Sicher wird es jemanden geben, der bereit wäre dafür Geld zu zahlen. Der Aufwand, eine Software wirklich verkaufsfertig zu machen, ist aber nicht zu unterschätzen.
Als über dieses Blog jetzt eine Anfrage bezüglich dem Erwerb der Software kam, haben wir uns entschlossen, den jetzigen Stand einfach per E-Mail zu versenden.
Folgende Rückmeldung ist dann schon sehr nett. Nochmals Danke dafür:
Ich habe OutlookMoveTo erfolgreich (mit Ihrer freundlichen Hilfe) installiert und es funktioniert hervorragend. Mittlerweile ist das Tool zu einem unverzichtbaren Helfer geworden und es rangiert mit an der Spitze der Tools, die ich täglich verwende. Wo früher eine volle und unaufgeräumte Inbox zu sehen war, so sieht man jetzt Ordnung. Sie sehen - ich bin wirklich begeistert; zumal ich bis dato auch keinen Fehler feststellen konnte.

Wer über dieses Blog Kontakt mit mir aufnimmt, der wird diese Tool sicher auch bekommen.

Natürlich mit dem üblichen Vorbehalten:
  • Benutzung auf eigenes Risiko
  • Support von uns ist freiwillig
  • Keine Weitergabe der Software

 

Update: OutlookMoveTo für Outlook 2007

.NET | Admin | Tools
Friday, July 21, 2006 4:05:49 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Wednesday, June 14, 2006

Ich habe ein kleines Add-In für Outlook geschrieben, um möglichst schnell und einfach Outlook Objekte in definierte Ordner zu verschieben. Getauft habe ich dieses Add-In "OutlookMoveTo". Die Motivation für dieses Tool ist in meinem vorherigen Eintrag Outlook - Posteingang aufräumen nachzulesen.
Nach der Installation erhält man einen zusätzlichen Button in der Symbolleiste von Outlook:



Durch einen Klick auf diesen Button oder der Tastaturabkürzung "Alt + M" öffnet sich der Auswahl-Dialog von OutlookMoveTo:



Bevor man mit OutlookMoveTo arbeiten kann müssen die Zielordner definiert werden. Dazu navigiert man in der Ordnerliste von Outlook an die gewünschte Stelle und öffnet OutlookMoveTo. Durch einen Klick auf "Add" wird der Edit-Dialog mit dem aktuellen Ordner als "Path" geöffnet.



"Shortcut" ist die gewünschte Tastaturabkürzung für diesen Ordner. Diese Abkürzungen sollten sich aus dem Zielordner ableiten lassen. Z.B: Rechnungen Kunde A -> "ra", Auftrag Kunde B -> "ab".
"Name" ist der erklärende Name des Ordners und dient als Stütze, solange die Abkürzungen noch nicht verinnerlicht sind.
"Path" ist der interne Pfad den Outlook für diesen Ordner verwendet. Diesen Wert sollte man nicht normalerweise nicht editieren.
Mit "Ok" wird der neue Ordner gespeichert.
Über "Edit" vom Auswahl-Dialog lassen sich diese Angaben jederzeit ändern.
Diese Liste wird automatisch in den lokalen Benutzerdaten gespeichert.

Und schließlich das eigentliche Verschieben der Outlook-Objekte: Einfach die zu verschiebenden Objekte markieren und OutlookMoveTo öffnen.



Der Cursor steht im "Shortcut" Textfeld. Nach jedem Tastendruck springt die Tabelle an die passende Stelle. Noch kurz "Enter" gedrückt und alle markierten Outlook Objekte werden in den ausgewählten Ordner verschoben. In diesem Beispiel sind insgesamt folgende Tasten gedrückt worden: "Alt + M" "r" "a" "Enter"

Für wenige Ordner und eine flache Hierarchie ist das sicher zuviel Aufwand. Aber bei der unserer Strukturtiefe ist diese Vorgehensweise deutlich effizienter.

Outlook Add-In - Jetzt hier erhaeltlich

OutlookMoveTo für Outlook 2007

.NET | Admin | Tools
Wednesday, June 14, 2006 6:00:54 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Monday, May 15, 2006

Das papierlose Büro hätte es ja schon vor langer Zeit geben sollen. Noch ist es nicht soweit. Aber dennoch ist sehr viel Kommunikation heute elektronisch. Bei uns ist der Exchange Server zusammen mit Outlook als Client die zentrale Plattform.

Jeder Benutzer hat seinen eigenen Posteingang. Eingehende Faxe werden automatisch in einem öffentlichen Ordner abgelegt. Dann gibt es weitere öffentliche Ordner für generische E-Mails, die an unsere öffentlichen Adressen gesendet werden.

Der Posteingang sollte aber nicht zur Sammelstelle bearbeiteter und unbearbeiteter Dokumente verkommen. Mittlerweile ist die Suche nach E-Mails sehr einfach und effizient geworden. Diverse Desktop-Suchmaschinen machen das möglich. Auch Outlook selbst erlaubt eine Suche. Für eingehende geschäftliche Dokumente sollte es dazu aber nach meiner Meinung nicht kommen. Das gehört klassisch sortiert und abgelegt. Spätestens bei der Archivierung dieser Daten geht es eigentlich nicht mehr anders.

Somit müssen eingehende Dokumente im Laufe der Bearbeitung verschoben werden. Der nahe liegende Weg, per Drag & Drop die Dokumente in der Ordnerliste zu verschieben, wird bei vielen verschachtelten Ebenen zur nervigen Übung. Wer zügig arbeiten will, ist mit der Tastatur immer schneller als mit der Maus.

So entstand die Anforderung, per Tastaturabkürzung Objekte innerhalb von Outlook verschieben zu können. Dabei soll jedem Zielordner eine Tastaturabkürzung zugeordnet werden können.

In einem der nächsten Einträge gibt es mehr zur Realisierung zu lesen. Soviel vorab: Mit Visual Studio 2005 (VSTO) habe ich ein Outlook-Add-In gebastelt. Dieses Add-In ist seit einigen Tagen im Einsatz und funktioniert sehr gut. Ein paar Eindrücke von dieser Technologie werde ich noch dokumentieren und das Ergebnis als kostenlosen Download zur Verfügung stellen.

OutlookMoveTo für Outlook 2007

.NET | Admin | Tools
Monday, May 15, 2006 5:58:23 PM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [0]  | 
# Thursday, March 16, 2006
Wir vertreiben ein Tool zur Datensicherung: CPTec-Backup. Dieses Programm verwenden wir natürlich auch selbst. Und das ist gut so. Weil wir so leichter erkennen, an welchen Stellen wir nachbessern müssen.

Ein wichtiger Aspekt war für uns, dass wir auf externe USB Festplatten sichern können. Die kann man einfach abstecken und an sicheren Ort bringen. Natürlich verwendet man rotierende Sätze und die nächste Sicherung schreibt auf eine andere Platte. Dabei muss man darauf achten, dass man nicht von einem festen Laufwerksbuchstaben ausgehen kann. Also kann man CPTec-Backup so konfigurieren, dass es die Festplatte an den ersten Zeichen des Datenträgernamens (Volume Name) erkennt. Das funktioniert auch sehr gut. Alle externen Platten für einen Sicherungs-Job beginnen mit dem gleichen Präfix. Problem gelöst.

Im Laufe der Zeit ist uns aber noch eine andere Schwäche an dem Konzept aufgefallen: Externe Platte an einem sicheren Ort sind gut für die bereits gesicherten "alten" Daten. Aber ganz schlecht für neue Daten die zu einem späteren Zeitpunkt gesichert werden sollen. Dazu müssen diese USB-Platten nämlich ihren Weg zurück in die Firma finden. Das konnten wir nicht immer sicherstellen ;).
CPTec-Backup hatte erkannt, dass nicht alle Ziel-Laufwerke für die anstehende Sicherung vorhanden sind, dies gemeldet und die Sicherung abgebrochen. Schade.

Zusätzlich zur Sicherung auf die externe Festplatte sichern wir auch auf eine interne Platte. Jetzt gibt es ein neues Feature in CPTec-Backup, mit dem Ziele als optional markiert werden können. Fehlende optionale Ziele werden beim Start des Backups unter anderem per E-Mail gemeldet und unmittelbar vor dem ersten Zugriff erneut überprüft. Falls die Festplatte dann immer noch fehlt, wird das protokolliert und der Backup fortgesetzt.

Thursday, March 16, 2006 6:17:53 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# Friday, January 20, 2006
Wir haben schon seit einiger  Zeit unsere interne Datensicherung umgestellt. Die Preise für Festplatten wurden immer billiger. Die Datenmengen sind angewachsen. Nur die Bänder blieben relativ teuer. Also hatten wir uns entschlossen auf Festplatten zu sichern. Unsere ausführliche Motivation kann man unter Backup-Software für Festplatten-Medien nachlesen.

Natürlich muss man jedes Backup-Konzept regelmäßig überprüfen. Kann ich die Daten zurücksichern? Wurde alles gespeichert? Sind die Medien noch in Ordnung?
Auch bei unseren Backups auf interne IDE- und externe USB-Festplatten schauen wir nach dem Rechten. Gerade war ich mal wieder auf dem Server unterwegs. Dabei hatte ich ein seltsam wohliges Gefühl. Man kann das sicher auch mit vielen Argumenten begründen, aber es ist einfach nur angenehm die gesicherten Daten als Verzeichnisse vor sich zu haben:



In jedem dieser Verzeichnisse stecken die seit der letzten Sicherung geänderten Daten. Also ein inkrementeller Backup. Da kann man einfach ein Verzeichnis öffnen und Dateien kopieren. Man muss kein Band in ein Bandlaufwerk legen. Kein Warten, kein Bangen. Der Server kann kaputt gehen, egal, baue ich die HD ein einen anderen Rechner. Eine Platte kann kaputt gehen, die Daten liegen auf 2 Festplatten. Schön!




Das gleiche gilt für die wöchentliche Sicherung. Alles ist im direkten Zugriff vorhanden. Auch schön.

Zusätzlich sind die Daten noch auf externen USB-Festplatten, die an einem anderen Standort gelagert werden. Sehr schön.

Wir hatten zwar nie ein ernsthaftes Problem mit unseren früheren Bandsicherungen und auch Festplatten gehen kaputt. Aber mit auf 2 Festplatten redundant gespeicherten Sicherungen fühle ich mich wohler.
Friday, January 20, 2006 10:56:53 AM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# Friday, November 25, 2005

Es gibt einige kleine Tools, die wir uns für den internen Gebrauch selber basteln. Oft gibt es keine passende fertige Lösung. Manchmal ist das entsprechende Produkt auch zu teuer. Das war auch der Fall, als wir unsere Backup-Lösung überdachten. Festplatten werden immer billiger, aber Bandlaufwerke und die passenden Bänder nicht in dem gleichen Masse. Wechselmedien sollten es aber schon geben, schließlich sollen die wichtigen Daten an einem entfernten Standort gelagert werden. Wir haben uns deshalb für eine Datensicherung auf USB-Festplatten entschlossen.

Natürlich gibt es Backup-Software, die auf externe Platten sichern kann. Wir hatten aber weitergehende Ansprüche:
  • Unser Vertrauen in IDE-Festplatten, insbesondere solche, die häufig transportiert werden, ist nicht sehr groß. Also wird alles auf 2 Platten gesichert.
  • Der Platz auf den Platten soll optimal genutzt werden. Alte Daten bleiben solange wie möglich auf der Platte. Sie werden erst automatisch gelöscht, wenn der Platz für die aktuellen Daten wirklich benötigt wird.
  • Als Kompromiss zwischen Redundanz und Verwahrungszeit der Daten soll automatisch bei jedem Backup die die Zielplatte gewechselt werden können.
  • Alle kopierten Daten werden in eine Datenbank protokolliert. Mit einfachen SQL Befehlen kann man gesicherte Dateien aufspüren.
  • Die Berechtigungen der Quelldateien sollen auf die Zieldateien übertragen werden. Dadurch ist ein Rücksichern der Daten einfacher und man kann den Anwendern über eine Readonly-Freigabe Zugriff auf die Sicherungen geben.
  • Fehler oder Erfolgsmeldungen werden in das Event Log geschrieben und per E-Mail verschickt.
Inzwischen läuft dieses "CPTec Backup" seit einiger Zeit und wir sind mit dem Ergebnis sehr zufrieden. Ein paar kleine Änderungen und Optimierungen an der Software und der Konfiguration gab es natürlich auch zwischendurch. Die Konfiguration ist als XML-Datei abgelegt und der Backup Job wird mit dem Taskplaner gestartet. Alles ganz einfach. Täglich kamen E-Mails, die den Erfolg der Inkrementellen Sicherung verkündeten. Prima!

Drei CPTec-Mitarbeiter bekamen diese E-Mails. Keinem ist es aufgefallen, als über ein Woche lang keine Meldung mehr kam. Vor lauter Korrespondenz und Spam fällt es nicht auf, wenn eine tägliche Mail nicht ankommt. Was war passiert? Ich hatte eine minimale Änderung an der Konfiguration vorgenommen. Als Entwickler der Software macht man so was auch ganz selbstverständlich. Ich weiß ja was ich mache. Denkste! Die Datei war kein valides XML mehr. CPTec Backup hat das natürlich dem Event Log anvertraut. Aber woher sollte es ohne Konfigurations-Datei wissen, wohin die E-Mails geschickt werden sollen? Kann es nicht, macht es nicht.

Zum Glück ist nur das Inkrementelle Backup betroffen gewesen. Die Komplettsicherung lief separat und ungestört weiter.

Natürlich will man aus Fehlern lernen. Die erste Konsequenz ist, dass CPTec Backup jetzt einen Kommandozeilen-Parameter zum Testen der Konfiguration bekommen hat. Ohne dass tatsächlich eine Sicherung stattfindet, wird die Datenbank getestet und eine Test E-Mail versendet. Zusätzlich wird auch vor dem Start der eigentlichen Sicherung eine E-Mail verschickt. Um die Auswirkung einer überquellenden Inbox zu lindern sortiere ich in Outlook auch noch alle Backup-Meldungen anhand des Absenders in einen separaten Ordner. Jetzt sind wir hoffentlich vor meinen Tippfehlern besser geschützt.

Und bevor ich es vergesse: Wir haben uns dazu entschlossen, auch anderen Interessenten diese Backup-Software zur Verfügung zu stellen. Die Anwendung ist mit C# unter .Net 1.1 entwickelt. Sogar der Quelltext ist erhältlich. Wer sich dafür interessiert, kann auf unter CPTec Software mehr dazu lesen :).

Friday, November 25, 2005 4:50:57 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# Friday, November 11, 2005

Es kommt ja öfters vor, dass man schnell mal einen Screenshot machen will: Den neuesten Dialog per E-Mail verschicken oder die unerwartete Fehlermeldung dem Entwickler zukommen lassen.
Dafür gibt es diverse kleine Helferlein. Zur Not gibt es auch noch Alt+PrtScn wenn es ganz minimalistisch sein soll.

Aber oft ist dann der Weg zu einer sinnvoll benannten Bild-Datei doch eine größere Unterbrechung als geplant. Wieder ein Hot-Key, den man genau dann vergessen hat. Welche Taste war jetzt für den ganzen Bildschirm, welche für das aktive Fenster? Und wenn dann das Fenster nicht rechteckig ist, wie machen wir das mit dem Rand?

Kenny Kerr hat uns mit Window Clippings 1.0 um ein weiteres Tool bereichert. Wenn man auf das Toolbar Icon klickt, wird der ganze Bildschirm grau, man wählt das gewünschte Fenster aus und es wird hell. Mit einem Doppelklick landet das Fenster wahlweise im Clipboard und in einem History Verzeichnis. Mit der rechten Maustasten kann man die Aktion auswählen. Der Dateiname wird dabei aus Namen des Fensters abgeleitet.

Besonderen Wert hat der Autor dabei auf die Transparenz gelegt. Der Bereich des erzeugten rechteckigen Bildes, der nicht zum Fenster gehört, wird mit transparent gespeichert.
Die Unterstützung für OneNote ist für mich im Moment nicht wichtig. Mit diesem elektronischen Notizbuch bin ich nicht warm geworden.

Ein kleines Tool, daß seinen Platz in meiner Sammlung gefunden hat.
Friday, November 11, 2005 2:48:44 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  |