Rash thoughts about .NET, C#, F# and Dynamics NAV.


"Every solution will only lead to new problems."

Friday, 27. October 2006


Eine überwachte Kopierfabrik (3)

Filed under: C#,Tools — Steffen Forkmann at 15:50 Uhr

Nachdem ich nun schon 2 kleinere Artikel zur überwachten Kopierfabrik geschrieben habe (Teil 1 und Teil 2), folgt nun der dritten Teil. Heute soll kurz gezeigt werden wie man mit C# ein Eingangsverzeichnis überwachen kann und dann bei Änderungen per Mail informiert wird.

using System.Net.Mail; ... fileSystemWatcher.Created += new FileSystemEventHandler(fileSystemWatcher_Created); ... void fileSystemWatcher_Created(object sender, FileSystemEventArgs e) { MailMessage mailMessage = new MailMessage(from,to); mailMessage.Subject = string.Format("EntranceWatcher: {0}",e.FullPath); mailMessage.Body = string.Format( "Die Datei {0} wurde eben in ein Eingangsverzeichnis kopiert.", e.FullPath); SmtpClient smtpClient = new SmtpClient(smtpServer); smtpClient.Send(mailMessage); }

Microsoft Dynamics NAV 5 wird zweigeteilt

Filed under: msu solutions GmbH,Navision — Steffen Forkmann at 9:00 Uhr

Nachdem ich vor einer Weile schon auf die kommenden Änderungen in NAV 5 eingegangen bin, gibt es nun einen kleinen Nachtrag. Microsoft plant nun das Navision 5 Release in zwei Teile zu splitten. NAV 5.0 soll im März 2007 kommen und NAV 5.1 erst im vierten Quartal 2007. NAV 5.0 soll dabei alle C/SIDE-Features und die Office 2007-Integration enthalten. Erst mit NAV 5.1 kommen dann die versprochene 3-Tier-Achitektur und die WebServices.

Gleichzeitig soll im März auch eine Technical Preview von Microsoft Dynamcis NAV 5.1 angeboten werden, so dass die Partnerfirmen wenigstens schon mal reinschnuppern können.

Zu den Gründen für diesen Verzug gibt Microsoft an, dass man die Qualität hochhalten möchte und so die Partner auch mehr Zeit haben sich im neuen Thema zurecht zu finden. Mit anderen Worten: Es wird nicht rechtzeitig fertig.

Die wichtigsten Features in Nav 5.0:

  • Dokumentzustimmungsprozess (Aus WF und Sharepoint)
  • Windows Live Local (Anzeige von Orten auf Karten samt Routing)
  • Vorrauszahlungen bei Aufträgen und Rechnungen (prozentual oder betragsweise)
  • Office XML (Export nach Word oder Excel samt Style Sheets)
  • Outlook Integration

Quelle: Microsoft PartnerSource

Tags: ,

Thursday, 26. October 2006


Windows Desktop Search Version 3 auf deutsch released

Filed under: Tools — Steffen Forkmann at 10:25 Uhr

Microsoft hat die Windows Desktop Search Version 3 released. Der Vorteil ist, dass diese Version schon von Hause aus Visio, C#, C++ Files usw. schön getrennt spidert. Mit Hilfe des “Add-in for UNC/FAT” können sogar Netzlaufwerke gespidert werden. Das ist vor allem für Firmen interessant, da man so endlich Volltextsuche für die eigenen Office-Dokumente im Netzwerk hat.

Man kann wie in den älteren Versionen auch eigene PlugIns schreiben, um die Indizierung von eigenen Dateitypen zu unterstützen.

Die Google Desktop Search fliegt jetzt also erstmal wieder runter.

Tuesday, 24. October 2006


Windows Defender released

Filed under: Security,Tools — Steffen Forkmann at 14:18 Uhr

Seit gestern ist nun auch die kostenlose Anti-SpyWare Windows Defender als offizielles Release zum kostenlosen Download verfügbar. Microsoft gibt sogar 2 kostenlose Support-Anfragen dazu.

Features:

  • Spyware Erkennung und Entfernung
  • Läuft im Hintergrund und bleibt automatisch auf dem neuesten Stand durch automatische Updates
  • Sehr einfache Oberfläche
  • Sehr gute Performance durch optimierte Scan Technologie

Weiteres und den Download gibt es hier.

Nachtrag: Laut Windows Defender bin ich clean – nur der RSSBandit “könnte potentiell ungewolltes Verhalten verursachen”.  

Saturday, 21. October 2006


Eine überwachte Kopierfabrik (2)

Filed under: C#,Tools — Steffen Forkmann at 17:36 Uhr

Gestern habe ich über ein kleines Tool berichtet, dass wiederkehrende langwierige Kopierfunktionen für den Nutzer versteckt in den Hintergrund verlagert und so einen ganz deutlichen Performancegewinn darstellt.

Um das Tool auf dem Server effektiv nutzen zu können wird es natürlich als Windows Dienst ausgeliefert. Wie man aus seinem Projekt einen solchen Dienst macht, wird ganz ausführlich in einer Exemplarischen Vorgehensweise auf MSDN demonstriert.

Mit folgendem Code-Schnipsel kann man sogar das Tracing des Dienstes gleich auf das EventLog umleiten:

using System.Diagnostics; ... EventLogTraceListener eventlogListener = new EventLogTraceListener("DBCopyService"); Trace.Listeners.Add(eventlogListener); Trace.WriteLine("Tracing auf EvenLog");

Tracing in die Ereignisanzeige

Friday, 20. October 2006


Eine überwachte Kopierfabrik

Filed under: C#,Tools — Steffen Forkmann at 20:20 Uhr

Bei uns in der Firma haben wir das Problem, dass wir für Entwicklungstests oft große Navision-Datenbanken aus einem Original-Verzeichnis in unsere Testverzeichnisse auf dem Testserver kopieren müssen. Dies hat bisher immer sehr viel Zeit (bis zu 30min pro DB) in Anspruch genommen – Zeit in der man nur unproduktiv auf das Ende des Kopiervorgangs warten konnte. Mit Hilfe eines kleinen Tricks kann man diese Zeit jedoch für den Nutzer fast komplett auf Null reduzieren.

Wir haben jetzt folgende Verzeichnisstruktur (alles auf dem selben Server)

  • Original (hier liegen die Ausgangsdatenbanken)
  • Lager (dies ist ein überwachtes Zwischenverzeichnis)
  • Nutzer
    • Steffen
    • Maik
    • …

Die Idee ist nun, dass die Nutzer sich eine Datenbank bei Bedarf einfach aus dem Lager in ihren Nutzer-Ordner schieben. Dabei passiert auf dem Dateisystem ja kein Kopiervorgang – sondern nur ein sehr schneller Verschiebevorgang. Der Lager-Ordner wird jedoch von einem Mini-Tool überwacht. Dies hat den Vorgang registriert und kopiert nun im Hintergrund die Datenbank aus dem Originalverzeichnis ins Lager. Sobald dieser Vorgang abgeschlossen ist, kann der nächste Nutzer wieder schnell auf die DB im Lager zu greifen.

Nun zur Implementierung des Überwachungs-Tools in C#:

// Consolenstart static void Main(string[] args) { FDBWatcher fdbWatcher = new FDBWatcher(); Console.ReadLine(); } class FDBWatcher { private string warehousePath = @"C:\\Test\\Lager\\"; private string originalPath = @"C:\\Test\\Original\\"; private string targetEndingFilter = "*.fdb"; public FDBWatcher() { FileSystemWatcher fdbWatcher = new FileSystemWatcher( warehousePath, targetEndingFilter); fdbWatcher.EnableRaisingEvents = true; fdbWatcher.IncludeSubdirectories = false; fdbWatcher.Deleted += new FileSystemEventHandler(fdbWatcher_Deleted); Console.Write("FileSystem Watcher started"); } private void fdbWatcher_Deleted(object sender, FileSystemEventArgs e) { Console.WriteLine("File {0} deleted", e.FullPath); FileInfo oldFile = new FileInfo(e.FullPath); FileInfo originalFile = new FileInfo(originalPath + oldFile.Name); originalFile.CopyTo(oldFile.FullName); Console.WriteLine( "Copy {0} to {1}", originalFile, oldFile); } }

Wednesday, 18. October 2006


Beweis 1 = 2

Filed under: Quiz — Steffen Forkmann at 19:24 Uhr

In der neuen Kategorie “Quiz” möchte ich von Zeit zu Zeit kleine Rätsel anbringen.

Heute soll es um einen Beweis gehen der zeigt, dass 1 = 2 ist:

Der Beweis 1 = 2 Anmerkung: Auf der linken Seite stehen immer x Elemente ==> Erste Zeile gilt für alle x in N

Huch, was ist denn da passiert? Wer hat in Differentialrechnung gut aufgepasst und sieht den Fehler?

Monday, 16. October 2006


Navision das "überfleißige" Bienchen

Filed under: C#,Navision — Steffen Forkmann at 9:37 Uhr

Navision scheint auf “Lazy Evaluation” komplett zu verzichten und ganz fleißig jeden logischen Ausdruck bis zum Ende durchzurechnen.

Mit folgendem Beispiel kann man das leicht nachprüfen:

IF A AND B THEN MESSAGE('A and B'); ... PROCEDURE A@1000000001() : Boolean; BEGIN MESSAGE('A'); EXIT(FALSE); END; PROCEDURE B@1000000002() : Boolean; BEGIN MESSAGE('B'); EXIT(TRUE); END;

Wenn man diesen Code ausführt werden beide Messages (‘A’ und ‘B’) angezeigt, obwohl eigentlich nach Funktion A der Term A AND B schon als falsch ausgewertet werden kann. Wenn man selbiges Beispiel in C# aufschreibt wird übrigens nur A() ausgeführt:

if (A() && B()) MessageBox.Show("A and B"; ... bool A() { MessageBox.Show("A"); return false; } bool B() { MessageBox.Show("B"); return true; }

Ähnlich verhält es sich auch mit allen anderen logischen Ausdrücken – Navision rechnet bis ganz zum Ende alles durch.

Sunday, 15. October 2006


Was die Ferengi-Erwerbsregeln mit Software-Entwicklung zu tun haben

Filed under: Lustiges — Steffen Forkmann at 13:58 Uhr

Die Ferengi-Erwerbsregeln aus StarTrek haben viel mit Marketing und Verkauf zu tun, aber man kann auch einige nicht ganz ernst gemeinte “Lehren” für die Software-Entwicklung ableiten:

Regel 15: Sich dumm zu stellen ist oft klug.

In der Software-Entwicklung wird oft mit einer “BlackBox” gearbeitet, dass heißt man verzichtet absichtlich auf Informationen über die Implementierungsdetails einer Funktionaltität und vertraut darauf, dass die Funktion einfach das macht was drauf steht. 

Regel 17: Ein Vertrag ist ein Vertrag ist ein Vertrag.

Eine wichtiger Ansatz aus der Software-Entwicklung ist das ContractFirst-Design. Dabei wird besonders bei verteilten Lösungen darauf geachtet, dass Verträge in den Mittelpunkt gerückt werden. Insbesondere bei der WCF spielen DataContracts eine entscheidene Rolle.

Passend dazu: Slim Fit "Ein Vertrag..."
Ein Vertrag... Ferengi Erwerbsregel 17. » 16.90 EUR
Weitere Produkte gibt es im Shop.

Regel 32: Paß auf, was Du verkaufst; es könnte genau das tun, was der Kunde erwartet.

Wäre das nicht toll, wenn man das mal schafft und die Kunden komplett zu frieden stellt?

Regel 38: Kostenlose Werbung ist preisgünstig.

Jedes Produkt muss irgendwann an den Kunden gebracht werden – Werbung spielt natürlich eine entscheidene Rolle dabei. 

Regel 39: Lob ist billig; verteile es großzügig auf deine Kunden.

Gerade im Support kommt es darauf an die Kunden bei Lernerfolgen auch mal zu loben und für weitere Schritte zu motivieren.  

Regel 53: Verkaufe erst, frag später.

Diese oberste Regel des Vertriebs stellt die Entwickler oftmals vor arge Probleme. Würde der Vertrieb sie jedoch nicht befolgen, dann gäbe es oft kein Projekt.

Regel 57: Gute Kunden sind fast so rar wie Latinum; ehre sie!

Wenn man erstmal gute Kunden gefunden hat, die auch als Referenzen dienen und nicht wegen Kleinigkeiten ständig auf die Barrikaden gehen, sollte man sich die natürlich warm halten.

Regel 80: Wenn es arbeitet, verkaufe es. Wenn es gut arbeitet verkaufe es teurer. Wenn es nicht arbeitet, vervierfache den Preis und verkaufe es als Antiquität.

Kein Kommentar. 😉

Regel 116: Es gibt immer eine Alternative.

Für kaum ein Entwicklungsproblem gibt es DIE Lösung – die Suche nach Alternativen lohnt sich immer. 

Regel 122: Wenn der Kunde geht, geht auch der Profit.

Auch wenn es mal Probleme mit einigen Kunden gibt – man sollte immer daran denken, dass sie einem den Arbeitsplatz finanzieren.

Passend dazu: Slim Fit "Profit"
Profit Für die Ferengi unter Euch. » 15.90 EUR
Weitere Produkte gibt es im Shop.

Regel 132: Je begehrter das Produkt, desto teurer wird es.

Ganz wichtig: Gute Software verkauft sich besser als schlechte.

Regel 146: Verkaufe das Brutzeln, nicht das Steak.

Oder als Abwandlung: “Verkaufe das Melken nicht die Kuh.” bzw. auch bekannt als “Gillette-Prinzip”. Wenn man es schafft Kunden mit wiederkehrenden Gebühren zu belegen statt mit Einmalbeträgen macht man den meisten Profit. Prominentestes Beispiel ist da World of Warcraft.

Regel 189: Vergiß einen Handschlag – vertrau auf Geschriebenes.

Man sollte sich nie darauf einlassen wichtige Absprachen zum Beispiel nur telefonisch zu treffen. Man sollte immer ein Protokoll unterschreiben lassen. Das erspart viel Ärger.

Regel 241: Unterschätze niemals die Bedeutung des ersten Eindrucks.

Diese Regel ist besonders bei Oberflächen zu beachten.

Eine sehr ausführliche Liste der Ferengi-Erwerbsregeln ist übrigens hier zu finden. 

Tags: , , , ,

Saturday, 14. October 2006


10 Tipps für erfolgreiche Software-Entwicklung

Filed under: .NET,Informatik,Navision — Steffen Forkmann at 12:56 Uhr

In der Softwarentwicklung steht man oft vor den selben Problemen, sodass es wichtig ist sich an bestimmte Punkte zu erinnern und diese dann zu beherzigen. In meinem Artikel “10 Tipps für erfolgreiche Software-Entwicklung” beschreibe ich wie man mit wenigen Schritten seine Produktivität stark erhöhen kann. 

Die Tipps im Überblick:

  1. Versuchen Sie mindestens eine 11 im Joel-Test zu erreichen.
  2. Arbeiten Sie nach Entwurfsmustern und dokumentieren Sie Ihre Arbeit mit der Angabe des Musters.
  3. Dokumentieren Sie Ihre Arbeit vor der Implementation.
  4. Arbeiten Sie bei schwierigen Aufgaben die buganfällig sind immer zu zweit.
  5. Haben Sie Spaß an Ihrer Arbeit.
  6. Nutzen Sie die Community.
  7. Arbeiten Sie klare Workflows für Ihre Entwicklung heraus.
  8. Nutzen Sie intern immer die neuesten Versionen Ihrer Produkte.
  9. Arbeiten Sie nach einem klaren Zeitplan – aber planen Sie Zeit für Katastrophen ein.
  10. Nutzen Sie ein internes Wiki um einmal erforschte Sachverhalte abzuspeichern.

 Genauere Erklärungen dazu finden Sie im Artikel.