Otrkey Dateien per Doppelklick mit dem Multidecoder öffnen

In der Registry muss der Parameter -f eingefügt werden, damit nicht nur das Multidecoder Programm startet, sondern auch noch die angeklickte Datei öffnet.

Registry Pfade:
HKEY_CLASSES_ROOT\otrkey_auto_file\shell\open\command
HKEY_CLASSES_ROOT\Applications\Multidecoder.exe\shell\open\command

Zeichenfolgen Name: (Standard)
Im Wert den Parameter -f vor „%1“ einfügen.

Beispiel:
„C:/Programme/Multidecoder/Multidecoder.exe“ -f „%1“
(Pfad zum Dekoder muss angepasst werden!!)

Die Definition von schlechtem Design

The most common criterion that I have seen used is the TNTWIWHDI or “That’s not the way I would have done it” criterion.

But there is one set of criteria that I think all engineers will agree with. A piece of software that fulfills its requirements and yet exhibits any or all of the following three traits has a bad design.

  1. It is hard to change because every change affects too many other parts of the system.
    (Rigidity)
  2. When you make a change, unexpected parts of the system break.
    (Fragility)
  3. It is hard to reuse in another application because it cannot be disentangled from the current application.
    (Immobility)

Moreover, it would be difficult to demonstrate that a piece of software that exhibits none of those traits, i.e. it is flexible, robust, and reusable, and that also fulfills all its requirements, has a bad design. Thus, we can use these three traits as a way to unambiguously decide if a design is “good” or “bad”.

Quelle: Robert C. Martin, http://www.objectmentor.com/resources/articles/dip.pdf

Wissen ist Macht! Zu viel Wissen schadet.

In einem klassisch aufgebauten OO-System ist jedes Objekt selbst dafür zuständig, seine Abhängigkeiten, also benötigte Objekte und Ressourcen, zu erzeugen und zu verwalten. Dafür muss jedes Objekt einige Kenntnisse seiner Umgebung mitbringen, die es zur Erfüllung seiner eigentlichen Aufgabe normalerweise nicht benötigen würde. Insbesondere muss es, um die entsprechenden Objekte erzeugen zu können, ihre konkrete Implementierung kennen.

Ein Implementierungsbeispiel mit dem ASP.NET MVC Framework, dem DI Framework StructureMap 2.0 in C# und etwas TDD:

http://haacked.com/archive/2007/12/07/tdd-and-dependency-injection-with-asp.net-mvc.aspx

Mehr: http://de.wikipedia.org/wiki/Dependency_Injection

Test Driven Development (TDD) mit dem Visual Studio .NET

Mit dem Visual Studio 2008 (Version 9) wird eine Unit Test Komponente bereits mitgeliefert. Dennoch wird oft NUnit als Komponente hinzu installiert und mit dem Add-in TestDriven.net ergänzt.

Der Microsoft Unit Test Wizard erstellt je existierender Methode das Gerüst einer Testmethode. Das dient jedoch eher Entwicklern, die ihre Tests im Nachhinein schreiben, um der Firmenvorgabe zu folgen. Um den designbestimmenden Aspekt der testgetriebenen Entwicklung zu nutzen, müssen auch bei Altanwendungen die Tests vor der Funktionserweiterung geschrieben werden.

Da Unit Tests nur auf öffentliche Klassen und Methoden zugreifen können, eignen sie sich als Test der Schnittstellen. Ein Black Box Test also. Gerät der Unit Test bei einer umfangreichen Klasse mit vielen privaten Methoden zu aufwändig, ist das ein Hinweis, dass Funktionalität in Hilfsklassen ausgelagert werden können. Dort sind die Methoden dann öffentlich und lassen sich so über einen Unit Test abdecken.

Anwendungsfälle (Use Cases) oder sehr kleine User Stories eignen sich aber grade wegen dieser Einschränkung hervorragend als Testfälle.

Auch wenn es bei TDD sehr verlockend ist, sofort drauflos zu coden, lohnt es sich vorher ein paar Minuten über das Design der Schnittstelle nachzudenken. Das deckt oft schwammige Punkte in der Anforderungsbeschreibung auf. Diesem lokalen Modell kann man sich dann mittels TDD sehr schnell nähern.

Agiles Projektcontrolling

Agilität bedeutet nicht, dass man orientierungslos vor sich her entwickelt. Durch folgende Praktiken haben die verschiedennen Interessengruppen einen guten Einblick in das Projekt.

  • Tägliche Teammeetings
  • Burndown (oder -up) Grafiken je Iteration (Sprint) und für das gesamte Release
  • Echte Fortschrittsmessung mit der Definition von DONE
  • Anzahl der entdeckten Fehler nach DONE Meldung
  • Review Meetings am Ende einer Iteration
  • Grad der Testabdeckung

Daneben natürlich die üblichen Klassiker:

  • Zeit
  • Kosten