Blog Home  Home Feed your aggregator (RSS 2.0)  
HP's Blog - Sunday, February 28, 2010
Hans-Peter Schelian's Weblog
 
# Sunday, February 28, 2010

Ich habe viele Links zu diesem Thema gefunden, aber leider war keiner dabei der mir wirklich in einem Artikel dazu verholfen hat SpamAssassin in eine hMailServer Installation zu integrieren. Mit ein wenig Recherche und dem guten alten “Try and Error Verfahren” habe ich eine einfache Möglichkeit gefunden SpamAssassin zusammen mit dem hMailServer zu verwenden.

Dieser Beitrag basiert auf den folgend aufgeführten Versionen der Produkte:

Und nun zur Schritt für Schritt Anleitung zur Einrichtung von SpamAssassin zusammen mit dem hMailServer:

1) Herunterladen aller benötigten Programme / Tools.

Siehe oben (SpamAssassin command-line-tools, sa-update ebenfalls ein SpamAssassin Tool und ein Hilfsprogramm um den SpamAssassin Deamon als Dienst unter Windows betreiben zu können.

2) Verzeichnisse erstellen

Wir erstellen 2 Verzeichnisse. das eine für SpamAssassin (z.B. D:\SA) das zweite für unser Tool RunAsSvc (z.B. D:\runassvc)

3) ZIP Archive auspacken

Die beiden SpamAssassin ZIP Archive kopieren wir in das Verzeichnis D:\SA und dort entpacken wir beide Archive, dabei können wir ruhig nach Aufforderung die Datei ssleay32.dll überschreiben, da sie in beiden Paketen in der gleichen Version enthalten ist.

Das Archiv mit dem RunAsScv Hilfsprogramm kopieren wir in das Verzeichnis D:\runasscv und entpacken den Inhalt in diesem Verzeichnis.

4) Registry Eintrag erstellen

Um von SpamAssassin eine Logdatei erstellt zu bekommen müssen wir bevor wir den Dienst einrichten einen Eintrag in die Registry hinzufügen.

Hierzu öffnen wir regedit und erzeugen unter dem Registry Schlüssel

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\

einen neuen Schlüssel mit dem Namen SPAMASSASSIN (oder jeder andere Name, jedoch ist darauf zu achten, dass dieser Name auch beim einrichten des Dienstes verwendet wird).

Unter diesem neuen Schlüssel:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SPAMASSASSIN

legen wir nun eine Neue Zeichenfolge mit dem Namen Application und dem nachfolgenden Inhalt an:

d:\sa\spamd.exe -l -s d:\sa\spamd.log --round-robin

5) Dienst installieren

Nun wechseln wir in das Verzeichnis d:\runasscv und starten dort das Programm RunAsSvc.Exe und füllen das sich öffnende Dialog wie nachstehend abgebildet:

 image

Der Dienst wird nachdem wir unsere Eingaben mit OK bestätigt haben installiert und sofort gestartet.

Eigentlich war das bis auf die Aktivierung des SpamAssassin in hMailServer alles.

Was noch bleibt ist die Aktualisierung des SpamAssassin einzurichten, entweder als geplanten Task oder einem anderen Tool welches Zeitgesteuert Programme ausführen kann.

Der Aufruf zum Update lautet wie folgt:

D:\SA\sa-update.exe --nogpg

-- Hoffe das hilft jemandem weiter --

Tips und Tricks | Server
Sunday, February 28, 2010 12:22:40 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]  
Autor: Hans-Peter Schelian  |  Trackback
# Saturday, February 27, 2010

Abfragen, in meinem Fall einige Views, haben plötzlich anstatt Sekundenbruchteile, Minuten gebraucht um ein Ergebnis zurückzugeben.
Das merkwürdigste aber daran war, wenn ich eine Datenbanksicherung auf einem anderen Server (sehr viel kleineren Server) zurückgespielt habe wurden die Abfragen wie gewohnt schnell ausgeführt.

Also lag die Vermutung nahe, dass es an diesem Server liegen muss und somit habe ich folgendes Versucht:

  • Ein Neustart des SQL Server (auch den ganzen Servers) – Kein Erfolg. :-(
  • Festplatte des Server defragmentiert (Natürlich vorher den SQL Server Dienst beendet, damit die Datenbankdateien selbst defragmentiert werden konnten) – Kein Erfolg :-(
  • Gesamt Konfiguration des Server mit einem Server der schnellere Ergebnisse geliefert hat verglichen (Alles OK) – Kein Erfolg :-(
  • SQL Profiler … Nein das ist Unsinn, denn die DB (also das Backup auf einem anderen Server läuft ja bestens) – Also Arbeit gespart :-)

Und dann bin ich auf diese Seite gestoßen und dabei auch auf den alles Entscheidenden Hinweis; die Statistiken.

Ein Aufruf der Gespeicherten Prozedur sp_updatestats hat dann den gewünschten Erfolg gehabt.

Die Abfragen geben nun wieder wie gewohnt schnelle Ergebnisse zurück.

Und falls ich damit niemand anderem helfen kann, so doch sicherlich mir selbst, wenn in einigen Monaten bei einer anderen Datenbank ein ähnliches Problem ansteht und ich dies hier schon wieder vergessen habe, und dann über meinen eigenen Blog Beitrag stolpere.

Tips und Tricks | Server | SQL Server
Saturday, February 27, 2010 11:01:08 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [2]  
Autor: Hans-Peter Schelian  |  Trackback
# Wednesday, January 13, 2010

Bei der Einrichtung des FileZilla FTP Server auf einem Windows Server (2003 oder 2008) kommt es immer wieder zu dem Problem, dass trotz scheinbar richtig eingerichteter Windows Firewall bei Verbindungsaufbau zum FTP Server folgender Fehler im FTP Client angezeigt wird:

Befehl:    MLSD
Antwort:    425 Can't open data connection.
Fehler:    Verzeichnisinhalt konnte nicht empfangen werden

 

Zuerst aber einmal die Information was mit scheinbar richtig eingerichteter Firewall gemeint ist:

Auf der Registerkarte “Ausnahmen” der Firewall Einstellungen gibt es den Eintrag “FTP-Server” und dieser wird auch meistens richtigerweise aktiviert, so dass der Port 21 über das Netzwerk (LAN, WAN, Internet) erreichbar ist.

image

Wenn man aber nun mit einem FTP Client versucht eine Verbindung herzustellen, dann kommt eben der weiter oben beschriebene Fehler.

Das Problem liegt daran, dass man zusätzlich zur Freigabe des Port 21 (FTP-Server) auch noch den FTP-Server Dienst freigeben muss damit der Zugriff auf den FTP Server funktioniert.

Hierzu ist noch folgendes Einzustellen:

Register “Erweitert” und dort Einstellungen:

image

In den Erweiterten Einstellungen ist dann noch der FTP-Server Dienst zu aktivieren.

image

Mit diesen Einstellungen sollte es dann funktionieren.

Tips und Tricks | FileZilla
Wednesday, January 13, 2010 6:48:00 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]  
Autor: Hans-Peter Schelian  |  Trackback
# Tuesday, January 05, 2010

Eigentlich wurde ja bereits mit der Version 5.0 erwartet, dass DotNetNuke nun endlich mehr Internationalität erhält.

Dem war aber nicht so, und mit der Version 5.0 wurden keinen echten Schritte in die Richtung Mehrsprachigkeit gegangen.

Mit der Version 5.2 beginnt nun aber tatsächlich der erste große Schritt in “diese Richtung” ich wollte eigentlich “richtige Richtung” schreiben, aber da bin ich mir noch nicht sicher, warten wir es ab. Leider, oder wie ich sagen würde, wie erwartet, geschieht dies nicht ohne das es dabei zu gravierenden Änderungen (Breaking Changes) in der Datenbankstruktur kommt.

Mit der Version 5.2.0 wird nun folgende gravierende Änderung vollzogen:

Die Tabelle Portals wird International.

Alle Informationen der Tabelle welche Lokalisierbar sein müssen wurden, in eine neue Tabelle PortalLocalization verschoben und alle Einstellungen aus der Tabelle wurden zusammen mit einem Sprachcode in die Portalsettings Tabelle verschoben.

Das ganze führt bei einigen Programmen (Beispielsweise sei hier das Document Exchange Module von Bring2Mind genannt) dazu, dass diese nicht mehr ohne Update mit DNN 5.2.X und höher betrieben werden können.

Sollte ein eigenes Modul von einer solchen Änderung betroffen sein, so sollte man sich die ebenfalls neuen Views (ja DNN verwendet nun auch Views)

  • vw_Portals (Alle Sprachen)
  • vw_PortalsDefaultLanguage (Standard Sprache entspricht der Lösung vor DNN 5.2)

ansehen.

Durch Verwendung einer dieser Views kann man durch einfache Änderung des Zugriffs von der Portals Tabelle auf eine dieser Views die notwendigen Informationen für sein Modul erhalten, ohne gleich die gesamte Lokalisierungsfunktionalität zu implementieren.

Fortsetzung folgt!!!

DotNetNuke | Entwicklung
Tuesday, January 05, 2010 12:11:00 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]  
Autor: Hans-Peter Schelian  |  Trackback
# Wednesday, December 30, 2009

Vor kurzem wurde im Zuge eines Projektes  (Unterstützung eines Entwickler Teams für eine Winform Anwendung im Logistikumfeld) unter anderem die Anforderung an mich heran getragen, dass der Kunde die Ansprechpartner für eine bestimmte Logistische Aktivität aus einer Combobox auswählen möchte.

Hierbei sollte in der Combobox, nicht nur ein Feld aus der Datenbank angezeigt werden, sondern die Anzeige sollte aus insgesamt 2 Feldern zusammengebaut werden.

Das Format sollte so aussehen: Nachname, Vorname

Hier ein Beispiel:

Mustermann, Hans

Dabei sollte die Lösung vollkommen im Client implementiert sein und nicht durch eine geänderte Abfrage der Datenbank realisiert werden.

Nun ist es aber so, dass man dem DisplayMember nur ein Feld der Datengebundenen Tabelle (Objekt) zuweisen kann und nicht mehrere oder sogar wie hier gewünscht diese Felder auch noch in einem bestimmten Format.

Sicherlich könnte man sich ein eigenen Objekt (List Objekt) erzeugen welches man dann als Datenquelle für die Bindung verwendet, aber es geht auch (viel) einfacher.

Hierzu verwenden wir dem Format Event der Combobox.

Dieser Event bekommt zwei Parameter mit übergeben:

object sender

ListControlConvertEventArgs e

Wobei wir für die hier beschriebene Lösung lediglich den ListControlConvertEventArgs Parameter benötigen und auch verwenden.

in e.ListItem wird das Datengebundene Objekt übergeben und in e.Value kann man den gewünschten Wert zurückgeben.

Hier ein zusammenhängendes Beispiel:

private void cmbSpediteurKontakt_Format(object sender, ListControlConvertEventArgs e)
{
	// Hier caste ich mir den übergeben Wert in das original Objekt
	var spediteurKontakt = ((SpediteureKontakte) e.ListItem);  
	// Und nun bastele ich mir die gewünschet Anzeige zusammen
	e.Value = String.Format("{0}, {1}", spediteurKontakt.Nachname, spediteurKontakt.Vorname);
}

Und das Ergebnis sieht dann so aus:

image

Tips und Tricks | C#
Wednesday, December 30, 2009 3:07:00 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]  
Autor: Hans-Peter Schelian  |  Trackback
# Wednesday, November 25, 2009

Seit Heute Morgen ist der erste Release Kandidat der neuen 3.0 Version von Thunderbird verfügbar.

Einen direkten Link zum herunterladen konnte ich zwar nicht finden, aber wer die Beta 4 auf einem Rechner hat, kann mit dem “Auf Update prüfen” seine Version aktualisieren.

Auf dieser Seite finden man die Links zu den Downloads.

Kurz und Bündig | Thunderbird
Wednesday, November 25, 2009 7:29:08 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]  
Autor: Hans-Peter Schelian  |  Trackback
# Tuesday, October 27, 2009

Seit ein paar Wochen habe ich eine Logitech MX 3200 Laser Tastatur / Maus Kombination im Einsatz.

Außer der störenden Zoomfunktion am linken Rand bin ich auch sehr zufrieden.

Verzweifelt habe ich nach einer Lösung gesucht diese Zoom Funktion zu deaktivieren und habe nichts gefunden.

Heute bin ich dann durch Zufall auf die Lösung gestoßen.

Hier der Link zur Web Seite mit der Lösung

Besten Dank an Cord-Heinrich Pahlmann

Tips und Tricks
Tuesday, October 27, 2009 3:05:00 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]  
Autor: Hans-Peter Schelian  |  Trackback
# Tuesday, September 29, 2009

In einer Windows Anwendung wird in einer Form unter anderem ein (eigentlich sind es zwei, aber dazu später mehr) DateTimePicker verwendet um Termine einzugeben.

Da der DateTimePicker nicht gerade komfortabel ist um sowohl Datum als auch Uhrzeiten einzugeben, wird ein DateTimePicker in der Option DropDownCalender (das ist deaktivierte Eigenschaft ShowUpDown) eingesetzt um das Datum elegant aus dem DropDownCalender auszuwählen und ein zweites DateTimePicker Control mit der gesetzen Eigenschaft ShowUpDown und dem entsprechenden Custom Format HH:mm um nur die Uhrzeit mit den Pfeilen hoch und runter einstellen zu können.

image

Nun ist es aber so, dass man im DateTimePicker keinen Inkrement Wert eingeben kann, um den die Minuten erhöht bzw vermindert werden wenn man einmal auf den Pfeil hoch oder runter klickt. Somit wird jeweils um eine Minute hoch oder runter gezählt.

In meinem Fall nun wollte der Kunde aber das Termine nicht Minutengenau sondern immer auf 15 Minuten (Viertelstunde) Basis, also 00, 15, 30 und 45 erfasst werden können.

Da ich nicht gleich ein eigenen Control entwickeln wollte, habe ich einfach eine kleine Routine in den Change Event des DateTimePicker eingebaut.

Nachfolgend der Code Ich denke die Routine ist selbsterklärend

private void startzeitTimePicker_ValueChanged(object sender, EventArgs e)
{
    DateTimePicker dtp = (DateTimePicker)sender;
    // Wenn nicht Minute nicht 0,15,45 oder 60 dann müssen wir was tun
    if ((((dtp.Value.Minute != 0) && (dtp.Value.Minute != 15)) && (dtp.Value.Minute != 30)) &&
        (dtp.Value.Minute != 45))
    {
        // Auch noch einfach, nur 14 Minuten drauf und gut ist
        if ((dtp.Value.Minute == 1) || (dtp.Value.Minute == 16) || (dtp.Value.Minute == 31) || (dtp.Value.Minute == 46))
        {
            dtp.Value = dtp.Value.AddMinutes(14);
        }
        else
        {
            // Zeit wurde heruntergezählt.
            if ((dtp.Value.Minute == 14) || (dtp.Value.Minute == 29) || (dtp.Value.Minute == 44) || (dtp.Value.Minute == 59))
            {
                int x = 14;     // Deshalb auf jeden Fall mal 14 Minuten abziehen,
                if (dtp.Value.Minute == 59)  // und wenn die Minuten auf 59 stehen, dann muss noch eine Stunde (60 minuten) mehr abgezogen werden
                {
                    x += 60;
                }
                dtp.Value = dtp.Value.AddMinutes(-x);
            }
            else // Wert muss manuell eingegeben worden sein, dann runden wir auf die nächst höhere Viertelstunde
            {
                for (int i = 0; i < 15; i++)
                {
                    int x = dtp.Value.Minute + i;
                    if ((x == 15) || (x == 30) || (x == 45) || (x == 60))
                    {
                        dtp.Value = dtp.Value.AddMinutes(i);
                        break;
                    }
                }
            }
        }
    }
}

Hoffe das hilft dem einen oder anderen (Oder mir selbst beim nächsten mal wenn ich vor dem gleichen Problem stehen Wink)

Code | Tips und Tricks | C#
Tuesday, September 29, 2009 12:39:00 PM (W. Europe Daylight Time, UTC+02:00)  #    Comments [0]  
Autor: Hans-Peter Schelian  |  Trackback
Copyright © 2010 Hans-Peter Schelian - Schelian IT Beratung. All rights reserved.