Friday, October 9. 2009
Einst hatte ich einen Reitlehrer, der in einer Reithalle tätig war, in der nicht nur seine Schüler umherritten, sondern auch abenteuerliche Andersreiter wie zum Beispiel die Angehörigen eines historischen Reitvereins, die in kaiserlich-österreichischen Uniformen die Militärreitkunst vergangener Jahrhunderte pflegten. Alle in der Halle Reitenden kannten einander und verstanden sich gut. An einem Tag hatte der Reitlehrer gerade eine Longierpeitsche in der Hand, als einer der uniformierten k.u.k-Reiter prächtig zu Pferde vorbeistolzierte. Der Reitlehrer holte mit der Longierpeitsche aus und deutete an, dem hübschen, konzentrierten Militärpferd einen gewaltigen Hieb versetzen zu wollen, worauf ihm dessen Reiter einen nervösen Blick zuwarf, ehe er erkannte, dass es sich um einen Scherz handelte. Der texanische Westernreitlehrer sagte lachend, das habe er immer schon einmal tun wollen.
Die Szene war von mehreren Reitschülerinnen beobachtet worden, welche nun Bemerkungen machten, ob der Westernreitlehrer denn nicht auch einmal in klassische Reitkleidung schlüpfen wollte und die andere Reitweise authentisch erproben. Darauf tat dieser den Ausspruch: „I'll never wear the sexy pants!“
Letztes Jahr spazierte ich mit einem Bekannten durch London; es war Anfang Dezember, wurde bereits finster und hatte den ganzen Tag bei 3°C genieselt, was aber weder die Londoner davon abhielt, mit kurzer Hose und kurzem Leibchen laufen zu gehen, noch die Londonerinnen davon, Minirock oder hotpantartige Businesshosen zu tragen. Nachdem wir uns über die deutschen V2-Angriffe auf London im 2. Weltkrieg unterhalten hatten, wobei wir uns, da wir Deutsch sprachen, in der Menge angenehm unbelauscht fühlten, erspähten wir im Hyde Park Corner einen Weihnachtsmarkt. Diesen besuchten wir, und danach, auf dem Weg zur U-Bahn-Station, erzählte ich meinem Bekannten die Geschichte, die zum legendären Sexy-Pants-Ausspruch führte. Vor uns aber ging eine Hotpantträgerin, nicht ganz schlank, jedoch attraktiv, und diese verstand natürlich von meiner überschwänglich vorgetragenen Anekdote nur den letzten Satz: „I'll never wear the sexy pants!“
Genau wie der Militärreiter warf sie unwillkürlich einen irritierten Blick über die Schulter, aber das Unheil war geschehen. Ein Fauxpas, wie er unter anderen Umständen wohl zu Staatskrisen, Revolutionen und Kriegen geführt hätte.
Thursday, October 30. 2008
Gestern sagte eine Diskutantin in Ö1 sinngemäß:
Zuerst muss ich kategorisch festhalten, dass ich dieses Schwarzweißdenken prinzipiell ablehne!
Das find ich gut, denn mein Motto lautet: Wer nicht in Nuancen denkt, ist gegen uns!
Oder anders formuliert:
$aussage = (boolean)$aussage;
Friday, September 5. 2008
SPÖ-Kandidat Faymann versuchte neulich etwas gegen die Teuerung zu unternehmen. Der - gewiss nicht unpopulistische - Plan war, die Mehrwertsteuer auf Lebensmittel zu senken. Dafür suchte die SPÖ eine freie Mehrheit im Nationalrat. Da man natürlich einer anderen Partei knapp vor einer Wahl keinen Erfolg schenken kann, wurde daraus nichts:
Die Schwarzen mokierten sich darüber, dass auch Kaviar billiger würde: 10 dag Kaviar um ca. 20 Euro! 1 kg Kaviar um ca. 200 Euro! Bei einem Einkauf von 2000t Kaviar würde man einem Superreichen sage und schreibe 400.000.000 Euro einfach so schenken! Was fällt dem Faymann da nur ein, fragt sich der blitzscharfe Denker Molterer zurecht!
Die Grünen meinten auch, eine Senkung der USt wäre sozial nicht treffsicher. Wieso denn auch den "Reichen" etwas schenken? Bleibt die Frage, wie man es sonst machen sollte. Vielleicht mit Lohnzettelkontrolle an der Kassa? Angabe des Brot-, Milch- und Kaviareinkaufs bei der Steuererklärung? Meiner Meinung nach steckt einfach nur die oben erwähnte Blockierung dahinter: Ein anderer Kandidat wird einen Monat vor dem Wahlkampf nicht auch noch unterstützt.
Blöderweise plakatiert Van der Bellen aber "Blockieren - mit mir nicht". Was meint er damit? Das gegenseitige Blockieren von SPÖ und ÖVP, weil man dem anderen keinen Erfolg gönnt. Was taten die Grünen aber mit dem Faymann-Vorschlag? Genau das. Zu blöd!
Die PHP Programming Western Riders, die österreichweit einzige Vertretung der PHP-programmierenden Westernreiter, erwartet von der künftigen Regierung eine deutliche Entlastung bei den Preisen für Westernreitstunden:
Beim klassischen Reiten (Englischreiten) zahlt man normal etwa 13 Euro, nahe Wien bis etwa 22 Euro. Für eine Westernreitstunde sind normal 23 Euro abzulegen, nahe Wien etwa 28 Euro. Ausnahme war bisher der Reitstall Pokornik (Westernreitcenter Wien), wo man 30 Euro zahlte. Doch jetzt gibt es einen neuen Rekord: Am Schaflerhof verlangt Trainer Thomas Barta für umgerechnet sechzig Minuten Unterricht ... 42 Euro! Das sind immerhin 578 Schilling.
(Die genannten Preise sind Erfahrungswerte und ohne Gewähr. Ich nehme hier auch keine qualitative Beurteilung vor.)
Tuesday, March 4. 2008
Beim laufenden Projekt bin ich auf zwei eigenartige PHP-Eigenheiten gestoßen, die zwar keine Fehler sind, aber trotzdem unerwartetes Verhalten darstellen:
Freestyle-Modulus
Die erste Eigenartigkeit ist der Modulo-Operator (%), der sich normalerweise so definiert:
Modulus von a und b = Divisionsrest von a durch b
Also ist 30 % 15 = 0 (weil 15 in 30 ohne Rest enthalten ist).
Was aber ist 31 % 15,5? Natürlich auch 0, weil 15,5 * 2 = 31.
Aber PHP liefert nicht 0, sondern 1!
Der Grund steht in der englischen Version des Onlinehandbuchs (nicht in der deutschen!):
Operands of modulus are converted to integers (by stripping the decimal part) before processing.
Also macht PHP aus 31 % 15.5 -> 31 % 15 mit Ergebnis 1.
Was das für einen Sinn hat, besonders wenn man zum Beispiel bestellte Mengen auf ganze Verpackungseinheiten prüfen muss, sei dahingestellt.
Einmal nichts, bitte
Auch die count-Funktion sorgte bei mir diesmal für Kopfzerbrechen.
Diese Funktion dient dazu, die Anzahl der Elemente eines Arrays zu ermitteln. Was liefert sie wohl zurück, wenn man keinen Array übergibt?
count('hase') liefert:?
Nein, nicht etwa false, weil 'hase' kein Array [oder etwas anderes "Countables"] ist! Aus irgendeinem Grund sieht sich PHP verpflichtet, solche Fehlbenutzungen zu überspielen. Bei der Implementierung ist man davon ausgegangen, dass der Programmierer in diesem Fall keinen Fehler, sondern den Rückgabewert 1 erwartet. "1" deswegen, weil 'hase' ja ein Element ist, konkret 'hase' == 1 String.
Mir fällt kein Beispiel ein, wo das sinnvoll wäre. Eher erschwert es die Fehlersuche. Besonders krass wird es bei booleschen Werten:
count(false) == 1
Warum? Weil false == 1 boolescher Wert. Somit kann es zu üblen und schwer auffindbaren Fehlern kommen wie zB:
// alle artikel mit schlüssel 'key' aus der DB lesen
$liste = read_liste_from_database($_REQUEST['key']);
// alle artikel ausgeben
for($i=0; $i<count($liste); $i++)
echo "Element ".($i+1).": ".$liste[$i]."<br />";
Wenn aber read_liste_from_database() einen key erhält, zu dem es keine Artikel gibt?
Dann liefert es idealerweise einen Leer-Array (array()). Oder aber false, was auch nicht ganz abwegig ist.
count($liste) ist dann aber 1, und drum sehen wir die Ausgabe:
Element 1:
Solche ausdrucksstarken Ausgaben hat wahrscheinlich jeder PHP-Programmierer schon einmal irgendwo gesehen ...
Natürlich sollte man auf eine gewisse Genauigkeit bei den Datentypen achten. Aber wenn dem Programmierer dabei einmal ein Fehler passiert, nimmt man an, PHP würde den so gut wie möglich ausgleichen (beim impliziten Casten klappt das ja auch gut). Was hier allerdings ausnahmsweise nicht geschieht. Übrigens: Eine Ausnahme von der Regel, dass count([nicht-Array]) == 1, ist NULL. Bei NULL, dachten die Entwickler wohl, kann man beim besten Willen nicht unterstellen, dass es irgendeinen Sinn ergäbe, "1" herauszulesen.
Saturday, February 24. 2007
Die Turnierdisziplinen des PHPWR, einschließlich der wichtigsten allgemeinen Westernreitdisziplinen
Cutting
Der Reiter muss mit seinem Pferd ein Rind aus einer Rinderherde heraustreiben. Dabei kommt es auf den „cow sense“ des Pferds an, das dabei die wichtigste Arbeit eigenständig macht.
Reining
Bei dieser „Westerndressur“ müssen vorgegebene Figuren („Patterns“) im Galopp abgeritten werden. Die Figuren sind aus Standardelementen wie Zirkeln, Spins (Drehungen), Roll Backs (Kehrtwendungen) usw. aufgebaut.
Pasting
Auf dem galoppierenden Pferd muss in einer bestimmten Zeit ein Angebot für eine bestimmte Programmierleistung erstellt werden, wobei der Reiter Teile aus bestehenden Angeboten zusammenkopieren darf.
Pleasure
Auf Ansage des Richters müssen mehrere Reiter Gangart- und Richtungswechsel durchführen, wobei es darauf ankommt, dass das Pferd dabei einen entspannten Eindruck macht.
Trail
Beim Trail muss ein Hindernisparcours nach Vorgabe absolviert werden. Neben typischen Hindernissen wie Trabstangen, aufgelegten Stangenkorridoren , Hütchenstrecken oder Brücken wird auch die Gangart vorgeschrieben.
Transpushing
Es sind zwei Reiter in der Bahn. Die Pferde werden zum Galoppieren gebracht, und während jeder Reiter einen Clatshpush programmiert, muss er immer auf dem X von einem Pferd aufs andere wechseln. Dabei ist es wichtig, in fließenden Bewegungen zu wechseln und auch den Programmcode schließlich genauso fließend dem Richter zu präsentieren.
Western Riding
Nach einem vorgegebenen Pattern ist ein Parcours zu absolvieren. Dabei liegt der Schwerpunkt auf vielen anspruchsvollen Galoppwechseln.
Western Scripting
Jeder Reiter hat innerhalb einer vorgegebenen Zeit ein Reining-Pattern in Form einer Webseite umzusetzen. Der Richter disqualifiziert schließlich alle Lösungen, die in ähnlicher Form mehrmals vorkommen, und bewertet die übrigen.
|