Schönes Feature von Apache, aber lästig…

Der Apache Web Server hat das nette Feature (man kann es auch abschalten, aber oft ist es schon wegen Groß- und Kleinschreibung sehr nützlich), dass beim Zugriff auf eine Datei, die es nicht gibt, eine andere gemeldet wird, die so ähnlich heißt. Bei meinem kleinen Jump&Run Exkurs erwies sich das als recht lästig.

Und das kam so: es gibt die Möglichkeit, mehrere Spielfuguren zu definieren und dann eine zum Spielen auszuwählen. Dazu macht der Silverlight Code Web Zugriffe (HttpWebRequest.Create) auf Dateien mit dem Namensmuster figur/Spieler01.xaml, figur/Spieler02.xaml usw. Wird die Datei nicht gefunden, so endet die Suche. Beim Microsoft IIS Web Server geht das so auch, Apache antwortet bei dem Zugriff auf figur/Spieler02.xaml einfach mit einem Redirect auf figur/Spieler01.xaml. Will man die Redirects im HttpWebRequest nicht grundsätzlich verbieten, weil damit andere Nachteile verbunden sind, steht man erst einmal auf dem Schlauch.

Ich habe als relativ sicheren Ansatz für mein Problem die ResponseUri im HttpWebResponse mit der angeforderten Adresse verglichen. Sind diese nicht identisch, gehe ich von einem Redirect aus und nehme an, dass die angeforderte Datei so nicht existiert. Das ist aber keine grundsätzliche Lösung und kann zu anderen Problemen führen – etwa wenn nur die Schreibweise anders ist. Als schnelle Hilfe aber allemal ausreichend.

Jochen

Kinderkram

Mal wieder ein kleines Intermezzo. Die Frage meines Sohnes „Papa, kannst Du nicht ein Jump&Run programmieren?“ konnte ich natürlich 🙂 nicht einfach so im Raum stehen lassen. Da ich mich eh weiterhin in Silverlight einarbeiten wollte, habe ich mich entschieden, mal einen Prototyp zu erstellen. Viel kann er zwar nicht, aber so mit einer Spielfigur rumlaufen, Dinge einsammeln etc. funktioniert schon. Der Code für diese erste Variante ist schon fertig (auch öffentlich über das Hilfedokument verfügbar, man siehe darin den Link ganz unten), an den optischen und aktustischen Effekten arbeiten wir noch – so kann die Spielfigur beim Laufen auch animiert werden, dazu muss man aber Bildsequenzen erstellen, was recht lästig ist.

Den aktuellen Stand möchte ich dem geneigten Leser aber nicht vorenthalten.

Have Fun

Jochen

Neues Ablagesystem für VCR.NET

Beginnend mit VCR.NET 4.0 werden alle Informationen, die bisher in verschiedenen Dateien an verschiedenen Orten gespeichert wurden (Konfiguration, aktive und archivierte Aufträge, Protokolle, Programmzeitschriften) in einer einzige Microsoft SQL Compact Edition (SqlCe 4.0) Datenbank abgelegt. Die Übernahme erfolgt beim ersten Starten automatisch. Die Datenbank ist integraler Bestandteil der VCR.NET Installation (Private Mode des SqlCe), so dass keine weiteren Schritt bei einer Erstinstallation oder einem Upgrade notwendig sind. Kurz: technisch sollten die Anwender von der Änderung gar nichts bemerken.

Die Umstellung wurde durch die (sehr zähen und langsam fortschreitenden – ich weiß … leider!) Arbeiten am neuen Zeitplaner sinnvoll. Allerdings habe ich trotz erfolgreicher Umstellung der aktuellen Funktionalitäten noch nicht das endgültige Datenbankschema erreicht. Daher wird es vorerst auch kein Preview geben – ich selbst nutze die Version noch nicht produktiv. Nach einer Aktualisierung auf das neue Ablagesystem gibt es auch kein Zurück mehr und ich möchte nicht schon in der Beta Phase Schemamigrationen machen müssen. Etwas Geduld also…

Die Wahl genau dieser Datenbank ergibt sich aus dem Umfeld (privates Lernprojekt, tagesaktuelle Anforderungen) und daher sind andere Datenbanken wie MySQL und Konsorten kein Thema. Die Implementierung ist zwar an vielen Stellen ADO.NET basierend allgemein gehalten, allerdings musste ich insbesondere aus Performancegründen bei der Programmzeitschrift einige Kompromisse schliessen und direkt gegen SqlCe programmieren. Auf der einen Seite stehe ich noch ganz am Anfang und möchte daher nicht die Hoffnung aufgeben, dass bis zum Release von VCR.NET 4.0 etwas Ordentliches daraus wird. Aber auf der anderen Seite ist das für 4.0 nur ein kleiner Nebenschauplatz, an dem ich eigentlich gar nicht lange verweilen wollte. Naja, man kann es sich selbst auch nicht Recht machen, oder…

Soweit zur Information

Jochen

ListBox, ComboBox oder was?

Im Rahmen meiner Einarbeitung in Silverlight / WPF bin ich auf eine Idee gestossen, die ich einmal an einem rudimentären Beispiel als Anschauungsmaterial implementiert habe. Die Aufgabenstellung an sich ist eigentlich sehr einfach: aus einer begrenzten Liste von Auswahlelementen soll eines vom Anwender ausgewählt werden. Ganz klar die Aufgabe einer ComboBox. Die Auswahl soll zudem graphisch und nicht in Textform präsentiert werden – auch keinerlei Herausforderung für Silverlight / WPF. Wie das Beispiel zeigt, kann man sich das auch optisch ein wenig anders vorstellen – zu den einzelnen Elementen der Testseite gleich mehr.

Startzustand

Im initialen Zustand wird die Auswahlliste als ListBox dargestellt – ohne die typische Sondervisualisierung der ComboBox mit dem Auswahlfeld zum Aufklappen. Verändert sich die Auswahl, so übernimmt die Listbox die Anzeige – auf Aspekte des ausgewählten Eintrags kann im XAML wie gewohnt referenziert werden, wie das Bild links oben und der relative Pfad des Bildes daneben zeigt. Das ist nun wirklich nichts Besonderes bis hierhin.

Aufgeklappt

Die Besonderheit zeigt sich aber, wenn man die Auswahl bestätigt. Die ListBox klappt dann scheinbar zu und zeigt nun nur noch den ausgewählten Eintrag.

Zugeklappt

Das Beispiel kann man sich selbst einmal hier anschauen, die Quellen gibt es hier. Es handelt sich wirklich nur um eine sehr elementare Implementierung, sicher nicht um ein vollwertiges Control. Was tut das Beispiel jetzt schon:

  • Beim Starten ist einer der drei Alternativen ausgewählt – sieht im Beispiel etwas häßlich aus, da meine Beispielbilder einen teilweise transparenten Hintergrund haben und die Auswahleinfärbung der Listbox auch im zugeklappten Modus erscheint: einfach vorstellen, dass der Hintergrund der Visualisierungselemente nicht transparent ist (man kann irgendein FrameworkElement verwenden).
  • In der oberen Zeile wird die Auswahl zur Demonstration als Bild und Pfad zusätzlich angezeigt.
  • Ein einfacher Klick auf die gewählte Alternative (großes Bild) öffnet die Auswahlliste.
  • Die Navigation in der Liste mit Maus oder Tastatur verändert die Auswahl, insbesondere kann diese wie gewohnt mit Strg-Click aufgehoben werden.
  • Ein Doppelklick oder die Taste ENTER beendet die Auswahl und schließt die Liste, es wird nun die letzte Auswahl angezeigt.
  • Die Eingabe des Pfades in der oberen Zeile kann zur Änderung der Auswahl verwendet werden – uh, Injection Attack möglich, schert hier aber nicht.
  • Hat die zugeklappte Liste den Fokus, so kann die Auswahl weiterhin mit der Maus verändert werden – die Liste klappt dazu automatisch auf.
  • Im XAML der Seite sieht man, dass die Auswahl vorbelegt werden kann, was natürlich optional ist.

Happy Coding

Jochen