Catégorie : développement

Tout ce qui concerne le développement en général, que ce soit des choses générales, ou des choses bien précises. Cela va de la gestion de projet à la recherche du fonctionnement de pointeurs en C.

Python : exemple simple socket, gethostbyaddr et nom de domaine

Ci suit un exemple simple. Supposons que vous venez tout juste d’acheter le domaine « p-bor.com » mais vous avez beau faire un ping, rien ne fonctionne, parce que malgré que vous l’ayez acheté, il n’est toujours pas actif. En pratique, vous devez attendre et revenir de temps à autre essayer de le « pinger » pour voir si, enfin, vous arriver à le voir sur Internet.
J’ai une solution plus amusante : il suffit de faire ce script python, qui essaie de faire la correspondance entre une adresse « nom de domaine » et son adresse IP.
C’est la fonction gethostbyaddr().
Dès que la correspondance est faite, on l’affiche et on quitte. Dit autrement, tant que votre nom de domaine n’est pas validé, il y aura une boucle de test toutes les minutes. Surtout n’hésitez pas à laisser un commentaire pour améliorer la chose !


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket, time, random

random.seed()
nom_de_domaine = 'cuts-coiffure.fr'
Ok = False
while Ok == False:
    try:
        print nom_de_domaine+' => '+ \
            str(socket.gethostbyaddr(nom_de_domaine)[0])+ \
            ' ==> Valide !'
        Ok = True
    except socket.gaierror as E:
        tm_year,tm_mon,tm_mday, \
        tm_hour,tm_min,tm_sec, \
        tm_wday,tm_yday,tm_isdst = \
        time.localtime()
        print "%04d-%02d-%02d / %02d:%02d:%02d : %s." % \
            (tm_year,tm_mon,tm_mday, \
            tm_hour,tm_min,tm_sec,str(E))
        time.sleep(60 + random.randint(1, 90) )

Cours à l’institut universitaire d’informatique (IUT) d’Aix en Provence

Voici le fichier PDF du cours sur :

  • la base des DNS ;
  • les hôtes virtuels (« virtual hosts ») ;
  • règles de réécriture (« RewriteRules ») ;
  • les 3 principes de sécurité à avoir en tête.

Pour les quelques étudiants qui voudraient récupérer et lire le cours, un petit conseil sur les question qui vont vous être posées :

  • il vous faut connaitre les directives de réécriture les plus utilisées (redirection, etc) ;
  • il vous faut impérativement réussir à installer un ou plusieurs hôtes virtuels sur un ordinateur local et vous assurer que vous vous souvenez des étapes à faire ;
  • il vous faut savoir mettre en place une ou deux règle de réécriture afin de bien comprendre le fonctionnement. Vous allez avoir un ou deux exemples de règles à expliquer, et si vous n’avez jamais essayé d’en mettre une en place vous ne pourrez jamais les expliquer ;
  • enfin… avez vous bien en tête les 3 principes de sécurité ?

Bonne chance !

Et surtout n’hésitez pas à laisser un commentaire ou poser des questions ici.
Si vous avez des commentaires à faire sur mon cours, même chose : lâchez vous !

vim : insérer nom du fichier courant

Tous mes fichiers php commencent ainsi :

 1 <?php
 2 /**
 3  * fichier decision.php
 4  *
 5  * @author Olivier Pons
 6  * @version 1.0
 7  * @since 1.0
 8  * @copyright Olivier Pons
 9  *
10  * @package Ajax
11  */
12

Comment faire de manière pratique, sous vim, pour s’assurer que la ligne :
* fichier decision.php
contient vraiment le bon nom du fichier.

C’est très simple (comme tout dans vim), mais il suffit de le savoir (comme tout dans vim) :

Je vais détailler pas à pas l’explication de la macro et au final la mettre en entier :

Il faut donner l’ordre en ligne de commande = deux points = « : »
Donc : :
Il faut lui dire de rechercher = pourcent = « % »
Donc : :%
Il faut lui dire que c’est une chaine qu’on recherche = s = « s »
Donc : :%s
Ensuite on précise qu’on a fini l’ordre = slash = « / »
Donc : :%s/
Ensuite on précise le premier paramètre = chaine à rechercher = « fichier  » = « fichier  »
Donc : :%s/fichier
Ensuite on précise que le premier paramètre est une expression régulière qui doit contenir la chaine à rechercher, mais aussi tout ce qui suit = « :%s/fichier \(.*\) »
Donc : :%s/fichier \(.*\)
NB : on est obligé de mettre des antislashes \(.*\) devant les parenthèses pour dire que ce sont des caractères spéciaux qui doivent être interprétés comme des commandes.
Puis premier paramètre = fini = slash = « / »
Donc : :%s/fichier \(.*\)/
Puis le second paramètre = ce qui va être remplacé. Là c’est comme pour les parenthèses juste au dessus : on précise que c’est un « calcul » a effectuer = signe « = » mais comme c’est un caractère à interpréter on est obligé de mettre l’antislash soit \=.
Donc : :%s/fichier \(.*\)/\=
NB : à partir du signe « \=« , vim sait que ce qui suit est un calcul, donc chaque parenthèse sera déjà interprétée comme un ordre, il n’y aura pas besoin de mettre d’antislash pour les caractères spéciaux telles que les parenthèses, et ce sur tout le paramètre en entier.
Ensuite on lui passe le calcul de l’expression que j’ai fait ainsi (à vous de l’adapter pour vous) : renvoyer le nom du fichier = expand('%') =» ici moi j’aurais « ./json_decision.php » ce qui ne me convient pas. Je voulais uniquement le nom du fichier, sans quoi que ce soit derrière. On peut préciser exactement quelle partie du nom on veut : tapez « :help expand » pour avoir toutes les possibilités. Ici, moi, je ne voulais que le nom du fichier sans rien derrière. Donc j’ai juste tapé : expand('%:t')
Puis second paramètre = fini = slash = « / »
Donc : :%s/fichier \(.*\)/\='fichier '.expand('%:t')/
Enfin en troisième paramètre, les options : il n’y en a aucune mais on aurait pu mettre « g » pour dire de faire ça de manière globale, soit :
:%s/fichier \(.*\)/\='fichier '.expand('%:t')/g

Mais comme je ne veux le faire qu’une seule fois, voici ma ligne finale :

:%s/fichier \(.*\)/\='fichier '.expand('%:t')

Donc en pratique : je liste tout un répertoire de fichiers php, que j’ouvre sous vim, et j’y applique une macro qui fait :
– rechercher/remplacer que je viens d’expliquer ;
– sauvegarde du fichier et on passe au suivant (« wn« ).

Ainsi, j’ai passé tous mes fichiers et tout a fonctionné comme sur des roulettes : je suis sûr que dans tout mon code, dans le commentaire de début, le nom du fichier est en adéquation avec le vrai nom !

Si vous avez des suggestions ou commentaires n’hésitez pas !

vim howto : comment installer un plugin

J’ai vu cet exceptionnel exemple de plugin ici.
Petite parenthèse : regardez d’ailleurs le site vimcasts.org, c’est vraiment un site exceptionnel pour tous ceux qui veulent apprendre des astuces géniales de vim.

Donc, comment installer un plugin ? Moi, habitué de Windows © je me suis dit « ça doit être très compliqué, je vais chercher sur la toile ».
Mais… c’est tellement simple que j’avais beau chercher partout, je n’ai pas trouvé de réponse !
Voilà en pratique comment j’ai fait.
Le plugin génial que j’ai vu ici, se trouve là : https://github.com/godlygeek/tabular

Je vais donc à cette adresse :
Page Internet du plugin Tabularize

Je le télécharge, et voici les fichiers que je trouve dedans :
Fichiers dans le plugin Tabularize

Je me dis « bon sang comment l’installer dans vim ? ».
En pratique, rien de plus simple. Très souvent, dans votre répertoire « home » (auquel vous accédez en tapant le tilde en ligne de commande : ~), concernant vim, il y a un dossier caché qui commence par un point : « .vim » (n’oubliez pas le point au début).
Allez dans ce dossier et regardez s’il y a un sous-dossier plugin. S’il n’y en a pas, créez le. Moi qui suis sous Windows, et qui m’en éloigne de plus en plus jour après jour, j’ai installé cygwin et mon « home » est dans C:\cygwin\home\Olivier. Voilà ce que ça donne après avoir crée le bon dossier :
Fichiers dans le plugin Tabularize
Ensuite il vous suffit de copier simplement les dossiers du plugin dans le répertoire « ~/.vim/plugin » et… tout fonctionne (dans mon cas c’est donc C:\cygwin\home\Olivier\.vim\plugin) !
Copier les fichiers du plugin Tabularize dans le répertoire plugin de vim

Si vous avez des suggestions n’hésitez pas !

Numéro hotline Linksys Cisco

08 25 54 01 11 0,15 € / min

Numéro Indigo (0,15 Euros TTC/minute depuis un poste fixe France Telecom ou coût lié à votre opérateur)

Bien évidemment les gens parlent un français très approximatif, voire plus qu’approximatif.

Bonjou’ Môsieur, je oué vous wappeler… vous appelez de quel pays ?
Ne wacrochez pas d’accow ?
Quel est votre pwénom ?

« Olivier »

Je vais vous wappeler…

[Je raccroche et j’attends]

Bonjour, Monsieur « Olivier » ?


No comments.

Je ne me permettrais pas de critiquer l’accent ou autre, si la personne avait été compétente, mais j’ai perdu 20 minutes pour apprendre ce que j’avais déjà fait, et que la personne n’avait pas du tout compris ce que je voulais faire, elle a été demander au « département technique »… elle n’avait pas compris parce qu’elle n’était pas compétente et parce qu’elle ne parlait pas correctement français (j’ai dû me répéter pas mal de fois)… vive la mondialisation.

UglifyJS : meilleur et plus rapide que Google Closure Compiler et YUI

Merci à Mathieu Robin, ici, pour les petites explications de jQuery 1.5, dans lequel on peut lire qu’ils ont laissé tomber Google Closure Compiler pour UglifyJS.

UglifyJS est une librairie de compression/optimisation de code JavaScript. Dit autrement, vous écrivez votre code en JavaScript, vous le testez, avec les commentaires et tout et tout, et puis dès que vous pensez qu’il est prêt, hop, vous le passez à la moulinette UglifyJS et vous aurez un code super compressé, sans aucun commentaire, mais qui fonctionnera à l’identique de l’original, et vous pourrez le mettre sur votre serveur de production.

PS : Si si il est bien 2:44 du matin, j’ai fini de donner le bib’ à mon fils (^_^)

shell : remplacer un retour chariot par un espace

Super facile : l’outil tr.
Exemple concret : je veux lister les fichiers d’un répertoire et tous les passer à vim, par exemple pour y appliquer une macro.

Je les liste à la main du genre :

~/ # find ws -type f
ws/jsDecision.php
ws/jsDossierDocuments.php
ws/jsInfosEmprunt.php
ws/jsInternetDocumentDossierEditer.php
ws/jsListeFormulesGaranties.php
ws/jsLogin.php

Il suffit d’ajouter | tr '\r\n' ' ' (qui signifie « transforme tous les retours chariots en espaces ») :

~/ # find ws -type f | tr '\r\n' ' '
ws/jsDecision.php ws/jsDossierDocuments.php ws/jsInfosEmprunt.php ws/jsInternetDocumentDossierEditer.php ws/jsListeFormulesGaranties.php ws/jsLogin.php

Compilation du serveur JACK

Ouf ! J’ai enfin réussi à compiler une version du serveur JACK 1.9.6.
A chaque fois il me disait qu’il manquait quelque chose, et je devais l’installer.
Voilà comment ça s’est passé : j’ai récupéré la dernière version de JACK, puis je l’ai décompressée et je suis allé dans le répertoire en shell :
cd ~/Bureau/jack-1.9.6
De là, j’ai commencé à essayer de compiler :
> sudo ./waf clean && sudo ./waf configure --alsa
A chaque fois, il y avait des lignes où il me disait « no » au lieu de « yes », par exemple :
Checking for alsa >= 1.0.18 : ok
Checking for libfreebob >= 1.0.0 : no
Checking for libffado >= 1.999.17 : no
Checking for header sndfile.h : no

Alors voici la solution pour la plupart des choses manquantes : il faut installer la version de développement.
Donc (1) demander de chercher parmi tous les packages existants : prenons l’exemple avec sndfile :
sudo apt-cache search sndfile
Et là malheureusement il trouve plein de fichiers. Alors on filtre en précisant qu’on ne veut que du « développement » = « dev » :
sudo apt-cache search sndfile | grep dev
Et là il ne reste plus que deux lignes :

libsndfile1-dev - Development files for libsndfile;
mffm-libsndfilew-dev - wrapper for the libsndfile

Avec ces deux lignes, il faut prendre la plus « logique », ici donc la première, et installer en copiant collant le premier mot, ici « libsndfile1-dev » :
sudo apt-get install libsndfile1-dev

Vous continuez comme ça jusqu’à ce que vous n’ayez plus que des « yes » partout.
Ensuite, il se peut que vous ayez l’erreur :
«Unknown driver "alsa"»

La solution est simple (mais encore une fois il fallait la trouver) : il vous faut lors de la configuration de la compilation, préciser qu’il faut ajouter le driver « alsa » :
sudo ./waf clean && sudo ./waf configure --alsa
Et enfin l’ordre qui devrait fonctionner jusqu’au bout :
sudo ./waf install
Ensuite, peut être que vous êtes dans le même cas que moi à savoir que sous Ubuntu, vous avez installé la version « officielle ». Cette dernière est installée dans /usr/bin :
/usr/bin/jackd
Mais la nouvelle que vous venez tout juste de compiler a peut être été installée ailleurs !
Mettez à jour la liste de tous les fichiers de votre ordinateur :
> sudo updatedb
Et cherchez tous les fichiers « jackd » :

> sudo locate /jackd | grep ckd$ | more
/etc/default/jackd
/home/olivier/Bureau/jack-1.9.6/build/default/linux/jackd
/home/olivier/Téléchargements/jackd
/usr/bin/jackd
/usr/local/bin/jackd
/usr/share/doc/jackd
>

Vous voyez qu’il y en a deux qui semblent identiques. Voyons en détail :

> l /usr/bin/jackd
-rwxr-xr-x 1 root root 23096 2010-02-23 17:48 /usr/bin/jackd
olivier@olivier-laptop:~/Bureau/jack-1.9.6$ l /usr/local/bin/jackd
-rwxr-xr-x 1 root root 18727 2011-01-08 00:26 /usr/local/bin/jackd
>

Eh oui, effectivement, celui que vous avez compilé se trouve dans « /usr/local/bin » et le vieux dans « /usr/bin »
Donc il vous suffira de changer la ligne de commande du JACK Audio Connexion Kit :
/usr/bin/pasuspender -- /usr/local/bin/jackd
Et enfin, halleluja, tout fonctionnera !

Un très grand merci à LinuxMAO où j’ai trouvé cette information.

Enfin tout ça n’est que pour réussir à faire tourner une dernière version du serveur JACK…
C’est marrant avec Linux. Parce qu’on a toujours l’impression que c’est compliqué, mais au final on maitrise tellement mieux la chose que c’est bien plus agréable en fait que sur Windows, où, lorsqu’il arrive quelque chose qui ne fonctionne pas, on ne sait jamais comment le corriger… et pourtant ça fait 17 ans que je suis exclusivement sous Windows !

Ubuntu : installation du serveur JACK : comment faire

Voilà le résumé :

  • Je suis sous Ubuntu 10.04 ;
  • J’ai un piano avec deux prises MIDI (in et out) ;
  • J’ai acheté un adaptateur LogiLink USB Cable pour pouvoir transférer les informations de mon piano à mon PC et vice versa ;

Mon objectif est simple : faire en sorte que, quand j’appuie sur les touches du piano, ça se voie sur l’ordinateur.
Lancez le gestionnaire de paquets Synaptic.
Tapez « jack » dans « Recherche rapide ».
Une fois la liste affichée, sélectionnez pour l’installation : jackd, jack-tools, et celui auquel on ne pense pas mais qui est aussi important que le reste, j’ai nommé : qjackctl.

Voilà, une fois que tout est installé, il y a une nouvelle application qui est apparue dans le menu Applications => Sons et Video : c’est JACK Control.

La plupart des ordinateurs récents sous Linux ont un programme pour gérer le son qui est « PulseAudio ». Malheureusement il n’est pas compatible avec le serveur JACK. Donc il faut ajouter « /usr/bin/pasuspender — » qui va suspendre le programme « PulseAudio », pendant que le serveur JACK est actif. Bien sûr, dès que vous arrêterez le serveur, automatiquement le programme « PulseAudio » reprendra sa place de manière transparente. Que la vie est belle !
Ce qui suit ne concerne donc que les gens qui ont « PulseAudio », mais c’est la grande majorité.
Lancez le programme JACK Control (Applications => Sons et Video => JACK Control), et cliquez immédiatement sur le bouton « Réglages ».
Là, allez dans « Chemin du serveur », effacez tout et mettez :
/usr/bin/pasuspender -- /usr/bin/jackd

Voilà pour la première étape de « base ». Ensuite, je vais décrire comment compiler à la main une version plus récente du serveur JACK, afin de profiter des toutes dernières améliorations.

bazaar : tutoriel, et exemple concret d’utilisation

Je fais quelques petites notes personnelles au fur et à mesure de l’utilisation de Bazaar, au cas où cela serve à quelqu’un :

La première chose, la plus importante à savoir, pour les non-anglophones :

Du point de vue de bazaar, « checkout«  signifie « faire un lien entre« .

Par exemple :

  • on fait un lien entre deux répertoires A et B (« bazaar checkout A B »)
  • pour toute validation de modification avec bazaar (« bazaar commit » ou autre), que ce soit sur A ou sur B, bazaar va aussitôt les répercuter de l’autre côté (sur B ou A).

(1) Créer un dépôt « central » distant qui hébergera TOUS les projets

Ici, dans « /rep_bazaar/iwn_bazaar/ » :

> bzr init-repo --no-trees \
    sftp://bazaar@serveur_ftp/rep_bazaar/
bazaar@serveur_ftp's password:
Shared repository (format: 2a)
Location:
  shared repository: sftp://bazaar@serveur_ftp/rep_bazaar/
>

(2) Créer un projet distant : ici, le projet est « projet_web« 

– D’après la config précédente, il faut le créer dans une branche du dépôt central = « /rep_bazaar/projet_web/ » :

> bzr init sftp://bazaar@serveur_ftp/rep_bazaar/projet_web
bazaar@serveur_ftp's password:
Created a repository branch (format: 2a)
Using shared repository: sftp://bazaar@serveur_ftp/rep_bazaar/
>

(3) En local, initialiser un répertoire ‘vide’ qui sera celui de référence à partir duquel toutes les branches futures (dev, preprod et prod, etc.) vont dériver

(!!) dans la ligne de commande, il y a le répertoire distant ET un répertoire destination, ici « website_reference » :

> mkdir website_reference
> bzr  \
    checkoutsftp://bazaar@serveur_ftp/rep_bazaar/projet_web \
    website_reference

Attention !

D’après ce que j’ai compris, il ne faut pas toucher aux sources de références, parce qu’elles vont être copiées sur les environnements de dev, preprod et prod.

(4) Ajouter les fichiers source dans le répertoire de référence :

> cp -R website/* website_reference/

(5) Dire à bazaar d’ajouter tous les fichiers :

> cd website_reference/
~/website_reference # bzr add
(
Énorme liste de fichiers :
adding blabla/blabla.png
..
adding drupal/blabla/..
...
adding drupal/.../blabla.gif
)

(6) Valider les modifs en local avec un commentaire pour le dépôt #1 :

~/website_reference # bzr commit -m "Fichiers originaux"
(
Énorme liste de fichiers :
adding ...
..
added ws/blabla.php
...
added xml/xx/blabla.xml
)
~/website_reference #

(!!) On peut donner en local un nom différent du nom de la branche distante !

Mais comme ça risque de devenir rapidement le bazar (ahah), j’ai choisi de donner des noms identiques au répertoire du dépôt distant et aux répertoires locaux :

(7) Création de la branche de développement sur le dépôt distant :

> bzr branch sftp://bazaar@serveur_ftp/rep_bazaar/projet_web \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/dev

(8) Lier la branche distante à un répertoire local

(!) je répète : on peut donner en local un nom différent du nom de la branche distante, mais je pense que c’est à éviter, donc :

> mkdir projet_web
> mkdir projet_web/dev
> bzr checkout \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/dev \
    projet_web/dev
bazaar@serveur_ftp's password:
>

(9) Création de la branche de préproduction :

Deux mêmes ordres que pour la branche de développement (sauf répertoire final) :

> bzr branch \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/preprod
> bzr checkout \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/preprod \
    projet_web/preprod
bazaar@serveur_ftp's password:
>

(9) Création de la branche de production :

Deux mêmes ordres que pour la branche de développement (sauf répertoire final) :

> bzr branch \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/prod
> bzr checkout \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/prod \
    projet_web/prod
bazaar@serveur_ftp's password:
>

(10) Arrivé ici, le schéma est ainsi :

Sur le site de dépôt commun, mais aussi en local :

projet_web
  |
  +--- dev
  |
  +--- preprod
  |
  +--- prod

(11) Créer les sous-branches pour les développeurs :

> bzr branch \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/dev \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/dev/autre_dev
> bzr branch \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/dev \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/dev/olivier

(12) Arrivé ici, le schéma est ainsi :

Sur le site de dépôt commun :

projet_web
  |
  +--- dev
  |     |
  |     +--- autre_dev
  |     |
  |     +--- olivier
  |
  +--- preprod
  |
  +--- prod

NB : en local, les branches n’ont pas été créées, donc en local c’est ainsi :

projet_web
  |
  +--- dev
  |
  +--- preprod
  |
  +--- prod

(13) Exemple personnel : ma branche de développement pour la cellule médicale v 2.0 :

Nb : on crée encore une branche distante, rien n’est encore fait en local :

> bzr branch \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/dev/olivier \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/dev/olivier/nouveau_developpement

(13) Arrivé ici, le schéma est ainsi :

Sur le site de dépôt commun :

projet_web
  |
  +--- dev
  |     |
  |     +--- autre_dev
  |     |
  |     +--- olivier
  |            |
  |            +--- nouveau_developpement
  |
  +--- preprod
  |
  +--- prod

NB : en local, les branches n’ont pas été créées, donc en local c’est ainsi :

projet_web
  |
  +--- dev
  |
  +--- preprod
  |
  +--- prod

A partir de maintenant, on peut refaire en local toutes les branches qui n’y sont pas encore (autre_dev, olivier, nouveau_developpement).

Mais je choisis, par exemple, de ne faire que mes branche locales à moi (= olivier) :

Je fais le lien (= checkout) entre olivier et olivier distant :

>bzr checkout \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/dev/olivier \
    projet_web/dev/olivier

Je fais le lien (= checkout) entre nouveau_developpement et nouveau_developpement distant :

>bzr checkout \
    sftp://bazaar@serveur_ftp/rep_bazaar/projet_web/dev/olivier/nouveau_developpement \
    projet_web/dev/olivier/nouveau_developpement

(14) Résultat final :

Sur le site de dépôt commun :

projet_web
  |
  +--- dev
  |     |
  |     +--- autre_dev
  |     |
  |     +--- olivier
  |            |
  |            +--- nouveau_developpement
  |
  +--- preprod
  |
  +--- prod

En local, certaines branches n’ont pas été créées (volontairement) donc en local c’est ainsi :

projet_web
  |
  +--- dev
  |     |
  |     +--- olivier
  |            |
  |            +--- nouveau_developpement
  |
  +--- preprod
  |
  +--- prod

A partir de maintenant, en pratique

En pratique, il me suffit : de travailler sur le répertoire nouveau_developpement puis de faire toutes mes modifs, mes évolutions.

Une fois que je pense que tout est bon :

  • Aller dans le répertoire nouveau_developpement
  • Faire un commit :
    bazaar commit -m "Commentaire mise à jour"
  • Automatiquement, les modifications vont être répercutées sur ma branche distante (= sur le site de dépôt commun).