Tags: , | Posted by AlexanderZeitler on 2/27/2009 8:26 AM | Comments (0)

Da es in der Community Diskussionen um die Komplexität der Default Templates von ASP.NET MVC gab, haben einige Leute um Jeffrey Palermo, u.a. Autor von ASP.NET MVC in Action, unter http://mvcforasp.net schlankere Templates veröffentlicht.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , | Posted by AlexanderZeitler on 2/23/2009 11:10 PM | Comments (0)

Gründe für die Migration von Berkeley DB (BDB) basierten Repositories in FSFS Repositories gibt es viele - einer ist, dass ein Subversion-Repository nicht mehr unter Apache sondern unter SVNServe betrieben werden soll.

Möchte man nun auf das Repository zugreifen, erhält man die Fehlermeldung

"failed to load module for fs type bdb"

Der Grund hierfür ist, dass SVNServe wie auch VisualSVN Server BDB nicht unterstützen. Die Migration erfolgt prinzipiell, indem das BDB-Repository mittels

svnadmin dump

zunächst in eine Datei exportiert wird und danach mittels

svnadmin load

in ein neues FSFS-basiertes Repository importiert wird.

Die Migration wird allerdings dadurch erschwert, dass für die Erstellung des dump-Files eine Subversion-Version benötigt wird, die das gleiche BDB-Schema besitzt, wie die Version, mit der das Repository erstellt wurde.

Andernfalls erhält man Fehlermeldungen wie diese:

"Expected version '1' of repository; found version '2'"

Falls man die ehemals verwendete Subversion-Version nicht mehr besitzt, kann man im Subversion Windows Archive die benötigte Version herunterladen.

Diese sollte man in einen eigenen Ordner installieren, der nicht dem Pfad der aktuellen Installation entspricht.

In der Kommandozeile sollte man nun die PATH-Variable so anpassen, dass sie auf den Installationspfad der Subversion-Version für die BDB-Repositories zeigt.

Danach kann man mit

svnadmin dump meinBDBrepository > meindumpfile

das Repository exportieren.

Nun ändert man in der Kommandozeile die PATH-Variable wieder auf den Eintrag der aktuellen Subversion-Version und führt

svnadmin load meinFSFSrepository < meindumpfile

aus.

Hiermit ist die Konvertierung abgeschlossen.

Currently rated 4.0 by 1 people

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , | Posted by AlexanderZeitler on 2/23/2009 8:50 PM | Comments (0)

alt.netde_banner

Aufgrund technischer Probleme musste das heutige ALT.NET DE Online Meeting leider abgebrochen werden.

Neuer Termin ist Montag, 02.03.2009, also heute in einer Woche, ebenfalls um 20:00 Uhr.

Weitere Infos dazu auf der ALT.NET DE Online Meeting Seite.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , | Posted by AlexanderZeitler on 2/23/2009 3:50 PM | Comments (1)

Meine Statistiken gehören mir

Heutzutage ist es gängige Praxis, Google Analytics für die kostenlose Erzeugung aussagekräftiger Website-Statistiken zu verwenden.

Eine ebenfalls kostenlose Alternative, die bereits seit vielen Jahren verfügbar ist, ist AwStats.

Die Installation in Verbindung mit IIS6 hat Christoph Wille hier gezeigt (Glengamoi-Registrierung notwendig) – dieser Beitrag ist daran angelehnt.

Inzwischen ist IIS7 stand der Technik und auch dort lässt sich AwStats verwenden - wie, das zeigt die folgende Anleitung.

Download first

Bevor AwStats verwendet werden kann, muss es bei SourceForge.NET heruntergeladen werden.

Da zur Ausführung von AwStats Perl benötigt wird, muss außerdem auch ein Perl-Interpreter installiert werden.

Auch hier gibt es kostenlose Varianten – zum Einsatz kommt in diesem Fall ActivePerl von ActiveState.

Installation

Nach der Installation von ActivePerl befindet sich selbiges in

C:\perl

Die “Installation” von AwStats besteht darin, dass das entsprechende ZIP-File (in diesem Fall die awstats-6.8.zip) in einen Ordner entpackt wird, unter dem später auch das Root für die Statistik-Website liegt, in meinem Fall

D:\Websites\SharpERP.NET\stats.sharperp.net

Danach sollten folgende Ordner und Dateien existieren:

  • docs
  • tools
  • wwwroot
  • README.TXT
  • In docs befindet sich erwartungsgemäßg die Dokumentation von AwStats, in tools die Perl-, xml- und xslt-Dateien und in wwwroot das bereits erwähnte Root für die Statistik-Website.

    IIS-Konfiguration – der erste Streich

    Die Grundlage für die Generierung von Website-Statistiken mit AwStats sind die Logfiles des IIS. Allerdings können die vom IIS per default erzeugten Logfiles nicht von AwStats gelesen werden, da diese andere Felder beinhalten als von AwStats erwartet wird.

    Um die Logfiles des IIS so zu erzeugen, dass sie von AwStats geparsed werden können, sind deshalb in den Logging-Einstellungen der entsprechenden Website einige Feld-Anpassungen nötig:

    IIS Logging / Feldeinstellungen

    IIS-Konfiguration – der zweite folgt sogleich

    Im nächsten Schritt legen wir die Website stats.sharperp.net im IIS-Manager an:

    Neue Website für die Statistik anlegen

    Der physikalische Pfad zeigt auf

    D:\Websites\SharpERP.NET\stats.sharperp.net\wwwroot

    Dies ist der Pfad, in dem sich das wwwroot-Verzeichnis von AwStats befindet.

    Verwendet man die x64-Variante von Windows Server 2008, muss der Application-Pool der Statistik-Website außerdem so konfiguriert werden, dass auch 32-Bit Applikationen ausgeführt werden (ActiveState Perl läuft nur als 32-Bit Applikation):

    32-Bit Applikationen im Statistik-Applikationpool erlauben

    Damit Perl nun am IIS7 ausgeführt wird, müssen zwei Script Maps erstellt werden.

    Dies geschieht im Bereich Handler Mappings für die Websites, indem man auf “Add Script Map” klickt und folgende Daten eingibt:

    Perl Script Map erzeugen

    Die nachfolgende ISAPI-Meldung bestätigen wir mit “yes”:

    Script Map Ausführung erlauben

    Das gleiche führen wir nun noch für die CGI Script Map durch:

    Cgi Script Map erzeugen

    Auch hier wird die ISAPI-Meldung bestätigt:

    Script Map Ausführung erlauben

    Danach muss der IIS (=World Wide Web Publishing Service)  neu gestartet werden.

    AwStats-Konfiguration

    Nachdem der IIS nun bereit ist,  AwStats auszuführen, müssen wir dieses zunächst konfigurieren.

    Im Ordner

    D:\Websites\SharpERP.NET\stats.sharperp.net\wwwroot\cgi-bin\

    liegt die Datei

    awstats.model.conf

    Hierbei handelt es sich um eine Vorlage für AwStats-Website-Konfigurationen.

    Um die Datei für eine eigene Website zu verwenden, muss diese kopiert werden und “model” durch den Namen der Website ersetzt werden, für die eine Statistik erstellt werden soll, also z.B.

    awstats.sharperp.net.conf

    Im nächsten Schritt muss die Datei editiert und mindestens folgende Anpassungen vorgenommen werden:

    LogFile="/var/log/httpd/mylog.log"

    muss ersetzt werden durch den Pfad zu den Logfiles:

    LogFile="D:\LogFiles\W3SVC8\u_ex%YY-24%MM-24%DD-24.log"

    Danach wird

    LogFormat=1

    geändert in

    LogFormat=2

    Außerdem muss

    SiteDomain=""

    durch

    SiteDomain="sharperp.net"

    ersetzt werden.

    Die nächste Änderung ist besonders wichtig, da sie auch sicherheitsrelevant ist.

    DirData="."

    muss ersetzt werden durch

    DirData="D:\Websites\SharpERP.NET\stats.sharperp.net\DataDir"

    Die Sicherheitsrelevanz liegt darin, dass “.” das Verzeichnis darstellt, in dem die .conf-Datei liegt, also cgi-bin.

    Dieses ist von außen logischerweise erreichbar, d.h. jemand, der den Aufbau von AwStats kennt, kann die von AwStats aufbereiteten Statistiken herunterladen.

    Die o.g. Änderung verhindert dies, da das DataDir nun außerhalb der Reichweite von Web Usern liegt.

    Damit sind die notwendigen Anpassungen an der Konfiguration erledigt und die awstats.sharperp.net.conf kann gespeichert werden.

    Ruf. Mich. Auf.

    Damit nun die Statistiken aus den Logfiles des IIS 7 generiert werden, müssen wir die Datei

    awstats_updateall.pl

    im Verzeichnis

    D:\Websites\SharpERP.NET\stats.sharperp.net\tools\

    mit den entsprechenden Parametern ausführen.

    Da dies immer geschehen muss, wenn wir die Statistiken aktualisieren wollen, erstellen wir uns hierfür ein Batchfile, das wir einfach aufrufen können – ebenfalls im soeben genannten Ordner, z.B.

    buildall.bat

    Der Inhalt der Datei ist folgender:

    D:\Websites\SharpERP.NET\stats.sharperp.net\tools\awstats_updateall.pl now -awstatsprog="D:\Websites\SharpERP.NET\stats.sharperp.net\wwwroot\cgi-bin\awstats.pl" -configdir="D:\Websites\SharpERP.NET\stats.sharperp.net\wwwroot\cgi-bin" update

    Somit wird also die awstats_updateall.pl sofort (now) ausgeführt und das enstprechende awstats + config verwendet und die Statistiken aktualisiert.

    Wenn wir unser Batchfile nun speichern und ausführen, sollten wir ein Resultat ähnlich dem hier gezeigten erhalten:

    D:\Websites\SharpERP.NET\stats.sharperp.net\tools>D:\Websites\SharpERP.NET\stats.sha
    rperp.net\tools\awstats_updateall.pl now -awstatsprog="D:\Websites\SharpERP.NET\stat
    s.sharperp.net\wwwroot\cgi-bin\awstats.pl" -configdir="D:\Websites\SharpERP.NET\stat
    s.sharperp.net\wwwroot\cgi-bin" update
    Running '"D:\Websites\SharpERP.NET\stats.sharperp.net\wwwroot\cgi-bin/awstats.pl" -u
    pdate -config=sharperp.net -configdir="D:\Websites\SharpERP.NET\stats.sharperp.net\w
    wwroot\cgi-bin"' to update config sharperp.net
    Create/Update database for config "D:\Websites\SharpERP.NET\stats.sharperp.net\wwwro
    ot\cgi-bin/awstats.sharperp.net.conf" by AWStats version 6.8 (build 1.910)
    From data in log file "D:\LogFiles\W3SVC8\u_ex090222.log"...
    Phase 1 : First bypass old records, searching new record...
    Searching new records from beginning of log file...
    Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
    Jumped lines in file: 0
    Parsed lines in file: 34
    Found 2 dropped records,
    Found 6 corrupted records,
    Found 0 old records,
    Found 26 new qualified records.

    Wenn wir nun die Statistikseite im Browser mit der Url

    http://stats.sharperp.net/cgi-bin/awstats.pl?config=sharperp.net

    aufrufen, erhalten wir das folgende Resultat:

    Eine neue Statistik Website ist geboren

    Somit haben wir für das Logfile des vorangegangenen Tages eine Statistik erzeugt.

    Und täglich grüsst das Murmeltier

    Damit die Statistiken nun täglich automatisch aktualisiert werden, muss der Aufruf von

    D:\Websites\SharpERP.NET\stats.sharperp.net\tools\buildall.bat

    über einen Scheduled Task einmal täglich ausgeführt werden (es empfiehlt sich, dies Nachts z.B. um 3:30 zu tun).

    Altlasten aufarbeiten

    Will man alte Logfiles nachträglich in die Statistik aufnehmen, so kann man dies mit folgendem Kommando:

    D:\Websites\SharpERP.NET\stats.sharperp.net\wwwroot\cgi-bin\awstats.pl -config="sharperp.net" -update -LogFile="D:\LogFiles\W3SVC8\u_ex080917.log"

    Dieses Kommando parst ein altes LogFile vom 17.09.2008 nach und fügt es in die Statistik mit ein.

    Voraussetzung ist natürlich, dass das Format des Logfiles passt.

    Das wars – sicher?

    Zum Schluss noch ein Hinweis bezgl. Sicherheit: Will man vermeiden, dass die Statistiken von Dritten eingesehen werden, sollte man die Seite z.B. per Windows Authentication absichern.

    Denn ein kurzer Klick auf einen der Referrer in den Statistiken liefert diesem einen gezielten Hinweis die Adresse der Statistik-Website.

    Currently rated 4.5 by 2 people

    • Currently 4.5/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5
    Tags: , , , | Posted by AlexanderZeitler on 2/22/2009 7:58 PM | Comments (1)

    alt.netde_banner

    Am 23.02.2009 findet um 20:00 Uhr das 4. ALT.NET DE Online Meeting statt.

    Thema

    Test Driven Development & Behavior Driven Development

    Details

    Wie können wir Code schreiben, der möglichst fehlerfrei, robust, und leicht änderbar ist und es auch bleibt? Wie implementieren wir nur wirklich benötigte Funktionalität und sind von allem Anfang an auf zu erwartende Änderungswünsche des Kunden vorbereitet? Die Antwort auf diese Fragen lautet Test-getriebene Entwicklung (TDD).

    Wie erreichen wir, dass Entwickler und Fachexperten oder allgemein Stakeholder dieselbe Sprache sprechen? Behavior driven development (BDD) liefert uns eine mögliche Antwort darauf.

    Über den Sprecher

    Gabriel Schenker ist Softwareentwickler, Blogger bei Los Techies und Betreiber des NHibernate FAQ Blogs.

    Teilnahme

    Teilnehmen kann jeder, der sich für das Thema interessiert.

    Die Registierung erfolgt auf der ALT.NET DE Website für das Online-Meeting.

    Um zu gewährleisten, dass wir pünktlich starten können, kann die LiveMeeting-Installation hier vorher getestet werden.

    Die Lobby ist ab 19:45 Uhr geöffnet.

    Be the first to rate this post

    • Currently 0/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5
    Tags: , , | Posted by AlexanderZeitler on 2/21/2009 10:28 PM | Comments (2)

    Auch wenn ca. 90% der Zugriffe auf http://blogs.dotnetgerman.com via RSS erfolgen, habe ich drei CSS-Klassen eingerichtet, die häufig verwendete Elemente in Blogpostings auf http://blogs.dotnetgerman.com einheitlich formatiert darstellt.

    Hierbei handelt es sich um folgende CSS-Klassen:

    • .error
    • .commandline
    • .quote

    Die Darstellung ist folgende:

    .error:

    Dies ist eine Fehlermeldung

    .commandline

    Dies ist eine Ausgabe auf der Kommandozeile

    .quote

    Dies ist ein Zitat

    Alles was, Blogger, deren Blog bei http://blogs.dotnetgerman.com gelistet ist, tun müssen, ist die Zuweisung der entsprechenden CSS-Klassen an die gewünchten Stellen im eigenen Blog. Lokal im jeweiligen Blog können die Klassen natürlich anders oder undefiniert sein.

    Außerdem ist bereits seit längerem der SyntaxHighlighter von Alex Gorbatchev integriert, so dass auch Code-Schnipsel einheitlich und optisch ansprechend formatiert dargestellt werden können:

    syntaxhighlighter

    Currently rated 1.0 by 1 people

    • Currently 1/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5
    Tags: , | Posted by AlexanderZeitler on 2/21/2009 9:34 PM | Comments (2)

    Wenn man z.B. das Logfile-Verzeichnis einer Website unter IIS7 verschieben möchte, muss man wissen, welche ID die Website hat, da das Logfile in der Form W3SVC<SiteID> vorliegt, also z.B. W3SVC25.

    Unter IIS6 konnte man dies in den Protokollierungseigenschaften direkt anzeigen lassen:

    logfilesettingsiis6

    Beim IIS7 ist dies leider nicht mehr der Fall:

    logfilesettingsiis7

    Um nun dennoch an den Namen des Logfile-Verzeichnisses zu kommen, muss man die Informationen mit einem WMI-Script abfragen:

    Set oIIS = GetObject("winmgmts:root\WebAdministration")
    Set oSite = oIIS.Get("Site.Name='blog.alexonasp.net'")
    WScript.Echo "Retrieved an instance of Site "
    WScript.Echo "Name: " & oSite.Name
    WScript.Echo "ID:   " & oSite.ID

    Nach dem Start des Scripts erhält man folgende Ausgabe:

    Microsoft (R) Windows Script Host Version 5.7
    Copyright (C) Microsoft Corporation. All rights reserved.

    Retrieved an instance of Site
    Name: blog.alexonasp.net
    ID: 2

    Der Name des Logfle-Verzeichnisses ist somit

    D:\LogFiles\W3SVC2

    Danke, Thomas

    Be the first to rate this post

    • Currently 0/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5
    Tags: , , , , , | Posted by AlexanderZeitler on 2/21/2009 2:31 PM | Comments (5)

    Ein Wertesystem für Softwareentwickler

    Dass Ralf Westphal und Stefan Lieser zum Jahreswechsel die Initiative Clean Code Developer (CCD) gestartet haben, war bereits Gegenstand mehrerer Blogposts, z.B. hier, hier und hier.

    Außerdem hat Ralf Clean Code Developer ausführlich in der DotNetPro vorgestellt und bereits am 09.02.2009 fand ein ALT.NET DE Online Meeting statt, in dem Ralf und Stefan Fragen rund um das Thema CCD ausführlich beantwortet haben.

    CCD-Werte immer dabei

    Ich war von der Idee von Clean Code Developer sofort begeistert, da es mir als Softwareentwickler die Möglichkeit gibt, mit handfesten Fakten meinen Code auf Mängel hinsichtlich Korrektheit, Evolvierbarkeit, Produktionseffizienz und Reflexion zu durchsuchen und diese zu korrigieren.

    Was mich allerdings etwas störte, war die Tatsache, dass ich gerade zu Beginn eines Grades die Werte (Prinzipien/Werte/Praktiken) immer wieder auf der Website nachlesen musste.

    Nach einigen Überlegungen entstand die Idee, die CCD-Werte als Add-In für Visual Studio bereitzustellen, so dass diese jederzeit in der IDE sichtbar und somit allgegenwärtig sind.

    Das Resultat ist das CcdAddIn, das hier heruntergeladen werden kann und sich in Visual Studio wie hier zu sehen, integriert:

    CcdAddIn_r5_600x532 

    Für die nächsten Releases ist geplant, das Add-In so zu erweitern, dass die tägliche Reflexion mit dem Add-In erledigt werden kann.

    Weitere Ideen können gerne hier diskutiert werden.

    Fehler können hier gemeldet werden.

    Currently rated 5.0 by 3 people

    • Currently 5/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5
    Tags: , | Posted by AlexanderZeitler on 2/20/2009 9:30 PM | Comments (7)

    Wenn man den SyntaxHighlighter von Alex Gorbatchev mit BlogEngine.NET verwenden möchte, sind einige Anpassungen nötig:

    Der einfachste Weg, den SyntaxHighlighter in BlogEngine.NET zu integrieren, ist, die SyntaxHighlighter Extension von Chris Blankenship gemäß Anleitung zu installieren.

    Danach muss noch die Konfiguration von BlogEngine.NET, genauer von Tiny_MCE, dem Editor, der bei BlogEngine.NET zum Einsatz kommt, angepasst werden.

    Zunächst muss im admin-Verzeichnis die tinyMCE.ascx angepasst werden:

    Die Zeile

    <script src="/admin/Pages/<%=Utils.RelativeWebRoot%>/editors/tiny_mce/tiny_mce.js" type="text/javascript">

    muss geändert werden in

    <script src="/admin/Pages/<%=Utils.RelativeWebRoot%>/editors/tiny_mce/tiny_mce_src.js" type="text/javascript">

    In der Datei editors\tiny_mce\tiny_mce_src.js muss nun der Eintrag

    pre[class|align|style]

    in

    pre[class|align|style|name]

    geändert werden.

    Außerdem muss die Zeile

    h = h.replace(new RegExp('\\n\\s+', 'gi'), '\n'); // Remove previous formatting

    auskommentiert oder gelöscht werden:

    // h = h.replace(new RegExp('\\n\\s+', 'gi'), '\n'); // Remove previous formatting

    Currently rated 5.0 by 1 people

    • Currently 5/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5