Fedora-Fr - Communauté francophone Fedora - Linux

Planet de Fedora-Fr : la communauté francophone autour de la distribution Linux Fedora

A propos

Cette page est actualisée toutes les heures.

Cette page est une sélection de blogs autour de Fedora. Fedora-Fr.org décline toute responsabilité au sujet des propos tenus par les auteurs des blogs de ce planet. Leurs propos sont leur entière responsabilité.

Le contenu de ce planet appartient à leurs auteurs respectifs. Merci de consulter leur blogs pour obtenir les licences respectives.

GLPI 0.83 : les groupes

Remi Collet

La prochaine version 0.83 de GLPI est actuellement en période de béta-test.

Gros plan sur une des évolutions de cette version.

La notion de "groupe" dans GLPI est très importante car elle permet d'organiser l'activité : classement des machines, représentation de l'organigramme de l'entreprise, organisation du support par domaine compétence, etc. Plusieurs évolutions régulièrement demandées on été réalisées pour la version 0.83.   1. Arborescence Désormais, les groupes... Lire GLPI 0.83 : les groupes

Chez Cdiscount, se payer la tête du client, ça n’a pas de prix.

Sébastien Natroll

Migration Fedora 15 à Fedora 16 via preupgrade

Alexandre Frandemiche

fedora-16.jpgVoilà, après quelques semaines, je me décide enfin à passer à Fedora 16 ! Au vu des nouveautés je n'ai pas pu attendre plus longtemps ! (Notamment tout ce qui touche à la virtualisation ;) )

Seulement voilà, quelques petits problèmes sont apparus lors de cette mise à jour ... c'est rare, mais ca arrive !

Voici la procédure à suivre, si après le preupgrade,, vous arrivez sur un écran "Oh no! ..." ou "Oh mince! ...

Changement uid et gid

Tout d'abord il faut éditer 2 fichiers, dans lequel nous allons remplacer les uid de notre (nos) utilisateur(s), le tout avec les droits root :

# vi /etc/passwd
# vi /etc/group

J'ai passé mon uid de 500 à 1000. Rappel pour vi : i pour insérer, /monuser pour rechercher la chaine monuser, [echap]wq pour enregistrer et quitter et [echap]q! pour quitter sans enregistrer.

Ensuite :

# find / -gid 500 -exec chgrp -h 1000 {} \; # find / -uid 500 -exec chown -h 1000 {} \;

Enfin on change le propriétaire de /home/monuser :

# chown -Rf 1000 /home/monuser

Voilà, en théorie, plus de problèmes au niveau des droits ...

Problème avec Gnome

J'ai été contraints de supprimer l'ensemble des extensions :

# yum remove gnome-shell-extension*

Par sécurité, j'ai aussi enlevé le driver propriétaire Nvidia :

# yum remove *nvidia*

Après tout cela, j'avais toujours cette erreur.

# yum reinstall gnome-shell

Et voilà, je peux enfin me connecter !
Fedora 16 me voilà !

Dotclear 2.4

Remi Collet

Ça y est ! La dernière version de Dotclear est installée.

Migration en douceur, aucun problème. Comme d'habitude, j'ai simplement appliqué le patch. Mon thème fonctionne parfaitement.... Lire Dotclear 2.4

Les 100 commandes Vim indispensables à ta (sur)vie.

Sébastien Natroll Vi (ou Vim, au choix), est incontestablement l’éditeur de texte le plus abouti et accessoirement le meilleur atout de tout programmeur (ou simplement de toute personne se voulant productive lorsqu’elle travaille avec du texte). Toutefois, force est de constater que la cheat sheet (ou feuille de triche) se révèle être une alliée de choix dans La suite >

GNOME 3 est une abomination.

Sébastien Natroll Lorsque j’ai installé Fedora 16, je savais que j’allais devoir me frotter à GNOME 3, LA mise à jour majeure de cet environnement que n’aime pas Linus Torvalds. Je cite : « Dans GNOME 3 les développeurs ont apparemment pensé qu’il était trop compliqué de faire du vrai travail sur votre bureau et ont décidé de La suite >

GNOME 3 est une abomination.

Sébastien Natroll Lorsque j’ai installé Fedora 16, je savais que j’allais devoir me frotter à GNOME 3, LA mise à jour majeure de cet environnement que n’aime pas Linus Torvalds. Je cite : « Dans GNOME 3 les développeurs ont apparemment pensé qu’il était trop compliqué de faire du vrai travail sur votre bureau et ont décidé de La suite >

Installer OpenBSD sur une machine virtuelle KVM (sous linux CentOS)

Antoine Wallon Ce Week end j’ai voulu mettre en place un serveur sous  OpenBSD pour le première fois. L’installation sous VirtualBox ne m’avait posée aucun problème, mais sous KVM c’était une autre histoire. Au redémarrage, après linstallation une jolie message m’est apparu setting tty flags je vais donner une astuce pour résoudre ce problème Étape 1 Installer [...]

mysql-5.5.18

Remi Collet

Les RPM de MySQL Community Server 5.5.18 GA sont disponibles dans le dépôt remi pour fedora et pour Enterprise Linux (RHEL, CentOS, ...).

A lire : Introduction to MySQL 5.5 Changes in MySQL 5.5.18 MySQL 5.5 Reference Manual Cette construction utilise un fichier spec proche de celui de Rawhide. ATTENTION : avant la mise à jour, une sauvegarde de vos bases de données est très vivement conseillée (un vidage avec mysqldump par exemple).    L'installation la plus simple... Lire mysql-5.5.18

La Maison Blanche dément détenir des informations sur la vie extraterrestre.

Sébastien Natroll Suite à une pétition signée par quelques milliers d’Américains, le gouvernement des États-Unis a publié récemment sur sa page « WE the people » un communiqué pour le moins insolite. Le gouvernement dément tout contact avec une vie extraterrestre et par la même occasion, il dément détenir toute information sur l’existence même de la vie extraterrestre. Bref, La suite >

CSSLint et Sniffer Zeta Components dans le dépôt llaumgui

Guillaume Kulakowski

En ce moment, professionnellement je travaille beaucoup avec Jenkins, qui nous permet de monter en qualité dans le code mais également en maintenabilité. J'en suis tellement fan que je suis entrain de me monter une plateforme d'intégration continue personnelle sur mon serveur (sujet d'un prochain billet à venir).

Comme il manque encore quelques outils en RPM, j'ai packagé CSSLint pour Fedora 14/15/16 et RHEL 5/6. Vous pouvez donc trouver cet utilitaire au sein du dépôt llaumgui, package pour lequel j'ai également ouvert une review request.

Au niveau des eZ Components que je package pour Fedora et EPEL, il manquait le standard pour php Code Sniffer. C'est chose faite avec l'arrivée de PHP_CodeSniffer_Standards_Zeta dans le dépôt llaumgui.

Sans commentaire

PHP 5.4 en préparation

Remi Collet

La version 5.4.0RC1 étant publiée, je commence à travailler sur les RPM de PHP 5.4.0.

Actuellement les RPM sont disponible uniquement pour fedora 15 x86_64 dans le dépot remi-test. Ce sera probablement une nouveauté pour fedora 17. Version actuelle : 5.4.0RC2-dev (clichet 201111130730). Les extensions disponibles : php-pecl-geoip-1.0.8-2 php-pecl-memcache-3.0.6-3 php-pecl-mysqlnd-ms-1.1.2-3 php-pecl-ncurses-1.0.1-4... Lire PHP 5.4 en préparation

Thunderbird 8

Remi Collet

Le RPM de la nouvelle version du client de messagerie de la Fondation Mozilla est disponible dans le dépôt remi pour fedora ≤ 14 et enterprise linux 6 (rétro-portage de la version F-16).

Commencez par lire : Thunderbird Release Notes (Notes de version en anglais) Comme toujours : yum --enablerepo=remi update thunderbird\* Les extensions enigmail (version 1.3.3) et lightning (version 1.0rc2) sont aussi disponibles. Les RPM de la version 8.0 sont disponibles ici pour fedora 12 à 14, et pour la première fois pour enterprise... Lire Thunderbird 8

Firefox 8

Remi Collet

Les RPM de la nouvelle version du navigateur de la Mozilla Foundation sont disponibles dans le dépôt remi pour fedora et enterprise linux (RHEL, CentOS, ...).

A lire : Mozilla Firefox Release Notes (notes de version, en anglais) Installation : yum --enablerepo=remi update firefoxCe paquet utilise xulrunner8, qui s'installe à côté de celui par défaut. Remarque : ce RPM est très proche de celui de firefox 8 présent dans fedora 15/16 Les RPM sont disponibles pour fedora 12 à 14 et, pour la première... Lire Firefox 8

Piratage : l’immense supercherie des maisons de disques.

Sébastien Natroll Aujourd’hui, nous apprenons qu’Universal Music, filiale de Vivendi, s’est offerte EMI (il paraît que leurs artistes ont du talent) pour 1,4 milliard d’€. La question que nous sommes en droit de se poser : où est la crise du disque ? Éléments de réponse à suivre… Nouvelles formes de consommation Il est vrai qu’avec l’essor La suite >

gnome-shell-status-only-icon 1.1.0 pour GNOME 3.2

Guillaume Kulakowski

Vous aviez peut-être vu passer mon extension Gnome Shell pour faire disparaitre votre nom du panel GNOME. Je viens de la mettre à jour pour GNOME 3.2.

Vous pouvez la télécharger sur le site du projet associé.

Sortie d'Indefero 1.2 et disponibilité des RPMs

Guillaume Kulakowski

La forge Indefero, utilisée sur projects.llaumgui.com (entre autre, car on s'en sert également sur Fedora-Fr et à mon travail) est sortie la semaine dernière en version 1.2.

L'occasion pour moi de mettre à jour les RPMs disponibles sur mon dépôts et également de rappeler la review Request au bon souvenir des approbateurs potentiels.

Pour mettre à jour votre forge, rien de plus simple :

  • Mise à jour du RPM :
yum --enablerepo=llaumgui update
  • Mise à jour de la configuration (/etc/indefero/idf.php).
  • Mise à jour de la base :
root@stetson /usr/share/indefero> php /usr/share/php/pluf/migrate.php --conf=/etc/indefero/idf.php -a -d -u
PHP include path: .:/usr/share/pear:/usr/share/php:/usr/share/php/pluf
Migrate  to version latest
17 17AddIssueRelations up
18 18DownloadMD5 up
root@stetson /usr/share/indefero> php /usr/share/php/pluf/migrate.php --conf=/etc/indefero/idf.php -a -d  
PHP include path: .:/usr/share/pear:/usr/share/php:/usr/share/php/pluf
Migrate  to version latest
17 17AddIssueRelations up
18 18DownloadMD5 up
  • Effacement du cache :
rm -f /tmp/Pluf_*

Voila.

D programming version D2

Jonathan Mercier

Chèr lecteur,

Me voici de retour sur le langage D dans sa version 2. Je vais tenter ici de vous apprendre à programmer progressivement. En effet je considère que le langage D est un très bon langage, même pour un débutant. Il existe deux écoles sur ce sujet, ceux préconisant l'apprentissage par un langage de programmation:

  1. haut niveau tel que python
  2. bas niveau tel que le C

La première école a le mérite d'offrir au futur programmeur des progrès rapide au détriment de notion importante sur le fonctionnement de l'ordinateur, les mauvaises habitudes de programmations à éviter, où encore l'enfermement dans un langage ( triste ). La seconde école nécessite une plus grande volonté pour le débutant afin d'arriver à ces fins, mais ceci lui donne l'aptitude de mieux comprendre comment est traduit son programme par l'ordinateur, une plus grande capacité pour apprendre de nouveaux langages.

Le langage java pourrait concilier les 2 écoles mais la compréhension de la programmation orientée objet est un obstacle trop important. Mais voilà le langage D qui vient chambouler cet état. En effet le langage D offre le compromis idéale en simplicité pour lapprentissage de la programmation. Sur cette courte introduction nous allons commencer à apprendre le langage D. Pour cela vous devez installer les outils nécessaires:

  • ldc, compilateur D
  • pobos, la bibliothèque standard
  • druntime, le ramasse miette
$ su -c 'yum install ldc ldc-druntime ldc-druntime-devel ldc-phobos ldc-phobos-devel'

Je vous conseil en plus (optionnel):

  • ldc-phobos-geany-tags, pour l'auto-complétion dans geany
  • ldc-phobos-devhelp, pour avoir une petite doc de l'api de phobos
$ su -c 'yum install ldc-phobos-geany-tags ldc-phobos-devhelp'

Premier pas

Quel outil utiliser ?

Pour écrire du code en langage D je préconise dans l'ordre:

  1. geany
  2. scite
  3. gedit

D'autres outil existe mais ils ne feront pas l'objet de ce chapitre.

Écrire un message dans la console (sortie standard )

A l'aide de votre éditeur préféré ( geany pour moi :-D" class="smiley )


  1. import std.stdio;
  2. import std.string;
  3.  
  4. void main( string[] args ){
  5. write( "Bonjour :-)" );
  6. }

Compilation

Geany

Il suffit d'appuyer sur F8 ;-)" class="smiley

Ligne de commande
$ ldc2 test.d

Exécution

Geany

Il suffit d'appuyer sur F5 ;-)" class="smiley

Ligne de commande
$ ./test
Bonjour :-)" class="smiley

Explication du programme

Afin d'écrire sur la console on doit utiliser la fonction write, cette fonction est définit dans le module std.stdio.

Deuxièmement pour utiliser les chaines de caractères on doit utiliser le type string définit dans le module std.string.

la troisième ligne définit la fonction principale du programme, la fonction main. C'est le point de départ du programme. La fonction main peut recevoir les paramètres de la lignes de commandes. Ces paramètres sont stocké dans le tableau qui se nomme args. Nous verront tout ça plus loin juste retenez que la fonction principale s'écrit de cette manière. Le contenu de la fonction principale est définit par { }. C'est à dire que toutes lignes entre { } de la fonction main seront exécuté ( évalué pour faire du vocabulaire :-)" class="smiley ). Notre fonction principale ne contient qu'une seule ligne write( "Bonjour :-)" ); qui permet d'écrire bonjour dans la console.

Faire une addition

On va faire une simple addition, pour cela comme précédemment on va importer de quoi écrire sur la console et écrire la fonction de départ la fonction main.


  1. import std.stdio;
  2. import std.string;
  3.  
  4. void main( string[] args ){
  5. write( "2 + 3 = " );
  6. write( 2 + 3 );
  7. }

Compilation et Exécution

Exactement comme précédemment, je vous renvoie donc au point d'avant. Le résultat:

$ ./test
2 + 3 = 5

Explication du programme

Le programme principale commence par écrire dans la console la chaine de caractère 2 + 3 = la seconde ligne écrit à la suite le résultat de l'addition 2 + 3 soit 5 :-)" class="smiley

Les type késako ???

On a tous appris tout petit ce qu'est un type mais on a vite oublié tellement que c'est évident :-)" class="smiley . Oui oui rappelez vous les chiffres 1, 2, 3 sont des entiers et 2.5 est un chiffre décimal ( flottant ). L'ordinateur fait comme nous, la distinction entre les différents types voici de suite un exemple


  1. import std.stdio;
  2. import std.string;
  3.  
  4. void main( string[] args ){
  5. int chiffre1 = 2;
  6. int chiffre2 = 3;
  7. write( "2 + 3 = " );
  8. write( chiffre1 + chiffre2 );
  9. }

Alors ce programme fait exactement la même chose que le précédent, c'est à dire qu'il fait l'addition de 2 + 3 :-)" class="smiley .

Ici on a stocké la valeur de 2 dans la variable chiffre1 de type entier, la valeur de 3 stocké dans la variable chiffre2 de type entier. Un entier c'est un chiffre positif ou négatif, si vous n'utilisez que des entiers positif je vous conseil d'utiliser le type size_t.

Information complémentaire: pour les connaisseurs size_t agit comme le type uint sauf qu'il s'adapte aux architectures selon que l'on compile sur un ordinateur 32 bits (uint) ou 64 bits (ulong) de façon automatique.

Faire une fonction

Il est important de découper notre programme en différente fonction. En effet celà permet de ne pa réécrire, par exemple le code effectuant une addition à chaque fois. Le code pour ce travail est écrit une fois et ensuite on l'apelle au besoin. Concrètement cela se traduit par :


  1. import std.stdio;
  2. import std.string;
  3.  
  4. size_t addition( size_t a, size_t b){
  5. return a + b ;
  6. }
  7.  
  8. void main( string[] args ){
  9. size_t chiffre1 = 2;
  10. size_t chiffre2 = 3;
  11. size_t resultat = addition( chiffre1, chiffre2)
  12. write( "2 + 3 = " );
  13. write( resultat );
  14. }

Ici on a définit une fonction qui sappelle addition. Elle prends deux paramètres qui seront stocké respectivement dans a et b. Ces paramètres doivent êtres des entiers positifs car ils sont typé size_t. Enfin la fontion retourne une valeur de type size_t car avant le nom de la fonction il est écrit size_t.

Surcharger une fonctions

C'est bien jolie la fonction addition! Mais moi, je voudrais additionner des types différents! C'est simple il suffit d'écrire les fonctions avec les type désirés.


  1. import std.stdio;
  2. import std.string;
  3.  
  4. size_t addition( size_t a, size_t b){
  5. return a + b ;
  6. }
  7.  
  8. float addition( size_t a, float b){
  9. return a + b ;
  10. }
  11.  
  12. double addition( double a, size_t b){
  13. return a + b ;
  14. }
  15.  
  16. double addition( double a, double b){
  17. return a + b ;
  18. }
  19.  
  20. void main( string[] args ){
  21. float chiffre1 = 2.6;
  22. size_t chiffre2 = 3;
  23. double chiffre3 = 5;
  24. float resultat1 = addition( chiffre2, chiffre1);
  25. size_t resultat2 = addition( chiffre2, chiffre2);
  26. double resultat3 = addition( chiffre3, chiffre2);
  27. double resultat4 = addition( chiffre3, chiffre3);
  28. }

Le compilateur choisira la fonction addition correspondant aux types soumis. Le nom de la fonction suivie de ces paramètres forme la signature de la fonction. Le type de retour n'est pas compris dans la signature.

Les templates

Les fonctions ne permettent pas d'écrire en une fois "une addition c'est comme ça quelque soit le type"! est là qu'intervient les templates pour écrire des fonctions génériques.


  1. import std.stdio;
  2. import std.string;
  3.  
  4. T addition(T,U)( T a, U b){
  5. return a + b ;
  6. }
  7.  
  8. void main( string[] args ){
  9. float chiffre1 = 2.6;
  10. size_t chiffre2 = 3;
  11. float resultat = addition( chiffre1, chiffre2);
  12. write( "2.6 + 3 = " );
  13. write( resultat );
  14. }

Dans notre Exemple le template retournera toujours le même type que le type du prmier paramètre. Ainsi si on inverse l'ordre des paramètres chiffre1 et chiffre2 , le résultat sera de type size_t et donc tronqué (pas de chiffre après la virgule)

Un moyen simple de résoudre ce soucis et de simplement laisser le compilateur de déterminer automatiquement le type de retour. soit simplement:


  1. import std.stdio;
  2. import std.string;
  3.  
  4. auto addition(T,U)( T a, U b){
  5. return a + b ;
  6. }
  7.  
  8. void main( string[] args ){
  9. float chiffre1 = 2.6;
  10. size_t chiffre2 = 3;
  11. float resultat = addition( chiffre1, chiffre2);
  12. write( "2.6 + 3 = " );
  13. write( resultat );
  14. }

La seule modification est l'utilisation du mot clé auto.

Les commentaires

Afin de documenter ton code est pouvoir le comprendre facilement on peut ajouter des commentaires dans le code qui ne seront pas évalué par le compilateur. Un exemple vaut mieux qu'un long discours.


  1. // je suis un commentaire sur une ligne
  2. /*
  3.  je suis un commentaire
  4.  sur plusieurs ligne
  5.  */

Les tableaux

Lorsque l'on développe des applications on utilisent souvent les tableaux. Un tableau va permettre de stocker une suite d'information.


  1. int[] tableau = [1, 2, 3];

On a définit une variable tableau de type int, les signifie que c'est un tableau d'int. Pour accéder au premier élément on commence à compter à partir de 0.


  1. int[] tableau = [1, 2, 3];
  2. writeln( tableau[0] );

Slicing

On peut également récupérer une portion du tableau, par exemple on souhaite récupérer les élément à partir de l'indice 2 jusquà la fin:


  1. int[] tableau1 = [1, 2, 3];
  2. int[] tableau2 = tableau1[ 2 .. $];
  3. writeln( tableau2 );

Le symbole $ indique la fin du tableau, si l'on veut l'avant dernier élément on peut faire $ - 1 et ainsi des suite. La longueur d'un tableau peut être connu de cette façon.

Longueur de tableau


  1. int[] tableau1 = [1, 2, 3];
  2. writeln( tableau1.length );

On peut changer la taille d'un tableau:


  1. int[] tableau1 = [1, 2, 3];
  2. tableau1.length = tableau1.length + 5;
  3. tableau1[2 .. $] = [ 4, 5, 6, 7, 8 ];

Concatenation

Pour joindre deux tableaux on utilise le caractère ~


  1. int[] tableau1 = [1, 2, 3];
  2. tableau1 ~= [ 4, 5, 6, 7, 8 ];

Les boucles

Tant que (while)


  1. import std.stdio;
  2.  
  3. void main(){
  4. uint = 0;
  5. while (i < 10){
  6. writeln(i);
  7. i++;
  8. }
  9. }

Tant que i est plus petit que 10, on boucle et on imprime sur la sortie standard la valeur courante de i.

Faire tant que (do … while)

Cette boucle est semblable à la précédente, seulement ici on garantit au moins une fois le passage dans la boucle.


  1. import std.stdio;
  2.  
  3. void main(){
  4. uint i = 10;
  5. do{
  6. writeln(i);
  7. i++;
  8. }
  9. while(i < 10);
  10. }

Pour (for)

On peut effectuer la déclaration d'une variabl (uint i = 0;)e, définir les conditions de la boucle ( i < 10) et définir une action exécutée à chaque début de boucle (généralement l'incrémentation de cette variable, comme ici: ++i) ,dans la déclaration de la boucle for :


  1. for (uint i = 0; i < 10; ++i){
  2. writeln(i);
  3. }

Pour chaque (foreach)


  1. uint[5] a = [1,5,4,6,8];
  2. foreach(element;a){
  3. writeln(element);
  4. }

Pour chaque élément de a, on imprime sa valeur sur la sortie standard.

On peut également connaître le nombre d'itérations dans la boucle foreach. Par exemple, connaître le numéro de ligne ou l'indice du tableau en cours de traitement.


  1. uint[5] a = [1,5,4,6,8];
  2. foreach(compteur,element;a){ // Notons que element est de même type que a, ici de type uint[]
  3. writefln("numéro %d valeur %d",compteur, element);
  4. }

Aller à (goto)

Le goto n'est à utiliser que dans des cas précis. Il ne faut surtout pas en abuser et la plupart du temps les autres types de boucles suffisent. Depuis le temps que je programme je n'ai eu à l'utiliser qu'une seule fois. Le goto permet d'aller directement à un endroit du code défini par une étiquette :


  1. import std.stdio;
  2.  
  3. void main(){
  4. uint i = 0;
  5. writeln("Bonjour");
  6. monEtiquette:
  7. i++;
  8. writefln("Valeur de i %d", i);
  9. if ( i < 2 ){
  10. goto monEtiquette;
  11. }
  12. writeln("Fin");
  13. }

Les chaines de caractères

Afin d'utiliser les chaines de( caractères, vous devez utiliser le module std.string. Une chaine de caractère commence et se termine par le symbole ", alors qu'un caractère commence et se termine par le symbole '. Soit:


  1. import std.string;
  2.  
  3. string maChaine = "je suis une chaine de caractère supportant l'unicode sans rien faire.";
  4. char caractere = 'c';

Les variables de type string sont immutables cela signigifie que le prochain chapitre, le lire, tu devras (yoda).

Les constantes

Le langage D différentie deux types de constante, const et immutable. const est utilisé pour dire que l'adresse de la variable x ne changera pas. immutable est utilisé pour dire que la valeur de la variable ne changera pas.

le mot clé const renvoie à la notion de pointeur et de référence. l'utilisation des pointeurs en D et pour moi est utile uniquement dans un but de faire une interface d'une application C.

Un peu de code:


  1. immutable int pi = 3.14; // la variable pi ne peut changer de valeur
  2. immutable int[] tableaux = [ 1, 2, 3 ]; // on ne peut pas modifier le contenu du tableau
  3. immutable int[1] tableaux = 4; // erreur on ne peut pas changer la valeur du tableau
  4. immutable int[] tableaux = [ 1, 4, 3]; // mais on peut donner une nouvelle référence

Le type string est immutable par conséquent on ne peut pas faire ça:


  1. string chaine = "Le langage C c'est cool";
  2. chaine[11] = 'D'; // -> Error: chaine[11] isn't mutable

pour cela on fait comme ça:


  1. string chaine = "Le langage C c'est cool";
  2. chaine = chaine[0 .. 11] ~ 'C' ~ [12 .. $];

La différence ici est que l'on change la référence assigner à la variable chaine. Dans un premier temps on construit le tableau de caractère "Le langage D c'est cool" et la référence de ce tableau est assigné à la variable chaine.

Un informaticien en fac de médecine.

Sébastien Natroll Tout d’abord, laissez-moi vous dire que « Non, je n’ai pas quitté mon travail pour partir en médecine ». Si je me suis amusé à tromper mon entourage, je ne tiens pas à faire questionner ici sur les raisons qui m’auraient amené à faire une chose pareille. Lundi 7 novembre, après un week-end de repos, je rejoignis La suite >

Page générée le 17 avr 2015 à 09:17