VVS(childa)

Der Stuttgarter Verkehrsverbund hat seine alten Fahrkartenautomaten an unserem Bahnhof abgebaut. Inzwischen gibt es nur noch die bahneinheitlichen Automaten, an denen man jetzt auch Verbundtickets bekommt. Während eine derartige Vereinheitlichung sicherlich aus betriebswirtschaftlicher Sicht Vorteile bringt, hat der geneigte Kunde bisher nicht viel Freude damit. Gut, man kann inzwischen auch mit Karte zahlen, aber dafür dauert das Lösen eines Fahrscheins nun doppelt so lang. Die Touchscreens reagieren manchmal nur auf grobe physische Gewalt und die logische Verschachtelung der Menüs überfordert selbst gestandene Bahnfahrer. Heute morgen bildeten sich jedenfalls lange Schlangen von Menschen, die allenthalben zynisches Gelächter ausstießen.
Die von mir beliebt gewählte Mehrfahrtenkarte schoß dann aber den Vogel ab: Der Ausdruck kommt im Breitformat heraus, mit den Abschnitten jeweils nebeneinander. Äh, wie soll das bitteschön in den Entwerter passen? Man muß den Zipfel also ersteinmal der Länge nach falten und zwar ganz gerade, sonst bleibt das Teil stecken. Hier wird also keine Gelegenheit ausgelassen sich lächerlich zu machen. Das Ergebnis:

  • Zähneknirschen bei den Bahnfahrern, die wegen des Beförderungsmonopols diesen Quatsch mitmachen müssen.
  • Süffisante Bestätigung für alle Autofahrer die ausnahmsweise mal Bahn fahren, daß es eine Zumutung ist die bereits vor dem Einsteigen in den verspäteten Zug beginnt.

Geld her

Wir kennen unsere eigene gruslige Staatsverschuldung. Sie liegt derzeit irgendwo in der Nähe von 1.5 Billionen Euro. Juju, richtig viel Geld. Das ist allerdings ein Pups im Vergleich mit den Amerikanern.. die bewegen sich langsam auf die 8.5 Billionen Dollar Marke zu. Dieser Artikel liefert eine gute Übersicht / Zusammenfassung. Nur wird es die Amerikaner vermutlich wesentlich härter treffen, da sie - kaum zu glauben - noch konsumorientierter leben als wir. Das Bizarre an der Sache ist daß die USA im wesentlichen fremdfinanziert sind. Investoren vor allem aus Fernost haben dort ihr Geld gelassen (das sie vermutlich nie wiedersehen). Also leben da 200 Millionen Budweiser Light Trinker in ständiger Bedrohung, daß die Herrschaften irgendwann einmal hergehen könnten und ihre Gewinne(?) realisieren.
Wenn wir schon beim Zahlen sind - der Rundfunkgebührenzahler hat auch eine eigene Webseite. Tipps wie man sich die Jungs vom Hals hält findet man dort im Forum. Außerdem erheiternd: Die eine oder andere Schauergeschichte von echten Erlebnissen mit den Brüdern von der GEZ.

Sortierbare Spalten

Diesmal ein eher technischer Eintrag, dessen Zweck eher eigene Gedankenstütze als öffentliche Erheiterung ist. Hoffe ich zumindest.

Im .NET Framework 2.0 gibt es zusätzlich zum bekannten DataGrid Steuerelement das neue DataGridView. Dessen Fähigkeiten wurden gegenüber dem Vorgänger stark erweitert, so daß es inzwischen nur noch Sekunden dauert, um eine Datenquelle über ADO oder eine eigene Implementierung an die Tabelle anzuschließen. Das Ding bringt bereits nette Fähigkeiten mit, z.B. die Spalten umzuordnen. Die Spalten allerdings (durch einen Klick auf den Spaltenkopf) automatisch umzusortieren ist leider nicht so einfach, wie es zunächst aussieht. Das Sortieren der Datenquelle funktioniert nur dann problemlos, wenn ein Datagrid bzw. ein Dataview angebunden ist. Kommen die Daten direkt aus der Datenbank ist das auch kein Problem. Hat man jedoch die anzuzeigenden Objekte woanders her, z.B. aus einer Liste, funktioniert das leider nicht mehr. Die Liste weiß nicht, nach welchen Kriterien sie sortieren soll. Die Lösung besteht darin, eine eigene Listenimplementierung einzuführen, die von der ursprünglichen Liste erbt und zusätzlich IBindingList implementiert.

public void ApplySort(PropertyDescriptor property, ListSortDirection direction)
{
Trace.WriteLine(string.Format("sorting column {0}",property.DisplayName));
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(AISShip));
this.sortProperty = properties.Find(property.DisplayName, true);
this.Sort(this.Comparison);
this.OnListChanged(resetEvent);
}

Diese Methode ist ein Teil der Implementierung von IBindingList. Sie wird beim Sortieren der Liste implizit (vom DataGridView durch ein callback) aufgerufen. Das spaltenrelevante Sortieren habe ich so gelöst, daß die entsprechende Spalte lokal gespeichert wird und die Suchfunktion mit einem Vergleichs-Delegaten aufgerufen wird. Das wirkt etwas ungewöhnlich, es ist auch eine Neuerung in .NET 2.0.
Die eigentliche Vergleichsfunktion sieht etwas lahmarschig aus, man hätte hier sicher noch eleganter mit Reflection arbeiten können (wenn auch weniger performant):

protected int Comparison(AISShip a, AISShip b)
{
if (this.sortProperty.Name.Equals("Timestamp"))
return a.Timestamp.CompareTo(b.Timestamp);
if (this.sortProperty.Name.Equals("Name"))
return a.Name.CompareTo(b.Name);
if (this.sortProperty.Name.Equals("Callsign"))
return a.Callsign.CompareTo(b.Callsign);
if (this.sortProperty.Name.Equals("IMO"))
return a.IMO.CompareTo(b.IMO);
// usw.
return 0;
}

Eine weitere Verbesserung kann man noch einbauen, wenn man sich beim Suchen außerdem die letzte Sortierrichtung merkt und diese dann umdreht, falls sich die Spalte nicht geändert hat. Damit erreicht man dann das typische Verhalten, daß der Benutzer aus dem Windows Explorer her kennt.

Osterei

War das nun schon Wallers letzter Gang? Ich hoffe nicht. Sah aber nicht gut aus. Der Kerl vom ADAC erzählte was von einem defekten Kupplungsgeber, ich kann leider keine Expertise dazu beisteuern. Kann man sich so ein Glück vorstellen? Da fährt Madame das Ding quer durch die Republik fast 1000km auf der Autobahn, und wo streckt er die Federn? 2km weg von zuhaus auf dem Supermarktparkplatz.

Speicherhunger

Wir haben ein Speicherleck! (oder doch nicht?) Konkreter Fall: Der Kunde meldet sich und beschwert sich über den exorbitanten Speicherverbrauch der Anwendung. Beigelegt hat er einen Screenshot vom Task Manager.

Was wird eigentlich im Task Manager angezeigt?

Der Task Manager zeigt die sog. "Working size" des Prozesses an. Dies bezeichnet den derzeit real (physikalisch) allokierten Speicher der Anwendung. Dieser "Speicherverbrauch" ist aber aus folgenden Gründen irreführend und sollte nicht (oder nur als grober Anhaltspunkt) für die Performance der Anwendung herangezogen werden:

  • Der Speicher wird von Windows gemäß der Priorisierung allokiert. Minimiert man die Anwendung, kann man sofort sehen wie der Speicherverbrauch zurückgeht.
  • .NET Anwendungen laufen in einer sog. "Sandbox", der .NET Runtime Umgebung. Diese ist auch in der angegebenen Speichermenge enthalten. Die eigentliche Anwendung macht also nur einen Teil dieses Speicherverbrauchs aus.
  • Laufen mehrere .NET Anwendungen gleichzeitig, können diese Teile der .NET Runtime Umgebung gemeinsam nutzen.

Ein besserer Anhaltspunkt für den Speicherverbrauch sind die sog. "private bytes". Dies bezeichnet die Menge an Speicher, die von der Anwendung nicht mit anderen Anwendungen geteilt werden kann. Der Task Manager kann diese jedoch nicht anzeigen. (Das gelingt jedoch mit dem ProcessExplorer oder perfmon (Start -> Ausführen -> Perfmon). Diese Zahl ist jedoch auch mit Vorsicht zu genießen: Sie bezeichnet sowohl aktiven als auch ausgelagerten (paged) Speicher, d.h. Hauptspeicheranteile, die aufgrund von Inaktivität auf die Festplatte ausgelagert wurden. Steigen die "private bytes" im Laufe der Zeit immer weiter an, ist ein Speicherleck vorhanden. Dies muß jedoch über einen langen Zeitraum beobachtet werden, da die Speicherverwaltung von der .NET Runtime durchgeführt wird und es teilweise recht lange dauert, bis Objekte wieder freigegeben werden (besonders wenn sie ausgelagert sind).

Die Kunden müssen weiterhin zu Fuß gehen

Nach meinem letzten Versuch dachte ich mir, ich gebe mal dem anderen Fahrradgeschäft am Ort eine Chance, diesmal bei der Bestellung einer neuen Felge. Dort lief es allerdings nicht viel besser: In einem netten Gespräch vergangenen Samstag sagte man mir, das betreffende Teil wäre nicht vorrätig aber spätestens am nächsten Freitag im Laden. Naja, in den Tagen der modernen Amazon-Logistik schon eher länger aber ich dachte ok warum nicht. Jetzt komme ich heute hin, wieder am Samstag. Jetzt wird mir beschieden, daß man leider von meiner Bestellung nicht die leiseste Ahnung hätte und der betreffende Kollege auch erst wieder am Dienstag da wäre. Na riesig. Also noch eine Woche mit der S-Bahn wenn doch schönstes Wetter ist. Die Auftragsannahme wird übrigens über ein fleddriges Ringbuch im DIN-A6 Format abgewickelt, in dem zig Kollegen mit unterschiedlicher handschriftlicher Begabung ihre Anmerkungen reinkritzeln. Hat mich also nicht weiter gewundert, nur etwas zornig gemacht. Es ist übrigens kein altes Lädchen, sondern ein taunagelfrischer Bike-Shop. Weiterhin rätselhaft bleibt mir, wie das überhaupt funktionieren kann. GRrrrrrr. So, jetzt geht's mir wieder besser. :-)

Vermischtes

Wie löst man ein Sudoku? Klar, am besten in T-SQL!

Lustige Bandentdeckung: HitBoutique aus Stuttgart. Bekanntes, neu arrangiert. Aber wie :-). Anscheinend spielten sie direkt am Abend vorher im Schaufenster Mitte. Das ist übrigens ein nettes Örtchen, um ein "After-work" Getränk einzunehmen.

April, April. Viel Blödsinn diesmal, aber Google Romance ist sehr gut gelungen.

Köstlich: 40 Ereignisse, die nur in (einschlägigen) Filmen passieren.

Die Bauklötzchenmethode als Einstellungstest.

Nachmittag in Hamburg

Wenn man den öffentlichen Nahverkehr als Beispiel nehmen würde, wäre die wirtschaftliche Überlegenheit Stuttgarts gegenüber Hamburg überhaupt nicht nachvollziehbar. Zurück in Hamburg. Hinfliegen und sich dann von der Hochbahn fahren lassen. Da funktioniert es einfach. Das hat sicherlich auch damit zu tun, daß die Hochbahn auf ihren eigenen Gleisen fahren darf, aber auch die Details sind fein abgestimmt. Über den Bahnsteig hinweg umsteigen, zack gehen die Türen zu und man fährt verlustfrei weiter. Nach dem Klimaschock ein etwas seltenes Gefühl, plötzlich sind da wieder 15cm Schnee(matsch). Aber die Gegend hat es in sich. Auch die Leute in der Bahn oder an der Haltestelle, man kommt sofort ins Gespräch und meistens auch angenehm. Das sind vielleicht die Dinge die man schnell vergißt wenn man weggeht, aber schmerzlich auffallen, wenn man mal wieder da ist.
Dann zurück! Ein Besuch am ehemaligen Arbeitsplatz. Etwas verkleinert, ich würde sagen, auch optimiert der Laden. Erzeugt jetzt sicherlich gute Rendite als OneManShow. Ich aber völlig gefühlsneutral. Jetzt als Untermieter einer anderen Firma, deren Mitarbeiterumgang ich nicht so besonders geschätzt habe. So verändert sich alles. Richtig befriedigend zu sehen ist aber wie Ideen, an denen man einmal teilhatte oder die man selbst als Produkt vorschlug und auf den Weg brachte sich inzwischen ordentlich etabliert haben. Das bringt mir zwar wirtschaftlich gesehen nichts aber dafür ein gutes Gefühl. Und etwas mehr Vertrauen in den eigenen Riecher. Der wird inzwischen etwas unterfordert all die weil ich nicht mehr besonders viel an kreativen Prozessen teilnehmen kann. Eigentlich eine Ressourcenverschwendung. Ich merke schon, an der Front muß ich in Zukunft etwas unternehmen. Der Projektordner läuft über, aber ausgerollt wird viel zu selten.

Wieder draußen, es ist noch dunkler und matschiger geworden. Wie kann das angehen. In dieser Straße wird es nie befestigte Gehwege geben. "Türk Imbiss" gibt es immer noch, ich bin erleichtert. In meinem ehemaligen Stehcafe befindet sich jetzt das "Kebab House", in dem zwei müde Kerle auf Kundschaft warten. Früher sah's da mal netter aus. Der "gute" Imbiss ist aber gar keiner sondern schon fast eine Art türk. Feinkost. Lecker wie anno aber ich kann nicht lang bleiben. Die Medienfachwirte, denen ich was über XML erzählen soll, sind noch nicht da. Gottlob, bis ich kapiere wie das mit dem Kabel für den Beamer eigentlich funktioniert. Eine ganz kleine Runde diesmal. Macht nichts, das ist immer besser, weil mehr Fragen kommen und keiner sich mental wegklicken kann. Die drei Damen in der vordersten Reihe tragen dann auch mehrfach zur Erheiterung bei, unter anderem durch den Versuch mit der Bestechung des Kursleiters durch ein Toffiffee eine unangenehme Frage an den Nebensitzer weiterzuleiten. Klappte :-)
Später dann alle weg, ich sperre ein fremdes Haus zu. Wo geht hier das Licht aus? Merkwürdiges Gefühl. Hoffentlich ist keiner drin geblieben? Jetzt Dunkelheit, alles gefroren. Der Tag ist vorbei, ich brauch was zu trinken. Dann wirds gehen. Es ist komisch, kaum kehrt die Ruhe ein, fangen von allen Seiten wieder neue Ideen an zu keimen. Ist das gut oder habe ich eine innere Unruhe geerbt. Sachen, die man nebenher entwickeln müßte. Techniken zu erlernen. Geschäftsbeziehungen wiederbeleben. Ich bin aber nicht in Zone II. Das geht nicht so schnell. Langfristig zu denken ist besser. So schreibe ich es lieber weg, ToDo. Projektskizze, ein paar Links.
Ha, der NetworkStumbler findet hier nichts. Dann bleibt das Posting eben in seiner kuschligen Textdatei.
Edit: (bis heute)
Noch eine Bemerkung, eine Woche danach:
Neeein! Ich habe tatsächlich jemand eingesperrt! Ich halt's nicht aus. Die reizende Dame hatte glücklicherweise ein Handy dabei, so daß sie schnell wieder rauskam.
Merke:
1. Immer die Damentoilette überprüfen
2. Auch weibliche Herrschaften brauchen manchmal etwas länger auf diesem Örtchen