Anything goes

Als Gast(autor) ziemt es sich ja eigentlich nicht gegenüber dem Gastgeber in irgendeiner Form mäkelig zu sein. Zumal es sich bei dem Gastgeber um ein von mir über die Maßen geschätzten und respektierten Software-Architekten und -Entwickler handelt. Doch sein zuletzt hier veröffentlicher Aufruf “Time to go back to the basics” erregte doch in mir Widerspruch, den ich auf diesem Wege loswerden möchte.

In seinem Aufruf kritisierte mein Gastgeber das Verwenden von Workarounds bei der Software-Entwicklung. D. h., das Verwenden von kleinen Quelltext-Fragmenten, mit denen Probleme nur auf die Schnelle und nur vordergründig gelöst werden sollen. Stattdessen soll man wie ein guter Pfadfinder bei jeder Gelegenheit die Workarounds wegräumen und Ordnung im Quelltext schaffen — selbst dann, wenn man die Unordnung nicht verursacht hat.

Doch hier regt sich bei mir Widerspruch, so daß ich meinem Gastgeber im Sinne Feyerabends (1997) entgegenrufen möchte: No, anything goes! Denn, um es mit den Worten Paul Feyerabends zu formulieren, kein Programmcode ist “so alt oder so absurd, daß er nicht unser Wissen verbessern könnte. (Feyerabend, 1997, S. 55). Denn woher weiß man den, daß der Workaround, den man da gerade beseitigen will, das Problem ist? Kann es denn nicht auch so sein, daß die Idee, die hinter dem Workaround steckt, die eigentlich bessere ist, als die hinter dem vermeintlich ordentlichen Quelltext? Kann man das vor allem dann wissen, wenn der Quelltext nicht von einem selber ist?

Denn dies setzt voraus, daß man die Absichten und die Ideen des Urhebers richtig erkannt und verstanden hat, was nicht immer der Fall sein muß. Und Aufräumen würde dann die Unordnung, die man dort beseitigen will, erst schaffen. Hier versagt daher die Metapher der Pfadfinderregel. Im Wald mag jeder leicht erkennen, daß ein Faß mit Giftmüll dort nicht hingehört. Aber ein vermeintlicher Workaround, ist am Ende gar keiner, da er nämlich nur das Ergebnis unkonventionellem und unorthodoxem Denken ist, zu  dem man vielleicht selbst aufgrund der ganzen Pfadfinderregeln nicht mehr fähig ist. Denn dies sollte nicht vergessen werden, wenn man nach Ordnung und Clean Code ruft. Software-Entwicklung ist ein kreativer Akt, bei der es auch — wenn nicht sogar primär — um die Entwicklung von Ideen und nicht nur um die sture Produktion von Quelltext.

Wenn ich in diesem Sinne rufe: “Anything goes!”, heißt dies aber auch, daß ich meinem Gastgeber in einem Punkt zustimme. Denn mit  die Software-Entwicklung soll dadurch nicht der Beliebigkeit anheim gestellt werden. Hierfür bedarf es schon einige grundlegender Regeln und Prinzipien, um die Software-Entwicklung zu einem erfolgreichen Abschluß zu bringen. Doch die Regeln und Prinzipen sind abhängig vom Kontext, d. h. von der Anwendungsdomäne und dem Zweck der Software, der Entwicklungsumgebung, den eingesetzte Techniken usw. Und die Regeln und Prinzipien, die in der einen Situation zum Erfolg führten, können in der nächsten versagen. Ein beliebiges und stures anwenden der immer gleichen Regeln und Prinzipien kann genauso schädlich sein, wie eine regel- und prinzipienlose Beliebigkeit.

Literatur
Feyerabend, P. (1997). Wider den Methodenzwang (6. Aufl.). Frankfurt am Main: Suhrkamp.

Share and Enjoy:
  • Add to favorites
  • RSS
  • Twitter
  • DotNetKicks
  • DZone
  • email
Veröffentlicht unter Clean Code | Verschlagwortet mit , , | Hinterlasse einen Kommentar

Das Konzeptualisierungsparadoxon

Haftungsauschluß: Dieser Beittrag enthält wissenschaftlich verbrämten Unsinn. Argumente und Ergebnisse seriöser wissenschaftlicher Forschung werden aus ihren Zusammenhängen gerisssen, wild zusammengewürfelt und daraus vollkommen falsche Schlußfolgerungen gezogen. Mit Lesen dieses Beitrags verschwendet man nur wertvolle Lebenszeit.

Bei jeder Entwicklung einer Software steht man als Entwickler immer vor der Aufgabe die Gegenstände und Phänomene der jeweiligen Anwendungsdomäne zu erfaßen, zu durchdringen und zu verstehen, letztlich die Domäne zu konzeptionalisieren, um sie dann in entsprechenden Software-Artefakten — seien es Modelle oder Programmcode — zu realisieren.

Nun ist die Konzeptualisierung einer Domäne oder gar der Welt kein spezifischer Vorgang für die Entwicklung von Software, sondern er findet vielmehr von Geburt an bei jedem Menschen statt. Heuser (2007, S. 200) stellt hierzu mit Verweis auf den Entwicklungspsychologen Jean Piaget (siehe z. B. Ginsburg & Opper, 2004) fest, daß dabei Chaos für die Kognition des Menschen wie für den Raum an sich das Ursprüngliche ist. Kinder prägen erst eine toplogische Vorstellung vom Raum aus und erst später eine metrische. Der Raum wird zuerst als amorpher, beweglicher Raum gedacht, bei dem lediglich der Ortszuammenhang invariant ist, und das Gleichbleiben von Größen, Abstände, Winkel oder Form für die Unterscheidung von Figuren und Körpern keine Rolle spielt. Der “Entwicklungspfeil” (Heuser, 2007, S. 200) zeigt hier von der nur wenig strukturierten und geordneten Vorstellung der Welt hin zu einer stark strukturierten und geordneten Vorstellung.

Betrachtet man nun hingegen die Geschichte des Bildes, welches sich der Mensch von der Welt macht, dann zeigt der Entwicklungspfeil dieses Bildes in die genau umgekehrte Richtung. Am Anfang herschte ein sehr strukturiertes und geordnetes Weltbild vor. Die Erde war eine Scheibe, um der sich nur wenige Gestirne drehten. Mit der Zeit begann aber dieses Bild zu erodieren. Die Erde wurde von der Sonne aus dem Mittelpunkt verdrängt. Die Sonne wurde dann an den Rand einer Galaxie als eine Gestirn unter vielen verwiesen. Und die Galaxien wiederum bilden nur “Cantorstaub” (Cantor, 1883 zitiert nach Mandelbrot, 1991, S. 87-88) in einem in sich gekrümten Universum. Die Mechanik wurde relativiert, bevor die dann noch übriggebliebene Ordnung von der Quantentheorie vollkommen aufgelöst wurde.

Fazit: Der menschliche Verstand, der mittels der Konzeptualisierung aus dem Chaos entstanden ist, entwickelt ein Weltbild, bei dem er bei der Ordnung beginnt und wieder beim Chaos angelangt. Paradox, oder?

Literatur
Cantor, G. (1883). Grundlagen einer allgemeinen Mannigfaltigkeitslehre. Mathematische Annalen, 21, S. 545-591.
Ginsburg, H. P. & Opper, S. (2004). Piagets Theorie der geistigen Entwicklung (9. Aufl.). Stuttgart: Klett-Cotta.
Heuser, M.-L. (2007). Die Anfänge der Topologie in Mathematik und Naturphilosophie. In Günzel, S. (Hg.). Topologie. Zur Raumbeschreibung in den Kultur- und Medienwissenschaften. Bielefeld: transscript.
Mandelbrot, B. (1991). Die fraktale Geometrie der Natur. Basel: Birkhäuser.

Share and Enjoy:
  • Add to favorites
  • RSS
  • Twitter
  • DotNetKicks
  • DZone
  • email
Veröffentlicht unter Unsinn | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

WordPress: Dateiendung freigeben

Um in WordPress 3.0 eine weitere Dateiendung freizugeben muss die Funktion get_allowed_mime_types() in der Datei /wp-includes/functions.php bearbeitet werden. Diese Funktion muss um einen weiteren Eintrag erweitert werden, der die Dateiendung und die Beschreibung des Dateityps enthält.

'xyz' => 'application/xyz-description',

Der Upload funktioniert nun wunderbar. Doch wie könnte es anders sein, so gibt es bei dem IIS7 mal wieder einen kleinen Fallstrick. Wird nun in WordPress eine die Datei eingebunden und versucht man diese herunter zu laden, kann es vorkommen, dass man anstelle eines Downloads einen 404 Fehler erhält. Das liegt meist daran, dass die MIME-Zuordnung auf dem Server noch nicht vorhanden ist. Um die Zuordnung zu erstellen muss in die Befehlszeile folgender Befehl ausgeführt werden:

%SystemRoot%\windows\system32\inetsrv\appcmd set config /section:staticContent  /+[fileExtension='.xyz',mimeType='application/xyz-description']
Share and Enjoy:
  • Add to favorites
  • RSS
  • Twitter
  • DotNetKicks
  • DZone
  • email
Veröffentlicht unter Allgemein, IIS7, Wordpress | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar

Stopwatch Snippet

Natürlich kann man eine Anwendung mit mächtigen Profiling Tools auf Engpässe testen, doch häufig reicht schon eine kleine Stopwatch. Um diese schnell in den Code einbauen zu können gibt es hier ein Stopwatch Snippet für Visual Studio.

Anwendung des Snippets mit "Sourround With..."

Es wird automatisch eine Stopwatch erstellt, deren Namen man bei mehreren Stopwatches kurz anpasst. Schnell noch zur Identifizierung im Output-Fenster den Funktionsnamen angeben und fertig ist das Miniprofiling.

Um dieses Snippet nutzen zu können muss es nicht extra mit dem Code Snippets Manager von Visual Studio importiert werden, sondern ist dank des Snippet Editor mit einem Installer ausgestattet.

Share and Enjoy:
  • Add to favorites
  • RSS
  • Twitter
  • DotNetKicks
  • DZone
  • email
Veröffentlicht unter Snippets | Verschlagwortet mit , , | Hinterlasse einen Kommentar

Time to go back to basics

Viel zu häufig wird versucht ein Problem durch Workarounds und ausprobieren in den Griff zu bekommen. Insbesondere unter Zeitdruck neigen viele Softwareentwickler dazu schnell ein paar kleine Hacks einzubauen. Aber das rächt sich. Ist die erste Scheiben eingeschlagen, dauert es nicht lange bis Weitere folgen und der Code immer unübersichtlicher wird. Ändert sich eine Anforderung, dann wird es schwer sich an die Hacks und denn damit häufig einhergehenden Seiteneffekte zu erinnern und so sind weitere Probleme vorprogrammiert.

Time to go back to basics!

Nicht umsonst gehören die “Boy Scout Rule” und “Root Cause Analysis” zu den Basics der Softwareentwicklung. Häufig stolpert man selbst im eigenen Code über ungewöhnlich Variablennamen, Schleifenkonstrukte, “Managerklassen” oder Workarounds. Es genügen häufig kleine Änderungen und der Code wird übersichtlicher und erspart einige Kopfschmerzen beim Debuggen. Insbesondere Workarounds sind gefährlich. Sie erscheinen einem das Leben schnell zu erleichtern und das Problem aus der Welt zu schaffen. Besonders wenn wieder einmal der Chef im Nacken sitzt. Doch die hier gewonnene Zeit wird mit hohen Zinsen erkauft. Wer hat nicht schon einmal ein komplettes Modul neu schreiben müssen? Wird unter die Oberfläche des Problems gesehen und das Übel an der Wurzel gepackt, stellt man zudem oft fest, dass sich ein Problem nicht nur sauberer, sondern viel einfacher lösen läßt als gedacht. Die genannten Prinzipien lassen auch in vielen anderen Bereichen gut nutzen oder wie gut ist euer Schreibtisch aufgeräumt? Oder wiederspricht eurer Meinung nach gar alles dem “Keep It Simple, Stupid”-Prinzip und Prokratinationsstapel sind der beste Weg Ordnung zu halten?

Share and Enjoy:
  • Add to favorites
  • RSS
  • Twitter
  • DotNetKicks
  • DZone
  • email
Veröffentlicht unter Clean Code | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar

FTP Konfiguration im IIS 7

Es kostet schon einige Mühen den FTP-Server auf dem IIS 7 zum laufen zu bekommen wenn man bisher Linux-Systeme gewohnt war. Da Robert McMurray ein wirklich gutes Tutorial hierfür geschrieben hat, möchte ich nur auf einige Fallstricke hinweisen.

1. kleine Falle:

Natürlich heißt der “Network service” im deutschen “Netzwerkdienst”. Ansonsten funktionieren die ICACLS Befehle nicht.

2. kleine Falle:

In der Regel wird man Virtual Host Names benutzen, um per ftp.sitename.com zuzugreifen. Diese sind in dem Tutorial deaktiviert. Aktiviert man diese, hat das zur Folge, dass man einen schönen “550 No such host is known”-Fehler bekommt. Die Lösung findet sich ebenfalls in Robert McMurrays Blog. Die Kurzform ist simpel. Einfach dem Benutzernamen die Domain mit einer Pipe voranstellen:

server: ftp.sitename.com
user: ftp.sitename.com|username
password: ***

Share and Enjoy:
  • Add to favorites
  • RSS
  • Twitter
  • DotNetKicks
  • DZone
  • email
Veröffentlicht unter IIS7 | Verschlagwortet mit , | Hinterlasse einen Kommentar

Binding a Dictionary to a ComboBox

View code (XAML):

<ComboBox ItemsSource="{Binding Items}"
  DisplayMemberPath="Value"
  SelectedValuePath="Key"
  SelectedValue="{Binding SelectedItemCode}"/>

ViewModel code:

// Key = ItemCode, Value = Name
public IDictionary<string, string> Items{get; private set;}  

public string SelectedItemCode
{
 get
 {
  return Settings.Default.SelectedItemCode;
 }
 set
 {
  if (Settings.Default.SelectedItemCode != value)
  {
   Settings.Default.SelectedItemCode = value;
   OnPropertyChanged("SelectedItemCode");
  }
 }
}

A settings file is used to store the user selection. Of cause you have to save the settings e.g. if your view is closed.

Share and Enjoy:
  • Add to favorites
  • RSS
  • Twitter
  • DotNetKicks
  • DZone
  • email
Veröffentlicht unter Windows Presentation Foundation | Verschlagwortet mit , , , , | Hinterlasse einen Kommentar

DateTime formatieren in yyyymmdd

return string.Format("{0}{1:D2}{2:D2}", Date.Year, Date.Month, Date.Day);
>> 20100618

string Format(String, Object) ermöglicht es ein Text-Pattern zu erstellen in welches die Variablenwerte an den Indexpositionen mit geschweiften Klammern eingefügt werden. Um aus den Integerwerten Datum und Tag immer eine zweistellige Zahl zu erstellen besteht die Möglichkeit durch einen Doppelpunkt ein Format zu spezifizieren. Es gibt Formate für Währung, Exponenten und viele mehr. Das hier benötigte Format ist D, wie  Dezimal gefolgt von der Anzahl der Stellen, die eine Zahl einnehmen soll. Auf das Pattern folgend werden die Variablen übergeben. Im oben gezeigten Beispiel ist Date vom Typ DateTime.

Share and Enjoy:
  • Add to favorites
  • RSS
  • Twitter
  • DotNetKicks
  • DZone
  • email
Veröffentlicht unter Coding | Verschlagwortet mit , , , | Hinterlasse einen Kommentar

e-Society 2009

Die e-Society ist eine Konferenzreihe, die die IADIS seit 2003 alljährlich veranstaltet und sich den technischen und den nicht-technischen Aspekten der Informationsgesellschaft widmet. Dies spiegelte sich auch im diesjährigen Konferenzprogramm (Februar 2009 in Barcelona, Spanien) wieder. Das Themenspektrum reichte von Fragen der Akzeptanz von E-Learning bei Studenten und Dozenten (Goemann, 2009) über Anwendung von Ontologien zur Unterstützung von öffentlichen Verwaltungsprozessen (Prieto und Lozano-Tello, 2009) bis zu Fallstudien über B2B-Marktplatzmodelle in Thailand (Arch-int und Jakkuphan, 2009) .

Einen genaueren Blick sind im Nachgang die Beiträge von O’Reilly (2009) und Jackson et al. (2009) wert. Beide beschäftigen sich mit den Auswirkungen von Informationstechnologien auf die Kinder und Jugendliche. Im Fall von O’Reilly das Internet und im Fall Jackson et al. Computerspiele und Mobiltelefone. Also ein Themenkomplex der in den Medien zuletzt häufig vertreten war.

O’Reilly beschäftigt sich in seinem Beitrag, in wie weit das Internet eine Gefahr oder Risiko für Kinder und Jugendlich darstellt. Hierbei handelt es sich um eine empirische Untersuchen, bei der rund 1000 Kinder zwischen 9 und 13 Jahre befragt wurden. Kernthese von O’Reilly ist, daß Kinder nicht alle den gleich Gefahren- oder Rikisopotential ausgesetzt sind, sondern daß das Alter — oder genauer der Entwicklungsstand — eine wesentliche Rolle spielt. Die Auswertung seiner Studie lassen O’Reilly den Schluß ziehen, daß das Risiko mit dem Alter und Entwicklungsgrad abnehmen, obwohl die Häufigkeit des Internetnutzung zunimmt. U. a. dadurch, daß die Kinder ihr Verhalten anpassen und z. B. mit ihren eigenen Daten im Internet verantwortungsvoller umgehen. In dieser Hinsicht sicherlich ein interessanter Beitrag, da er die Debatte um Gefahren im Internet für Kinder objektiviert, und es dadurch erlaubt, die Altersgruppen in den Blick zu nehmen, die wirklich gefährt sind. Wie und wo die Kinder den verantwortungsvollen Umgang mit dem Internet lernen, bleibt hier aber unbeantwortet.

Jackson et al. berichten von ihrer ebenfalls empirischen Untersuchung der Auswirkungen von Computerspielen und Mobiltelefonnutzung auf Kinder (hier 12 Jahre alt) und deren Lernleistung haben. Und sie habe hier “some good news” zu verkünden: (1) Die Nutzung von Mobiltelefonen hat keinerlei Einfluß auf die Lernleistung der Kinder, und (2) Computerspielen verbessert das visuell-räumliche Wahrnehmungsvermögen, führt aber zu einem schlechterem Abschneiden in standardisierten Mathematiktests. Vielmehr beobachten Jackson et al. hier, daß je stärker (durch Computerspiele) die kognitiven Fähigkeiten der Kinder entwickelt sind, desto mehr werden die visuell-räumlich Fähigkeiten mit den mathematischen integriert. Und genau diese Intergration von Fähigkeiten sei “essential for solving problems at higher levels of science, technology, engineering and mathematics” (Jackson et. al, 2009, S. 335). Welche Schlußfolgerungen daraus für die Praxis gezogen werden können, bleiben Jackson et al. jedoch schuldig. Sie bleiben hier ganz den rigour verpflichtet und zeigen lediglich neue Forschungsfragen auf.

Referenzierte Aufsätze im Tagungsband der e-Society 2009, Band 1:

  • Arch-int, S. A. and Jakkuphan, W. (2009) B2B Marketplace Model for Supply Chain Management Using RossettaNet and Web Service Standard: A Case Study of Motorcycleparts Industry in Thailand, S. 379-386.
  • Goemann, K. (2009) Student’s and Educators’ Attitudes Towards E-Learning, S. 292-298.
  • Jackson, L., Eye, A. v., Fitzgeral, H. E., Witt, E. A. and Zhao, W. (2009) Videogame Playing, Cell Phone Use and Academic Perfomance: Some Good News, S. 339-346.
  • O’Reilly, D. (2009) Some Are More Equal Than Others: Children’s Internet Safty, S. 11-18.
  • Prieto, Á. E. and Lozano-Tello, A. (2009) Ontologies for Definition and Management of E-Administration Processes, S. 415-422.
Share and Enjoy:
  • Add to favorites
  • RSS
  • Twitter
  • DotNetKicks
  • DZone
  • email
Veröffentlicht unter Konferenzen | Hinterlasse einen Kommentar

Computerfreaks retten Bäume!

Jetzt könnte man meinen, dass die “Kellerkinder” jetzt total mit ihrer “Green IT” durchdrehen und auch noch denken, sie könnten mit ihren indirekt CO2 ausstoßenden Höllenmaschinen Bäume retten.

Nun ja, genauso indirekt wie Computer schädlich für die Umwelt sind kann durch KaufDa.de indirekt etwas Gutes getan werden. Eine wirklich tolle Idee über die schon berichtet wurde.

Jetzt gibt es Neuigkeiten. KaufDa.de hat analysiert wie schädlich die meiner Meinung nach überflüssige und lässtige Kaltaquise durch Werbemüll im Briefkasten ist. Und wie es sich für gute Studenten gehört, werden direkt Referenzen mitgeliefert, um die Studie nachzuvollziehen. Das Ergebniss ist schon etwas erschreckend. Die paar Blätter im Briefkasten häufen sich so an, dass pro Jahr in Deutschland insgesamt “455.400 Tonnen des Klimakillers CO2 in die Atmosphäre gepumpt [werden], soviel wie 400.000 Smart Kleinwagen durchschnittlich in einem Jahr produzieren”[via]. Die erwähnten 1.157 Millionen kWh Strom kann ja jeder selber mal umrechnen wie viele Computer man damit ein Jahr lang betreiben könnte. Der bei Umweltschützern so beliebte Urwald wird heute mal nicht extra erwähnt.

Jeder kann mitmachen und versuchen seinen Werbemüll im Postkasten stoppen. KaufDa versendet kostenlos zwei Sticker für den eigene Postkasten und sendet nur virtuell die beliebten Newsletter. Aber neben der Alternative diese per Brief abzubestellen wurde auch daran gedacht, die Baum schonende E-Mail -Variante anzubieten. Also:

Prospekte und Angebote ökologisch

Share and Enjoy:
  • Add to favorites
  • RSS
  • Twitter
  • DotNetKicks
  • DZone
  • email
Veröffentlicht unter Onlinedienste | Verschlagwortet mit | Hinterlasse einen Kommentar