Pour la voiture, au bout d'une heure, tu sais accélérer, freiner. Pour s'insérer dans la circulation, ne pas se croire un dieu de la conduite, ne pas s'énerver parce que les autres ne savent pas conduire, etc. C'est pas gagné, mais là, les vingt heures ne suffisent pas.
Ce matin, sur une portion à trois voies qui passe à deux, un mec, en voiture, doubler à droite, puis ce préparer à redoubler à droite deux voitures qui était sur la file du milieu et de gauche. Logiquement, la voiture sur la voie du milieu se rabat (pour laisser la place à la voiture de gauche de se rabattre) puisqu'il n'y a plus que deux voie. Là, le mec, il tente de profiter du fait que la route est encore large pour passer entre les deux voitures. Finalement il se dégonfle, ouf. J'avais déjà les doigts près pour un freinage d'urgence.
Je suis certain que ce mec est persuadé qu'il conduit bien, mais que ces abrutis ont fait n'importe quoi est l'ont empêcher de rouler. Toujours est-il que j'ai doublé ce gars, quelque kilomètre plus loin à la régulière, au moment où il allait sortir de la rocade. Il n'a jamais eu plus de trois ou quatre voitures d'avance. Et je ne suis pas passé entre les files.
La voiture, c'est comme l'informatique, pour savoir faire, il faut prendre de la bouteille, et pas la bouteille, et pas s'énerver, c'est comme ça qu'on progresse le mieux.
Maintenant, faites-vous parti des 75% des français qui dise conduires mieux que la moyenne ?
La GPL...
J'aimerai poser des questions simples.
Je fais une bibliothèque quelle licence choisir ?
GPL :
Si quelqu'un lie un programme à ma bibliothèque, son programme doit-il être GPL ?
Si quelqu'un modifie ma bibliothèque, la nouvelle bibliothèque doit être en GPL.
BSD:
- Dans les deux cas il fait ce qu'il veux de son programme.
LGPL:
- Le programme peut avoir la licence qu'il veut.
- Une modification de la bibliothèque implique une distribution du code en même temps que le binaire ainsi que de garder l'historique : auteur, licence ?
...on m'a ri au nez quand j'ai réclamé un client X sur la machine ...
Juste pour ressituer ? Tu parlais de quel client X ? firefox, thunderbird, gvim, xpilot ?
Juste pour rappel, dans un environnement client-serveur : le serveur fourni le service et le client l'utilise. Pour X, c'est la même chose, le service est un service d'affichage, de gestion des entrées(clavier/souris). Le fournisseur (serveur est bien X11) le client l'application.
En fait, tu voulais certainement parler de serveur d'application faisant tourner des clients pour ton serveur X en local ;-)
===>[] Quoique, cette confusion générale m'indispose régulièrement.
Après j'ai du mal à voir l'intérêt d'implémenter une liste chaînée dans un tableau ...
Le seul intérêt, c'est de trouver un élément libre en O(1) et d'y accéder en O(1).
Tu ordonnes tes éléments ?
Non.
C'est pour parcourir l'ensemble de tes éléments en une seule passe comme avec une liste chaînée sans tester si une case est vide ?
Non plus. Je chaine juste les élément de façon a facilité l'usage de champ généraux : first_free_index, first_use_index et last_use_index.
J'obtiens un truc du genre :
struct
{
int first_free_index;
int first_use_index;
int last_use_index;
struct {
...
int prev_index;
int next_index;
}
};
Pour ajouter un élément, je prends le first free, et je le chaine avec le first use, je déchaine avec le next du first free.
Pour enlevé un élément, je rechaine ensemble le prev et le next, je le note en first free, je le rechaine avec l'ancien first free.
C'est pour éviter les allocations / désallocations mémoires ?
Oui. Contrainte produit :-(
Au boulot, c'est C. Et j'ai besoin de tableau pour accéder vite aux données, mais je veux aussi pouvoir insérer, effacer rapidement un élément à partir de son index.
J'ai donc fait une sorte de liste chaînée par index et pas par pointeur. Le problème c'est que l'appliquer à des nouveau type et un cauchemar en macro, faire du copier coller c'est bien, sauf pour une évolution, correction de bug, quand il y a dix type utilisé. Là où un jeu de fonction, structure "patron" serait très utile. Même pas besoin d'aller à la classe, le C++ c'est bien plus que la réduction habituelle à la classe.
Si je prend un avocat et que le juge ne statue pas en ma faveur -> c'est pour ma pomme (et c'est cher). Et visiblement y'a un certain nombre d'avocat qui défendent mal lorsqu'on regarde sur le net /o\.
C'est pour ça que au USA, les avocat prennent un pourcentage de ce qu'il te font gagner... d'où les sommes excessives demandées.
Effectivement, le paragraphe 6.3.1.8 semble explicite. (j'utilise un des derniers draft de la norme C99) : Many operators that expect operands of arithmetic type cause conversions and yield result types in a similar way. The purpose is to determine a common real type for the operands and result. For the specified operands, each operand is converted, without change of type domain, to a type whose corresponding real type is the common real type. Unless explicitly stated otherwise, the common real type is also the corresponding real type of the result, whose type domain is the type domain of the operands if they are the same, and complex otherwise.
Je vois pourtant régulièrement des erreurs du type que j'ai décrite. Donc, je ne comprends pas. Soit le comportement dans la norme c89 est différent, soit les compilateurs sont mal écris.
Comme en plus il n'y a pas de garantie sur l'ordre des opérations (sauf si on met des parenthèses), ...
L'ordre des opération est parfaitement défini dans le cas d'une expression, il est indéfini uniquement dans le cas des paramètres d'une fonction.
ex:
if ((monPointeur != NULL) && (*monPointeur != 42)) est parfaitement valide, car la norme garanti que si la première partie est fausse, la seconde n'est pas évalué.
Dans le premier cas, je connais plusieurs comportement, pour la deuxième sur une station SUN, la "fonctAApellerEnDeuxieme" sera en fait appeller la première.
Dans le cas de la formule, si on met b = 2 et c = 10 alors gcc applique :
2 * 2 - 1 + 9 = 13.
Mais qui dis que le -- pre doit s'appliquer que à ce membre ? Et pas a toute l'expression ?
2 * 1 - 1 + 9 = 11 ?
D'après mon explication ci-dessus, dans le premier cas _r devrait valoir 3.0, car _a / _val est (int) / (double) donc je m'attendais à (int) / (int) or le cast de 1.5 en int donne 1, donc 3 / 1 = 3 puis cast vers double 3.0.
Avec le gcc ici 3.3.1 il me donne 2.0 aussi.
J'ai cherché dans la norme C, et rien trouvé d'intéressant. Il semble y avoir un flou dans le cas des opérateurs utilisés avec deux types différents. Cela dépend-il du compilateur ? Est-ce un cas indéterminé ? gcc semble utiliser le type le plus précis. Quelqu'un a t'il la possibilité de tester avec un gcc 2.95 ?
Dans ton terminal, tu lances :
$ wio leNomDeFichierQueTuVeux.avecUneExtensionSiTuVeux
Sinon, faire des accès aléatoires de se type met à genoux n'importe quel disque. Le même test avec les fonction fread, etc. du C qui bufferise les accès donne de meilleurs résultat.
Généralement, dans une application classique, on utilise pas le disque de cette manière, donc, c'est un bench, il n'est représentatif d'aucune application, ou d'usage normal connue d'un disque.
Encore une autre :-D,
Tu ne réinitialises que la moyenne entre deux essais, ce qui signifie que ton min et ton max sont sur l'ensemble du test, et pas que sur le test en cours. Est-ce voulu ?
Autre remarque, tu mesures le temps complet de la boucle, alors que tu ne devrais mesurer que l'io. mettre un get_tick avant et après le write, et enlevé le temps moyen d'execution du get_tick.
Dus à tes parenthèses, les divisions effectué ici sont des divisions entières, car tmoy et tgmoy sont des entiers 64. Le calcul étant réalisé avec le type du membre gauche.
http://www.kdevelop.org ?
KDE 4 étant porté sous Windows, kdevelop le sera prochainement, dès que la version 4 sera plus en béta.
Après, il est difficile de réapprendre les interfaces graphique, les méthode de travail, il y a toujours un certain immobilisme (dans tous les milieux).
Déjà, je fais de la pub pour Qt autour de moi, et j'attends kdevelop avec grande impatience (sous windows).
J'utilise gentoo. Et pour l'instant, je n'ai pas trouvé mieux. Je passe du temps à choisir mes "use flags" à la première installation, mais après ça roule.
Je n'ai pas essayé archLinux, juste une question qu'elles sont les dépendance de kdevelop ? Car sous gentoo, j'ai ajouté le suport de subversion, mais viré celui de cvs. C'est mon choix, est-ce simple à faire avec ArchLinux ?
C'est pourtant le cas, make, gcc considère par défaut le .C comme du c++. C'est un fait. Sur les station SUN, c'est également le cas, c'est d'ailleurs un des seuls endroits où je l'ai vu utilisé. Beaucoup d'éditeur considère le .C comme du C++.
Après, quand tu fais ton ls, ça se voit bien, quand tu l'écris dans un forum ça se voit moins bien.
Je ne savais pas que tu étais Belge, mais mon opinion sur les votes reste :
- Absention : Je m'en fou, donc je ne râle pas contre mon gouvernement.
- Blanc : Aucun choix ne me convient. Il devrait peut-être y avoir le vrai décompte de ces votes, histoire que à partir d'un certain seuil, on puisse annuler l'élection car les candidats ne conviennent pas.
- Nul : Je ne sais pas voté. Ce ne me mets pas en valeur.
donc si je ne vote pas car aucun des candidats ne me convient c'est bien que je me fous de savoir lequel passe.
Oui, c'est ça. Si tu ne t'en fous pas, alors tu votes. C'est pour ça que le blanc a été inventé.
J'ai toujours pensé que ext2 était plus complexe que FAT, du fait des e-noeud, etc. par rapport au bête tableau qu'est la FAT.
Après, il faudrait peut-être alléger ext2 des droits, utilisateurs POSIX, en fournir une implémentation LGPL, qui permettrait de l'intégrer dans ce genre de projet.
A part, simuler un USB-Mass-storage, compatible Windows, ce serait pas mal.
Sinon, je soutiens l'idée d'un disque usb, ou on enverrais des messages du type getFile, getPartOfFile, etc. au lieu d'y accéder brutalement comme si c'était un disque physique.
[^] # Re: Kôôôa? Les utilisateurs ne veulent pas être experts??
Posté par Anthony Jaguenaud . En réponse au journal Au secours! Mark Shuttleworth veut simplifier les logiciels !. Évalué à 2.
Ce matin, sur une portion à trois voies qui passe à deux, un mec, en voiture, doubler à droite, puis ce préparer à redoubler à droite deux voitures qui était sur la file du milieu et de gauche. Logiquement, la voiture sur la voie du milieu se rabat (pour laisser la place à la voiture de gauche de se rabattre) puisqu'il n'y a plus que deux voie. Là, le mec, il tente de profiter du fait que la route est encore large pour passer entre les deux voitures. Finalement il se dégonfle, ouf. J'avais déjà les doigts près pour un freinage d'urgence.
Je suis certain que ce mec est persuadé qu'il conduit bien, mais que ces abrutis ont fait n'importe quoi est l'ont empêcher de rouler. Toujours est-il que j'ai doublé ce gars, quelque kilomètre plus loin à la régulière, au moment où il allait sortir de la rocade. Il n'a jamais eu plus de trois ou quatre voitures d'avance. Et je ne suis pas passé entre les files.
La voiture, c'est comme l'informatique, pour savoir faire, il faut prendre de la bouteille, et pas la bouteille, et pas s'énerver, c'est comme ça qu'on progresse le mieux.
Maintenant, faites-vous parti des 75% des français qui dise conduires mieux que la moyenne ?
[^] # Re: GPL, toujours la même erreur
Posté par Anthony Jaguenaud . En réponse au journal fglrx on a real-time kernel. Évalué à 4.
J'aimerai poser des questions simples.
Je fais une bibliothèque quelle licence choisir ?
GPL :
Si quelqu'un lie un programme à ma bibliothèque, son programme doit-il être GPL ?
Si quelqu'un modifie ma bibliothèque, la nouvelle bibliothèque doit être en GPL.
BSD:
- Dans les deux cas il fait ce qu'il veux de son programme.
LGPL:
- Le programme peut avoir la licence qu'il veut.
- Une modification de la bibliothèque implique une distribution du code en même temps que le binaire ainsi que de garder l'historique : auteur, licence ?
Autre ?
[^] # Re: The Elements Of Style: UNIX As Literature
Posté par Anthony Jaguenaud . En réponse au journal Au secours! Mark Shuttleworth veut simplifier les logiciels !. Évalué à 3.
Juste pour ressituer ? Tu parlais de quel client X ? firefox, thunderbird, gvim, xpilot ?
Juste pour rappel, dans un environnement client-serveur : le serveur fourni le service et le client l'utilise. Pour X, c'est la même chose, le service est un service d'affichage, de gestion des entrées(clavier/souris). Le fournisseur (serveur est bien X11) le client l'application.
En fait, tu voulais certainement parler de serveur d'application faisant tourner des clients pour ton serveur X en local ;-)
===>[] Quoique, cette confusion générale m'indispose régulièrement.
[^] # Re: The Elements Of Style: UNIX As Literature
Posté par Anthony Jaguenaud . En réponse au journal Au secours! Mark Shuttleworth veut simplifier les logiciels !. Évalué à 2.
[^] # Re: Vala ?
Posté par Anthony Jaguenaud . En réponse au journal Tomboy re-écrit en C++. Évalué à 2.
Le seul intérêt, c'est de trouver un élément libre en O(1) et d'y accéder en O(1).
Tu ordonnes tes éléments ?
Non.
C'est pour parcourir l'ensemble de tes éléments en une seule passe comme avec une liste chaînée sans tester si une case est vide ?
Non plus. Je chaine juste les élément de façon a facilité l'usage de champ généraux : first_free_index, first_use_index et last_use_index.
J'obtiens un truc du genre :
struct
{
int first_free_index;
int first_use_index;
int last_use_index;
struct {
...
int prev_index;
int next_index;
}
};
Pour ajouter un élément, je prends le first free, et je le chaine avec le first use, je déchaine avec le next du first free.
Pour enlevé un élément, je rechaine ensemble le prev et le next, je le note en first free, je le rechaine avec l'ancien first free.
C'est pour éviter les allocations / désallocations mémoires ?
Oui. Contrainte produit :-(
[^] # Re: Vala ?
Posté par Anthony Jaguenaud . En réponse au journal Tomboy re-écrit en C++. Évalué à 4.
J'ai donc fait une sorte de liste chaînée par index et pas par pointeur. Le problème c'est que l'appliquer à des nouveau type et un cauchemar en macro, faire du copier coller c'est bien, sauf pour une évolution, correction de bug, quand il y a dix type utilisé. Là où un jeu de fonction, structure "patron" serait très utile. Même pas besoin d'aller à la classe, le C++ c'est bien plus que la réduction habituelle à la classe.
# C'est quoi ?
Posté par Anthony Jaguenaud . En réponse au journal Tomboy re-écrit en C++. Évalué à 3.
[^] # Re: La justice est comme ça
Posté par Anthony Jaguenaud . En réponse au journal Prudh'ommes => conciliation. Évalué à 2.
C'est pour ça que au USA, les avocat prennent un pourcentage de ce qu'il te font gagner... d'où les sommes excessives demandées.
[^] # Re: Graphismes relatifs
Posté par Anthony Jaguenaud . En réponse à la dépêche Nexuiz 2.5 est arrivé !. Évalué à 4.
[^] # Re: Bug !!
Posté par Anthony Jaguenaud . En réponse au journal [SSD] Mesure de la latence d'écriture aléatoire sur disque. Évalué à 2.
Many operators that expect operands of arithmetic type cause conversions and yield result types in a similar way. The purpose is to determine a common real type for the operands and result. For the specified operands, each operand is converted, without change of type domain, to a type whose corresponding real type is the common real type. Unless explicitly stated otherwise, the common real type is also the corresponding real type of the result, whose type domain is the type domain of the operands if they are the same, and complex otherwise.
Je vois pourtant régulièrement des erreurs du type que j'ai décrite. Donc, je ne comprends pas. Soit le comportement dans la norme c89 est différent, soit les compilateurs sont mal écris.
Comme en plus il n'y a pas de garantie sur l'ordre des opérations (sauf si on met des parenthèses), ...
L'ordre des opération est parfaitement défini dans le cas d'une expression, il est indéfini uniquement dans le cas des paramètres d'une fonction.
ex:
if ((monPointeur != NULL) && (*monPointeur != 42)) est parfaitement valide, car la norme garanti que si la première partie est fausse, la seconde n'est pas évalué.
[^] # Re: Bug !!
Posté par Anthony Jaguenaud . En réponse au journal [SSD] Mesure de la latence d'écriture aléatoire sur disque. Évalué à -1.
Ne me dis pas essaye, car tu prouves le comportement de tel compilateur.
Il y a des tas de cas ou la norme est floue :
a = 2 * b++ - --b + c --;
maFct(fonctAApellerEnPremier(b),fonctAApellerEnDeuxieme(a));
etc.
Dans le premier cas, je connais plusieurs comportement, pour la deuxième sur une station SUN, la "fonctAApellerEnDeuxieme" sera en fait appeller la première.
Dans le cas de la formule, si on met b = 2 et c = 10 alors gcc applique :
2 * 2 - 1 + 9 = 13.
Mais qui dis que le -- pre doit s'appliquer que à ce membre ? Et pas a toute l'expression ?
2 * 1 - 1 + 9 = 11 ?
[^] # Re: Bug !!
Posté par Anthony Jaguenaud . En réponse au journal [SSD] Mesure de la latence d'écriture aléatoire sur disque. Évalué à 2.
Pour tester j'ai écris ce programme.
#include <stdio.h>
int main(void)
{
int _a;
double _r, _val, d_a;
_a = 3;
d_a = 3.0;
_val = 1.5;
_r = _a / _val;
printf("_r = %2.5f (int) / (double)\n",_r);
_r = d_a / _val;
printf("_r = %2.5f (double) / (double)\n",_r);
return 0;
}
D'après mon explication ci-dessus, dans le premier cas _r devrait valoir 3.0, car _a / _val est (int) / (double) donc je m'attendais à (int) / (int) or le cast de 1.5 en int donne 1, donc 3 / 1 = 3 puis cast vers double 3.0.
Avec le gcc ici 3.3.1 il me donne 2.0 aussi.
J'ai cherché dans la norme C, et rien trouvé d'intéressant. Il semble y avoir un flou dans le cas des opérateurs utilisés avec deux types différents. Cela dépend-il du compilateur ? Est-ce un cas indéterminé ? gcc semble utiliser le type le plus précis. Quelqu'un a t'il la possibilité de tester avec un gcc 2.95 ?
Si quelqu'un a une réponse, je suis preneur.
[^] # Re: Intéressant
Posté par Anthony Jaguenaud . En réponse au journal [SSD] Mesure de la latence d'écriture aléatoire sur disque. Évalué à 1.
$ wio leNomDeFichierQueTuVeux.avecUneExtensionSiTuVeux
Sinon, faire des accès aléatoires de se type met à genoux n'importe quel disque. Le même test avec les fonction fread, etc. du C qui bufferise les accès donne de meilleurs résultat.
Généralement, dans une application classique, on utilise pas le disque de cette manière, donc, c'est un bench, il n'est représentatif d'aucune application, ou d'usage normal connue d'un disque.
[^] # Re: Bug !!
Posté par Anthony Jaguenaud . En réponse au journal [SSD] Mesure de la latence d'écriture aléatoire sur disque. Évalué à 2.
Tu ne réinitialises que la moyenne entre deux essais, ce qui signifie que ton min et ton max sont sur l'ensemble du test, et pas que sur le test en cours. Est-ce voulu ?
[^] # Re: Bug !!
Posté par Anthony Jaguenaud . En réponse au journal [SSD] Mesure de la latence d'écriture aléatoire sur disque. Évalué à 2.
# Bug !!
Posté par Anthony Jaguenaud . En réponse au journal [SSD] Mesure de la latence d'écriture aléatoire sur disque. Évalué à 5.
(double)(rdtsc_freq)/(tmax),
(double)(rdtsc_freq)/((tgmoy)/(double)ios),
(double)(rdtsc_freq)/(tmin));
Dus à tes parenthèses, les divisions effectué ici sont des divisions entières, car tmoy et tgmoy sont des entiers 64. Le calcul étant réalisé avec le type du membre gauche.
[^] # Re: Analyse ?
Posté par Anthony Jaguenaud . En réponse au sondage ping linuxfr.org me donne. Évalué à 2.
[^] # Re: Comment remplacer le couple Visual Studio 2008/WinXP
Posté par Anthony Jaguenaud . En réponse à la dépêche Réunion d'information Le logiciel libre, une opportunité pour votre entreprise. Évalué à 1.
KDE 4 étant porté sous Windows, kdevelop le sera prochainement, dès que la version 4 sera plus en béta.
Après, il est difficile de réapprendre les interfaces graphique, les méthode de travail, il y a toujours un certain immobilisme (dans tous les milieux).
Déjà, je fais de la pub pour Qt autour de moi, et j'attends kdevelop avec grande impatience (sous windows).
[^] # Re: Gentoo
Posté par Anthony Jaguenaud . En réponse au journal Test d'Arch Linux. Évalué à 2.
Tu peux essayer d'être un peu plus explicite ?
J'utilise gentoo. Et pour l'instant, je n'ai pas trouvé mieux. Je passe du temps à choisir mes "use flags" à la première installation, mais après ça roule.
Je n'ai pas essayé archLinux, juste une question qu'elles sont les dépendance de kdevelop ? Car sous gentoo, j'ai ajouté le suport de subversion, mais viré celui de cvs. C'est mon choix, est-ce simple à faire avec ArchLinux ?
[^] # Re: et sinon ?
Posté par Anthony Jaguenaud . En réponse au journal Un module apache pour programmer des applis web en C++. Évalué à 2.
Après, quand tu fais ton ls, ça se voit bien, quand tu l'écris dans un forum ça se voit moins bien.
[^] # Re: et sinon ?
Posté par Anthony Jaguenaud . En réponse au journal Un module apache pour programmer des applis web en C++. Évalué à 3.
[^] # Re: Pointé du doigt
Posté par Anthony Jaguenaud . En réponse au journal [HS] Mort au scrutin proportionnel !. Évalué à 1.
- Absention : Je m'en fou, donc je ne râle pas contre mon gouvernement.
- Blanc : Aucun choix ne me convient. Il devrait peut-être y avoir le vrai décompte de ces votes, histoire que à partir d'un certain seuil, on puisse annuler l'élection car les candidats ne conviennent pas.
- Nul : Je ne sais pas voté. Ce ne me mets pas en valeur.
[^] # Re: Pointé du doigt
Posté par Anthony Jaguenaud . En réponse au journal [HS] Mort au scrutin proportionnel !. Évalué à 0.
Oui, c'est ça. Si tu ne t'en fous pas, alors tu votes. C'est pour ça que le blanc a été inventé.
[^] # Re: Pointé du doigt
Posté par Anthony Jaguenaud . En réponse au journal [HS] Mort au scrutin proportionnel !. Évalué à 3.
[^] # Re: Pourquoi utiliser la FAT ?
Posté par Anthony Jaguenaud . En réponse au journal Analyse de Bruce Perens de Microsoft versus TomTom. Évalué à 1.
Après, il faudrait peut-être alléger ext2 des droits, utilisateurs POSIX, en fournir une implémentation LGPL, qui permettrait de l'intégrer dans ce genre de projet.
A part, simuler un USB-Mass-storage, compatible Windows, ce serait pas mal.
Sinon, je soutiens l'idée d'un disque usb, ou on enverrais des messages du type getFile, getPartOfFile, etc. au lieu d'y accéder brutalement comme si c'était un disque physique.