Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

30. Mai 2007 um 18:55

Microsoft: Surface-Computer

Letztes Jahr gab es ja schon einige sehr aussehen erregende Präsentationen (hier, hier und hier)zu ungewöhnlichen Benutzeroberflächen. Microsoft ist jetzt offenbar auf den Zug aufgesprungen. Verblüffend finde ich, dass dieser Computer noch in diesem Jahr auf den Markt kommen soll.

Im Gegensatz zu dem oPhone scheint das keine Parodie zu sein… 😉

Update: Auf der Microsoft-Homepage gibt es noch mehr Infos: www.microsoft.com/surface

30. Mai 2007 um 18:12

Easy SQL Scripter

Das Werkzeug "Easy SQL Scripter" scheint mir recht nützlich zu sein. Das "SQL Server Management Studio" (SSMS) bietet ja auch schon einige Script-Generierungen an, aber immer nur für einzelne Datenbank-Objekte. Mit dem Plugin wird das SSMS so erweitert, dass man für eine ganze Liste von Objekten die Create-Befehle erzeugt bekommt. Als Bonbon werden auch Insert-Statements für die Daten erzeugt.

Schade ist nur, dass es immer mit dem ganzen Paket "Easy Deploy" installiert werden muss. Deswegen konnte ich mich nicht dazu durchringen, das "mal eben" zu testen, sondern lege es auf meinen Stack…

gefunden bei "The Daily Grind"
30. Mai 2007 um 18:02

Alles relativ: Zauberwort und neu

Als ich heute die neue Ausgabe 05/06 der Zeitschrift "IT-Fokus" aufschlug, sprang mir die Überschrift des Editorial gleich ins Auge: "Das neue Zauberwort heißt Web 2.0". Das ist allerdings nicht ironisch gemeint, sondern ganz im Ernst. Wo war der Redakteur die letzten Jahre? In der Wikipedia steht es seit Oktober 2005, ich meine es auch schon früher gelesen zu haben.

Das Problem ist einfach die unterschiedliche Wahrnehmung: "neu" ist für mich etwas, dass es noch nicht lange gibt, sagen wir mal maximal 6 Monate. Immerhin stützt die Zeitschrift sich auf eine Umfrage in der 68% von 406 befragten Führungskräften davon überzeugt sind, dass "Web 2.0" "die größten Veränderungen im Dialog mit den Kunden bewirken werde".
Die Angabe ist wieder relativ "die größten". Welche anderen Möglichkeiten zur Auswahl standen, wird leider nicht angegeben. Ob einer der Befragten tatsächlich große Veränderungen erwartet, oder doch nur geringe Auswirkungen, die aber größer sind als die Auswirkungen anderer Technologien, bleibt offen. 😉

Zum Schluss noch als Schmankerl die vorletzten Sätze:

Unternehmen stehen nicht nicht vor der Frage, ob Web 2.0 existent ist oder nicht. Vielmehr müssen sie die Frage beantworten, wie sie mit dem realen Phänomen Web 2.0 umgehen.

29. Mai 2007 um 20:19

ReportViewer Control

Mittlerweile hat es sich herumgesprochen, dass Microsoft mit dem Visual Studio 2005 auch ein ReportViewer-Control bereitstellt, dass man einfach so in seinen Anwendungen einsetzen kann. Damit kann drei Dinge, eines davon wird von Microsoft aber nicht groß beschrieben…

  • Man kann Berichte ansehen, die in einem Reporting-Service aufbereitet wurden.
    Diese Nutzung beschreibt Microsoft super ausführlich. Immerhin wird der Reporting-Service inzwischen sogar mit der Express-Edition ausgeliefert.
  • Man kann in seinem Projekt einen Bericht erstellen und ihn in seine Anwendung reinkompilieren. Das wird von Microsoft leidlich beschrieben. Man kann damit einen Bericht am erstellen und aufbereiten (mit allen schicken Features der Reporting-Services ohne ihn installieren zu müssen). Leider kann man damit nur genau einen Bericht pro Control ansehen.
  • Außerdem kann man den Control dazu nutzen viele verschiedene Berichte anzuzeigen. Im Prinzip kann man sogar beliebige Berichte anzeigen, wenn man bereit ist, den Aufwand zu erbringen. Damit kann man aus den Reporting-Services das schickste nutzen, die Anzeige und das Rendering der Berichte (inkl. Export nach PDF, Excel usw.), ohne eine Server-Anwendung installieren und konfigurieren zu müssen. Warum das von Microsoft nicht an die große Glocke gehangen wird, ist klar, oder? Sie erwähnen zwar mal die Möglichkeit, aber eine Anleitung fand ich nicht…

Zum letzteren fand ich lediglich einen brauchbaren Artikel, der in Visual-Basic kurz skizziert, wie man das anstellen muss: "Take Control of Your Reports with ReportViewer, Part 2". Er ist kostenpfichtig, die Code-Fragmente sind frei zugänglich. Leider wird darin alles in Visual-Basic gemacht. Es hat eine Weile gedauert bis ich das Prinzip verstanden habe. Ich habe folgende Erkenntnisse gewonnen:

Das ReportViewer-Control übernimmt nur die Anzeige des Berichts: also das Rendering und die Aufbereitung der Daten. Alles andere muss die eigene Anwendung erledigen:

  • Zusammenstellen des SQL-Statements, mit dem die Daten gelesen werden. Die Query kann man eigentlich auch aus dem Bericht rauslesen, wenn man sich nicht scheut, sie aus dem XML-File zu entnehmen.
  • Die Übergabe der im Bericht enthaltenen Parameter. In dem Beispiel wird gezeigt, wie man dem Bericht-Objekt die Parameter entlocken kann.
  • Bereitstellen einer Datasource, die dynamisch erstellt werden kann. Nur der Name muss so sein, wie im Bericht angegeben.

Im ersten Schritt kann man so eine Hülle für das ReportViewer-Control schreiben, die dem Entwickler anhand von bestimmten Namens-Konventionen das Leben leicht macht, z.B. DataSource1 oder Param01.
Andererseits ist die Struktur der Berichte (XML-Datei) sehr einsichtig, deswegen kann man sie auch im ersten Schritt auswerten und die Query, deren Parameter und den Namen der Data-Source ermitteln. Im zweiten Schritt muss man das Control lediglich initialisieren und schon hat man ein Universal-ReportViewer-Control.

25. Mai 2007 um 21:02

Systemhelden

Für alle Systemadministratoren gibt es jetzt eine eigene Serie auf SYSTEMHELDEN.COM. Wer man die Faxen besonders dicke hat, der kann sich bei dem Spiel "Hau den DAU" abreagieren…

Achtung: Nicht für Minderjährige geeignet!

gefunden bei Thomas Brandt
25. Mai 2007 um 17:58

Umfassende Compliance ist ein Frage der Awareness

Als ich heute in der Computerwoche die Werbung mit der Überschrift "Umfassende Compliance ist ein Frage der Awareness" sah, dachte ich zuerst das sei eine Parodie. Aber es war eindeutig ernst gemeint.
Da ich überhaupt nicht kapierte was das bedeutet, hatte ich keine Lust den länglichen "Promotion"-Artikel zu lesen (das "Promotion" oben links war leicht zu übersehen…). Wer eine Idee hat, worum es geht, kann mich ja aufklären… Interessanter fände ich allerdings einen "wild guess", der gut klingt aber nicht stimmt… 😉

24. Mai 2007 um 18:50

Ergänzung zu USB-Sticks

Zu dem Artikel "USB-Sticks nicht einfach abziehen" habe ich noch ein paar interessante Ergänzungen.

Der Anlass ist verständlich: Ich habe in der Firma einen neuen USB-Stick bekommen, endlich mit USB-2.0. Der ist schön schnell. Auch benötigt die Schutzsoftware keine Admin-Rechte mehr, sodass ich das Ding an jedem Testrechner nutzen kann (auf Testrechnern haben wir üblicherweise keine Admin-Rechte).
Leider hat er aber keinen einschaltbaren Schreibschutz! Wenn ich also jetzt meine geliebten Tools drauf spiele und dann an einen PC im Testnetz stecke, dann muss ich ihn laut Vorschrift in die Virenprüfung schicken, prüfen lassen und darf ihn danach erst wieder verwenden. Weil ich aber das Passwort vorher auf einen Dummy-Wert setzen muss und der Vorgang ein paar Tage dauern kann, macht das nicht wirklich Spaß…
Wie kann man einen dienstlichen Stick ohne Schreibschutz kaufen? Aber vermutlich bin ich selber schuld, weil ich das nicht explizit als Anforderung auf die Bedarfsmeldung schrieb. Aber damit habe ich echt nicht gerechnet. Was glauben die Einkäufer wohl, wofür wir die Dinger nutzen… 😉

Kontrollieren, ob das Caching ausgeschaltet ist

Genug der Maulerei, sonst bekomme ich nie wieder ein IT-Gimmick genehmigt… :-))
Wenn man etwas Glück hat, dann erkennt Windows in dem USB-Device eine Festplatte. Dann kann im Geräte-Manager den Schreib-Cache deaktivieren. Unter Windows-XP öffnet man dazu die Eigenschaften des "Laufwerkes", bei mir daheim z.B. "SigmaTel MSCN USB Device". Im Reiter "Richtlinien" kann man dann "für schnelles Auswerfen optimieren" anklicken. Das war bei mir, wie "Paceman" als Kommentar zu meinem ersten Artikel schrieb, aktiviert.

Start des Geräte-Managers

Dazu unter "Start|Ausführen" einfach "devmgmt.msc" ausführen. Das geht aber nur mit Admin-Rechten. Deswegen verwende ich daheim dazu MachMichAdmin: ich öffne eine Eingabeaufforderung mit Adminrechten und starte dann "devmgmt.msc"

Dialog "Hardware sicher entfernen"

Falls man den Dialog "Hardware sicher entfernen" bzw. das kleine Icon in der Taskbar nicht angezeigt bekommt, dann kann man es manuell über "Start | Ausführen" aufrufen:
rundll32 shell32,Control_RunDLL hotplug.dll

Ja, OK, ist nicht wirklich leicht zu merken. Aber immerhin benötigt man dafür keine Admin-Rechte…

24. Mai 2007 um 18:18

SQL-Server: Was war denn so los?

Dieser Tage fragte mich ein Kollege, wie man statistische Informationen darüber bekommen kann, also in absoluten Zahlen, was am SQL-Server seit dem letzten Start passiert ist. In den Performance-Countern werden per Definition immer nur die aktuellen Zustande bzw. aktuelle Werte pro Sekunde.

Ich persönlich finde die Informationen der Prozedur "sp_monitor" sehr aussagekräftig:

  • cpu_busy: Die Anzahl von Sekunden, während derer von der CPU des Servercomputers für SQL Server Vorgänge ausgeführt wurden.
  • io_busy: Die Anzahl von Sekunden, während derer von SQL Server Eingabe- und Ausgabevorgänge ausgeführt wurden.
  • idle: Die Anzahl von Sekunden, während derer SQL Server sich im Leerlauf befand.
  • packet_errors: Die Anzahl von Fehlern, die von SQL Server beim Lesen und Schreiben von Paketen festgestellt wurden.
  • total_read: Die Anzahl von Lesevorgängen durch SQL Server.
  • total_write: Die Anzahl von Schreibvorgängen durch SQL Server.
  • connections: Die Anzahl von Anmeldungen oder versuchten Anmeldungen an SQL Server.

usw.

23. Mai 2007 um 20:00

Online-Bewerbungen und Fachkräftemangel

Laut dem Artikel "Mittelstand gehen die Fachkräfte aus" in der Zeitschrift IT-Mittelstand (Ausgabe 5/2007) nutzen noch relativ wenig Firmen deren Homepage für die "Rekrutierung neuer Mitarbeiter".

Aufgeschlüsselt nach Firmengröße (in Mitarbeitern):
50 – 100: 15,5%
100 – 300: 19,5%
300 – 500: 24%
500 – 1000: 27%
>1000 : 26%

Leider ist es wie so oft in diesem Magazin: Eine technische Lösung wird hoch umjubelt, negative Punkte kommen nicht vor und eine differenzierte Betrachtung findet nicht statt. Der Grund ist meist, dass Artikel stark an den Veröffentlichungen einer Firma angelehnt sind. In diesem Fall der Firma "s+p Software und Consulting AG", die Personalsoftware vertreibt.
Der Artikel wird damit eingeleitet, dass "wegen der demografischen Entwicklung" mit stark rückläufigen Ausbildungszahlen zu rechnen ist. Deswegen müssen Firmen um Mitarbeiter stärker werben und die Personalbeschaffung soll mit geeigneter Software unterstützt werden.

Hier würde ich mir eine mehrdimensionale Betrachtung wünschen: Wie spielt die Verlängerung der Lebensarbeitszeit da mit rein? Kann es so bleiben, dass die Firmen Ihre IT-Mitarbeiter mit 55 Jahren in den Vorruhestand schicken?
Warum gelingt es den Firmen nicht ausreichend IT-Fachkräfte auszubilden? Gibt es wirklich zu wenig Interessenten?

Ich habe keine Ahnung, ob unsere Firma repräsentativ ist, aber meines Wissens haben wir immer deutlich mehr Bewerber für Ausbildungsplätze als wir dann nehmen können. Könnte es sein, dass die Firmen, die sich beschweren gar keine oder nur wenige IT-Lehrlinge ausbilden? 😕

23. Mai 2007 um 19:58

SQL Server: Trailings blanks

When SQL Server compares two strings, it makes a comparison from left to right and treats the shorter expression as though it was padded with spaces to equal the length of the longer string.
For most people the result is unexpected: padded blanks are ignored!

Lets see some samples:

'Hello ' = 'Hello' --> true

The same applies for unicode:

N'Hello ' = N'Hello' --> true

LIKE behaves a little different. Firstly comparing unicode results different:

'Hello ' LIKE 'Hello' --> true
N'Hello ' LIKE N'Hello' –> false

And second blanks in the pattern are allways significant:

'Hello' LIKE 'Hello ' --> false
N'Hello' LIKE N'Hello ' –> false

What about LEN? It behaves consistent to the test for equality: padding blanks are ignored.

LEN('Hello') --> 5
LEN('Hello ') –> 5
LEN(N'Hello') –> 5
LEN(N'Hello ') –> 5

DATALENGTH('Hello') --> 5
DATALENGTH('Hello ') –> 6
DATALENGTH(N'Hello') –> 10
DATALENGTH(N'Hello ') –> 12

So we have some possible solutions, if we neeed to check for equality with blank awareness:

1. Use allways unicode and LIKE
2. add some dummy character at the end:
'Hello'+ '#'= 'Hello '+ '#'
N'Hello'+N'#'=N'Hello '+N'#'

3. convert to varbinary:
cast( 'Hello ' as varbinary(10)) = cast( 'Hello' as varbinary(10))
cast(N'Hello ' as varbinary(20)) = cast(N'Hello' as varbinary(20))

4. compare datalength:
'Hello'= 'Hello ' AND DATALENGTH( 'Hello')=DATALENGTH( 'Hello ')
N'Hello'=N'Hello ' AND DATALENGTH(N'Hello')=DATALENGTH(N'Hello ')

P.S.
Please be aware that the described behavior applies only to varchar and nvarchar, not char/nchar!
CHAR/NCHAR are always filled with blanks.
If you use ANSI_PADDING OFF trailing blanks are trimmed when inserted in a table.

-- ANSI
declare @vchar1 varchar(10),
@vchar2 varchar(10);

set @vchar1 = 'Hello ';
set @vchar2 = 'Hello';

select
'"'+@vchar1+'"' as "@vchar1",
'"'+@vchar2+'"' as "@vchar1",
case when @vchar1=@vchar2
then 'true'
else 'false' end as "@vchar1=@vchar2",
case when @vchar1 like @vchar2
then 'true'
else 'false' end as "@vchar1 like @vchar2",
case when @vchar2 like @vchar1
then 'true'
else 'false' end as "@vchar2 like @vchar1", –> false
case when @vchar1+'#'=@vchar2+'#'
then 'true'
else 'false' end as "@vchar1+'#'=@vchar2+'#'", –> false
case when cast(@vchar1 as varbinary(10)) = cast(@vchar2 as varbinary(10))
then 'true'
else 'false' end as "cast(@vchar1 as varbinary(10)) = cast(@vchar2 as varbinary(10))",
case when @vchar1=@vchar2 AND DATALENGTH(@vchar1)=DATALENGTH(@vchar2)
then 'true'
else 'false' end as "@vchar1=@vchar2 AND DATALENGTH(@vchar1)=DATALENGTH(@vchar2)";
go

– Unicode
declare @nvchar1 nvarchar(10),
@nvchar2 nvarchar(10);

set @nvchar1 = 'Hello ';
set @nvchar2 = 'Hello';

select
'"'+@nvchar1+'"' as "@nvchar1",
'"'+@nvchar2+'"' as "@nvchar1",
case when @nvchar1=@nvchar2
then 'true'
else 'false' end as "@nvchar1=@nvchar2",
case when @nvchar1 like @nvchar2
then 'true'
else 'false' end as "@nvchar1 like @nvchar2",
case when @nvchar2 like @nvchar1
then 'true'
else 'false' end as "@nvchar2 like @nvchar1",
case when @nvchar1+'#'=@nvchar2+'#'
then 'true'
else 'false' end as "@nvchar1+'#'=@nvchar2+'#'",
case when cast(@nvchar1 as varbinary(20)) = cast(@nvchar2 as varbinary(20))
then 'true'
else 'false' end as "cast(@nvchar1 as varbinary(20)) = cast(@nvchar2 as varbinary(20))",
case when @nvchar1=@nvchar2 AND DATALENGTH(@nvchar1)=DATALENGTH(@nvchar2)
then 'true'
else 'false' end as "@nvchar1=@nvchar2 AND DATALENGTH(@nvchar1)=DATALENGTH(@nvchar2)";

22. Mai 2007 um 23:27

und ein weiterer Team-Blog der MS-SQL-Entwickler

Heute habe ich den "SQL Programmability & API Development Team Blog" für mich entdeckt. Er enthält jede Menge detaillierter Informationen über potentielle Performance-Probleme, über Zugriffspläne, Cache-Nutzung, usw. am SQL-Server-2005.

Es wird lange dauern bis ich die Artikel durchgearbeitet habe! Alle erste Klasse! 😉

22. Mai 2007 um 18:28

irgendwie Klasse

…finde ich die Überschrift "Klasse statt Masse" neben dem seitenfüllenden Bild eines unrasierten Mannes mit offensichtlich jede Menge Masse.
Dabei handelt es sich um ein Zitat dieses Geschäftsführers in der Mai-Ausgabe der Zeitschrift "IT-Mittelstand" (Seite 12).

Sehe ich das zu kritisch oder ist da eine Diskrepanz zwischen den verkündeten Werten und dem wie es dieser Manager vorlebt?
Vielleicht bin ich ja auch nur das Opfer der Presse: Im Interview bezieht er sich eigentlich mit seinem Statement "Klasse statt Masse" auf Vertrieb und Marketing. Die Redakteure haben das dann aus dem Zusammenhang gerissen und als Überschrift neben das Bild gesetzt… 🙂