dimanche 30 novembre 2008

Google Web Toolkit

En novembre 2008, je faisais la découverte de Google Web Toolkit (GWT) par l'intermédiaire une vidéo.
Faisant activement du développement Web et goutant donc aux diverses péripéties JavaScript, je trouvais l'idée maitresse de la vidéo génial (à tomber par terre).
Cependant, le temps manquant, je n'ai jamais entamé cet article à l'époque... voila chose faite :-) 

Je trouvais (et trouve toujours) astucieux de coder une interface en Java (langage très structuré) et ensuite utiliser un compilateur spécifique pour produire du code JavaScript optimisé pour un navigateur donné.

La vidéo "Look for JavaScript and DOM Programming in GWT" (voir ci dessous) présente le concept.
Et si je ne me trompe pas, la vidéo présentait une nouvelle version de la librairie/GWT permettant d'écrire un code plus élégant, renforcent l'utilisation du typage et autorisant l'extention des classes.



Stop watch at 41:37 

SQL Server Training (Jour 5) - Ressources diverses

Finalement, voici quelques ressources bien utiles en relation avec le cette semaine d'entrainement.
  • SQL2005 Scripts and samples archive zip.
    Scripts issus du cours "Developing and optimizing databases using SQL Server 2005/2008"
  • Aussi cet autre article "SQL 2005 - Index Tuning' (encore à venir).

samedi 29 novembre 2008

SQL Server Training (Jour 5) - Functions

Voici encore quelques informations complementaire sur les fonctions.

Execution Context
Le contexte d'execution (droit/credentials relatif à l'utilisateur SQL connecté) n'est pas un élément à prendre à la légère.
En effet, losrqu'une vue est basée sur une fonction, le résultat dependra fortement de l'application du contexte d'exécution. Dans certains cas de cascade d'appel avec restrictions/droits diverses, le résultat peut même apparaître imprévisible.

Cependant, il existe des cas où le contexte d'exécution (et sa modification) peut représenter un avantage de grande valeur.
Il est possible de modifier le contexte d'exécution d'une fonction en utilisant la syntaxe WITH EXECUTE AS 'UserToUseForContext' lors de la creation de la fonction.
Ainsi, un utilisateur X ne pouvant pas accéder à la table PRODUCT pourrait en lire le contenu via une Inline table-valued fonction ReadProduct( @Parameter ) utilisant un WITH EXECUTE AS 'AnUserAbleToReadTheProductTable'.
Il va de soit que l'utilisateur X doit disposer du droit d'exécution sur la fonction ReadProduct().
Pour plus d'info, voir pg 9-20 du syllabus.

Exemple
CREATE FUNCTION GetOrders RETURNS TABLE
WITH EXECUTE AS 'Pat'
AS
  RETURN ( Select * from Sales.Orders )

Views et fonction
Comme l'on s'en doute, il est possible de construire une vue sur le resultat d'une fonction. Si la vue est fortement solicitée, il pourrait même être opportun d'y placer un index persistant.
Pour plus d'information, voir l'article sur les Views et Stored Proc

Indexation de function
Comme déja précisé par le passé, il est possible d'indexer une VIEW.
Cependant, certaines vues peuvent être produite sur base du résultat d'une fonction. Dans ce cas, l'indexation d'une telle vue doit répondre à des conditions complémentaires.
En effet, il ne sera possible d'établir un index sur une fonction non determisniste.
Une fonction non deterministe peu retourner des valeurs differentes pour des paramètres identiques (ex: utilisation de fonction Rand, Convert, cast, checksum ou bien une fonction dépendant de l'état de la base de donnée).
Plus d'information disponible dans le sylabus à la section 9-15 "Deterministic and Nondeterministic Functions".

Converttir une stored Proc en fonction
Lorsque cela est possible, il est préférable de convertir les stored procedure en fonction. La raison principale est l'amélioration des performances.

Ainsi, les table-valued functions pourront être utilisées pour remplacer des stored procedures dans les cas suivants:
  • Utilisation de SELECT avec paramètre.
  • Pas opération d'UPDATE
  • Pas d'execution dynamique de requête SQL.
  • Utilisation de table temporaire pour résultats intermédiaire.

Les table-valued functions peuvent également être utilisées pour convertir des stored procedures utilisant des cursor.
Lorsque cela est possible, cette conversion permet de diviser le temps d'exécution jusqu'a 30 fois.
A cette fin, les exemples du cours inclus des fichiers spécialements dédiés à ce sujet.
Voir répertoire /Module XX - Extras/03_Getting_rid_of_Cursors/

A noter que l'un des rares cas ou les curseurs restent les plus performant est l'aggregation (sum, average, max, ...) sur de très très larges tables.

Creation de Foreign Key avec des fonctions
Comme déjà précisé, il n'est pas possible de construire une Foreign Key constraint si la destination n'est pas une clé primaire.
Hors, il existe des cas ou les occurences de la destination d'une Foreign Key puissent être multiples.
Dans ce cas, l'on utilise une fonction.

Etape 1:
Créer une fonction avec SCHEMABIDING qui, par exemple compte le nombre d'occurences dans la table de destination.

FUNCTION CountEmployeesOf( @IDManager ) returns Int
WITH SCHEMABINDING
AS
  Declare @RetValue int
  Select @RetValue = count(*) from employee where employee.Manager = @IDManager
  if (@retValue is NULL)
    Select @RetValue = 0
  Return @RetValue
end

Etape 2:
Créer un CHECK CONSTRAINT faisant office de vérification ForeignKey.
Le CHECK CONSTRAINT utilisera la fonction countEmployeesOf( ... ) > 0 pour s'assurer que la condition est bien respectée.

jeudi 27 novembre 2008

Utilitaires pour SQL Server 7

Cet article est surtout dédié au SQL 7... toujours très actif dans notre société.

Stored procedures
sp_force_Shrink_log
Stored procedure de Andrew Zanevsky (AZ Databases) pour SQL 7.
Cette stored proc est l'outil indispensable pour tronquer le log-file de façon significative (permettant ainsi a ce dernier de retrouver une taille acceptable). J'ai déjà été amener à l'utiliser plusieurs fois avec grand success.
Voir cet artcile sur SQL Server Central


EXEC sp_force_shrink_log @target_size_MB=250

sp_who3
Cette stored procedure pour Sql7 & Sql2000 de Rodrigo Acosta fournit une liste très complete de tous les processus SQL en cours d'exécution. On y trouvera les commandes exécutées, les processus bloqués, etc.
Nouvelle ressource apparue durant ma formation SQL, sp_who 3 peut fournir des informations de premier plan lors d'une situation de stress.
sp_Who3 permet de filter sur spid, login, hostname et dbname.
Voir cet article sur SQL Server Central.

EXEC sp_Who3 @DBName='MyDatabase'

sp_activity
Stored procedure de Mitch van Huuksloot pour SQL 2000 fournissant une liste des processus SQL, les commandes exécutées et des locks actifs.

Pour plus d'information, voir cet article.

Note:
Pour fonctionner correctement sur SQL7:
  1. Remplacer le data type BigInt par Numeric.
  2. Remplacer la lecture de la colonne req_transactionID (inexistante en SQL7) par NULL
sp_msforeachtable
sp_msforeachdb et sp_msforeachtable sont deux petites perles non documentée facilitant grandement la vie des administrateur.
En effet, cette stored procedure peut lancer des commandes (séparées par des point-virgule) pour toutes les tables d'une base de donnée (ou toutes les bases de données).

Dans l'exemple suivant, la stored procedure génère un script de maintance.
Cette approche permet de modifier le script avant de l'exécuter... utile si l'on sait que le checktable sur notre table d'audit met 2h40m.

sp_msforeachtable 'print ''DBCC CHECKTABLE( "?" )'' ; print ''GO'' ;' 

Un autre exemple plus expéditif

sp_msforeachtable 'print ''Check table ?'' ; DBCC CHECKTABLE( ''?'' ) ; GO ;'

Forcer le check-point
Permet d'imposer un check point (ecriture des données dans le data file) afin de pouvoir tronquer le log file sereinement.

CHECKPOINT

Déplacer la TempDB sur un autre drive
La tempDB est sollicitée pour certaines opérations SQL. C'est en autre le cas de DBCC CHECKTABLE.
Dans ce cas, il est nécessaire d'autoriser la TempDB à grandir... mais que faire lorsque 11 Go sont nécessaires et que seulement 4 Go sont disponible sur le disque system?
Et bien, il faut déplacer la DB temporaire sur un autre disque.

Méthode 1:
Facile et efficace, elle permet de faire rapidement l'operation avec deux commandes SQL.
Mais attention, après l'excution des commandes, il faut:
  1. Arrêter et redémarrage le service SQL.
  2. Effacer manuellement les anciens fichiers TempDB (surtout s'ils sont gros).
USE master
GO
ALTER DATABASE TempDB MODIFY FILE
    (NAME = tempdev, FILENAME = 'd:\MSSQL7\data\tempdb.mdf')
GO
ALTER DATABASE TempDB MODIFY FILE
    (NAME = templog, FILENAME = 'd:\MSSQL7\data\templog.ldf')
GO


Pour plus d'informations, voir cet article sur blog.sqlauthority.com.

Méthode 2:
En utilisant cette méthode plus alambiquée décrite sur cet article de Microsoft MSDN

Single User Mode
Placer la base de donnée en modesimple utilisateur (single user) est nécessaire lorsqu'un DBCC CHECKTABLE est exécuté avec un paramétrage de réparation.
Il est plus facile de placer une base de donnée en Single User Mode en utilisant l'interactive SQL.

EXEC sp_dboption 'pubs', 'single user', 'TRUE'

Utilitaires DBCC pour SQL 7
  • DBCC CHECKTABLE( 'tablename' )
    DBCC CHECKTABLE( 'tablename', REPAIR_ALLOW_DATA_LOSS )
  • DBCC CHECKDB ( 'DBName' )
    Attention: peut literallement exploser la tempDB et remplir completement l disque système. A utiliser avec partimonie sur les grosses bases de données. Préférez DBCC CheckTable
  • DBCC command references chez Microsof.
  • DBCC undocumented stuff article très intéressant du Sql User Group belge.
    C'est en autre là que j'ai déniché sp_msforeachtable et sp_msforeachtable.

Réduire la taille de TempDB

Executer le script suivant dans une session ISQL:

use tempDB
go
sp_helpfile

Ce script SQL retoune la liste des fichiers (data, log, taille, file-group, grow config... ) composant la base de données TempDB.
Relever le nom d'identification du data file (celui à réduire)... dans mon cas"tempdev".

Executer la commande suivante:

DBCC SHRINKFILE ( 'tempdev' )

Dans mon cas, je suis passé des 11Go à 9 Mo ;-)

mercredi 26 novembre 2008

Limitations de SQL Server

Suite a une récente demande, me voila à la recherche des spécifications stipulant les limitations des différentes versions de SQL server.

lundi 24 novembre 2008

Vocabulaire Anglais

Mate
Fr: Mec, copain.
Everything is all right, mate.


Clueless
En: lacking the key to solving a problem, without a hint; being totally unaware, being naive, being innocent and unsuspecting.

Throughput
Fr: Rendement maximum, sortie; débit
En: yield; rate of transfer, amount of data that may be transferred in a data channel or through a device in one second
Using database snapshot will improve the database throughput

Help Yourself

Fr: Servez-vous.

Though
Fr: Quoique, Néamoins.
I do not speak french but my understanding is very good though.

Thought
Fr: pensée, réflexion.
En: idea, concept, product of mind.

jeudi 20 novembre 2008

Liens pour developpements mono

Voici quelques liens utiles relatifs au développement sous mono:
  • Captcha.Net utilisable directement et sans recompilation. Cliquer ici.
  • LinQ toujours utile de savoir le support LinQ (System.Data.Linq.dll) sous mono est assuré par le projet Olive.
  • DbLinqQ est une version de LinQ pour d'autres bases de données.
    MySql, PostgreSQL, Oracle et SQLite sont actuellement supportés.
    Voir le site DbLinq, le project sur Google code ou finallement la page sur Code2Code.net 
  • Mono.Options sera disponible dans la version 2.2 de Mono.
    Mono.Options est une superbe libraire de parsing pour ligne de commande. Elle est petite, succinte, facile d'utilisation et puissante... un "tout en un" vraiment jouissif a utiliser.
    Plus d'information ici.
  • C5 est une librairie de collection dite générique. C5 fournit des fonctionnalités et des structures de données non disponible en standard dans le namespace System.Collections.Generic namespace.
    On y trouvera en autre des arbres persistent, Une priority queue basée sur une heap, des arrays lists et linked list disposant d'indexe hash, des événements onChange sur les collections. La libraire C5 est gratuite. Pour plus d'informations, cliquer ici pour accéder au site ou ici pour visionner la vidéo de présentation
  • Oxygene de RemObjects semble proposer toute une série d'outil pour les développements en .Net, Delphi et Mono. Ils fournissent aussi un complateur pascal pour .Net (compatible Mono), Un remote Object Framework (compatible Mono), etc. A voir absolument!
  • DevStudio 2 est un autre produit de RemObjects (incluant Visual Studio 2008). DevStudio semble être un outil de développement performant pour .Net à destination des plateformes Mono et Windows.
    A voir absolument!
     
  • GENDARME fait son apparition. Gendarme est un analyseur de code utilisant des "règles" (pouvant êtres étendues) permettant de trouver des problèmes dans les applications et librairies .Net. Gendarme inspecte les programmes et les libraries contenant du code au format ECMA CIL (Mono et .NET) pour les analyser et y déceler les problemes courants de développment, le genre de problèmes qu'un compilateur de vérifie pas.
  • GUI Shell est un outil développé par Miguel de Icaza.
    GUI Shell permet simplement d'utiliser l'environnement mono comme un shell. Il est donc possible de charger des librairies et d'invoquer des méthodes pour obtenir des résultats en "live".
    GUI Shell est un shell (ligne de commande) basé sur le l'environnement Mono et la syntaxe C#.
    C'est l'un des outils et projets auquel je m'interesse le plus car derrière son interface rudimentaire, ce projet développe toute la puissance de l'environnement .Net et Mono.
    Un nouvel épisode de GUI Shell est apparu sur le blog de Miguel De Icaza. Cette fois, il est possible de faire un "register" de methode statique (ou fonction Lamba) permettant de transformer des objects C# en widget visuel (dans l'interface GUI).
    La démonstration évaluant une expression booléènne est a tomber par terre.
Sources:
- le blog de Miguel De Icaza.

- C5 homepage
- la page du projet Gendarme
- GUI Shell

mercredi 19 novembre 2008

Utilitaires Linux pour Stick USB

Voici un petit acticle en complément d'un précédent relatif aux utilitaires Windows pour Stick USB.

Puppy Linux (USB)
Puppy Linux ("Toutou" Linux en français) est une "mini" distribution Linux initiée par Barry Kauler. Fonctionnant à la fois sur les plus anciens systèmes mais aussi sur les PC les plus modernes (portables ou de bureau ), il présente un environnement graphique de type Windows. Cette distribution est régulièrement mise à jour (de nouvelles versions apparaissent en général tous les 2 à 3 mois). Elle est supportée par l'intermédiaire de son forum de discussion et à la fois par son créateur (Barry Kauler) et par les utilisateurs avertis de Puppy.
Lorsque la distribution est démarrée depuis le CD, celui-ci peut être retiré après le démarrage. Elle peut également démarrer depuis une clef USB, un CD-R(W) ou un DVD-R(W) et on peut y enregistrer ses données personnelles (si le CD est multisession).

Puppy nécessite 64M de RAM. Cette mémoire permet de démarrer des applications telles que le navigateur de Mozilla, l'éditeur de textes AbiWord, des logiciels de graphiques vectoriels, le tableur Gnumeric, et de nombreux autres logiciels libres. Les applications, chargées en RAM, démarrent instantanément
(mêmes sur les plus vieux systèmes) et répondent aux besoin des utilisateurs.

Cliquez ici pour plus d'informations concernant Puppy Linux.

Linux, Netbook, Clef USB et Compagnie
Encore un bon dossier PCInpact faisant le tout des solutions pour installer différentes distributions Linux depuis une clef USB.
Cet article dévolu aux systèmes d'exploiration Linux fera la pert belle à Ubuntu.

Cliquez ici pour accéder au dossier sur PCInpact.

Ultimate Boot CD
Ultimate Boot CD (pouvant aussi démarrer depuis un stick USB) est un outil de diagnotic pouvant être démarré depuis un CD-ROM.
Ce CD contient autant d'outils de diagnotic qu'il est possible d'en stocker sur un CD bootable.

Cliquez ici pour plus d'informations concernant Ultimate Boot CD.

Framework Design Guidelines

Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries (2nd Edition) (Microsoft .NET Development Series)

Si je me fie au commentaire de Miguel De Icaza, cet ouvrage serait une référence pour les dévelopements .Net.

Ce livre regroupe un énorme résumé des meilleures partiques à utiliser pour concevoir un logiciel tout en évitant les pièges et voies sans issues.
Il serait aussi l'une des meilleures sources d'idiomes et development patterms utilisé pour  le Framework .Net.
Finalement, en étudiant ces idiomes le lecteur devrait être capable d'écrire du code comme un vrai développeur C# en très peu de temps.

Pour plus info, voir ce lien sur Amazon.

mercredi 12 novembre 2008

Prism - Delphi pour .Net sous Windows et Mono

J'apprends qu'Embarcadero Technologies (nouveau propriétaire de Delphi) distribue un produit nommé Prism.
Ce dernier est un environnement de développement Delphi pour la plateforme .Net basé sur le célébrissime Visual Studio.Net.
Basé sur un compilateur d'une nouvelle génération (produit par Oxygène), cette version de Delphi.Net est capable de manipuler les types génériques et fonctions anonymes.
Les assemblies produites sont 100% compatibles avec l'environnement .Net de Microsoft (et Mono).
Par ailleurs, l'environnement Prism (basé sur Visual Studio .Net) inclus toutes les technologies .Net récentes (WPF, LinQ, WCF, SilverLight, WinForms, Asp.Net,  ...) mais également quelques autres technologies issues du monde Delphi (RemObjects d'Hydra, dbExpress, DataSnap clients).
La version Architect de Delphi Prism inclus des capacités de design, modélisation et documentation de base de données basés sur  ER/Studio.

Quelques caractéristiques clés:
  • Solution de développement complete pour .Net
  • Puissance du langage de développement Delphi Prism (Generics).
  • Framework dbExpress pour construire des applications Base de Données.
  • Support de la platform Mono
  • Modélisation et design de base de donnée à l'aide du produit ER/Studio.
  • Création de clients DataSnap.
  • Base de donnée Blackfish SQL incluant les licenses de déploiement.
Pour en savoir plus, cliquez ici

lundi 3 novembre 2008

Utilitaires Windows pour Stick USB

Création de la clef USB Ultime pour Netbook
Super dossier de PCInpact expliquant comment installer et booter un système d'exploitation WinXP ou Vista depuis une clé USB.
Au cours de cet article des utilitaire tel que BartPE ou Ultimate Boot CD sont également abordés.
Poursuivre la lecture du dossier sur PCInpact.

Bart's PE Builder 
PE Builder vous permet de créer un CD-Rom (ou un DVD) bootable (appelé BartPE) de Windows XP (SP1 minimum) ou Windows Server 2003 pour assurer facilement vos opérations de maintenance PC.
Cliquez ici pour plus d'informations sur BartPE

Ultimate Boot CD for Windows
Basé sur BartPE, UBCD4Win inclus le support reseau et vous donne la possibilité de modifier les volumes NTFS, récupérer des fichiers effacés, créer de nouveau volumes NTFS, scanner les disques durs à la recherche de virus, etc.
UBCD4Win est un CD bootable de maintenance contenant des utilitaire de disgnostic, restauration et de réparation réparant presque n'importe quel problème informatique.
Cliquez ici pour plus d'information sur UBCD4Win.
Ou cliquez ici pour avoir une liste des outils disponibles sur UBCD4Win.