Subversion Windows - John COLIBRI. |
- résumé : installation et utilisation du gestionnaire de version SubVersion : création du Repository, ajout d'un répertroire au repository, création d'une la Working Copy, commandes pour ajouter, committer, effacer,
installation du serveur SVNSERV.EXE et son utilisation en réseau, Svn et Delphi XE
- mots clé : SubVersion - Version Control - Svn - CollabNet - Repository - Import - Checkout - Update - Commit - Svn.exe - SvnServe.exe - SvnAdmin.Exe
- logiciel utilisé : CollabNet Subversion, Windows XP personnel, Vista, (Delphi XE, Delphi XE2, Delphi Xe3)
- matériel utilisé : Pentium 2.800 Mhz, 512 Meg de mémoire, 250 Giga disque dur - portable Asus
- champ d'application : utilisateur Windows - Delphi Xe, Delphi Xe2, Delphi Xe3
- plan :
1 - Gestion de Version
Lorsque nous travaillons en équipe, ou que nous souhaitons gérer les versions successives d'une application, il est recommandé d'utiliser un logiciel de gestion de version. Fondamentalement, ces outils permettent de stocker les versions successives,
puis de rechercher, comparer, consolider etc la version courante avec les versions antérieures, que nous ou d'autres développeurs on stockées. L'ensemble est simplement constitué d'une mécanique de stockage (incrémentale)
avec des commandes pour sauvegarder, relire, comparer etc les différentes versions. Il existe de nombreux outils, ayant des noms générique ou commerciaux, certains libres, d'autres payants. Mentionnons Bazaar, Cvs, Scm, et SubVersion
Nous allons dans cet article nous focaliser sur SubVersion : Comme beaucoup d'autres outils de versioning, Subversion est livré sous forme d'un ensemble de fichiers .EXE en mode console. Nous pouvons alors:
- soit utiliser le mode ligne de commande, CMD.EXE
- soit télécharger des encapsulations Windows qui appellent ces .EXE avec une interface plus visuelle. La plus utilisée semble être TORTOISESVN.EXE
- soit l'interface de certaines plateformes de développement, comme Delphi (XE et postérieurs)
Pour que des développeurs sur un autre poste puissent accéder aux projets
stockés, plusieurs moyens sont proposés par SubVersion: passer par un serveur Apache, par des protocoles sécurisés ou par un serveur SVNSERVE.EXE qui est livré avec SubVersion.
Ayant rencontré quelques difficultés à comprendre comment s'articulaient les interfaces graphiques, la base des versions, l'accès par réseau, nous avons décidé d'examiner d'abord le mode le plus basique
- uniquement les .EXE livrés avec SubVersion
- appel par le mode ligne de commande
- accès distant par le serveur livré avec SubVersion, SVNSERVE.EXE (donc PAS d'Apache ou autre SSN etc)
Nous allons donc présenter
- où télécharger SubVersion
- comment installer SubVersion
- comment l'utiliser SubVersion
2 - Téléchargement et Installation
Voici comment télécharger et installer SubVersion : | tapez l'URL http://www.collab.net/downloads/subversion |
| la page de téléchargement est affichée |
| tapez "download" pour la version. Dans notre cas, Windows 32 bits, suivez la procédure d'enregistrement usuelle, puis sauvegardez |
| dans notre cas, nous avons |
| lancez l'exe | | le logiciel est installé
Dans notre cas, sur Vista, les données sont dans "C:\Program File\
Et la base de registre contient quelques informations sur le logiciel (sans intérêt pour la suite mais qui confirme l'installation) De plus, les .EXE de SubVersion sont dans un répertoire qui a été ajouté au Path Windows ("Poste de Travail | Propriétés | Avancé | Variables d'Environnement | Path")
|
3 - Architecture Subversion 3.1 - Architecture
Fondamentalement, SubVersion va stocker les fichiers dans une structure appelée "Repository". Ce repository est niché dans un répertoire dont nous pouvons choisir le nom, et a une structure interne gérée par SubVersion.
Une installation Subversion comporte donc - les .EXE installé par SubVersion
- un Repository que nous créons en utilisant Subversion
Comme des développeurs travaillant sur d'autres PC doivent pouvoir stocker
leurs projets dans le Repository, SubVersion doit avoir un mécanisme d'accès à distance à ce Repository. Ici c'est une organisation Client / Serveur qui a été mise en place.
L'architecture Subversion se présente donc ainsi:
où - CMD.EXE est mode commande windows (DOS shell)
- SVN.EXE est le programme qui traite les commandes subversion (sauvegarder, consolider etc)
- SVNADMIN.EXE est le programme qui permet de créer un Repository
- SVNSERVE.EXE est le programme qui reçoit les commande invoquées depuis un autre poste par SVN.EXE de ce poste
Les SVN_xxx.EXE sont installés par SubVersion (cf l'image de Program Files plus haut).
Donc - pour fonctionner en mode mono-poste (mode local, programmeur individuel), nous avons besoin
- de SVNADMIN.EXE, SVN.EXE, et, naturellement, de CMD.EXE pour lancer les commandes
- pour fonctionner en mode multi-poste, il faut
- côté Serveur
- de SVNADMIN.EXE, SVN.EXE, SVNSERVE.EXE, CMD.EXE
- côté Client
3.2 - Fonctionnement de base Pour utiliser SubVersion, il faut - créer le Repository
- stocker des projets dans le Repository
- récupérer une copie de travail de projets
- sauvegarder les modifications ce ces projets
Prenons le cas d'un Serveur utilisé uniquement pour gérer Subversion (pas de
développeur sur ce poste) et deux développeurs, l'un travaillant sur Projet_A, et Projet_B, l'autre sur Projet_C
Puis
- L'"administrateur SubVersion" créé le Repository
- le premier utilisateur sauvegarde Projet_A pour la première fois dans le Repository
- pour lire, puis éventuellement modifier Projet_A, n'importe quel utilisateur (y compris celui qui a créé la première copie) doit d'abord récupérer une
version de travail ("Working copy") du projet. Supposons que ce soit l'autre utilisateur qui récupère une copie de travail:
Cette copie est située dans un répertoire tout à fait normal, avec quelques fichiers de SubVersion qui gèrent ce qui a été récupéré du Repository (fichiers, dates, tailles etc).
- si celui qui a créé la première sauvegarde souhaite aussi travailler sur une version de son projet, il doit aussi récupérer une "working copy". Il vaut mieux, en général, supprimer la version originale pour ne pas avoir
plusieurs copies. Voici la situation:
- chaque utilisateur d'une "working copy" peut l'utiliser comme un projet
usuel: le modifier, ajouter / supprimer des fichiers etc.
- pour que les modifications soient prise en compte par SubVersion, il faut les sauvegarder dans le Repository, qui crée alors une nouvelle version du projet :
4 - Utilisation Locale de Subversion 4.1 - Commandes de base
Commençons par le plus simple, le travail en local sur le poste où est situé le Repository. Il faudra donc - créer le Repository
- stocker un projet dans le Repository
- récupérer une copie de travail de projets
- sauvegarder les modifications ce ce projet
4.2 - Création du Repository Subversion La création d'un repository se fait avec le paramètre "create" de SVNADMIN.
Comme tous le chemin des .EXE de SubVersion sont dans le Path SubVersion, nous pouvons invoquer cette commande depuis n'importe où. Les .EXE sont tous en mode ligne de commande (pas d'interface GUI avec des
fenêtres etc). Dans cet article nous utiliserons CMD.EXE pour les lancer. Dans notre cas, il suffira de taper
svnadmin create nom_repertoire | Nous avons choisi de placer le Repository en C:\zzz_svn_repo
Par conséquent
| depuis n'importe où, lancez CMD.EXE | | pour créer le repository, tapez
svnadmin create C:\zzz_svn_repo <Entrée> | |
SVNADMIN a crée le répertoire, avec les fichiers pour gérer ce Repository |
4.3 - Désignation du Repository Pour désigner le Repository dans les commandes qui vont suivre, nous utiliserons son nom de fichier. Dans notre cas, le Repository sera désigné par
notez:
- file:/// qui indique que nous désignons le repository comme un fichier (pas par une URL)
- C en MAJUSCULE
- des "/" et pas des "\"
- et ":" suivi de 3 "/"
4.4 - Help SubVersion
Pour avoir le détail de la syntaxe d'une commande, nous utilisons, depuis le mode ligne de commande, le paramètre HELP. Par exemple |
pour avoir l'aide générale de SVNADMIN, tapez svnadmin help <Entrée> | | les commandes sont présentées
| | pour des détails sur "create", tapez
svnadmin create help <Entrée> | | et voici la syntaxe de "create": |
4.5 - Première sauvegarde d'un projet - SVN import Nous avons utilisé comme projet à gérer un répertoire stage\ sur notre disque, contenant stage\
02_label\ 04_edit\ 05_listbox\
avec un projet (Delphi dans notre cas) dans chaque répertoire, soit 28 fichiers.
Pour sauvegarder stage\ et ses sous répertoires et fichiers, il faut utiliser SVN.EXE avec la commande "import" :
svn import . file:///C:/zzz_svn_repo/stage -m "Initial import" | et
- il faut que CMD.EXE utilise comme répertoire courant stage\, et "." désigne alors ce répertoire (sinon désigner le répertoire à sauvegarder)
- le nom sous lequel sera désigné ce projet dans le Repository suit la dénomination du Repository
Voici le répertoire que nous voulons inclure dans SubVersion:
Créons donc un répertoire "mon_stage" dans le Repository :
| en mode commande, tapez svn import . file:///C:/zzz_svn_repo/mon_stage -m "Initial import" |
SVN list Pour vérifier que ces fichiers ont bien été inclus dans le Repository, nous utilisons
svn list file:///C:/zzz_svn_repo/xxx | Donc | tapez
svn list file:///C:/zzz_svn_repo/mon_stage | |
pour plus de détail nous pouvons préciser des noms de sous répertoires ou fichiers |
| nous pouvons aussi avoir un status avec la commande "info" |
Création d'un répertoire de travail - SVN checkout
Un développeur qui souhaite travailler avec des données stockées dans le Repository doit commencer par en extraire les fichiers par la commande "checkout" (abréviation "co")
svn co file:///C:/zzz_svn_repo/xxx |
Cette commande a, naturellement plusieurs options, mais la façon la plus simple de l'utiliser est - de créer le répertoire où nous souhaitons placer les fichiers récupérés du Repository
- lancer CMD.EXE depuis ce répertoire
Par conséquent | créez un répertoire. Par exemple C:\_a\ | |
sélectionnez ce répertoire courant de CMD.EXE cd C:\_a <Entrée> | | tapez la commande checkout
svn co file:///C:/zzz_svn_repo/mon_stage <Entrée> | | SVN copie les fichiers demandés
et voici les fichiers copiés : |
Notez que
- checkout a recréé l'arborescence dans C:_a\
- la "Working copy" se caractérise par un répertoire C:\_a\mon_stage\.SVN\ qui contient des fichiers utilisés par SubVersion pour gérer ce qui a été copié / modifié / ajouté etc
Ajout de fichiers - SVN add Si nous ajoutons de nouveaux fichiers à la "Working Copy", nous pouvons les ajouter au Repository par "add"
Créons donc un nouveau fichier et ajoutons-le au Repository: |
avec le bloc note, créez et ajoutez un fichier nouveau_fichier.txt dans un des répertoires de la Working Copy |
| sélectionnez le répertoire de ce fichier et ajoutez le au Repository |
4.6 - SVN commit Pour qu'un fichier modifié ou ajouté soit incorporé dans une nouvelle version du Repository, nous invoquons "commit"
svn commit -m "mon commentaire" | et - nous lançons la commande depuis la racine de la Working Copy
- il est usuel et recommandé d'incorporer un commentaire, qui permettra, par
la suite, d'afficher qui a fait quoi dans la nouvelle version
Donc | tapez svn commit
|
4.7 - svn delete Une fois un fichier committé, nous pouvons le supprimer par "delete" Effaçons le nouveau fichier:
| tapez SUR UNE LIGNE svn delete svn://127.0.0.1/stage/O3_label/nouveau_fichier.txt --file log_1.txt --force |
| et voici le résultat |
Notez que
- nous avons du créer un fichier local log_1.txt où "delete" pouvait stocker son log
4.8 - Résumé des actions locales Voici un schéma résumant les opérations locales:
Nous avons ajouté au diagramme "svn update" qui permettrait de mettre à jour notre Working Copy si un autre utilisateur avait modifié le Repository.
5 - Utilisation Réseau de Subversion 5.1 - Etapes Pour pouvoir utiliser SubVersion depuis un poste autre que celui qui contient le Repository, il faut - sur le Serveur
- créer le Repository, si ce n'est pas déjà fait
- ouvrir les droits d'utilisation des clients distants
- lancer SVNSERVE.EXE
- sur chaque Client
- installer les .EXE Subversion clients
- lancer les commandes SVN en utilisant des URLs et non plus des noms de fichiers
5.2 - Ouverture des droits Par défaut n'importe qui pourra lire les fichiers, mais seuls les personnes
ayant été enregistrées pourront utiliser certaines commandes de modification. Pour simplifier la présentation, nous allons donner le droit d'écriture à tous les utilisateurs
| allez dans le sous répertoire conf\ du repository, et ouvrez le fichier SVNSERVE.CONF | | la section [general] défini les droits d'accès
[general] ### The anon-access and auth-access options control access to the ### repository for unauthenticated (a.k.a. anonymous) users and ### authenticated users, respectively.
### Valid values are "write", "read", and "none". ### Setting the value to "none" prohibits both reading and writing; ### "read" allows read-only access, and "write" allows complete
### read/write access to the repository. ### The sample settings below are the defaults and specify that anonymous ### users have read-only access to the repository, while authenticated
### users have read and write access to the repository. # anon-access = read # auth-access = write | |
il suffit donc de modifier la ligne en commentaire ("#") # anon-acces = read en la remplaçant par anon-acces = write puis sauvegarder le fichier |
5.3 - Lancement de SVNSERVE.EXE SVNSERVE.EXE reçoit les commandes distantes (checkout, commit etc) et les applique au Repository du Serveur. Pour cela il faut que SVNSERVE.EXE soit lancé lorsqu'une commande Client arrivera.
Nous avons choisi de lancer SVNSERVE.EXE comme un Service Windows. Nous utiliserons donc SC.EXE qui gère les services windows depuis le mode commande.
Pour installer le service
| depuis le mode commande, tapez (sur UNE LIGNE) sc create svnserve binpath= "\"C:\Program Files\CollabNet\Subversion svnClient\svnserve.exe\"
--service --root c:\zzz_svn_repo" displayname= "Subversion" depend= tcpip start= auto |
| voici le résultat Nous pouvons ouvrir le gestionnaire de services par "Panneau de
Configuration | Outils d'administration | Service" qui présente notre service (le dialogue en avant-plan obtenu par "clic droit | propriétés" :
|
Très important - la syntaxe pour lancer le service est assez ahurissante:
- SVNSERVE.EXE est accessible par
C:\Program Files\CollabNet\Subversion Client\svnserve.exe
- comme à la fois Microsoft et CollabNet on eu la sagesse d'ajouter des espaces dans leurs noms, il faut donc ajouter des guillemets
"C:\Program Files\CollabNet\Subversion Client\svnserve.exe"
- mais ce qu'attend SC.EXE, ce n'est pas le chemin+nom_fichier de l'EXE, mais la ligne de commande que SC.EXE va utiliser pour lancer le service. La commande est du type
sc create nom_service "nom_exe -- service --root xxx" displayname etc - come "nom_exe ..." est entre guillemet, il faut encapsuler le nom qui a déjà des guillemets (merci Microsoft, merci CollabNet pour ces bons
choix). il faut donc précéder les guillemets "internes" par le caractère d'échappement "\"
- d'où le nom binpath
"\"C:\Program Files\CollabNet\Subversion svnClient\svnserve.exe\"
- en plus il faut respecter les règles du style
- pas d'espace avant "="
- un espace avant la valeur des paramètres
etc etc. Bienvenu au club...
- nous avons aussi pris soin de donner des noms différents à chaque élément:
- SVNSERVE.EXE est le nom du serveur CollabNet
- nous avons choisi le nom de service svnserve_service (utilisé pour le lancer, l'effacer etc)
- le nom affiché dans le gestionnaire de service est aaa_svnserve ("aaa_" pour qu'il soit au début pour notre présentation)
Le service est créé, mais pas lancé (il le sera au prochain boot). Pour lancer le service
| soit utilisez le gestionnaire ("démarrer le service") | |
soit lancez le par le mode ligne de commande net start svnserve_service | | le service est lancé
|
Nous pouvons vérifier que le service est lancé
| le gestionnaire de service affiche "started" (éventuellement raffraîchissez) | | tapez
sc query svnserve_service | | voici la confirmation |
Finalement, si vous souhaitez supprimer le service | arrêtez le service par
net stop svnserve_service | | supprimez le service par sc delete svnserve_service
|
5.4 - Utilisation en mode réseau Pour invoquer les commandes SVN depuis un réseau, il faut
- utiliser le préfixe svn:// (qui signifie : appelez SVNSERVE.EXE)
- indiquer l'adresse IP ou le nom du serveur
- puis, directement, citer le répertoire
Commençons par l'adresse locale "localhost"
| pour lister un répertoire en utilisant SVNSERVE, tapez |
Notez que - le résultat serait similare en utilisant "127.0.0.1"
- l'URL n'utilise pas le nom de Repository
Pour appeler SVNSERVE depuis un autre poste, il faut connaître l'adresse IP du serveur.
| pour connaître l'adresse IP du poste, tapez ipconfig |
| l'adresse est donc, dans notre cas, 192.168.1.20 |
5.5 - Appel Distant
Sur le PC client, nous avons installé SubVersion (mêmes étapes que sur le Serveur). Le répertoire Collabnet contiendra bien SVN.EXE.
Ensuite, pour invoquer les commandes SVN:
| depuis n'importe quel répertoire, tapez svn list svn://192.168.1.20/mon_stage/03_label
|
Les autres commandes, telles que svn import, svn checkout, svn add, svn commit, svn update etc seraient appelées avec la même syntaxe.
5.6 - Résumé des actions
Voici un schéma de l'utilisation en réseau:
5.7 - Protocole HTTP Parmi les autres combinaisons d'installation, mentionnons, sans le détailler,
le protocole HTTP. Il faut installer un serveur HTTP, Apache en général et paramétrer l'ensemble sans modération ni retenue. Le repository est alors accessible avec des URLs http://. Par exemple
svn co http://sys.cs.rice.edu/repos/comp314-students
Notez que - Apache est naturellement côté Serveur (université de Rice dans l'exemple ci-dessus)
- donc si vous avez installé le Client SubVersion, vous pouvez télécharger (co= checkout) les fichiers
A titre d'exemple, les démos Delphi sont sur SourceForge accessibles par SubVersion. L'Url de base est
http://radstudiodemos.svn.sourceforge.net/ et en tapant svn co https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos nous récupérons toutes les démos.
Pour un exemple plus modeste, en descendant dans l'arborescence, voici la page des Action Delphi XE3: L'URL précise est
http://radstudiodemos.svn.sourceforge.net/viewvc/radstudiodemos/branches/RadStudio_XE3/LiveBindings/actions/ Nous pouvons télécharger un fichier compressé (cliquez "download Gnu Tarball"), ou utiliser SubVersion.
Pour télécharger les démos en utilisant SubVersion : | lancez CMD.EXE dans un répertoire |
| tapez SUR UNE LIGNE svn co https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE3/LiveBindings/actions/ <Entrée> |
| après 20 à 30 secondes, voici le résultat
et le répertoire avec les fichiers : |
6 - Delphi XE et SubVersion Delphi XE et suivants (donc Delphi XE, XE2, XE3) installent SubVersion automatiquement. Voici d'ailleurs le répertoire intallé (ici notre XP avec Delphi Xe2 et Delphi Xe3) :
L'IDE (environnement de développement intégré) permet d'utiliser Subversion :
- depuis le menu "File | Add From Version Control"
qui correspond à "svn checkout"
- depuis le gestionnaire de projet "clic droit sur Project_xxx.exe | Add To Version Control"
qui correspond à "svn import"
Il y a naturellement les autres commandes pour mettre à jour, consolider, committer etc.
Notez que - Delphi ne permet pas de créer le Repository. Il faudra donc utiliser SVNADMIN.EXE, ou un client tel que TORTOISESVN.
- mais, comme nous l'avons démontré plus haut avec les démos Xe3, nous pouvons utiliser SubVersion, installé par Delphi, pour télécharger des fichiers d'un serveur SubVersion sans utiliser l'IDE Delphi.
7 - Next
Nous avons présenté les premières étapes pour utiliser SubVersion - l'installation
- la création du Repository
- l'ajout d'un répertroire au repository
- la création de la Working Copy
- les commandes pour ajouter, committer, effacer
- l'installation du serveur SVNSERVE.EXE et son utilisation en réseau
En gros 30 % de l'effort. Mais pour nous la plus pénible. Aussi passionnant que
tâtonner des heures pour trouver les paramètres d'une ConnectionString Sql Serveur ou MySql.
Pour une utilisation industrielle, il reste 70 % de chemin à parcourir : - apprendre les autres commandes SVN
- comprendre le mécanisme de gestion des versions
- ce qui est sauvegardé à chaque addition au Repository
- que faire lorsque différents utilisateurs ont des versions différentes
- comment réconcilier les versions incohérentes de deux utilisateurs
- comprendre les BRANCHES
- gérer le Repository (TRUNC, BRANCHES, TAGS)
- gérer la sécurité (les mots de passe, les droits etc)
- éventuellement installer un serveur HTTP
Cette dernière partie, beaucoup plus intéressante pourra être effectuée - soit en mode commande (pénible aussi, certes)
- soit en installant une interface Windows qui encapsule SVN.EXE. Par exemple TORTOISESVN
8 - Vocabulaire Version Control (== jargon) Les moteurs de gestion de version utilisent un vocabulaire bien à eux :
- "import" signifie sauvegarder dans le Repository un répertoire qui n'y figure pas encore, et dont les utilisateurs pourront ensuite lire pour construire une copie de travail
- "checkout" (même verbe que lorsque nous réglons la note en partant d'un hôtel) signifie copier dans un de nos répertoire des fichiers stockés dans le Repository. Nous pouvons ensuite travailler normalement avec cette copie,
et replacer dans le Repository les fichiers modifiés, ce qui créera une nouvelle version. Seuls les fichiers d'une Working Copy pourront être consolidés dans le Repository
- "update" pour mettre à jour sa Working Copy avec une des versions de la
Repository
Nous aurions préféré "save" pour stocker dans le Repository et "load" pour récupérer une version. Une partie de notre confusion provient du mode ligne de commande: en nous
plaçant dans un répertoire pour invoquer "import", nous avons l'illusion que nous "importons dans ce répertoire". En fait, ce n'est pas la bonne métaphore. En réalité - c'est SVN.EXE qui est le programme qui sera en train de tourner
- il utilisera le répertroire courant de CMD.EXE
- la métaphore est donc "SVN.EXE et le Repository importent le répertoire courant"
Mentionnons aussi que les commandes peuvent être abrégées. Ainsi
svn checkout xxx peut aussi être appelé par svn co xxx
9 - Références et Liens Le téléchargement de Subversion importera automatiquement svn-book.pdf dans
"Program Files\CollabNet \". Ce livre est considéré comme "la bible" SubVersion. Il est effectivement complet, mais mélange, ce qui est normal pour un livre de référence, la partie Unix et Windows (sans parler de Mac), et les
différents modes. Trouver les commandes à utiliser pour Windows est donc un peu laborieux. SvnBook contient une version en ligne du même. Vous le trouverez rapidement en cherchant des
commandes particulières sur Google (+"subversion"+"delete" par exemple) Il existe aussi de nombreuses "cheat sheet" qui résument les commandes. De qualité variable, et plus souvent en Unix qu'en Windows.
10 - Commentaires
Comme d'habitude: - nous vous remercions de nous signaler toute erreur, inexactitude ou problème de téléchargement en envoyant un e-mail à jcolibri@jcolibri.com. Les corrections
qui en résulteront pourront aider les prochains lecteurs
- tous vos commentaires, remarques, questions, critiques, suggestion d'article, ou mentions d'autres sources sur le même sujet seront de même
les bienvenus à jcolibri@jcolibri.com.
- plus simplement, vous pouvez taper (anonymement ou en fournissant votre e-mail pour une réponse) vos commentaires ci-dessus et nous les envoyer en
cliquant "envoyer" :
- et si vous avez apprécié cet article, faites connaître notre site,
ajoutez un lien dans vos listes de liens ou citez-nous dans vos blogs ou réponses sur les messageries. C'est très simple: plus nous aurons de visiteurs et de références Google, plus nous écrirons d'articles.
11 - L'auteur John COLIBRI est passionné par le développement Delphi et les applications de Bases de Données. Il a écrit de nombreux livres et articles, et partage son temps entre le développement de projets (nouveaux projets, maintenance, audit, migration BDE, migration Xe_n, refactoring) pour ses clients, le
conseil (composants, architecture, test) et la
formation. Son site contient des articles
avec code source, ainsi que le programme et le calendrier des stages de formation Delphi, base de données, programmation objet, Services Web, Tcp/Ip et
UML qu'il anime personellement tous les mois, à Paris, en province ou sur site client. |