vendredi 30 mars 2012

Convertir un hostname IPv6 en IPv4

Depuis Windows Vista, la variable HttpContext.Request.UserHostAddress peut retourner une adresse au format IPv6. Il peut être utile de récupérer cette adresse au format IPv4. Voici une solution qui permet d'avoir une IPv4 à partir du hostname ou de l'adresse IPv6 :
Sources :

mardi 27 mars 2012

Optimisation du Update Set Row

La clause Set Row permet de faire des updates d'une table à partir d'un record PL/SQL. La syntaxe utilisée permet d'avoir un code très clair.

Voici un petit exemple illustrant ce principe :

vMyVariable  MyTable%RowType;

Update MyTable tab
Set Row = vMyVariable;
Where tab.Id = 5;

Il est également possible de faire un insert utilisant cette variable de la manière suivante :

Insert MyTable 
Values vMyVariable;

Cependant, l'update via un set row met à jour toutes les colonnes de la table (même la clé primaire) même si cette valeur reste inchangée. La requete équivalente à l'update ci dessus est la suivante :

Update MyTable tab
Set tab.r1 = 1,
    tab.r2 = 2,
    tab.r3 = 3,
    ...
Where tab.Id = 5;
Il n'y a pas besoin de longues explications pour comprendre que dans le cas d'une large table cela peut couter cher de mettre à jour toutes les colonnes si on ne doit juste mettre à jour une ou 2 colonnes.

Pour contrer ce problème, il suffit de définir un subset de la table à mettre à jour. Oracle comprendra alors qu'il ne doit mettre à jour que les colonnes selectionnées par la sous-requete. Il faudra aussi définir un type ne contenant que les colonnes que l'on souhaite mettre à jour. La requete suivante permet de faire ce que l'on souhaite :

update (Select v.r1,tab.r2 from MyTable tab where tab.id = 5)
       Set Row = vMyVariable;


Ainsi seules les colonnes que l'on a définie dans la sous requete sont mises à jour !

Multi desktop Windows 7

Desktops est une petite application développée par sysinternals qui permet de gérer 4 desktops en même temps dans windows. Cette application est très légère et créé jusqu'a 4 bureaux indépendants.


Article technet sur l'outil : http://technet.microsoft.com/en-us/sysinternals/cc817881
Téléchargement : http://download.sysinternals.com/files/Desktops.zip




jeudi 30 juin 2011

Modifier Sysdate

Sysdate est une procédure sans paramètre qui retourne la date/heure de la base de donnée basée sur l'heure de l'OS sur lequel tourne l'instance de la DB.

Il arrive souvent que des procédures basent leur fonctionnement en fonction de la valeur de Sysdate. Afin de bien tester ces procédures, il serait intéressant de pouvoir changer l'heure retournée par cette procédure.
Une première solution est de changer l'heure de l'OS. Ceci changera donc la date de la DB mais également la date de tous les autres programmes s'exécutant sur le serveur. Il existe une autre solution, qui consiste à fixer la date via la commande suivante :

ALTER System set fixed_date="YYYY-MM-DD-HH24:MI:SS"

A partir du moment où vous exécutez cette commande, chaque appel à Sysdate retournera la date que vous avez fixée et cela n'alterera que la DB.

Pour que Sysdate récupère son fonctionnement initial (c'est à dire retourner l'heure courante), il suffit de remplacer la date que vous avez définie par None :

ALTER System set fixed_date=None

Il est ainsi possible de tester des procédures en simulant la date d'éxécution.


source :
http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams073.htm

mardi 15 mars 2011

Periodic Table of HTML5 Elements

Un petit tableau contenant les éléments présents en HTML5 sous forme d'un tableau périodique. Chaque élément du tableau permet d'avoir la description de l'élément ainsi que le lien correspondant sur le site du W3School.
Periodic Table of HTML5 Elements

Récupérer le nom d'une propriété dynamiquement

Certaines librairies prennent en paramètres de leurs fonctions le nom (sous forme de string) de la propriété sur laquelle doit s'effectuer l'action. Par exemple, avec nhibernate, il est nécessaire lorsque l'on fait un Criteria de donner le nom des propriétés sur lequelles on execute une Restriction.

Le problème  avec ce genre de méthode, c'est que le risque de faire une faute de frappe est important et il n'y a pas de vérification à la compilation.

Heureusement, la reflection vient à notre secours! Une solution consiste à passer une lambda expression de la propriété et par reflection récupérer les informations notamment son nom.

Voici une implémentation d'exemple qui extrait de la lumbda expression la propriété de l'objet pour récupérer son nom :

mercredi 29 décembre 2010

Pagination alternée avec Microsoft Word 2007

Comment faire pour avoir un super document super top classe avec des numérotations différentes en fonction, par exemple, que l'on soit dans la table des matières et dans le reste du document avec Word 2007 ? Le principe qui permet cela se base sur les sections. La stratégie consiste à définir des sections différentes en fonction de la numérotation à utiliser. C'est bien beau de parler de sections et compagnie mais comment le faire en pratique ?

Le contexte :

Le document sur lequel nous travaillerons se compose de cette manière :
  • 1 page de garde
  • 1 page blanche
  • La table des matières
  • 1 page blanche
  • Le contenu du document 
Nous aimerions avoir une numérotation en chiffres romains sur la table des matières et une numérotation en chiffres arabes dans le document. Evidemment, la page de garde et les pages blanches ne doivent pas être numérotée et la première page du contenu du document doit commencer la numérotation (commencer à 1)

La solution :
Afin de différencier les zones de numérotations, il est nécessaire de définir des sections. Dans notre cas, il est nécessaire d'avoir 4 sections. Nous allons en mettre 5 afin d'avoir une section propre à la page de garde :
  1. Page de garde : pas de numérotation
  2. Première page blanche : pas de numérotation
  3. Table des matières : numérotation en chiffre romain
  4. Page blanche : pas de numérotation
  5. Contenu : numérotation en chiffres arabes.
La mise en place de sections se fait via l'onglet "Page Layout" en cliquant sur le bouton "breaks"(sauts en français). L'image ci dessous indique la positions du boutons "Breaks"(cliquer sur l'image pour agrandir)


 Les pages étant déja définies, nous plaçons des sauts de sections de type "Next Page" car la numérotation travaille par page. On place donc nos 5 sauts de sections aux endroits adéquats. Maintenant, nous pouvons définir nos différentes numérotations.

En double cliquant sur le dessus d'une page (ou en dessous), le mode footer/header de Word s'affiche. Ce mode permet d'éditer les entêtes et les pieds de pages. Pour quitter ce mode il suffit de double cliquer sur le milieu d'une page.

Si vos sauts de sections sont bien définis, vous devriez voir les 5 sections et la dernière sections (le contenu du document) sera marquée comme étant la 5ieme. Sur la capture ci-dessous, il est noté au niveau de l'entête : "Header - Section 5" ce qui indique bien que le contenu du document se trouve dans la 5ieme section.

Il vous suffit, alors, de vous déplacer de sections en sections pour rajouter la numérotation de page via le bouton "Page Number" de l'onglet "Header & Footer Tools" :
Les options proposées permettent de rajouter la numérotation a différents endroits de la page. Il permet également de définir le format de la numérotation (Format Page Numbers) et de supprimer la numérotation (Remove Page Number).

La numérotation recommence à 1 dans chacune des sections. Si il est nécessaire de ne pas réinitialiser le compteur de pages, il vous suffit de le spécifier dans les options du format de la numérotation  (Format Page Numbers)

Par défaut, la numérotation utilise les chiffres usuels (chiffres arabes). Pour changer le type de numérotation, il est également nécessaire de passer par les options du format de la numérotation  (Format Page Numbers)



Et hop un document top classe avec une numérotation correcte !

Les sections ne servent pas uniquement à définir une numérotation différentes. Elles permettent de définir des zones ou la mise en page est différente, par exemple, lorsque l'on souhaite avoir une page dans son document qui est horizontale(landscape) au lieu de verticale. Les autres versions de Word se basent sur le même principe même si les accès à ces options sont différents. Pour plus d'informations, chercher le mot clé "section" dans l'aide de Microsoft Word.