lundi 22 février 2010

Bases de l'administration Linux

Je sais que c'est très bateau mais parfois on est content d'avoir un pense bête lorsque l'on a un trou de mémoire:
Attention comme les caractères pipes sont interdits j'ai utilisés celui-ci à la place :"!"

Lister les directory
ls -l ! egrep '^d'

Liste les fichiers
ls -l ! egrep -v '^d'

Rechercher les fichier d'un répertoire qui se terminent par : *.tex
ls -l ! egrep '.tex$'
Ceci est équivallent du dir *.tex du DOS (rappel $ indique la fin de la ligne)

Recherche tous les fichiers ne se terminant pas par .texmoins évident en dos.
ls - l ! egrep -v '.tex$'

Affiche tous les fichiers commençant par a ou A (Linux est case sensitive)
ls ! egrep '^[aA]'

Equivallent du Dir a*dans ce cas le '^' indique le début de la ligne, il n'est pas utilisé comme not.

Affiche tous les fichier commençant par a ou A et finissant par .tex
ls ! egrep '^[aA]' ! egrep '.tex$'
Ceci est equivallent du Dir a*.tex

Rechercher à travers tous les répertoires un fichier se terminant par '.tex'
ls / -Rl ! egrep '.tex$'
soyez prudent avec l'utilisation du -l lors de ce type de recherche récursive.

Espace libre sur le disque
df -kh
le paramètre "h" permet d'afficher en mode humain

Afficher l'espace libre d'un répertoire
du /home/repertoire

Effacer un répertoire et tout son contenu (y compris les sous répertoire) :
rm -rd /home/repertoire/sousrep/*

Decompression d'un tarball zippé au moyen de la commande tar
tar -xwzf .tar.gz

Décompression arj (en tenant compte des sous répertoire)
arj x /home/repertoire/source/fichier.arj /home/repertoire/cible/

Changer les droits sur un fichier
chmod ugo +rwx /home/repertoire/fichier

u vaut pour les droit du user, g pour les droits du groupe, o pour les droits des 'others' (reste du monde) quant à rwx ils représentent (read, write, eXecute). On peut utiliser différentes combinaisons de cela.

mardi 9 février 2010

Accéder des fichiers via Delphi.

Classe TFileStream

Le FileStream est utilisé pour lire ou écrire des informations dans des fichiers. Il s’agit en général de buffer. Il faut donc être prudent quant à l’utilisation de ces méthodes avec du texte.

Unit : classes ;

Concrètement le Filestream ne s’attend pas forcément à écrire du texte, ce qu’il veut c’est un buffer de donnée.
Si vous voulez écrire un texte, il faut utiliser la méthode Write() en lui passant les paramètre suivants :
const
arrCRLF : array [0..1] of Char = ( #13, #10 );
var
sText : string ;
oFileStream : TFileStream;
begin
sText :=’test text file stream’ ;
oFileStream:=TFileStream.Create(‘c:\temp\test.txt’, fmCreate)
oFileStream.Write( sText[1], length(sText);
oFileStream.Write(arrCRLF,2);
oFileStream.Free;
end;

L’avantage de cette méthode est que l’information ne doit pas être contenue en mémoire mais elle peut-être écrite on-fly sur le disque. Ce qui dans certains cas peut franchement vous sauver la vie.
Attention comme on écrit plattement le contenu d’un buffer le CRLF n’est pas géré, il faut donc explicitement indiquer le changement de ligne. C’est l’utilité de la ligne
oFileStream.Write(arrCRLF,2);
Le tableau arrCRLF contenant les caractères #13#10 du carriage return – line feed

samedi 6 février 2010

Connexion à une base de données via Delphi

Il est souvent de bon ton d'utiliser une technologie, telle que ADO ou ADO.NET par exemple, toutefois la question à se poser est : "Est-ce que j'utilise bien cette technologie" en ai-je vraiment compris les fondements, les tenants et les aboutissants...

Nous allons tenter de répondre à ces questions par rapport aux connexions entre Delphi et les bases de données. Tout d'abord il existe deux types de connexions:

Les connexions Explicites se font via un objet de type TCustomConnection qui peut être décliné en TADOConnection.

Il est aussi possible de connecter Implicitement des datasets (ensemble de records provenant d’une base de données formant une sorte de table logique en mémoire, ce concept fondamental sera développé plus tard) vers la base de données (ç-à-d ne pas utiliser l’objet connexion mais passer directement les paramètres du server à la propriété Connectstring). Honnêtement, je ne le conseille pas, car en plus de limiter vos actions ceci peut s’avérer dramatique si vous devez changer les paramètres de la base de données et que vous avez hardcodé les connectstring…

Manipuler l’objet de connexion :

Pour se connecter à la base de données on peut soit utiliser la méthode Open ou mettre la propriété Connected à True. Passer par la seconde méthode permet de lancer l’évènement BeforeConntect et d’éventuellement passer des paramètres de connexion.

Lorsque plus aucun dataset n’utilise l’objet connexion celui-ci est détruit. Dans certains cas, si l’on fait des accès très fréquents à la DB, il est mieux de ne pas autoriser cette destruction pour réduire le trafic réseau et la charge de la DB. Dans ce cas mettre à True la propriété : KeepConnection.

Pour se déconnecter de la DB utiliser la méthode Close ou mettre la propriété Connected à false, faire cela lance un évènement BeforeDisconnect.

Une connexion à une base de données requiert généralement un password, dans le cas d’une connexion ADO, simplement mettre le login/password dans la propriété ConnectString et placer la propriété LoginPrompt à false pour éviter d’avoir la boîte de dialogue.
Noter que hardcoder un password en clair dans une application ou dans un fichier de configuration n’est jamais très intelligent. L’évènement ADO OnWillConnect est appelé à la place du login prompt et permet de définir un login et un password.

Nous n’aborderons pas dans ce billet la gestion des transactions qui est un point fondamental mais qui mérite un billet (voir un livre entier) à lui tout seul.