mercredi 26 mai 2010

SQL Server Transaction Log

Le transaction log est le fichier utilisé par SQL Server pour effectuer ses transactions. Ce fichier peut suivant le paramétrage gonfler d'un certain % de son volume chaque fois que ses limites sont atteintes. C'est pourquoi il est bon de temps à autres de faire un SHRINK de ce fichier.

Voici une méthode qui vous donne l'espace utilisé par le transaction log.

SELECT name ,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMBFROM sys.database_files;

La taille restante avant que le fichier ne se mette à gonfler est donnée en MB.

USE DatabaseName
GO
DBCC SHRINKFILE(FileName, 1)
BACKUP LOG DatabaseName WITH TRUNCATE_ONLY
DBCC SHRINKFILE(FileName, 1)
GO

Voici une méthode qui vous permet de réduire drastiquement la taille du transaction Log, ceci dit vous pouvez aussi le faire à partir de l'interface graphique.

jeudi 13 mai 2010

Manipuler des listes génériques en C++

Pour rappel les types génériques sont supportés depuis récemment par un certain nombre de compilateur. Il faut savoir que cette notion existe depuis près de 20ans sous le nom de templates.

L'intérêt d'un type générique est de pouvoir générer des classes adaptables à un type de données particuliers. Ceci est très pratique par exemple pour les listes.
Si vous voulez gérer une liste liée manipulant des entiers, du texte ou des réels vous n'aurez sans doute pas envie de ré-écrire une classe liste par type de données à manipuler.

Le C++ offre depuis longtemps un mécanisme appelé "template" (modèle de classes) qui permet d'effectuer automatiquement cela pour vous.

La plupart des templates standards offerts par défaut avec C++ se trouve dans le module STL. Il suffit d'effectuer en début de code un #include

Vous trouverez ici un petit exemple sur comment créer et manipuler une liste liée générique contenant des chaines de caractères (max 255 caractères).

Le programme fonctionne en mode console et a été crée avec Code::Blocks.
Les options sont les suivantes :
1 permet d'encoder des données dans la liste
2 permet de lister les données, un identifiant est affiché pour pouvoir les supprimer
3 permet de supprimer une donnée de la liste sur base de l'identifiant.

Listing:
ajouter hyperlien...

Questions:

Comment est libéré le list ? Normalement, il détruit automatiquement à la sortie du main ? Qu'advient-il de ses éléments ?
Faut-il faire un erase du contenu avant de sortir du scope de la fonction ??

Transformation de Box-Cox

Les transformations de Box-Cox sont généralement utilisées en régression linéaire pour tenter de corriger :
- la non-linéarité d'un régresseur
- l'hétéroskédasticité des résidus.
- corriger la normalité de la distribution d'une variable (ex: distribution log-normale d'une variable X dont il faut corriger la normalité qui donne une distribution Y qui elle est normale).

Plutôt que de mettre ce régresseur tel quel dans le modèle, on peut le mettre au carré ou prendre son logarithme. La transformation de Box-Cox est une méthode de généralisation de cette approche.
Elle est donnée par l'équation:
Ta(y)=[(y^a)-1]/a
pour a>0
On peut aisément montrer que pour la limite a=0, la transformation de Box-Cox revient à prendre le logarithme de y.

Rappel du calcul des dérivées:
Si y=a^x alors
log(y)=xlog(a)
On différencie les deux membres de l'égalité
dy/y=1*log(a)*dx
dy/dx=y*log(a)
avec y=a^x
dy/dx=a^x*(log(a))

Appliqué à la transformation de Box-Cox cela nous donne:
lim (a->0) [(y^a)-1]/a
On applique la règle de l'Hospital car il s'agit de la recherche de limite d'un quotient. Remarquez que l'on dérive par rapport à a.
par la démonstration précédente, au numérateur il reste : ((y^a)-1)'=(y^a*log(y)-0)
Au dénomiteur la dérivée de a par rapport à a vaut 1. Il reste:
lim (a->0) Ta(y)=y^a*logy=y^0logy=logy.

Le cas particulier d'un transformation de Box-Cox sur une variable avec un a=0 revient à prendre le logarithme de cette variable.