BASS Audio Library

Durch die Mitarbeit an einem Projekt, bin ich auf die interessante und sehr umfangreiche Un4seen BASS Audio Library gestossen. In Kombination mit der BASS.NET Library als .NET Wrapper, lassen sich damit sehr einfach Audiofunktionalitäten, wie Wiedergabe, Aufzeichnung und Streaming realisieren. Der Umfang ist überwältigend und lässt keine Wünsche offen. Die Libraries lassen sich mit mono.NET sowie Xamarin verwenden, somit kann man Audio Projekte auch für OS X und Linux umsetzen.

Fehlerkosten 10er Regel Zehnerregel (Rule of Ten)

Die Zehnerregel der Fehlerkosten besagt, dass je weiter ein Fehler sich unentdeckt in die späten Phasen des Werdeganges eines Produktes oder Prozesses bewegt – oder gar bis zum Kunden –, umso höher werden die Kosten zur Behebung dieses Fehlers. Eindrucksvoll untermauert wird die Zehnerregel durch die Ergebnisse einiger Studien aus den 70er Jahren in Japan, USA und Großbritannien, die sich mit den Ursachen von Produkt- bzw. Qualitätsmängeln beschäftigten. Alle Analysen lieferten nahezu die gleichen Ergebnisse: Ca. 70 % aller Produktmängel hatten ihre Ursache bereits in der Entwicklung, Konstruktion und Arbeitsvorbereitung. Der Herstellungsprozess selbst hat bezüglich der Endqualität des Produktes offensichtlich eher einen sekundären Einfluss. Eine VDMA-Studie zum Thema „Qualitätsbezogene Kosten“ Anfang der 90er Jahre in der Bundesrepublik bestätigt dieses Ergebnis.

Die Zehnerregel der Fehlerkosten oder Rule-of-Ten sagt aus, dass sich die Fehlerkosten für einen nicht entdeckten Fehler von Stufe zu Stufe der Wertschöpfung um den Faktor 10 erhöhen. Je früher ein Fehler entdeckt und beseitigt wird, desto kostengünstiger ist dies für die Organisation.

In Zusammenhang mit der Zehnerregel der Fehlerkosten müssen auch die Ansätze von Deming und dessen Aussage „Qualität kann nicht erprüft, sie muss erzeugt werden“ gesehen werden. Deming hat hier einen entscheidenden Beitrag für das Qualitätsverständnis geliefert. Entscheidend ist ein umfassendes Qualitätsmanagement, dass möglichst frühzeitig im Prozess aufgesetzt wird.

Das zeigt ganz deutlich, wie wichtig Qualitätsbewusstsein auch beim Programmieren ist.

Quelle

Bug beim Parsen eines Währungsstring der tzm-CultureInfo in .NET

Beim Testen der Konvertierung numerischer Werte in einen Währungsstring und umgekehrt ist mir ein Fall aufgefallen, den man als Bug einstufen kann. Das Parsen von Währungsstrings, unter Verwendung der CultureInfo als FormatProvider, funktioniert bis auf die tzm-CultureInfo problemlos. Der Versuch einen mit der tzm-CultrueInfo formatierten Währungsstring zu parsen verursacht eine FormatException.

Ergebnis Meldung:    System.FormatException : Die Eingabezeichenfolge hat das falsche Format.
Ergebnis StackTrace:
bei System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
bei System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt)
bei System.Decimal.Parse(String s, NumberStyles style, IFormatProvider provider)
bei Currency.Test.CurrencyTest.TestCurrency(CultureInfo cultureInfo) in CurrencyTest.cs:Zeile 29.

Bei der tzm-CultureInfo ist der CurrencyDecimalSeparator = "." und der CurrencyGroupSeparator = ",". Tauscht man jedoch die Werte, wird der Währungsstring korrekt geparsed. Das Problem besteht in den .NET Framworks 2.0 bis 4.5.1. Eine Lösung für das Problem habe ich leider nicht gefunden. Die einzige Möglichkeit bei dynamischen Unit Tests besteht darin diese CultureInfos rauszufiltern.

Eine weitere Besonderheit ist mir auch beim Testen mit dem Framework 3.5 aufgefallen. Das Parsen eines Währungsstrings mit einer neutralen CultureInfo wird mit einer NotSupportedException quitiert. Andere Frameworkversionen sind davon nicht betroffen.

Ergebnis Meldung:    System.NotSupportedException : Die Kultur "af" ist neutral. Sie kann nicht als die aktuelle Threadkultur festgelegt werden, da sie nicht zum Formatieren und Analysieren verwendet werden kann.
Ergebnis StackTrace:
bei System.Globalization.CultureInfo.CheckNeutral(CultureInfo culture)
bei System.Globalization.CultureInfo.get_NumberFormat()
bei Currency.Test.CurrencyTest.TestCurrency(CultureInfo cultureInfo) in CurrencyTest.cs:Zeile 21.

Die tzm-CultureInfo steht für Tamazight, Berbersprachen und -dialekte. Nun wird man wohl selten in die Verlegenheit kommen diese CultureInfo direkt zu verwenden, aber im Hinblick auf dynamische Unit Tests ist es vorteilhaft von diesen Einschränkungen zu wissen.

Weiterlesen

Mac Startsound de- und aktivieren

In den Einstellungen von OS X gibt es leider keine Möglichkeit den Startsound eines Mac zu deaktivieren. Das kann man aber mit einem einfachen Befehl über das Terminal lösen.

sudo nvram SystemAudioVolume=%00

Mit dem folgenden Befehl lässt sich der Startsound wieder aktivieren.

sudo nvram -d SystemAudioVolume

GitHub Markdown Tipp

Auf GitHub kann man die Readme-Dateien bekanntlich in Markdown verfassen. Da ich mich noch mit Markdown vertraut mache, hatte ich so meine Anlaufschwierigkeiten.

Vor das erste Problem stellte mich ein einfacher Zeilenumbruch. Ein einfaches return oder ein \n brachten leider nicht das gewünschte Ergebnis. Nach etwas Suchen bin ich dann schließlich fündig geworden. In Markdown erzeugen zwei oder mehr Leerzeichen am Ende einer Zeile einen Zeilenumbruch.

Das zweite Problem war die Darstellung des #-Zeichens am Ende einea Markdown-Headers. In Markdown wird ein Header mit dem #-Zeichen eingeführt. Endet der Satz ebenfalls mit einem #-Zeichen (z.B. Examples in C#), wird es nicht angezeigt. Abhilfe schafft auch hier ein Leerzeichen am Ende der Zeile und der Satz wird korrekt angezeigt.

Writing Code Is Life

Writing Code Is Life – Programmieren heißt Leben

Dieses Zitat stammt von Marlin Eller, einen ehemaligen Entwickler bei Microsoft. Mit diesem einfachen Satz fasst er meine Faszination für das Programmieren zusammen. Für mich ist es eine Kunst, das Optimum herauszuholen, mit einem Minimum das Maximum zu erreichen. Deshalb liebe ich es neue Programmiersprachen, Konzepte und Ansätze zu lernen und diese bei der täglichen Arbeit einzusetzen.

Hier ein Auszug aus der Dokumentation „Leben nach Microsoft“, der die Faszination Programmieren sehr gut zusammenfasst.

Alternative Implementierungen der Factory

Neben dem Factory Method und Abstract Factory Entwurfsmuster gibt es zwei alternative Implementierungen der Factory. Es sind die Simple Factory (einfache Fabrik) und die Static Factory Method (statische Fabrikmethode). Diese Implementierungen sind keine Entwurfsmuster, sondern eher Programmieridiome. Dennoch ist es wichtig sie zu kennen und zu wissen wann ihr Einsatz sinnvoll ist.

Um die Implementierung zu erläutern, greifen wir das Beispiel der Pizzeria wieder auf, welches bereits bei den Factory Entwurfsmustern verwendet wurde.

Weiterlesen

Das Abstract Factory-Muster

Definition

Das Abstract Factory-Muster (Abstrakte Fabrik) ist eines der GoFEntwurfsmuster (Design Pattern) und gehört zu der Kategorie der Erzeugungsmuster (Creational Design Pattern). Das Muster „bietet eine Schnittstelle zum Erstellen von Familien verwandter oder zusammenhängender Objekte an, ohne konkrete Klassen anzugeben“ (EvKbF S. 156).

Beschreibung

Das Abstract Factory-Muster ist mit dem Factory Method-Muster eng verwandt. Ebenso wie das Factory Method-Muster verwendet das Abstract Factory-Muster eine abstrakte Schnittstelle, um einen Satz verwandter Produkte zu erstellen, ohne die konkreten Produkte zu kennen. Das trägt ebenfalls zur Reduzierung der Abhängigkeiten, da der Client von den konkreten Produkten entkoppelt wird. Auch hier wird das folgende OO-Entwurfsprinzip angewendet:

„Stützen Sie sich auf Abstraktionen. Stützen Sie sich nicht auf konkrete Klassen.“
Das Abhängigkeits-Umkehrungs-Prinzip

Die Methoden in einer Abstrakten Fabrik, werden als Fabrikmethoden implementiert. Jede Methode ist dafür verantwortlich, ein konkretes Produkt zu erstellen. Dazu wird eine Unterklasse der Abstrakten Fabrik erstellt, in der die Implementierung der Methoden erfolgt, die ihrerseits die konkreten Produkte erzeugen. „Fabrikmethoden sind ein natürliches Mittel zur Implementierung von Produkt-Methoden in ihren abstrakten Fabriken.“ (EvKbF S. 158)

Weiterlesen