Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

13. Mai 2008 um 15:32

Raucherkabinen

Raucherkabine (verwendet mit Erlaubnis der Firma Smoke Free Systems AB)Seit etlichen Monaten dürfen Raucher bei uns nur noch an ganz wenigen, bestimmten Stellen rauchen. Das ist ganz gut, weil die Flure und Treppenhäuser – die bisherigen Raucherstellen – nun nicht mehr verraucht sind. Die dafür installierten Raucherkabinen verursachten zunächst einiges Gelächter, sind aber echt gut!

Wenn man – als Nichtraucher – leicht außerhalb der offenen Kabine steht und sich mit einem Raucher unterhält, dann bekommt man kaum Rauch ab. So habe ich in den letzten Monaten ab und an mit einem unserer Raucher einen Kaffee getrunken. Bei SmokeFreeSystems.de fand ich das nebenstehende Bild von den Kabinen: unsere sind die "C60".

Aber damit ist nun leider Schluss: Wenn ich nach den Pfingstferien wieder ins Büro komme, dann wurden die Teile bereits wieder abgebaut und im Hof überdachte Pavilions aufgebaut. Unter denen müssen die Raucher dann Sommer und Winter stehen. Da haben die Raucher dann Pech: Dann wird alles im Büro besprochen oder bei einem Kaffee in der Kaffee-Ecke. Ins Raucher-Ghetto gehe ich nicht mit… 😉

13. Mai 2008 um 09:57

atemberaubende Arbeitszeiten bei Microsoft

Neulich meldete ich ein Problem zum Microsoft SQL-Server von dem ich immer noch denke, dass es ein Bug und kein Features ist. Ich lieferte ein leichtes Repro und belegte anhand des Zugriffsplans das Fehlverhalten. Der First-Level-Supportmitarbeiter antwortete in einer Mail, dass er das Verhalten auch nicht ganz erwartungskonform fand und wollte sich mit einem Backline-Supporter unterhalten. Das sind Leute hier in Europa, die sich ganz gut auskennen und dann entscheiden, ob das als potentieller Bug nach Redmond gemeldet wird oder nicht. Im nächsten Schritt wird so ein gemeldeter Bug-Verdacht für gewöhnlich von einem der Entwickler begutachtet, der für das entsprechende Modul verantwortlich ist. So war es jedenfalls bisher. Diesmal scheiterte ich an der zweiten Hürde (ohne dass ich mit dem Backline-Suppporter selber sprechen durfte).
Bug or not?
In der zweiten Antwort schrieb der First-Level-Supporter, dass sei ein Feature und kein Bug. Der Backline-Engineer habe ihn davon überzeugt und deswegen würde es nicht als potentieller Bug nach Redmond gemeldet. Ich lieferte weitere Argumente und bekam wieder eine abschlägige Antwort. Das passierte noch ein mal. Es gab dort intern also drei Diskussionen (bzw. manchmal mailen die sich auch bloß gegenseitig, das war diesmal offenbar nicht so).

Als nächstes fragte unser zuständiger Microsoft-Betreuer nach, ob sie an dem Problem wirklich dran bleiben sollen, es seien im MS-Support immerhin schon 11 Arbeitsstunden verbraucht worden, die wir bezahlen müssen (weil es ja kein Bug sei). Und wie viele Stunden uns das noch wert wäre? Ich war ziemlich platt, dass allein für die bisherigen drei Diskussionen zwischen Firstlevel- und Secondlevel-Support 11 Stunden veranschlagt wurden. Da es zwei Leute waren, dauerten die Diskussionen in Summe also 5,5 Stunden. Das zu glauben fällt mir zwar schwer, aber OK – manche verstehen Probleme schneller, manche brauchen etwas länger. Darüber zu urteilen steht mir nicht zu… 😉

Also antwortete ich (gegen Mittag), dass das ein wichtiges Problem sei und wir so lange dran bleiben bis eine abschließende Antwort vom Engineering aus Redmond käme. Um 15:30 Uhr mailte dann der First-Level-Mann, er habe jetzt auch noch mit demjenigen in Redmond gesprochen, der entscheidet ob etwas ein Bug sei oder nicht. Auch er sei der Meinung es sei kein Bug, daher werden sie es nicht als potentiellen Bug nach Redmond melden.
Aber in der Beschreibung des Features sei nicht alles ganz richtig wiedergegeben und das werde als Bug in der Doku gemeldet. Deswegen müssten wir nichts zahlen.

Das löste bei mir eine Reihe von Fragen aus:

  • Klingt nach Kuhhandel – wer kennt das Spiel? Offenbar dachte der Supporter es ginge mir darum, dass wir nichts zahlen wollen. Schade, denn tatsächlich ist das Problem für uns wichtig.
  • Gibt es in Redmond wirklich einen Mann, der entscheidet, ob etwas im SQL-Server ein Bug ist oder nicht? Als ich zuletzt dort war, war es noch anders.
  • Wenn das so ist, warum wurde mit ihm darüber inoffiziell diskutiert, anstelle ihm den Fall mit allen Informationen komplett zu schicken, damit er auch das Repro sieht?
  • Ist der Mann in Redmond wirklich zwischen 3 Uhr nachts und 6:30 Uhr am Morgen (Ortszeit in Redmond) erreichbar? Das nenne ich atemberaubend und mehr als beeindruckend!

Nun hatte ich die Wahl entweder das Ganze höher aufzuhängen (und vielleicht sogar den Supporter persönlich anzugreifen) oder den Fall zu schließen. Ich ließ ihn schließen… und werde versuchen das Problem über andere Kanäle bis Redmond zu bekommen. 🙁

12. Mai 2008 um 12:19

Wetter-Informationen im Weblog mit WeatherIcon

Hurra, mein altes Wetter-Plugin tut wieder! Mit dem Plugin WeatherIcon werden die Infos von nächstgelegenen Flughafen abgefragt. Da ich im Süden Erlangens wohne, ist der nürnberger Flughafen ganz nah und die Wetterinfos sind wesentlich genauer als die von irgendwelchen internationalen Wetterseiten.

Allerdings wird das PlugIn seit zwei Jahren nicht mehr weiterentwickelt und muckte auch bei der Aktivierung. Falls jemand die gleichen Probleme hatte, hier ist, was ich tat:

  • Bei der Aktivierung kam die Meldung "Fatal error: Cannot redeclare class pear in /usr/lib/php/PEAR.php on line 103". Leider half die in dem WeatherIcon-Forum beschriebene Abhilfe nicht.
  • Weil die Klasse PEAR offenbar von meinem Provider schon doppelt bereitgestellt wird, benannte ich die Datei "WeatherIcon\libraries\PEAR.php" in PEAR2.php um. Danach ersetzte ich jedes einzelne Vorkommen von PEAR (case sensitive) durch PEAR2. Das war in den Dateien "libraries\PEAR2.php", "libraries\Parser.php", "libraries\Tar.php", "libraries\Unserializer.php", und "WeatherIconCore.php".
  • Anschließend deutschte ich noch in der Datei "WeatherIconMetar.php" das Sunrise und Sunset ein.

Und schon ging es wieder!

Nachteil: Wegen der Sonnenauf- und -untergangszeit muss ich bei der Zeitumstellung auch immer in die Optionen des Plugins…

12. Mai 2008 um 10:58

Wetter-Informationen im Weblog mit WP-Forcast

WP-ForecastWeil mein altes Wetter-PlugIn Weathericon nicht mehr mit der Version 2.5 von WordPress läuft, teste ich gerade WP-Forecast.

Ich finde es schön, wenn ich auf einem Weblog aktuelle Infos aus der Heimat desjenigen sehe. Besonders das Wetter. Deswegen möchte ich gerne, dass meine Leser die Wetter-Infos aus Erlangen sehen. Das Plugin liefert aber nicht nur die aktuellen Werte, sondern auch optional eine Vorhersage für x Tage. Ist das interessant? Ich denke eher nicht, aber ich lasse es mal so.
Leider stimmen die aktuellen Infos nicht besonders. Es zeigt als Temperatur 14 Grad an, unser Thermometer (im Schatten) zeigt 20 Grad. Das ist schon ein Unterschied. Das alte liefert (auf meinem anderen Weblog) 19 Grad. Das ist schon näher dran.

Die Wetterinfos werden von accuweather.com, einer us-amerikanischen Wetterseite, abgeholt. Klar, dass sie die Erlanger Infos nicht minutengenau haben. Schade!

PS: Bei der Recherche zu dem Artikel fiel mir auf, dass es eine "neue" Version von WeatherIcon gibt, die zwar auch schon 2 Jahre alt ist, aber möglicherweise doch mit 2.5 geht. Das probiere ich mal aus.

11. Mai 2008 um 11:03

Der Schrecken des WordPress-Updates

Aus gutem Grund zögerte ich mein WordPress-Update auf Version 2.5 immer weiter heraus. Und tatsächlich habe ich da jetzt in Summe mehr als einen ganzen Tag reingesteckt. Mein Blog ist halt schon lange dabei und weder mein eingesetztes Theme noch meine Plugins waren 2.5-konform. Bis auf das Wetter-Plugin ist jetzt wieder alles wie es soll.

Sorry für die schlechte Erreichbarkeit des Weblogs seit gestern Spätnachmittag.

Immerhin lernte ich viel über die Interna von WordPress, wie man Plugins richtig registriert und dass es ein Wunder ist, dass das alles auf der alten Version überhaupt noch lief. Wenn ich mich wieder etwas erholt habe, dann kommen die anderen Blogs, die ich administriere, dran… 😉

9. Mai 2008 um 19:25

DFB-Landesverband verbietet Videos von Amateur-Spielen

Wenn ich es richtig verstehe, dann will der DFB-Landesverband Würtemberg verbieten, dass Fußballer bzw. deren Fans selbstgedrehte Videos mit Ausschnitten aus Fußballspielen ins Internet stellen. Dabei geht es aber nicht um die Profi-Liga, sondern um Amateurspiele, die in der Regel nirgends im Fernsehen ausgestrahlt werden. Dennoch sieht der DFB hier seine Rechte verletzt und entgangenen Profit.

Wir reden hier wirklich nicht von Video-Piraten: Stolze Väter, die die Leistungen ihrer kleinen Helden bei lokalen Fußballspielen ins Netz stellen möchten, dürfen das nun nicht mehr tun. Einfach unglaublich. Der DFB hat jedenfalls jetzt die Klage gewonnen und kann damit seine Position durchsetzen. Jetzt kann man wohl nur noch politisch etwas machen.

Wer das Ganze nicht gut findet, der kann bei der Petition "Der Fußball gehört uns" mitmachen. In den letzten 6 Monaten haben sich da gerade mal 9000 Leute eingeschrieben. Damit das jemanden beeindruckt, müssen es wohl noch ein paar mehr werden. Deswegen: Weitersagen…

9. Mai 2008 um 18:50

SQL-Server-2005: PIVOT auf JOINs

Als ich mit dem PIVOT-Konstrukt arbeitete und performante Ergebnisse haben wollte, muss ich erst verstehen, wie es intern arbeitet. Das beschrieb ich im Artikel "SQL-Server-2005: schnelles Pivot?". Diese Serie soll meine Erfahrungen weitergeben und bei Verstehen der Zusammenhänge helfen. Mit ein paar Kniffen kann man dann die Ausführung erheblich beschleunigen. Der Quellcode zu diesem letzten Artikel steht übrigens hier.

Performance von "gejointen" Daten

Wenn die Basistabelle des PIVOTs aus einer Derived-Table besteht, die mittels Join die Daten aus mehreren Tabellen sammelt, dann hängt es von relativ vielen Faktoren ab, ob das PIVOT schnell ist. Das gleiche gilt natürlich auch, wenn der PIVOT auf eine View oder eine Inline-Table-Valued-Function durchgeführt wird.

Man kann es aber auf den Nenner bringen: Kann der Optimizer das PIVOT so begrenzen, dass die Gruppierung allein auf den Werten einer Tabelle basiert, die mittels Clustered-Index gelesen werden können, dann ist es schnell. In den anderen Fällen muss man mit mehr oder weniger starken Performanceeinbußen rechnen.

Als Beispiel möchte ich einen relativ gängigen Sonderfall darstellen: Das Beispiel des ersten Artikels wird so erweitert, dass die Spaltenüberschriften in einer Translation-Table TranTab stehen:
Translation-Table

In der Tabelle OpenSchema steht dann der Verweis auf den Namen des Attributes:
Tabelle Openschema mit Übersetzungstabelle

Um das gewünschte Ergebnis zu bekommen, muss man PIVOT auf eine Derived-Table ausführen:

SELECT ID, "Typ", "Datum", "Anzahl", "Dings", "Bums"
FROM (SELECT os.ID, tt.Attribute, os."Value"
FROM OpenSchema as os
JOIN TransTab as tt
ON os.AttId=tt.AttId) as dt
PIVOT
(
Max("Value")
FOR Attribute IN ("Typ", "Datum", "Anzahl", "Dings", "Bums")
) AS pvt
ORDER BY ID

Die Performance verschlechtert sich dadurch dramatisch. Im Vergleich zum reinen Lesen der Daten fast um Faktor 4. Das liegt am ungünstigen Zugriffsplan:
Zugriffsplan

Wenn man einen PIVOT ohne den Join durchführt, dann erhält man die gewohnte, gute Performance:
SELECT ID, "1" as "Typ", "2" as "Datum", "3" as "Anzahl", "4" as "Dings", "5" as "Bums"
FROM (SELECT os.ID, os.AttId as Attribute, os."Value"
FROM OpenSchema as os ) as dt
PIVOT
(
Max("Value")
FOR Attribute IN ("1", "2", "3", "4", "5")
) AS pvt
ORDER BY ID

Leider muss man dazu die Spaltenamen "hart" codieren. Das ist aber genau das, was man vermeiden wollte als man die Translation-Table einführte. Um auch mit flexiblen Spaltennamen zu einer guten Performance zu kommen, muss man im Batch zunächst die Spalten ermitteln, das PIVOT-Statement dann dynamisch zusammensetzen und ausführen:

DECLARE @sqlcmd nvarchar(1000),
@selectList nvarchar(1000),
@pivotList nvarchar(1000);

SELECT
– zunächst die Spalten aus der SELECT-Liste ermitteln
@selectList = STUFF(
(SELECT N', '+QUOTENAME(AttId)+N' AS '

+QUOTENAME(Attribute) AS [text()]
FROM TransTab
ORDER BY AttId
FOR XML PATH('')), 1, 1, N''),
– dann die Liste der Spalten ermitteln
@pivotList = STUFF(
(SELECT N', '+QUOTENAME(AttId) AS [text()]
FROM TransTab
Order BY AttId
FOR XML PATH('')), 1, 1, N'');

SET @sqlcmd = N'SELECT ID, '+@selectList +N'
FROM (SELECT os.ID, os.AttId as Attribute, os."Value"
FROM OpenSchema as os) as O
PIVOT (Max("Value") FOR Attribute IN ('+@pivotList+N')) as P
ORDER BY Id;'

EXEC sp_executesql @sqlcmd;

Das ausgeführte Statement sieht dann so aus:
SELECT ID, [1] AS [Typ], [2] AS [DATUM], [3] AS [Anzahl], [4] AS [Dings], [5] AS [Bums]
FROM (SELECT os.ID, os.AttId as Attribute, os."Value"
FROM OpenSchema as os) as O
PIVOT (Max("Value") FOR Attribute IN ( [1], [2], [3], [4], [5])) as P
ORDER BY Id;

Die Gesamtperformance dieses Beispiels ist wieder sehr gut.
Insgesamt ergeben sich mit Pivot eine Menge neuer Möglichkeiten. Wenn dabei die Performance wichtig ist, dann muss man sich jedoch genau überlegen, wie man das Statement auch wirklich schnell ausführen kann.

Diese Reihe schrieb ich letzten Oktober als Reaktion auf den Aufruf im SQL-PASS-Newsletter. Möglicherweise erscheint der Artikel noch dort. Ich veröffentliche ihn jetzt aber lieber mal bevor er mit dem bald erscheinenden SQL-Server-2008 möglicherweise veraltet… 😉
8. Mai 2008 um 23:19

Eee-Laptop mit Windows billiger als mit Linux?

Als ich bei TecChannel.de las, dass Asus ihren erfolgreichen Eee-Laptop mit Windows billiger verkaufen will als den Eee mit Linux, dachte ich zunächst an einen Scherz. Aber als ich las, dass der Eee mit Windows auch an Einzelhändler gehen soll, die Linux-Eee aber weiterhin nur über Fachhändler verkauft werden, war für mich klar, dass es hier um Politik geht, nicht um Gewinn. Schade eigentlich.

Zuckerbrot und Peitsche? Was bekommt Asus von Microsoft wohl dafür?

7. Mai 2008 um 21:26

Datenpanne: gestohlene Datensätze auf Hackerserver gefunden

Wie ich gerade bei Heise-Online lese, fanden Sicherheitsexperten bei einer gezielten Suche einen Server auf dem Hacker 1,4 GBytes gestohlene, vertrauliche Daten von über 3000 verschiedenen Servern lagerten:

In den Log-Dateien finden sich Daten von normalen Websurfern ebenso wie von Firmen, namhaften Organisationen und Dienstleistern aus dem Gesundheitssektor. […]
Die Dateien enthalten Finjan zufolge kompromittierte Patientendaten, Daten von Bankkunden, geschäftliche E-Mails sowie Outlook-Konten mitsamt der E-Mail-Kommunikation. […]
Die Daten seien weder mit einem Zugriffschutz versehen noch verschlüsselt worden, berichtet Finjan weiter. Jeder, der zufällig auf den Server gestoßen ist, hätte sie einsehen können – nicht nur die Hacker, die das Botnetz kontrolliert und die Informationen gestohlen haben. Die Daten seien alle innerhalb eines Monats aufgelaufen.

Besonders die Bank- oder Patientendaten sind sicher auch schon für kleine Gauner interessant. Ob die betroffenen Personen darüber informiert werden?

7. Mai 2008 um 20:57

Windows XP SP3

Bei allen Vorträgen, die ich in den letzten Wochen besuchte – inklusive der PASS-Konferenz in Neuss – hatten die Referenten Laptops mit Windows Vista. Das hat mich dann doch etwas gewundert, weil in meinem Bekanntenkreis alle Windowser noch XP haben und in meiner Firma Vista auch nicht eingesetzt wird.

Jedenfalls erreichte mich heute die Nachricht, dass seit heute das Service Pack 3 (SP3) für Windows XP zum Herunterladen bereit steht. Es ist im Microsoft Download Center unter verfügbar (der Download geht sogar mit Firefox):

Ab Mitte des Jahres wird es mit dem automatischen Update verteilt. Ich werde wohl noch ein paar Tage abwarten und es dann daheim erst installieren, wenn sich die gemeldeten Probleme in Grenzen halten.

Microsoft weißt übrigens auf einen Fehler schon hin:

Kunden, die Microsoft Dynamics Retail Management System (RMS) einsetzen, sollten das SP3 derzeit noch nicht installieren. Eine Möglichkeit zur Behebung des bereits veröffentlichten Kompatibilitätsproblems wird vermutlich noch in diesem Monat veröffentlicht.

Außerdem sollten Verwender des ATI-Catalyst das SP3 noch meiden, man kann damit den Bildschirm nicht mehr drehen.

Überblickinfos zu den Änderungen stehen in den 12-seitigen Dokument "Overview of Windows XP Service Pack 3" und in den Release-Notes. Die Details stehen im KB-Artikel "946480 – List of fixes" (ziemlich lang und beeindruckend).

Windows XP SP3 enthält alle bereits veröffentlichten Updates für das Betriebssystem sowie einige neue Funktionen, die jedoch die Nutzung von Windows XP nicht wesentlich verändern. Für Unternehmenskunden, die auf Windows Vista setzen, erleichtern Verbesserungen in Windows XP SP3, wie der Netzwerkzugriffsschutz, die gemeinsame Verwaltung von Windows XP und Windows Vista innerhalb einer Netzwerkumgebung.

Weitere Informationen und Probleme anderer Anwender zum SP3 stehen auch im TechNet-Forum.

PS: Der Download der 320 MBytes war etwas zäh. Offenbar war ich nicht der einzige, der das SP3 haben wollte…

7. Mai 2008 um 18:58

SQL-Server-2005: PIVOT und Performance

Als ich mit dem PIVOT-Konstrukt arbeitete und performante Ergebnisse haben wollte, muss ich erst verstehen, wie es intern arbeitet. Das beschrieb ich im Artikel "SQL-Server-2005: schnelles Pivot?". Diese Serie soll meine Erfahrungen weitergeben und bei Verstehen der Zusammenhänge helfen. Mit ein paar Kniffen kann man dann die Ausführung erheblich beschleunigen. Der Quellcode zu diesem vorletzten Artikel steht übrigens hier.

Performance

Um ein Gefühl dafür zu bekommen, wird die im ersten Artikel beschriebene Tabelle "OpenSchema" mit 1,9 Mio Datensätzen gefüllt und ausgelesen. Interessant ist, wie viel "Overhead" ein PIVOT ausmacht. Wenn man ein SELECT auf die ganze Tabelle mit einem PIVOT im gleichen Batch ausführt und dazu mit "Strg+M" den tatsächlichen Zugriffsplan anzeigen lässt, dann bekommt man neben den Zugriffsplänen auch den geschätzten, prozentualen Anteil der Statements im Batch.

SELECT ID, Attribute, "Value"
FROM OpenSchema

SELECT ID, attr1 as Typ, attr2 as Datum, attr3 as Anzahl, attr4 as Dings, attr5 as Bums
FROM OpenSchema
PIVOT
(
Max("Value")
FOR Attribute IN ("attr1", "attr2", "attr3", "attr4", "attr5")
) AS pvt
ORDER BY ID

Liegt ein Clustered-Index auf der Spalte ID, dann ist das Verhältnis 44% zu 56%. Das bedeutet, der Optimizer schätzt etwa 22% Aufschlag für den PIVOT gegenüber dem einfachen Auslesen. Das deckt sich mit dem Zugriffsplan des PIVOT: Hier benötigt das einfache Lesen auch 78%:

Das ändert sich allerdings dramatisch, wenn kein geeigneter Index vorhanden ist. Dann ist das Verhältnis im Batch 1% zu 99%.

Da für die Gruppierung bereits anhand der ID sortiert werden muss, hat das nachfolgende „ORDER BY ID“ tatsächlich keinerlei Auswirkungen auf den Zugriffsplan. Das sieht allerdings anders aus, falls man nach anderen Kriterien sortieren lässt. Das wird aber nur benötigt, wenn man Joins im PIVOT verwendet. dazu komme ich im letzten Artikel.

Zusammenfassend kann man sagen, dass ein PIVOT immer dann "schnell" ist, wenn ein Clustered Index auf den Gruppierungsfeldern liegt. Ein normaler Index hilft hier nicht weiter. Wie schnell er tatsächlich ist, hängt – wie immer – von der darunter liegenden Hardware ab…

Diese Reihe schrieb ich letzten Oktober als Reaktion auf den Aufruf im SQL-PASS-Newsletter. Möglicherweise erscheint der Artikel noch dort. Ich veröffentliche ihn jetzt aber lieber mal bevor er mit dem bald erscheinenden SQL-Server-2008 möglicherweise veraltet… 😉
6. Mai 2008 um 18:50

Was ist ein Experte?

Beim Wegwerfen alter Zettel fand ich eine Notiz aus einer Schulung (zum Thema "im Kopf des Kunden denken"), die ich amüsant fand:

Ein Experte ist jemand, der einem Anfänger etwas über sein Fachgebiet beibringen kann. Sonst ist er ein Fachidiot.

Für mich hat das Wort Experte eher nicht so einen guten Klang. Meine Oma sagte meistens:

Du bist mir schon so ein Experte…

Das war nicht anerkennend gemeint. 😉