# Thursday, April 22, 2010

Am Montag, den 5.4.2010 um 01:28 Uhr war es so weit: Unsere Lucia ist auf die Welt gekommen. Ihre anfänglichen 3680 Gramm hatte sie auf 50 Zentimeter verteilt.

Das Wichtigste ist, dass es Mutter und Tochter gut geht! Ich bin stolz auf meine Frau und unser Sohn Moritz ist stolz auf seine neue Schwester: „Gloßer Bluder”

Wie zu befürchten, ist auch beim zweiten Kind der väterliche Urtrieb des notwendigen Herumzeigens von Babyfotos noch vorhanden. Diesmal hat sich Moritz, ganz der stolze Bruder, fast überall mit aufs Bild gemogelt.

Lucia Babyfoto

Lucia im Bett

Moritz und Lucia im Bett (1)

Moritz und Lucia im Bett (2)

Moritz und Lucia auf der Couch

An dieser Stelle ist jetzt ein „mei san de liab” angebracht ;).

Moritz sah in den ersten Wochen übrigens fast genau wie Lucia aus. Ein bisschen fester war er. Lucia hat dafür mehr weibliche Züge. So zumindest sieht es der Papa! Zum Vergleich: Moritz Deger

Thursday, April 22, 2010 11:02:07 AM (W. Europe Daylight Time, UTC+02:00)  #
  Disclaimer  |  Comments [121]  | 
# 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, December 21, 2007

Nach einigen Tagen Elternzeit habe ich mich an meine neue Rolle als verfügbarer Papi gewöhnt. Erstaunlich ist nur, wo vorher die Zeit für eine geregelte Arbeit hergekommen ist. Jetzt ist diese Zeit ganz offensichtlich verschwunden. Wahrscheinlich sollte der kleine Bub mehr schlafen und damit seinen Eltern mehr Freiräume für andere Tätigkeiten lassen.

Dennoch habe ich fest vor, meine Nase in einige Bücher zu stecken. Jetzt wo die Wintersonne ins Wohnzimmer lacht, lockt die Couch mit Büchern:

Bücher auf der Couch

Obwohl ich einige davon schon komplett gelesen habe, sind sie es wert, noch einmal durchgearbeitet zu werden:

Douglas Adams - The Ultimate Hitchhiker's Guide to the Galaxy

Als die Computer der Zukunft noch riesengroß und trotzdem irrsinnig langsam waren:
Natürlich hat man die Trilogie schon gelesen. Aber das ist bei mir sehr lange her. Die englische Version hatte ich damals auch nur geliehen. Jetzt kann ich den ganzen verqueren britischen Humor in einem Rutsch lesen.

 

Rockford Lhotka - Expert C# 2005 Business Objects

In diesem Buch beschreibt Rocky Lhotka die Version 2.0 seines CSLA .NET Frameworks. Bei jeder seiner Design-Entscheidungen hatte ich das Gefühl, dass es der richtige Weg ist.  Bei einem anderen Framework, das ich davor getestet hatte, fühlte ich mich ständig abgelenkt und eingeengt. Hier habe ich viel gelernt und CSLA.NET öfters erfolgreich eingesetzt.
Die Updates für CSLA .NET 2.1 und 3.0 vertreibt Rocky Lhotka direkt als E-Books.

 

Mein Badebuch

Wasser- und speichelfest ist dieses Buch zusätzlich noch mit einer kleinen Wasserspritze versehen.
Ein Buch, das man relativ schnell durchgelesen hat. Moritz findet hingegen die Bilder und Papis Geräusche dazu immer noch witzig. Schmeckt ein bisschen fad, ist aber laut ÖKO-TEST nicht giftig.

 

Angelesen und bisher eher als Referenz verwendet:

Design Patterns: Elements of Reusable Object-Oriented Software

Der Klassiker der Gang Of Four (GoF). Von der Abstract Factory bis zum Visitor Pattern werden 24 Design Patterns erstmalig als Konzept formal dargestellt.
Manchmal hilft es eben, zur ursprünglichen Quelle zurück zu gehen. Oft ist aber ein Pattern in C# implementiert einfacher zu erfassen.

 

Steve McConnell - Code Complete: A Practical Handbook of Software Construction: A Practical Handbook of Software Costruction

Keine Architektur und kein Prozess sondern der Code selbst ist hier Thema. Am Ende muss ja mal irgendwann programmiert werden.
Jeff Attoowd's Blog heißt Coding Horror, weil ihm die entsprechende Randnotiz samt Icon in diesem Buch so gut gefallen hat. Bei den abschreckenden Beispielen heißt es immer: Coding Horror
Auch der Rest hat Jeff Attwood so gut gefallen, dass er dieses Buch an erster Stelle auf seiner Liste empfiehlt: Recommended Reading for Developers

 

Adam Nathan - Windows Presentation Foundation Unleashed

Eines der besseren WPF Bücher. Sehr gut geschrieben und mit toller Unterstützung durch das farbige Layout. Der Code ist beispielsweise mit dem üblichen Syntax Coloring versehen.
Leider hat mich relativ früh in dem Buch ein Windows Forms Projekt wieder zur klassischen .NET Benutzeroberfläche gezogen. Aber nicht auf Dauer. Bald werde ich hoffentlich wieder XAML erzeugen.

 

David Allen - Getting Things Done. The Art of Stress-Free Productivity

Erst mit einer Abkürzung wird ein Konzept wirklich interessant: Das Netz spricht nur noch von GTD.
Zu diesem Buch bin ich über den leeren Posteingang in Outlook (Zero Inbox) gekommen. Einer der Ansätze von GTD ist, dass die Inbox leer sein sollte und eingehende E-Mails nach bestimmten Kriterien in entsprechende Verzeichnisse sortiert werden. Das Verschieben von E-Mails ist die einzige Aufgabe, die mein Outlook Add-In erledigt.
Wahrscheinlich sollte ich mit diesem Buch anfangen. Mit der gewonnenen Produktivität sollte es dann kein Problem sein, die anderen Bücher zu lesen.

Friday, December 21, 2007 4:28:09 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [1]  | 
# Friday, December 14, 2007

Beim Umzug dieses Blogs habe ich von der alten Adresse auf die neue Adresse per ASP.NET HttpHandler weitergeleitet. Einer der Vorteile erschien mir die größere Flexibilität. Nur hatte ich die damals gar nicht benötigt.

Inzwischen ist mir aber aufgefallen, dass mein neuer Web-Hoster einen URL Filter einsetzt der Umlaute filtert. Die verwendete Blog-Engine nutzt aber den Titel als Link-Adresse. Bei Titel mit Umlauten gibt es jetzt leider Probleme.

Für das neue Blog ist die Lösung relativ einfach: Ich habe alte Einträge so umbenannt, dass keine Umlaute mehr vorkommen. Jetzt geht aber die Weiterleitung bei den veränderten Einträgen ins Leere.

Kein Problem für den HttpHandler, der modifiziert jetzt einfach einzelne Adressen:

if (oldRequest.Contains("OutlookAddInJetztHier")) 
    oldRequest = "/OutlookAddInJetztHierErhaeltlich.aspx"; 

Jetzt sieht für Google meine Web-Welt wieder in Ordnung aus.

Friday, December 14, 2007 4:49:53 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# Friday, December 07, 2007

Bei dem ganzen Web 2.0 bin ich als Entwickler im Moment außen vor. Dazu habe ich bisher nichts beigetragen. Als Anwender freue ich mich über einige der Entwicklungen.

Das gelöste Probleme nicht notwendig dadurch toller werden, dass man sie im Web noch einmal löst, leuchtet ein. Manchmal braucht man vielleicht tatsächlich keine Desktop Applikation, eine Web-Anwendung genügt. Manche Konzepte funktionieren auch nur im Netz. Aber nicht alles wo AJAX drinsteckt und grüne Farben verwendetwerden ist toll. Oder sogar so toll, dass man damit Geld verdienen kann. Es fehlen oft die überzeugenden Geschäftsmodelle, Risikokapital fehlt aber seltener. Die Blase beginnt zu wachsen...

Zum Thema "Web 2.0 - wer scheitert am schönsten" empfiehlt sich uncov. Sehr frech, deutlich und lustig werden die Startups der Reihe nach vorgeführt.

Über Snowball habe ich ein sehr gut gemachtes Video gefunden. Zu Billy Joel's "We didn't start the fire" können war das Web in der Version 2.0 vor uns Revue passieren lassen:

Friday, December 07, 2007 10:26:43 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# Thursday, December 06, 2007

Wenn man eine Webseite oder Teile einer Webseite permanent umziehen möchte, sollte man den Clients mitteilen, wo sie die Inhalte jetzt finden können. Der beste Weg dazu ist, mit einem HTTP Status Code 301 Moved Permanently zu antworten. In der Antwort wird die neue Adresse mitgeliefert.

Im Browser ändert sich dadurch beispielsweise automatisch die angezeigte Adresse und auch die Suchmaschinen wissen, dass der Inhalt umgezogen ist. In SEO Kreisen wird diese Form der Weiterleitung als die einzige akzeptable Möglichkeit gewertet.

Ich wollte mein ASP.NET basiertes Blog umziehen, also lag es nahe, auch die Weiterleitung mit ASP.NET zu realisieren. Um alle ASP.NET Antworten auf einen Schlag zu erwischen, empfiehlt sich ein HttpHandler. Damit können zentral alle Requests behandelt werden, bevor weitere Verarbeitungen in der Engine stattfinden.

Es genügt einen minimale Web Applikation anzulegen. In App_Code kommt eine von IHttpHandler abgeleitete Klasse Redirector:

using System;
using System.Web;

public class Redirector : IHttpModule
{
    public void Dispose() { }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    const string OldPath = "http://www.cptec.de/blogit";
    const string NewPath = "http://www.deger-it.de";

    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication application = sender as HttpApplication;
        string absoluteUri = application.Context.Request.Url.AbsoluteUri;

        if (absoluteUri.ToLower().StartsWith(OldPath))
        {
            application.Context.Response.StatusCode = 301;
            application.Context.Response.StatusDescription = "Moved Permanently";
            string oldRequest = absoluteUri.Substring(OldPath.Length);
            application.Context.Response.RedirectLocation = NewPath + oldRequest;
            application.Context.Response.End();
        }
    }
}

Bei allen Requests, die auf die alte Adresse des Blogs zugreifen wollen, wird mit einer einfachen String Bearbeitung die neue Adresse ausgerechnet. Der Status Code 301 samt Beschreibung und neuer Adresse wird gesetzt und als Antwort zurückgeschickt.

Damit dieser HttpHandler auch aktive ist, muss er noch in der Web.Config eingetragen werden:

<system.web>
    <httpModules>
        <add name="Redirection" type="Redirector"/>
    </httpModules>
</system.web>

Jeder ASP.NET Zugriff wird jetzt sauber an die neue Adresse weitergeleitet. Alle Zugriffe auf Ressourcen, die nicht über ASP.NET ausgeliefert werden, sind davon aber nicht betroffen. Bei diesem Blog werden die Bilder beispielsweise statisch über den Webserver ausgeliefert. Davon kriegt der HttpHandler gar nichts mit.

Handler Mapping IIS6

Beim IIS6 kann man das über den IIS Manager konfigurieren. Bei der entsprechenden Webseite oder dem Virtual Directory in der Application Configuration unter Mappings kann man die ASP.NET Engine auf weitere Dateien anwenden.

IIS6_Virtual_Directory

IIS6_Application_Configuration

Dazu klickt man Add und trägt bei Executable den ASP.NET ISAPI Filter ein. Der Pfad wird ungefähr so aussehen:

c:\Windows\Microsft.NET\Framework\2.0.xxx\aspnet_isapi.dll

Bei Extension gibt man die gewünschte Dateiendung ein. Beispielsweise .jpg für JPEG Bilder.

IIS6_Application_Extension_Mapping

Jetzt fühlt sich ASP.NET auch für JPEG Dateien zuständig und der neue HttpHandler wird durchlaufen und leitet entsprechend weiter.

Handler Mapping IIS7

Leider ist das bei einigen Dateitypen relativ mühselig. Mit dem IIS7 kann man das komplett über die Web.Config einstellen:

<system.webServer>
    <handlers>
        <add name="Redirector" path="*.jpg" verb="GET" type="Redirector" resourceType="File" />
    </handlers>
</system.webServer>

Wie ich leider zu spät erfahren habe, kann man auch direkt mit den Bordwerkzeugen von IIS6 sehr flexibel Weiterleitungen konfigurieren: Redirect Reference

Wenn man aber wie bei einem Web-Hoster nicht zugriff auf die kompletten Admin-Werkzeuge hat, ist die vorgestellte Variante immer noch möglich. Außerdem ist ein HttpHandler wesentlich flexibler.

Thursday, December 06, 2007 2:26:22 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# Monday, December 03, 2007

Nachdem ich in der nächsten Zeit nicht für meinen Arbeitgeber tätig bin, wird sich auch der Charakter diese Blogs ein wenig ändern. Ab sofort ist das hier kein CPTec Blog mehr. Dieses Blog wurde privatisiert. Die Mischung aus Corporate Blog und privatem Blog war damals vielleicht nicht die beste Entscheidung.

Ab sofort gilt die neue Adresse: www.deger-it.de

Die alten Beiträge sollten mit 301 Moved Permanently hierher weitergeleitet werden. Der RSS Feed läuft ohnehin über Feedburner und sollte automatisch umgestellt sein.

Monday, December 03, 2007 5:34:56 PM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# Saturday, December 01, 2007

Heute ist unser Sohn Moritz ein halbes Jahr alt geworden und es beginnt meine zweimonatige Elternzeit. Ich werde den ganzen Dezember und Januar zu Hause bleiben.

Seit dem 1.1.2007 gilt das Bundeselterngeld- und Elternzeitgesetz - BEEG. Wir haben uns die maximal 14 Monate in 12+2 Monate aufgeteilt. Meine Frau nimmt 12 Monate in Anspruch und ich 2 Monate. Im 7. und 8. Lebensmonat sind wir jetzt gleichzeitig Vollzeit-Eltern. Mein Arbeitgeber muss mir 2 Monate nichts bezahlen, auch keine Lohnnebenkosten. Vom Staat kriege ich 67 Prozent des Nettoeinkommens. Sehr angenehm für uns und generell eine gute Regelung für alle künftigen Eltern.

Um Schaden von dem kleinen Moritz abzuwenden, versuche ich an ihm keine rund um die Uhr Betreuung. Es gibt auch ein zu viel von Papi. Deswegen werde ich hoffentlich weiter Zeit für den PC und die Programmierung finden. Für meine aktuellen beruflichen Projekte habe ich noch ein paar Dinge geplant, zwei Softwareentwicklungs-Bücher warten auf mich und ein Hobby-Projekt möchte ich starten. Dieses Blog wird also auch weiterhin technologisch bleiben.

Zurück zu Moritz: Im 6. Monat soll man mit Gläschen als Mittagsmahlzeit beginnen. Am Besten fängt man wohl mit Karottenbrei an. Dabei füttert Papi, weil bei Mami die gewohnten Nahrungsquellen zu sehr ablenken könnten.

Jetzt sieht noch alles harmlos aus:

Moritz Deger vor dem ersten Brei

Inzwischen hat Moritz wohl keinen Spass mehr. Viel Brei hat er im ersten Anlauf nicht erwischt. Die Wand im Hintergrund war übrigens vorher schon rot!

Moritz Deger nach dem ersten Brei

Wir werden es weiter versuchen. Er wird Karotten lieben!

Und weil ich gerade dabei bin, mogel ich einfach noch ein Bild und ein Video von Moritz in den Beitrag:

Moritz Deger auf dem Bauch

Saturday, December 01, 2007 8:37:11 AM (W. Europe Standard Time, UTC+01:00)  #
  Disclaimer  |  Comments [0]  | 
# 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]  |