Der Weg zum eigenen Mailserver mit einem abgesicherten Zarafa Server

Im Rahmen dieses „Tutorials“ werde ich die Installation sowie Einrichtung eines Zarafa-Servers zusammen mit Postfix und SASL-Authentifizierung erläutern. Auch werde ich die Thematik der Absicherung in Form von SSL/TLS Kommunikation und einer Sperre nach X-Fehlversuchen erläutern. Voraussetzung für diese Anleitung ist eine gewisse Grundkenntnis für Debian bzw. Ubuntu und die damit zusammenhängenden Befehle. Sollten Fehler oder Probleme mit dieser Anleitung in Verbindung stehen, bitte ich Sie um Rückmeldung, damit ich diese beheben kann. Ansonsten hoffe ich natürlich das ich damit den ein oder anderen auf dem Weg zum eigenen Mailserver weiterhelfen kann. Eins noch vor weg: Wenn Sie einen eigenen Mailserver betreiben, müssen Sie sich auch über die Absicherung des Servers informieren und im Klaren sein. Ein ungeschützt nutzbarer SMTP kann einen unschönen Effekt erzielen. Er könnte unter anderem als Spam-Schnittstelle für Bots genutzt werden. Die gesamte Anleitung basiert auf Zarafa 7.1.3, bei anderen Versionen ist die Gültigkeit dieses Tutorials nicht garantiert.

 

Share-Online Weiterlesen

Der Weg zum eigenen MVVM-Framework – Part 4 (Einbindung der Services-Funktionalität)

Weiter geht es mit unserer Reihe zum eigenen Framework. Dieses Mal kümmern wir uns um die Einbindung unserer Service-Funktionen. Also quasi das Registrieren, das rückgängig machen einer Service Registration sowie das holen von Services. Aber zunächst einmal sollten wir klären, was ein Service ist. Ein Service ist ein Dienst, welcher innerhalb einer gewissen Gültigkeits-Reichweite definiert wird. In diesen Fall sind die Services alle für die Applikation und auch nur innerhalb dieser sichtbar. Hierbei sollte man wissen, dass dies bei unserer Umsetzung nicht mehr darstellt als eine Interface gesteuerte Singleton Sammlung unserer Klassen. Auch wird dies nun das Komplexeste, was unser Framework bisher zu bieten hat. Erneut werden wir wieder so vorgehen, das zunächst die Definitionen erfolgen anschließend die Tests und zum Abschluss die Implementierung. Ebenfalls sollte beachtet werden, dass das Wissen aus diesen Part noch relevant sein wird in zukünftige Parts. Aber nun gut lasst und das proggen beginnen!
Weiterlesen

Der Weg zum eigenen MVVM-Framework – Part 3 (Einbindung der Core-Funktionalität)

Dieses Mal wollen wir uns darum kümmern, die noch offene Kern-Funktionalität komplett einzubinden. Dies wäre jedoch für die erste Version dieses Frameworks lediglich eine Klasse welche die Standard.NET-String-Klasse um einige Funktionen erweitert. Aber nichts des so trotz lasst und damit beginnen, den auch diese Klasse will erst mal geschafft sein! Beginnen wir also erneut damit, zunächst die Ordner Struktur festzulegen, in welcher unsere Klasse einmal liegen soll.Anschließend werden wir wieder die leere Klasse definieren. Wenn dies auch geschehen ist, wird es aufgrund des Grey-Box-Testverfahren dazu übergehen, die UnitTests zu implementieren. Und zu guter Letzt wird natürlich wieder die eigentliche Funktionalität implementiert. Nun gut, also lasst uns beginnen!
Weiterlesen

Der Weg zum eigenen MVVM-Framework – Part 2 (Implementierung bestehender Funktionen)

In diesen Part kümmern wir uns um die Einbindung der bereits im Blog entstanden Funktionen (ViewModel, ExtendedPropertyBase sowie PropertyChangedBase). Um hierbei den Grey-Box-Verfahren zu entsprechen, werden zunächst alle Grundgerüste der Reihe nach angelegt, anschließend die UnitTests und erst dann die Implementierung der Funktionalität. Beginnen wir mit der Definition, was sinnvoll zu testen ist. Zunächst ist es natürlich Sinnvoll unsere beiden Property-Klassen “PropertyChangedBase” sowie “ExtendedPropertyBase” nahezu vollständig zu testen (AusnahmeDispose). Aber was ist mit unserer ViewModel-Klasse? Hier finde ich, sind Tests un-sinnvoll Die nötigen Tests wären aufgrund der Asynchronität komplex und da wir nur fertige .NET-Funktionen direkt aufrufen, ist das testen auch nahe zu unsinnvoll.  Weiterlesen

Der Weg zum eigenen MVVM-Framework – Part 1 (Projektstruktur)

Im ersten Schritt auf dem Weg zum eigenen MVVM-Framework liegt neben der Planung auch schnell die Projektstruktur. In diesen Tutorial werde ich jedoch die bereits erledigte Planungsphase Stück für Stück mit den passenden „Tutorial“-Part veröffentlichen. Auch möchte ich darauf Hinweisen, dass es Hilfreich ist folgende Posts zunächst zu lesen, bevor Ihr mit diesen fortfahrt:

Bitte beachtet hierbei das ebenfalls bereits ein Grundverständnis für C# und .NET Framework bestehen sollte. Hier reichen allerdings Grundkenntnisse. Nun gut, fangen wir an mit unserer Projektstruktur.

Zunächst einmal hätten wir da unseren Aufbau. Dieser ist das Elementarste überhaupt im Framework, den nur wer weiß wo sich was befindet kann auch damit Arbeiten. Zunächst habe ich mir deshalb darüber Gedanken gemacht, welche Projekte es geben soll und wie diese zusammenhängen. Siehe hierfür die folgende Grafik.

Aufbaustruktur.png

Aufbaustruktur des SmallMvvm-Frameworks

Nun gut, was haben wir hier also nun. Weiterlesen

Ankündigung eines MVVM-Frameworks

Da es ja nun bereits einige Mails sowie Rückmeldungen in diversen Foren gab und auch ein kleinen Qualitäts hinweis, vielen Dank an HalloWorld an dieser Stelle, habe ich mich nun dazu entschlossen ein OpenSource MVVM-Framework zu Entwickeln welches die nächsten Blog-Posts begleiten wird. Dabei werde ich die Aspekte von TestDriven (Grey-Box) berücksichtigen und genau mein Vorgehen erläutern. Ich hoffe zum einen das ich damit die Qualität und Einzigartigkeit des Blogs verbessern kann aber vor allem natürlich anderen damit helfen kann.

Nähere Informationen zu den Projekt findet ihr im Redmine: https://redmine.kruse-familie.eu/projects/small-mvvm (Anmeldung benötigt)  Weiterlesen

Falscher Thread? Kein Problem!

Hmpf.. mal wieder eine Exception wegen einer Aktion aus einem falschen Thread? Wiedermal notwendige Asynchronität die dennoch der Entwicklung im Weg steht. Naja viele kennen dieses Problem bereits und jeder hat seine Lösungen hierfür. Allerdings ist dies oft so das es sich bei diesen „Lösungen“ um Copy&Paste handelt, welches nicht zwingend zur Wartbarkeit von Sourcecode beiträgt. Wie wäre es jetzt also, wenn wir eine Klasse hätten welche unsere Aktionen mit dem richtigen Thread Synchronisiert? Das wäre doch fantastisch, oder etwa nicht? Exakt eine solche Klasse befindet sich in vielen MVVM-Frameworks und auch außerhalb solcher Frameworks ist diese immer mal wieder eine große Hilfe. Den asynchrone Operationen lassen sich nicht vermeiden, spätestens wenn längere Prozesse direkt vom GUI-Thread gestartet werden und dies die Benutzeroberfläche einfriert ist Asynchronität gefragt. Allerdings möchte man hier auch wenn die Daten sich verändern, dass die Benutzeroberfläche dies soweit mit bekommt. Hierfür haben wir zwar bereits eine PropertyChangedBase-Klasse gebaut, aber diese ist nun mal nicht in der Lage Aktionen aus anderen Threads durchzuführen.  Weiterlesen

Test-getriebene Entwicklung

Test-getriebene Entwicklung bezeichnet den Vorgang Software mit automatisierten Softwaretests zu erstellen. Im Bereich von C# mit .NET wird hierfür meistens NUnit verwendet und dies ggf. mit TestDriven.Net. Test-getriebene Entwicklung unterteilt sich in sogenannte „Box“-Methoden und zwar genau in drei. Hier wäre zunächst der Black-Box-Test, der Grey-Box-Test und zu guter letzt der White-Box-Test. Um Test-getrieben entwickeln zu können, muss man sich dieser Methoden in klaren sein und diese Beherrschen.  Weiterlesen

Model-View-ViewModel (MVVM)

Beim Model-View-ViewModel (MVVM) ist eine Architektur um Software zu entwickelt. Hierbei gibt es eine klare Trennung zwischen Daten und Funktionalität hin zur Benutzeroberfläche. Zusammen mit MVVM empfiehlt es sich auch noch Test getriebene Entwicklung zu betreiben um so die maximale Qualität der Software zu sichern. Die hierbei entstehende Aufteilung soll uns die folgende Grafik näher erläutern.

Aufbaustruktur von MVVM.

Aufbaustruktur von MVVM.

Weiterlesen

Fehler in Mercurial 2.5

In der aktuellen Version von Mercurial (2.5) hat sich ein fieser Fehler eingeschlichen. So erhält gibt das Anfragen eines „Pulls“ oder eines „Pushs“ stehts den HTTP-Fehler 500 zurück. Ein baldiger fix wurde bereits Angekündigt in Version 2.5.1. Bis dahin kann nur gehofft werden, das die Aktualisierungen sich auf wenige Beschränken und somit möglichst wenig Personen Betroffen sind.  Weiterlesen