Archive for the ‘Programmieren’ Category

Fluent NHibernate

No Comments »

Habt ihr Euch auch schon einmal darüber geärgert, wieder diese unschönen XML-Dateien für das Mapping von NHibernate schreiben zu müssen? Seit kurzem gibt es gegen diese Unschönheit eine Lösung. Fluent NHibernate bietet Euch die Möglichkeit Eure Mappings “strongly typed” zu definieren. Anstatt der hbm.xml-Datei gibt es mit Fluent NHibernate eine Mapping-Klasse.

Die Klasse Person mit einer Liste von Adressen

    public class Person
    {
        public virtual Guid PersonId { get; set; }
        public virtual string Vorname { get; set; }
        public virtual string Nachname { get; set; }
        public virtual IList<Adresse> Adressen { get; set; }
    }

kann dann wie folgt gemappt werden.

    public class PersonMap : ClassMap<Person>
    {
        public PersonMap()
        {
            Id(x => x.PersonId)
                .GeneratedBy
                .GuidComb()
                .WithUnsavedValue("00000000-0000-0000-0000-000000000000");
 
            Map(x => x.Vorname).WithLengthOf(50);
            Map(x => x.Nachname).WithLengthOf(50);
 
            HasMany<Adresse>(x => x.Adressen)
                .Access.AsProperty()
                .AsBag().WithKeyColumn("PersonId")
                .Cascade.All();
        }
    }

Aber welche Vorteile biete die Fluent-Variante?

1. Die XML-Mapping-Dateien können nicht vom Compiler geprüft werden. Fehlkonfigurationen fallen erst zu Laufzeit auf (Exception)
2. Mapping-Klassen werden wie alle anderen Klassen vom Compiler geprüft. Fehler fallen zu Entwurfszeit auf.
3. Beim Umbennen von Feldern in Klassen über die Refactoring-Möglichkeiten von Visual Studio bzw. Erweiterungen werden die Felder in den Mapping-Klassen ebenfalls umbenannt. Bei den XML-Mappings müsste das händisch gemacht werden.
4. Fluent-Mappings sind deutlich kürzer bzw. deutlich besser lesbar.

Auch die Konfiguration von NHibernate kann über eine FluentVariante realisiert werden.

    ISessionFactory sessionFactory = Fluently
        .Configure()
        .Database(SQLiteConfiguration.Standard.UsingFile("Beispiel.db"))
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Person>())
        .BuildSessionFactory();

Unter http://fluentnhibernate.org/ kann man sich die aktuelle Version der NHibernate-Erweitung laden und mit der neuen XML-freien Variante von Mappings anfreunden.

Das komplette Beispiel gibt es hier.


HudsonTray – A Hudson Tray Application

No Comments »

Unsere Java-Truppe hat uns vor ein paar Tagen ihren Continuous Integretion Server Hudson gezeigt. Wir waren sehr davon angetan, wie einfach dieses System zu bedienen ist. Als sie uns sagten, das Hudson auch .net-Projekte bauen kann, wurden wir hellhörig.
Kurze Zeit später hatten wir auf einer VM ein Testsystem online, welches für erste Vergleichstest herhalten musste. Der erste Eindruck von der einfachen Bedienung bestätigte sich bei jedem neuen Projekt, das wir im System hinterlegten. Auch das Thema Unit-Test mit NUnit wird durch ein Add-In für Hudson unterstützt. Wer mal etwas tiefer in die Konfiguration von Jobs schauen möchte, kann ja mal hier gucken :-)

Das einzige, was mir persönlich nicht so gut gefiel, war die Tatsache, das es keine brauchbare Tray-Anwendung zur Darstellung des Status gab. Ich persönlich bin kein großer Freund von Mail-Benachrichtigungen.

Nach kurzem Durchsuchen der Hudson-Seite wurde ich auf die bereitgestellt API aufmerksam… und ein paar Abende später, war die erste Version meiner Tray-Anwendung fertig.

HudsonTray-Jobs

Wer mehr sehen will, kann sich auch auf CodePlex die aktuelle Version oder auch den Source-Code runterladen.


TabStop in WPF

1 Comment »

Mir stellte sich gerade die Frage, wie ich in WPF definieren kann, ob der Cursor mit Tab in ein Control springt oder nicht. Nach etwas längerem Suchen habe ich dann die Lösung gefunden:

<TextBox KeyboardNavigation.IsTabStop="False" />

Einfach im Xaml als Attribute hinzufügen.


WpfSimpleChart

No Comments »

Ich arbeitet zur Zeit in der Firma an einem Prototypen für eine neue Softwareversion. Eine Anforderung ist die transparente Darstellung von mehreren Werten in einem Balken-Diagramm. Leider gibt es für Wpf noch keine freien Komponenten, die für meine Aufgabe nutzbar wären.
Abends kam mir dann die Idee, das Problem selbst zu lösen. Gesagt getan… nach einigen kleinen oder auch großen Kämpfen mit Wpf und Xaml habe ich heute endlich eine in meinen Augen vorzeigbar Version fertiggestellt.

WpfSimpleChart – Source
WpfSimpleChart – Demo


Neue AvalonDock Version

2 Comments »

Wer im Netz nach guten Komponenten für Wpf sucht, gibt schnell sehr viel Geld aus. Das es auch anders geht, beweist uns AvalonDock. Von der Docking-Komponente für Wpf ist heute eine neue Version herausgekommen. Diese kann auf Codeplex heruntergeladen werden.
Neben einigen Bugfixes gibt es nun auch eine Dokumentation. Neben der Komponente gibt es auch noch ein sehr schönes Beispiel, welches einem die wesentlichen Funktionen sehr veranschaulicht.

Ich kann nur sagen: Danke und weiter so!!!
AvalonDock


Joomla 1.5 Module für die Phoca Gallery – Teil 2

No Comments »

Weil ich gerade so schön am Module-Programmieren war, hier auch gleich das nächste:

Ein Module für die Phoca Gallery, das die letzten Galerien anzeigt:
20080710_joomla_phoca_gallery_module_last_frontend.jpg

Und hier ein Blick auf das Backend:
20080710_joomla_phoca_gallery_module_last_backend.jpg

Hier der Download: mod_phocagallery_last.zip


Joomla 1.5 Module für den FlamPlayer

No Comments »

Im Zuge meines Umzugs auf Joomla 1.5 musste natürlich auch das Module für die Anzeige der letzten mp3 des FlamPlayers (Link) auf Joomla 1.5 portiert werden.

Hier das Frontend:
20080710_joomla_module_flamplayer_frontend.jpg

Und hier das Backend:
20080710_joomla_module_flamplayer_backend.jpg

Wichtig ist hierbei, das die FlamPlayer-Installation in der selben Datenbank, wie Joomla liegt.

Hier der Download: mod_flamplayer.zip


Joomla 1.5 Module für die Phoca Gallery

No Comments »

Schon seit etwas längerer Zeit über lege ich, wie ich meine Konzertfoto-Seite (www.punk-and-roll.de), die zur Zeit auf der 1.0.x Version basiert, auf die aktuelle Version 1.5 von Joomla portiere.
Da ich keinen alten Joomla 1.0x-Code auf der neuen Seite haben will, bin ich gezwungen, eine neue Galerie für die ca. 5800 Bilder zu finden. Meine Wahl ist auf die Phoca Gallery (www.phoca.cz) von Jan Pavelka gefallen. Die Galerie bietet eigentlich alles, was ich für meine Konzertfotos brauche. Das einzige, was mir fehlte, war ein Module, das mehr als nur ein Bild per Zufall anzeigen kann.
Nach kurzem Suchen im Forum der Phoca-Seite, kam ich zum Schluß, dass ich dieses Module wohl selbst schreiben muss.
Auf Basis des originalen Modules hier nun das erste Ergebnis:
Frontend
Und hier ein paar neue Einstellungen im Backend:
Backend

Und downloaden kann man das ganze hier: Download

Über Anregungen zu dem Module würde ich mich sehr freuen.


Sortieren der Objekte einer gebunden WPF-ListBox

No Comments »

Und wieder einmal musste ich “recht” lange suchen um eine vermeidlich einfache Problematik zu klären. Diesmal wollte ich per Button die Einträge einer WPF-ListBox aufwärts bzw. abwärts sortieren.
Hier das Formular:
ListBoxBinding
Bei den Items der ListBox handelt es sich um eine ObservableCollection, die ich über die Eigenschaft ItemsSource an die ListBox gebunden habe.
Im Eventhandler der Buttons habe ich folgenden Code hinterlegt:

lbxProjects.Items.SortDescriptions.Clear();
lbxProjects.Items.SortDescriptions.Add(new SortDescription("ProjectName", ListSortDirection.Ascending));
lbxProjects.Items.SortDescriptions.Add(new SortDescription("Count", ListSortDirection.Ascending));

bzw.

lbxProjects.Items.SortDescriptions.Clear();
lbxProjects.Items.SortDescriptions.Add(new SortDescription("ProjectName", ListSortDirection.Descending));
lbxProjects.Items.SortDescriptions.Add(new SortDescription("Count", ListSortDirection.Descending));

Über die Eigenschaft “SortDescriptions” kann man sehr komfortabel festlegen, wie die Liste sortiert werden soll. In meinem Beispiel sortiere ich zuerst nach dem Projektnamen und dann nach der Anzahl, wodurch sich folgendes Bild ergibt:
ListBoxBinding2

Hier der Source für Visual Studio 2008: Download


Binding eines Enums an mehrere RadioButtons

1 Comment »

Bei einem meiner WPF-Projekte ergab sich die Problematik, das ich ein Enum an mehrere RadioButtons binden wollte. Nach recht langer Suche und einigen Versuchen habe ich einen Lösungsweg gefunden, den ich hier an einem kleinen Beispiel zeigen will. Den Source für den ValueConverter habe ich mir nicht ausgedacht. Beim googlen nach der Lösung habe ich durch Zufall diese Seite gefunden und den darauf befindlichen Source verwendet.

Ausgangspunkt ist einen kleine Klasse und ein Enum

public enum ProjectStatus 
{
    InVorbereitung,
    InArbeit,
    Abgeschlossen
}
 
public class Project
{
    public string ProjectName { get; set; }
    public ProjectStatus Status { get; set; }
}

Read the rest of this entry »