Oktober 23rd, 2009
Das 2. .Net Open Space in Leipzig ist vorbei. Es gab wieder einige interessante Diskussionen auch neben den einzelnen Sessions.
Unheimlich interessant waren die unterschiedlichen Meinungen zum EF von Microsoft.
Durch die Session “Die Attraktivität des Berufes als Softwareentwickler steigern” – eingeleitet von Ralf Westphal – wurde mir erst jetzt bewusst wie schlecht es eigentlich um die Quantität des Softwareentwicklers steht.
Sicherlich gibt es noch wesentlich mehr zu den einzelnen Sessions zu erzählen, aber mir fällt insgesamt nur Ausdruck für die gelungene Veranstaltung ein: EINFACH GENIAL!
Ich freu mich schon wieder auf nächstes Jahr – oder evtl. doch nach Wien? Man wird sehen.
Einen besonderen Dank gilt den Organisatoren Torsten Weber, Alexander Groß, Stefan Lieser und Marcel Hoyer.
Posted in .Net Open Space | No Comments »
Oktober 11th, 2009
Ich weiß, es gibt viele Artikel über das Loggen mit Log4Net.
Trotzdem werde ich anhand eines Beispiels das Loggen mit Log4Net zeigen.
Als erstes schauen wir uns die Konfigurations-Datei an.
1: <?xml version="1.0" encoding="utf-8" ?>
2: <configuration>
3:
4: <configSections>
5: <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
6: </configSections>
7:
8: <log4net>
9: <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
10: <file value="loglog-file" />
11: <appendToFile value="true" />
12: <rollingStyle value="Date" />
13: <datePattern value="yyyyMMdd" />
14:
15: <layout type="log4net.Layout.PatternLayout">
16: <conversionPattern value="%date [%thread] %-5level %logger [%property{Session}] - %message%newline" />
17: </layout>
18: </appender>
19:
20: <root>
21: <level value="ALL" />
22: <appender-ref ref="FileAppender" />
23: </root>
24: </log4net>
25:
26: </configuration>
Appender:
Ich verwende hier den RollingFileAppender, dieser kann nach Größe und Datum eingeschränkt werden. Ist die Größe erreicht bzw. hat sich das Datum geändert, wird eine neue Log-Datei angelegt. In dem Beispiel werden die Log-Files in einem Unterverzeichnis “log”
[file value=log\log-file”] im Programmverzeichnis abgelegt. Mit rollingStyle lege ich fest wann eine neue Datei erstellt werden soll. Hier wird jeden Tag eine Log-File erstellt. Festgelegt wird das mit dem datePattern.
Weitere Appender sind hier nachschlagbar.
Layout:
Für das Layout verwende ich das Patternlayout, ein flexibles konfigurierbares Layout. Weitere Layouts gibt es hier.
Unter conversationPattern kann die Ausgabe definiert werden. Welche Möglichkeiten für die Ausgabe vorhanden sind, findet man hier.
Im letzten Abschnitt wird bestimmt wie und was geloggt werden soll. Folgende Level-Stufen sind verfügbar:
- Off
- Fatal
- Error
- Warn
- Info
- Debug
- All
Mit appender-ref wird der oben definierte Appender verwendet. Es können natürlich mehrere Appender definiert werden.
Verwendung im Code:
1: static void Main()
2: {
3: log4net.Config.XmlConfigurator.Configure(new FileInfo("logging.config"));
4: ILog logger = LogManager.GetLogger(typeof(Program));
5:
6: logger.Info("Info");
7: logger.Debug("Debug");
8: logger.Error("Error");
9: logger.Fatal("Fatal");
10: logger.Warn("Warn");
11: }
In der dritten Zeile wird log4net konfiguriert, hierfür geben wir die “Config-Datei” an. Eine Zeile weiter wird der Logger geholt. Für jedes Level gibt es eine Methode.
Level:
Vielleicht sollte noch die Hierarchie verschiedener Levels erwähnt werden.
Info
1: 2009-10-11 18:36:32,305 [10] INFO WindowsFormsApplication1.Program [(null)] - Info
2: 2009-10-11 18:36:32,339 [10] ERROR WindowsFormsApplication1.Program [(null)] - Error
3: 2009-10-11 18:36:32,340 [10] FATAL WindowsFormsApplication1.Program [(null)] - Fatal
4: 2009-10-11 18:36:32,340 [10] WARN WindowsFormsApplication1.Program [(null)] - Warn
Debug
1: 2009-10-11 18:37:23,195 [9] INFO WindowsFormsApplication1.Program [(null)] - Info
2: 2009-10-11 18:37:23,228 [9] DEBUG WindowsFormsApplication1.Program [(null)] - Debug
3: 2009-10-11 18:37:23,228 [9] ERROR WindowsFormsApplication1.Program [(null)] - Error
4: 2009-10-11 18:37:23,228 [9] FATAL WindowsFormsApplication1.Program [(null)] - Fatal
5: 2009-10-11 18:37:23,228 [9] WARN WindowsFormsApplication1.Program [(null)] - Warn
Error
1: 2009-10-11 18:37:44,140 [9] ERROR WindowsFormsApplication1.Program [(null)] - Error
2: 2009-10-11 18:37:44,173 [9] FATAL WindowsFormsApplication1.Program [(null)] - Fatal
Anhand der Beispiele kann man erkennen, dass nicht nur das eingestellt Level geloggt, sondern hierarchisch vorgegangen wird.
Fazit:
Log4Net ist einfach und schnell einzusetzen. Durch die riesige Auswahl an Möglichkeiten des Loggings ist sicherlich für jeden was dabei.
Viel Spaß beim Loggen!
Posted in Log4Net, .Net | No Comments »
September 28th, 2009
Wie kann man ganz einfach eine generische Liste in ein “generisches DTO” wandeln? Diese Frage stellten wir uns letztens in der Arbeit. Nach mehreren Codezeilen um die generische Liste (manuell) zu mappen, waren wir der Meinung, dass es doch einfacher zu handhaben sein muss.
Nach einer längeren Recherche sind wir dann auf Transformers.AliasToBean gestoßen. Anbei ein kleines Beispiel für die Anwendung von Transformers.AliasToBean.
So könnte die Klasse “Auflage” aussehen:
Das dazugehörige DTO:
Da ich Fluent-NHibernate verwende, wird die Klasse wie folgt gemappt:
1: public class AuflagenMap : ClassMap<Auflage>
2: {
3: public AuflagenMap(){
4: Id(x => x.Id);
5: Map(x => x.Datum);
6: Map(x => x.Anzahl);
7: }
8: }
Mit Projections.Sum(“Anzahl”).As(“Auflage”) wird bestimmt wohin gemappt werden soll. “Anzahl” kommt aus “Auflage” und wird per Alias (“.As”) in das Property “Auflage gemappt. Das gleiche gilt natürlich auch für die Gruppierung nach Datum.
1: public IEnumerable<AuflageDto> AuflagenSummierung(){
2: var criteria = m_Session.CreateCriteria(typeof (Auflage))
3: .SetProjection(Projections.ProjectionList()
4: .Add(Projections.Sum("Anzahl").As("Auflage"))
5: .Add(Projections.GroupProperty("Datum").As("Datum")))
6: .AddOrder(Order.Asc("Datum"))
7: .SetResultTransformer(Transformers.AliasToBean(typeof (AuflageDto)))
8: .List<AuflageDto>();
9: return criteria;
10: }
Das Ergebnis sieht dann so aus:

Posted in NHibernate, FluentNHibernate, .Net | 1 Comment »
September 16th, 2009
Wolfgang Kluge hat eine neue Blog-Parade gestartet.
Über seinen Blog sucht er die beliebtesten Fachbücher aus dem .Net-Umfeld. Ich hab hier meine 3 Favoriten zusammengestellt.
1. Agile Principles, Patterns and Practices in C# [Robert C. Martin und Micah Martin]
In dem Buch geht es um die agile Software-Entwicklung mit verschiedenen Principles (SRP, OCP, LSP, DIP, usw.).
Des weiteren werden die Vorteile von agilen Arbeitstechniken, z.B. Pair-Programming, beschrieben.
Alle Beispiele in C# sind strukturiert und werden dem Leser einfach übermittelt.
2. Clean Code [Robert C. Martin]
Refactoring, Patterns, Testen und Techniken für sauberen Code in einem gut und ausführlich geschriebenen Buch. Ein muss für jeden Clean-Code-Developer.
3. Refactoring [Martin Fowler]
Verbessern Sie Ihren Code! – so die Einleitung von Martin Fowler. Refactoring ist schon lang nicht mehr nur für “Refactoring-Experten” gedacht, sondern jeder Entwickler muss dazu angehalten werden sauberen Code zu hinterlassen.
Das waren meine 3 Bücher, wobei es noch weitere im Repertoire gibt, z.B “DDD” von Eric Evens.
Posted in .Net | No Comments »
September 15th, 2009
Seit kurzem haben wir einen neuen Mitbewohner zu Hause.
Das ist das erste Bild unserer kleinen Katze (ca. 14 Wochen). Noch ist sie sehr schüchtern.
Da Katzen immer ein begehrtes Motiv sind, wird es demnächst hoffentlich wieder mehr Bilder zu sehen geben.
Übrigens: ihr Name ist Amy-Lou.
Posted in Privat | 1 Comment »
August 4th, 2009
Ich arbeite derzeit an einem kleinen “Spielprojekt” in WPF mit dem MVVM Pattern.
Für mich ist das der optimale Einstieg in WPF. Das Projekt ist klein, überschaubar und soll natürlich auch noch getestet sein. Das Projekt wird für einen 60. Geburtstag eingesetzt, also reines Vergnügen mit Weiterbildungsfaktor.
Folgende Aufgabenstellung (erinnert an “Wer wird Millionär”):
Ein Kandidat muss zehn Fragen zu einer bestimmten Person beantworten. Je Frage stehen 3 oder 4 Antworten zur Verfügung. Wurde eine Frage beantwortet, darf der Kandidat die nächste beantworten. Die Fragen sind wie bei WWM nach Schwierigkeitsstufen kategorisiert. Je mehr Fragen beantwortet wurden, desto schwerer die Fragenstellung. Fragen können nicht nur aus Textbausteine bestehen, sondern zusätzlich auch aus Videos oder Bildern.
Soweit die Aufgabenstellung, danach stellte sich die Frage, wie setze ich das Projekt um?
Da ich mich schon seit längerem für WPF interessiere, werde ich das Spiel in WPF mit dem MVVM Pattern versuchen umzusetzen.
Anfang:
Als erstes hab ich mir das WPF Model-View-ViewModel Toolkit von dieser Seite geladen. (geht auch ohne)
Das Toolkit beinhaltet folgendes:
- Template
- Dokumentation (unbedingt lesen)
- Demo
Die Installation dauert nicht lange und braucht hier nicht länger erklärt zu werden.
Das Template fügt sich wie in Abb. 1 in VS2008 ein.
(Abb. 1)
Anlegen eines neuen Projekts:
Nach dem ich das Template ausgewählt habe, gibt es die Möglichkeit automatisch ein Unit-Test-Projekt (Abb. 2) anzulegen. Da ich das Projekt manuell anlege, hab ich die Nachfrage verneint.
(Abb. 2)
Nach der Erstellung des Projekts wird folgende Struktur angelegt.
(Abb. 3)
Zu den einzelnen Klassen mehr dazu im nächsten Blogeintrag.
Posted in MVVM, Pattern, .Net | No Comments »
August 4th, 2009
Es ist wieder soweit. Am 17. + 18. Oktober 2009 findet das 3. .Net Open Space in Deutschland statt.
Wie letztes Jahr werde ich auch dieses Jahr wieder nach Leipzig reisen.
Was ist .Net Open Space?
Die Teilnehmer legen die Tagesordnung selbst fest. Die erste/n Stunde/n stellt sich jeder Teilnehmer kurz vor und danach wird eine Tagesstruktur erstellt. D.h. jeder Anwesende kann sich mehrere Themen aussuchen, diese auf einen Zettel schreiben und an eine Pinnwand hängen.
Nun wird ein Tagesplan (bei zu vielen Themen verschieben sich diese auf den nächsten Tag) mit den entstandenen Themen erstellt. Es gibt bei den einzelnen Sessions keinen Speaker, nur einen Moderator, der das Thema aufgegriffen hat. Jeder hat nun die Möglichkeit bei dem Thema anwesend zu sein, dass sein Interesse weckt. Es gilt übrigens das Gesetz der zwei Füße, d.h. man kann jederzeit eine Session verlassen und eine andere besuchen.
Mehr zum Thema “open space” könnt ihr hier nachlesen.
Posted in .Net Open Space | No Comments »
Juli 30th, 2009
Gelesen hab ich mittlerweilen einiges über die neue Suchmaschine von Microsoft.
Aber ist sie besser wie z.B. Google?
Punkte die für mich wichtig sind hab ich bei beiden Suchmaschinen verglichen.
Bing:
Schöner Hintergrund, ist aber für eine Suche nicht wichtig.
Hier zählt für mich nur der Nutzwert und nicht die Schönheit der Seite.
Der Suchmodus bei Bing ist allerdings besser angeordnet.
In Google muss man links oben klicken, bei Bing findet sich
der Modus direkt über der Texteingabe. Die Anordnung der Suchfunktionen
ähnelt aber sehr der von Google.
Bing
Google
- Suchergebnis
Für den Suchtest hatte ich “Nikola Tesla” eingegeben. Information zu “Nikola Tesla” findet ihr hier.
| bing |
Web: 1.320.000 Ergebnisse |
| |
Bilder: 46.900 Ergebnisse |
| |
Video: 2.470 Ergebnisse |
| Google |
Web: 2.430.000 Ergebnisse |
| |
Bilder: 385.000 Ergebnisse |
| |
Video: 3.960 Ergebnisse |
Auch hier liegt Google vorne. Die Anordnung der Ergebnisse ist bei beiden Suchmaschinen fast
identisch. Eine erweiterte Suche gibt es bei Bing erst bei der Ausführung der Suche, bei Google
hingegen kann die Suchoption von vornerein festgelegt werden.
Einstellungen für Bing können unter dem Menüpunkt “Extras/Einstellungen” und unter “Nur Deutsch” bearbeitet werden. In Google findet man diesen Punkt unter “Einstellungen”. Die Einstellungen beider Suchmaschinen sind wiederum fast identisch.
Auch wenn Google mehr Suchergebnisse bietet, stellt sich die Frage ob Qualität auch besser ist.
Posted in Allgemein | No Comments »
Juli 15th, 2009
Schönes Wetter + Geburtstag = gemütliches und romantisches Picknick mit meiner Frau am
Wasser.
Warum auch immer, aber irgendwie finde ich das Bild besonders gelungen.
PS: wir hatten auch etwas zu Essen dabei.
Posted in Privat | No Comments »
Juni 27th, 2009
Wer Urlaub am Gardasee machen will, dem kann ich nur einen Besuch im Safaripark “Parco Natura Viva” empfehlen.
Mit dem Auto fährt man wie bei einer Safari durch die einzelnen “Gehege”.
Der Park bietet einem an so nah wie möglich Tiere zu sehen, die man z.B. nur in Afrika sehen würde.
Hier ein paar Bilder:
Auch durch das Löwengehege wird mit dem Auto gefahren.
Noch konnte man das Nashorn nicht aus den Schatten locken…
… kaum gibt es Futter…
Weißer Pfau ( Pavo cristatus mut. alba) – entstanden durch eine Mutation.
Mehr Infos unter Blauer/weißer Pfau.
Den Tiernamen muss ich nochmals nachschauen.
Posted in Natur | No Comments »