Jeden Morgen auf dem Weg zum Bahnhof radle ich an einem Mann vorbei, der an einem Grünstreifen mit Blick auf die Bahnschienen auf seinem Moped sitzt und eine raucht. Dabei schaltet er seine Möhre allerdings nicht aus, sondern lässt sie so dahin tuckern. Es berührt mich immer irgendwie eigenartig, wenn ich an dem rauchenden Typen mit seinem qualmenden Zweirad vorbei fahre…
Beiträge in 5-Sekunden-Intervallen zusammenfassen
Gestern fragte mich meine Kollegin Olga nach einem Trick, wie man Datensätze, die in 5-minütigen Intervallen eingefügt wurden mittels GROUP-BY gruppieren kann. Die Frage gefällt mir unheimlich gut, weil sie mit SQL-Server-2005 nur mit ein paar Kniffen zu lösen ist. Man muss das Datum und Uhrzeit nach relevanten Teilen aufsplitten und die Minuten ganzzahlig durch 5 dividieren. Danach muss man dann gruppieren.
Weil ich gerade keine Testtabellen zur Hand habe, nehme ich einfach die Views sys.objects, die in jeder SQL-Server-Datenbank (ab Version 2005) drin ist:
SELECT
CONVERT(nvarchar(12), modify_date, 104) AS "date",
DATEPART(hh, modify_date) AS "hour",
DATEPART(mi, modify_date) AS "minute",
CAST((DATEPART(ss, modify_date)/5)*5 AS NVARCHAR(2))
+' – '+CAST(((DATEPART(ss, modify_date)/5)+1)*5-1 AS NVARCHAR(2)) AS "5 seconds interval",
COUNT(*) AS "num"
FROM sys.objects
GROUP BY
CONVERT(nvarchar(12), modify_date, 104),
DATEPART(hh, modify_date),
DATEPART(mi, modify_date),
DATEPART(ss, modify_date)/5
So finde ich es noch etwas hübscher:
SELECT
date,
hour,
minute,
CAST((second/5)*5 AS NVARCHAR(2))
+' – '+CAST(((second/5)+1)*5-1 AS NVARCHAR(2)) AS "5 seconds interval",
COUNT(*) AS "num"
FROM (SELECT
CONVERT(nvarchar(12), modify_date, 104) AS "date",
DATEPART(hh, modify_date) AS "hour",
DATEPART(mi, modify_date) AS "minute",
DATEPART(ss, modify_date) AS "second"
FROM sys.objects) AS Int
GROUP BY
date,
hour,
minute,
second/5
Natürlich ist das ohne WHERE-Bedingung ziemlich langsam. Aber auch mit kann es nicht besonders schnell sein, weil erst eine Funktion ausgeführt werden muss, bevor die Gruppierung durchgeführt wird. Will man es schnell haben, dann muss man die einzelnen Bestandteile in eigene Spalten legen und einen (clustered) Index darauf legen.
Was man beim Vorstellungsgespräch nicht machen sollte…
Bereitet sich noch jemand gerade auf Bewerbungsgespräche vor?
Do Unto Others: Screw With Your Job Interviewer – The most popular videos are a click away
Warum sollte jemand zu so einem Gespräch gehen und den Job nicht haben wollen?
Gelten auch böswillig entfernte Schilder?
Letze Woche fuhr ich – wie jeden Tag – mit meinem Radl über so eine Fußgängerbrücke, die als Ausweichstrecke für die Zeit des Abriss/Neubau der "Richtigen" dient. Dabei handelt es sich eigentlich um eine Bauruine. Sie ist fertig, nur der Anschluss an die Straße fehlt. Die Rampen wurden provisorisch gebaut und sind ziemlich stabil.
Beim Aufgang machten sie ein Schild hin "Fußgänger" (also das blaue, runde mit einem Fußgänger darauf) und darunter ein weißes eckiges mit der Schrift "Radfahrer absteigen". Oben angekommen stellten sie ein wieder ein blaues Fußgängerschild hin, darunter ein weißes eckiges mit dem Bild eines Fahrrades darunter. An Ende der Brücke steht wieder ein blaues Fußgängerschild mit "Radfahrer absteigen" darunter. Und das ganze in beide Richtungen.
Vor etlichen Wochen fehlte plötzlich eines der beiden weißen Schilder mit dem Radl darunter. Ein paar Tage später nur, folgte das zweite. Ich gehe davon aus, dass sie geklaut wurden. Aber wer kann das schon sagen. Dennoch vollziehe ich dort immer das Ritual: An der Rampe absteigen und rauf schieben, dann drüberfahren und zuletzt für abwärts wieder absteigen. Das machen fast alle so. Einige fahren allerdings auch die Rampe rauf oder runter.
Neulich kam mir ein Rentner mit einem Kind entgegen, beide schoben ihr Radl über die Brücke. Das ist selten. Oft hingegen passiert es, dass Leute anhalten und dem Bau zusehen. Naja, jedenfalls war 20m vor mir ein Mann, der gerade über die Brücke fuhr. Er wurde von dem rüstigen Senior recht rüde gefragt wurde, ob er sich denn nicht schäme.
Ich fand, das sei eine interessante Frage, die mir bis dahin noch nicht in den Sinn gekommen war. Als Pendler auf dieser Strecke wusste natürlich, dass es eigentlich so vorgesehen war, dass man über die Brücke fahren darf. Der Rentner konnte das natürlich nicht wissen und war auch nicht an den Erklärungen des Mannes interessiert. Aber der springende Punkt ist doch: Gelten auch böswillig entfernte Schilder weiter?
Ich fand die Frage ziemlich amüsant, als ich langsam vorbei fuhr…
Einen Aufzug manipulieren? (Update)
Ich schaue mir unregelmäßig die Neuzugänge an Videos auf Metacafe an. Dort fand ich gestern eine Anleitung, wie man einen Aufzug "hacken" kann: Angeblich hält er unterwegs nirgendswo, wenn man 5 Sekunden lang die Taste für das Stockwerk und die "Tür schließen"-Taste gleichzeitig gedrückt hält. Das nenne sich "express mode". Als ich das Video heute suchte, um zu schauen was da dran sein könnte, stieß ich auf so viele Anleitungen zu diesem Hack, dass ich doch ganz schön erstaunt war…
Hier ist eine der besseren:
How To Hack An Elevator – The most amazing bloopers are here
Bei Google fand ich einige Artikel, die diesen Trick bestätigen. Hm, vielleicht sollte man das weniger "Express-Modus", sondern eher "Egoisten-Modus" nennen… 😉
Update (15.7.2008): Heute fuhr ich extra mal die drei Stockwerke von der Kantine zu meinem Büro mit einem Aufzug. Dieser Otin-Aufzug hatte keine "Tür schließen"-Taste! Mit der "Tür öffnen"-Taste klappte es aber auch nicht… Naja, meine Firma hat ja noch mehr Aufzüge. Ich bleibe dran.
Management by Sword
Ist das eine Parodie oder ernst gemeint?
S.W.O.R.D – Watch the best video clips here
S – swift
W – willing
O – organised
R – resiliant
D – determined
SQL: Paging
Als uns letzte Woche Darius Parys das neue Entity-Framework von Microsoft vorstellte, warfen wir auch einen Blick auf das (unter der Haube) produzierte SQL. Dabei viel mir auf, dass dort das Paging-Problem – Die Daten werden in Häppchen von SQl-Server angefordert und gelesen – mittels ROW_NUMBER gelöst wird. Das ist natürlich ein sehr pragmatischer Ansatz, der aber nur dann wirklich performant klappen kann, wenn auf dem Ordnungskriterium (meist dem Schlüssel) auch wirklich der Clustered-Index liegt. Die Variante von Microsoft war jedenfalls erheblich komplizierter als der gängige, deswegen kann ich den auch nicht auswendig hinschrieben.
In der Regel würde ich aber sowieso empfehlen den Clustered-Index aber eher auf fachliche Kriterien zu legen, damit alle Datensätze, die zugleich bearbeitet werden auf den gleichen (oder benachbarten) Datenseiten liegen. Damit ist aber fast jede Art des Paging auf den technischen Schlüsseln langsam.
Blöd ist natürlich auch, dass Einfügevorgänge seltsame Nebenwirkungen haben können. Wenn ich z.B. eine "Seite" von Daten am Bildschirm sehe und dann eine Minute später die zweite abrufe, dann bekomme ich als ersten unter Umständen Sätze angezeigt, die ich schon auf der ersten Seite sah, wenn inzwischen Datensätze eingefügt wurden. Dito beim Löschen, nur umgekehrt. 🙂
Bei uns werden daher meistens die letzten IDs gespeichert und dann die danach folgenden Daten abgerufen. Mit TOP kann man dann steuern, wie viele man bekommen möchte. Wie gesagt, auch sollte wenigstens ein Index auf den Schlüssel liegen, am besten ein Clustered…
Tom Rizzo von Microsoft schlug uns 2002 hingegen vor, dass wir zu dem Zweck zwei verschachtelte TOPs verwenden, was auch wieder nur dann schnell ist, wenn der Index stimmt. 😀
XML im SQL-Server: Links zum Thema
Als ich Dienstag Abend den Vortrag "XML im SQL-Server" hielt, machte mich Klaus auf eine gute Einsteiger-Serie zum Thema XML aufmerksam: Die Webcasts von Dirk Primbs und Frank Fischer.
Hier noch ein paar Links, falls sich jemand autodidaktisch einarbeiten will:
- XML Support in Microsoft SQL Server 2005
- Beginning SQL Server 2005 XML Programming
- White Paper: What's New for XML in SQL Server 2008 (das hätte ich mal besser eher gefunden…)
- XML Jumpstart Workbench
- TSQL String Array Workbench
Viel Vergnügen beim Stöbern!
Danke, Microsoft!
Ich hatte ja sowieso schon einen gewissen Ärger auf Microsoft wegen des aktuellen Patchday, aber heute Abend hat mich Microsoft so richtig geärgert. Gestern entschied ich mich bewusst dagegen den neusten Hotfix für Windows-XP zu installieren, weil ich von einzelnen Problemen gehört hatte. Aber heute half das gar nichts, denn bereits kurz nach der Anmeldung verkündete mein Rechner, dass er jetzt aber einen Neustart benötige: ultimativ, mit Countdown – ohne Abbruch. Danke, Microsoft!
Bei dem Shutdown ging es dann weiter. Eine hässliche Meldung erschien, nach dem Wegklicken eine andere und noch eine. Die dritte fotografierte ich schließlich. Der Rechner fuhr nicht runter, dafür ging der Prozessor auf 100% Last – der Rechner röhrte schlimmer als beim Erstellen einer DVD. Und das fast 5 Minuten lang. Danke, Microsoft!
Aber das war längst nicht alles. Als der Rechner mich nach dem Neustart dann mit der Meldung überraschte, dass mein Rechner gerade neu gestartet werden musst, war ich schon etwas angemacht. Aber das quittierte ich noch mit einem Schulterzucken…
Der Ärger fing so richtig an als ich nicht mehr ins Internet kam. Komischerweise klappte der PING nach heise.de, aber ich konnte mit keinem Browser Seiten abrufen. Sogar das Stoppen meiner Fire-Wall brachte keine Abhilfe. Erst nach der Deinstallation des Hotfixes kam ich wieder ins Internet. Danke. Microsoft!
Woran das liegt, kann man inzwischen auch im Internet nachlesen (hier onlinekosten.de):
Demnach liegt der Fall so, dass der Microsoft-Patch mit der Bezeichnung KB951748 neue Konfigurationen am DNS-Client herbeiführt, sodass für DNS-Anfragen nun von anderen, auf Zufall basierenden UDP-Ports aus gestellt werden: Ein Eingriff in das System, den ZoneAlarm mit dem Lahmlegen der Internetverbindung beantwortet.
Entgegen den Infos in dem oben genannten Artikel fand ich keine korrigierte Version von Zone-Alarm. Echt blöd… Jetzt darf ich den Patch erneut installieren und dann die Sicherheitseinstellungen auf "mittel" setzen. Ich bin begeistert. Eigentlich hatte ich heute andere Dinge vor.
PS: Ich weiß schon ganz genau, dass jede Menge Freunde und Bekannte in ähnliche Situationen geraten werden, weil ich denen auch diese Firewall installierte. Und da sie nicht ins Internet kommen und nur einen PC haben – wen rufen die wohl an? Danke, Microsoft!
NArrange – Source-Code verhübschen
Auf Steinis Blog fand ich einen Hinweis, den ich gerne weiter geben möchte: Mit NArrange kann man sehr schön automatisiert seinen .Net-Source-Code verhübschen. Der Code wird dadurch zwar länger, aber durch die Aufteilung in Regionen doch viel übersichtlicher. Wer von Hause aus schon einen sehr hübschen und übersichtlichen Code produziert benötigt das natürlich nicht, aber für mich ist das schon ehr nützlich…
öffentliche Design-Diskussion für das Entity-Framework 2.0
Als uns Darius Parys letzte Woche das neue Entity-Framework vorstellte, machte er uns darauf aufmerksam, dass das Entwicklerteam hier absolutes Neuland betritt. Das Team stellt bereits die Entwürfe zur Version 2.0 öffentlich auf deren Weblog "Entity Framework Design" bereit und bittet um Feedback von den Entwicklern, die das einsetzen. Das beeindruckt mich schon.
Transparency in the design? Over the years Microsoft has been opening up the engineering processes incrementally. Long ago there were only betas, and that was the only chance to see and give feedback about a product before it shipped. Then we started to do Community Tech Previews (CTPs). CTPs enabled us to provide bits more often and gather feedback frequently. The goal with increasing the transparency of design is to take this one step further: we would like to enable folks that are interested in Entity Framework version 2 to follow the design topics as we discuss them, and have the opportunity to provide feedback right during the time where we are actively discussing a certain aspect and before we have made a final decision.
Es würde mich sehr freuen, wenn das Schule macht. Leider werden die Anwender (in dem Fall sind das wir Entwickler) bei solchen Sachen in der Regel nicht wirklich einbezogen. Hier bietet sich die Chance frühzeitig seine Vorschläge einzubringen und sich aktiv einzubringen. Das funktioniert bei Open-Source-Projekten ja schon länger ganz gut. Hier zeigt sich auch, dass sich da wirklich nur die einbringen, die sich echt für das Thema interessieren. Ich rechne nicht mit einer "Kommentar-Flut"… 😉
SQL-Server: DBCC findet nicht alle Probleme
Vor einigen Monaten diskutierten wir mit Microsoft, weil unsere Kunden mehrere defekte Datenbanken hatten, die "unsere" Prüfung mittels DBCC CHECKDB nicht als defekt erkannte. Wenn ein Zugriff auf die Spalten über einen Index erfolgte, dann kam eine Fehlermeldung. Das passiert immer dann, wenn eine Statistik korrupt ist.
Wir wollten, dass die Kollegen in Redmond das DBCC so erweitern, dass diese Probleme ebenfalls erkannt werden. Stat dessen haben sie das verhalten jetzt im KB-Artikel 954467 beschrieben. Den Trick mit dem DBCC SHOW_STATISTICS verrieten sie uns damals nicht, aber so richtig doll ist das ja auch nicht. Eine echte Prüfung wäre schon schöner… 😉