Archiv

Posts Tagged ‘Tipps und Tricks’

Fallstricke der T-SQL Funktion isNumeric() – was ist zu beachten?

Manchmal geht man davon aus, dass die mitgelieferte Funktionen des SQL Servers das tun, was sie sollen. Aber dieses erwartete Verhalten trifft nicht immer zu. Wie im vorliegenden Fall der Funktion isNumeric.

Was habe ich erwartet: Ich habe erwartet, dass die Funktion isNumeric den übergebenen Parameter auswertet und als Resultat entweder 1 oder 0 zurückgibt, je nachdem ob es sich um einen numerischen Wert handelt, oder nicht.

Wie ist das Verhalten: Leider funktioniert die Funktion isNumeric nicht immer richtig – oder noch schlimmer, es werden Fehler geworfen (beim Datentyp date), wo man es absolut nicht erwartet.

Beispiele

T-SQL Code Datentyp Ergebnis Bemerkung
declare @myAttribute as decimal(18,6) = 123456789012.123456; select isnumeric (@myAttribute); decimal 1 korrekt
declare @myAttribute as date = ‚2016-02-17‘; select isnumeric (@myAttribute); date kein Folgender Fehler wird geworden: Msg 8116, Level 16, State 1, Line 8 Argument data type date is invalid for argument 1 of isnumeric function.
declare @myAttribute as datetime = CURRENT_TIMESTAMP; select isnumeric (@myAttribute); datetime 0 korrekt – erstaunlich, dass datetime geht und date nicht …
declare @myAttribute as varchar(12) = ‚Hallo‘; select isnumeric (@myAttribute); varchar 0 korrekt
declare @myAttribute as varchar(12) = ‚4711‘; select isnumeric (@myAttribute); varchar 1 korrekt. D.h. mit isnumeric lassen sich auch varchar-Variablen untersuchen.
declare @myAttribute as varchar(12) = ‚€4711‘; select isnumeric (@myAttribute); varchar 1 korrekt. Trotzdem hätte ich hier evtl. eine 0 erwartet. In der Dokumentation von Microsoft kann man nachlesen, das die führende Zeichen wie +, – sowie Währungssymbole nicht ausgewertet werden.

Nun könnte man ja auf die Idee kommen, zuerst mit der Funktion SQL_VARIANT_PROPERTY den Datentypen zu checken:

declare @myAttribute as date = '2016-02-17'
if SQL_VARIANT_PROPERTY(@myAttribute,'BaseType') not in ('decimal','numeric','float','real','int','bigint','smallint','tinyint','money','smallmoney')
 print 'not a numeric type'
else
 select isnumeric(@myAttribute)

Doch auch hier wird der Ausruck ausgewertet und ein Fehler geworfen:
Msg 8116, Level 16, State 1, Line 6
Argument data type date is invalid for argument 1 of isnumeric function.

Als nächstes habe ich das gleiche mit einem CASE Statement versucht. Aber auch hier gibts eine Fehlermeldung:

declare @myAttribute as date = '2016-02-17'
SELECT
 CASE 
  WHEN SQL_VARIANT_PROPERTY(@myAttribute,'BaseType') 
      not in ('decimal','numeric','float','real','int','bigint','smallint','tinyint','money','smallmoney') THEN 0
  ELSE isnumeric(@myAttribute)
 END AS isAttributeNumeric

Msg 8116, Level 16, State 1, Line 3
Argument data type date is invalid for argument 1 of isnumeric function.

Fazit

Mein Fazit: Die Funktion isNumeric ist mit Vorsicht zu geniessen. Wenn sie eingesetzt wird, dann muss man sehr gut testen. Insbesondere muss sichergestellt werden, dass nie ein Parameter vom Datentyp date an die Funktion übergeben wird. Dann nämlich knallts und ein Fehler wird geworfen.  Falls SQL Server 2012 oder höher eingesetzt wird, gibt es hier eine Empfehlung immer TryParse anstatt isNumeric einzusetzen.

 

 

Advertisements

Kanban Board mit JIRA

Ein physisches Kanban Board ist grundsätzlich immer zu empfehlen. Was aber tun, wenn die Mitarbeiter des Projektes nicht am gleichen Ort arbeiten. Oder wenn Kollegen mitarbeiten, die mehrere örtlich verschiedene Arbeitspätze haben? Dann empfiehlt sich eine Online Applikation wie z.B. Trello oder Jira. Im Folgenden beschreibe ich kurz, wie man eine Kanban Board mit JIRA aufsetzen kann.

Step 1: Projekt erstellen

  1. Menü: Projects / Create Project
  2. Im Dialog „Agile Kanban“ auswählen.
  3. Dem Projekt einen Namen und Key geben z.B. „Mein Kanban Projekt“ und „MKP“.

Das Projekt ist jetzt angelegt, das Kanban Board wird angezeigt. Es wird der GreenHopper Simplified Workflow benutzt. Die Tasks lassen sich per Drag & Drop auf dem Board verschieben.

Step 2: Anpassen des Kanban Boards

  1. Auf den Button mit dem Zahnrad (Administration) klicken / Configure
  2. Jetzt wird das GUI „Configure <project name>“ angezeigt. Hier auf den Tab „Columns“ klicken. Rechts werden zwei Buttons angezeigt: „Add Status“ sowie „Add Column“. Sollte „AddStatus“ nicht angezeigt werden, so haben Sie vermutlich zu wenig Rechte. Wenden Sie sich dann an den Administrator und lassen sich für Ihr neu erstelltes Projekt mehr Rechte geben.
  3. Initial werden drei Spalten angezeigt:
    a) Todo
    b) In Progress
    c) Done
    Diese sind mit den vordefinierten Standard Status verknüpft:
    Jira_Default_Board
  4. Nun kann man mit dem Buttons „Add Status“ und „Add Columns“ die entsprechenden Spalten hinzufügen. Wenn man den Status und Spalten die gleichen Namen gibt, werden diese auch gleich automatisch gemappt. Überflüssige Status lassen sich auch löschen oder umbenennen.Nach dem Hinzufügen ist es sinnvoll, die Reihenfolge der Spalten anzupassen.
  5. Da sich in Jira eine Spalte nicht in „DOING“ und „DONE“ aufsplitten lässt, habe ich dafür eigene Status/Columns erstellt. Hier die Liste meiner Spalten (diese kann von Projekt zu Projekt verschieden sein und kann auch nachträglich angepasst werden):
    1. Backlog
    2. Next
    3. Analysis DOING
    4. Analysis DONE
    5. Dev DOING
    6. Dev DONE
    7. Test DOING
    8. Test DONE
    9. Ready for Release
    10. Done
  6. Sobald die Spalten aufgesetzt sind, sollte man noch das WIP Limit (Max) pro Spalte definieren
  7. Auch das Arbeiten mit Swimlines wird von JIRA resp. Greenhopper unterstützt. Hierzu habe ich auf den Tab „Swimlanes“ geklickt und „Base Swinlandes on Stories“ ausgewählt.

Step 3: Erstellen von Tasks

Jetzt sind wir mit der Anpassung des KANBAN Boards fertig und können anfangen Issues zu erfassen. Damit die Tasks gleich der richtigen Story zugeordnet werden, empfehle ich wie folgt vorzugehen:

  1. Erstellen einer Story mit dem Button „Create issue“ in der Menüleiste. Als Issue Type unbedingt „Story“ auswählen.
  2. Sobald die Story erfasst ist, zum Issue Navigator wechseln und die entsprechende Story auswählen. Dann kann man mit einem Klick auf den Button „More“ den Befehl „Create Sub-Task“ auswählen und den Task erfassen. Der Task wird nun automatisch auf dem Kanban Board in der Swimlane der zugehörigen Story einsortiert und angezeigt. Cool!

Kostenlose Werkzeuge und Tools für Software-Entwickler

Kostenlose Werkzeuge und Tools für Software-Entwickler

Jeder Entwickler hat seine Lieblingswerkzeuge und Tools, vergleichbar mit dem Werkzeugkasten eines Klempner. So ist es auch bei mir – nachfolgend eine Liste inkl. kurzer Erläuterung der Tools, die ich häufig verwende.

Nr. Software-Tool Beschreibung Link
1 NSIS
(Nullsoft Sricptable Install System)
Software
zum Erstellen von Windows-Installationsprogrammen.
http://nsis.sourceforge.net
2 7-Zip Freies
Datenkompressionsprogramm (Packer)
http://www.7-zip.de
3 Notepad++ Texteditor für Windows http://notepad-plus-plus.org
4 Microsoft
Expression Web 4
HTML-Editor http://www.microsoft.com/en-us/download/details.aspx?id=36179
5 Windows
Live Writer
Programm mit dem man offline Blog-Posts schreiben und später veröffentlichen kann http://windows.microsoft.com/de-de/windows-live/essentials
6 Pixel
Ruler
Bildschirmlineal http://www.pixelruler.de
7 Fiddler Web Debugging Tool http://www.telerik.com/fiddler
8 Virtual
Clone Drive
Anlegen
von virtuellen DVD-Laufwerken
http://www.slysoft.com/de/virtual-clonedrive.html

Ich werde die Liste von Zeit zu Zeit aktualisieren und hoffe dass für jeden Besucher dieses Blog-Artikels was dabei ist. Ich würde mich sehr über Eure Kommentare freuen – es gibt sicher viele Tools, die ich noch nicht kenne!

Blinde Passagiere auf dem Rechner – Foistware mit Oracle (Java), Adobe & Co.

Heute bin ich über einen neuen Begriff gestolpert: Foistware.

„To foist“ heisst übersetzt anhängen oder unterschieben. Es handelt sich also um Software, die dem Anwender (in der Regel ohne dass er sich dessen bewusst ist) untergeschoben wird. Und das Beste daran ist, er installiert diese Software (also die blinden Passagiere auf dem Rechner) selbst.

Hier die Definition bei Wiktionary: „Software that is installed without the user’s knowledge or consent, often bundled with another product.“

Inzwischen hat das Ganze eine neue Qualität erreicht. Wurde diese unerwünschte Zusatzsoftware oft bei Freeware wie MP3-Konvertern oder Download-Tools für Youtube mit installiert, wird heutzutage bereits bei Updates von Standard-Software wie Java und Adobe Flash Player diese Foistware „untergejubelt“. Wir haben alle gelernt, dass automatische Software-Updates bei Windows, Java etc. durchaus sinnvoll ist. Umso mehr hat mich erstaunt, dass namhafte Hersteller wie Oracle und Adobe auf diesen Zug aufspringen. Wollen diese Hersteller ihren guten Ruf ruinieren?

Ich sehe das sehr skeptisch und hoffe dass diese Vorgehensweise keine weiteren Nachahmer findet (und sich Oracle und Adobe besinnen und damit aufhören). Ich würde gerne meinem Software-Lieferanten vertrauen – aber wenn der Benutzer absichtlich fehlgeleitet wird (ich spreche jetzt vom „Otto Normalverbraucher“) – tritt genau das Gegenteil ein: Misstrauen entsteht.

Wie funktioniert das Ganze? Der Anwender lädt sich eine (meist kostenlose) Software herunter und startet die Installation. Oft wird eine Standard- und eine Experten-Installation angeboten. Wählt man die Standard-Version des Installers, hat man schon verloren: Die mitgelieferte Zusatzsoftware wie z.B. Ask Toolbar, Google Symbolleiste, Registry Cleaner etc. wird – ohne dass man was gemacht hat – vollautomatisch installiert. Und von meinem Bekanntenkreis weiss ich, dass schätzungsweise mindestens 95 % aller PC-Benutzer drauf reinfallen.

AdobeFlashPlayer1

Was kann man dagegen machen? Niemals den Standard-Modus sondern immer den Experten-Modus bei einer Installation wählen. Alles genau durchlesen und nur das installieren, was man braucht (also alle unnötigen Häkchen wegnehmen).

java_ask_foistware

Weitere Beispiele werden hier und hier beschrieben.