14 février 2009

Imprimer ses photos d'identité

Pour commencer j'ai commencé par chercher les critères d'acceptation des photo d'identité. J'ai trouvé l'information que je cherchais pour la Belgique sur une page de la commune de liège (Pour la France , pour la Suisse).

En résumé la photo doit être de 45 millimètres de haut et 35 de large et et que la taille de la tête doit être comprise entre 25 et 40 millimètres ().

A l'aide de votre appareil photo numérique, je vous propose de réaliser contre un mur de couleur blanche la photo qui vous convient.

Si vous ne possédez pas d'imprimante photo, je vous invite a rendre à une borne d'impression photo. Si par contre vous possédez comme moi une imprimante photo (dans mon cas une Kodak easyshare G600) je vais vous expliquer rapidement comment imprimer vos photos à bas prix!

Alors maintenant que vous avez votre photo (ici je prendrais une image trouvée sur flickr licence Creative Commons), il faut la retoucher pour la mettre à la bonne dimension. Pour se faire je vous propose de vous munir du logiciel de retouche d'image GIMP (un logiciel libre de retouche d'image).

Ouvrez l'image :
Et cliquez sur l'outil de découpage (entouré en rouge). Ensuite Enfoncer le bouton gauche de la souris et glisser pour dessiner un cadre quelconque :

Ensuite, modifier la taille, entrez dans le champs de droite la valeur de 35 et dans l'autre 45. Cliquez ensuite sur la case à cocher "Fixé" avec la valeur "Aspect Ratio" :

Le petit rectangle que vous aviez tracé est maintenant aux proportion de la carte d'identité. Il ne vous reste plus qu'a agrandir(étirer les coter) et déplacer(cliquer et déplacer au centre) le cadre pour le positionner centrer sur la tête :Une fois que cela est fait double cliquez sur l'image. Vous obtiendrez une nouvelle image ne contenant que la zone que vous venez de sélectionner :
Vous avez maintenant en votre possession une photo d'identité aux bonnes proportions. Il ne vous reste maintenant plus qu'a l'imprimer; Pour ce faire je vous propose de télécharger le logiciel IDPhotoStudio. Ouvrez l'image et choisissez votre imprimante :

Configurer éventuellement le nombre de photos et terminer en cliquant le bouton d'impression.

Au final vous obtiendrez approximativement 9 photos d'identité pour moins de 0,50€!

10 février 2009

INT13/ 02h Read error (AX=0100, DL=80)

Il y a quelques temps lors du démarrage d'une machine que je venais de dépanner et sur laquelle je venais de retirer un disque dur je suis tombé nez à nez avec l'erreur suivante :

INT13/ 02h Read error (AX=0100, DL=80)

Après quelques recherches sur internet je me suis rendu compte que le disque dur restant dans la machine avait son jumper de configuration positionné sur "master but slave present"(SP).

Comme c'était le seul disque restant j'ai positionné le jumper sur MASTER(MA), redémarrer et le message à disparut.

07 février 2009

Ajouter une contrainte sur les modifications d'une table

Imaginons que l'on possède une base de donnée avec une table de profil utilisateur contenant un champs facultatif (par e.x. : le numéros de téléphone ). Supposons maintenant que l'on désire rendre ce champs obligatoire.

On désirais implémenter un mécanisme s'assurant que ce champs sera complété. D'une part on va modifier l'application pour que l'utilisateur soit obligé de mettre à jour ses données. Et d'autre part on désirais ajouter une contrainte sur la base de donnée pour synthétiser le fait que le profil de l'utilisateur ne peut plus évoluer sans compléter ce champs.

Si l'on refuse de modifier tout les profils pour compléter ce champs devenu maintenant obligatoire avec une valeur bidon, on se retrouve dans l'impossibilité de mettre en œuvre une contrainte oracle classique de type CHECK.

La solution que je vous présente consiste à implémenter un
TRIGGER sur la table déclenché alors qu'une mise à jour des enregistrement intervient. Ce TRIGGER aura pour but de n'autoriser des mise à jour sur les profils que si le champs devenu obligatoire soit remplis.

Voici comment faire :

CREATE
TRIGGER ProfilCheckPhoneNumber AFTER INSERT OR UPDATE ON PROFIL
FOR EACH ROW
BEGIN

IF (:new.phone_number is null) THEN

RAISE_APPLICATION_ERROR(-20000, 'phone_number should be updated first');
END IF;
END;

Ce TRIGGER
déclenchera une exception empêchant la mise à jour d'être effectuées.

Un peu d'arithmétique avec JavaScript ! ... HIC!

Connaissez vous la valeur de ces expressions en JavaScript ?

Je vous propose de prendre une feuille et de noter pour chaque variable son type et sa valeur
var a = '' + 1;
var b = '1' + 4;
var c = 1 + '4';
var d = "4" + 1;
var e = - (-"4") + 1;
var f = '' - 1;

var g = 1 - '';
var h = '1' - 4;
var i = 1 - '4';
var j = '1' * 4;
var k = 1 * 4;
var l = '4' / 2;
var m = '2' / 2;
var n = ['4'] + 4;
var o = ['4'] + '4';
var p = ['4'] - 4;
var q = ['4'] - '4';
var r = 4 - ['4'] ;
var s = '4' - ['4'];
var t = ['4'] + [['4']];
var u = 1 - ['4'] - [['4']] + 2 * [['4']];
var v = - ['4'] / 2;
var w = "4" - 4 + '1';
var x = '4' + 4 - '1';
var y = [['4']] + [['4']];
var z = [['4']] + ['4'];

en bonus :
var alphabet = a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + q + r + s + t + u + v + w + x + y + z;

La solution sera dans mon premier commentaire ...

Copier les synonymes d'un schéma de base de donnée oracle

Je vous propose une petite requete SQL permettant d'obtenir une liste de requete sql à executer pour copier les synnonymes d'un schéma :

select 'CREATE SYNONYM "TOUSER".' || synonym_name || ' FOR "' || table_owner || '"."' || table_name || '";' sql_exec from user_synonyms;

et en bonus une requete sql permettant d'obtenir une liste de requete attributant les droit de sélection :

select 'GRANT SELECT ON "' || table_owner || '"."' || table_name || '" TO "TOUSER";' sql_exec from user_synonyms;

TOUSER est l'utilisateur bénéficiaire.