Ben c'est écrit. Si ni champ clé ni option ne sont précisés, "s" est sans effet. Cela veut juste dire que si tu utilises un champ pour faire un tri, et que deux entrées ont la même valeur, il va comparer les deux lignes litéralement pour les classer (en fonction de leur contenu, leur longueur, etc.). Ce qui te garantit que ton fichier sera toujours trié en fonction d'au moins un critère, et que les lignes ne seront pas redéposées dans l'ordre où il apparaissent.
Il est normal que ce soit le comportement par défaut.
J'ajouterais qu'après une brève recherche, je n'ai pas été capable de retrouver par Google le ou les algorithmes utilisés par sort. Un logiciel dédié à cette opération effectuera je crois un rapide contrôle du contenu du fichier et choisira l'algo le plus adapté en conséquence.
Il se peut très bien que GNU sort ait été écrit simplement pour faire ce qu'il a besoin de faire et que personne n'ait jamais eu le besoin de mettre la pression aux développeurs pour en faire une voiture de course. Cela ne me dérange pas plus que cela ...
Mais surtout, synsort c'est un logiciel propriétaire ? Code source fermé, etc ? Si c'est le cas, il y a eu une équipe de développement spécialement affectée à ce projet en particulier, ce qui favorise les efforts d'optimisation. Le logiciel a été conçu pour çà. Ensuite, si ton logiciel est livré déjà compilé, sans les sources, etc. et n'est pas spécialement un projet GNU, ou de philosophie Unix, il y a fort à parier qu'ils fassent un usage poussé de fonctions assembleur propre à la machine sur laquelle tu tournes (99% du temps un PC, même si Windows ou Linux) et tirent avantage des jeux d'instructions étendu style MMX etc. Et en ce sens, ils ont parfaitement raison. Une opération de tri est pratiquement un cas d'école dans ce domaine.
A cela, on peut ajouter la façon dont les différents outils acquièrent leurs données, et gèrent les fichiers. Je suppose que sort est capable d'utiliser mmap depuis longtemps, mais il doit rester un programme tout-terrain, gérant les ressources avec des appels les plus conventionnels possibles.
Avec tout cela, j'ai presque envie de dire que 3x la vitesse de sort, c'est honorable mais sans plus. Je suis persuadé qu'un algo de tueur optimisé par un démomaker (ou pire, un programmeur de 8 bits :-) devrait pouvoir monter jusqu'à 10 fois la vitesse de base (à vue de nez bien sûr).
Ce qui m'amenait l'autre jour à une petite réflexion. Y a-t-il une compagnie au monde capable de racheter Microsoft ? Les émirats arabes réunis peut-être ?
Je vais donc bloquer le port 80 pour le web, le 25 et le 110 pour la messagerie, le 21 pour le FTP et le 22 pour le SSH. La sécurité n'a pas de prix, mais je me demande à quoi servira ma connexion internet après ?!?
Ben, le SMB (ports 135 à 139), BackOrifice (31337) et Kazaa (1214). Une vraie petite machine Windows, quoi ! :-)
Hmm, la mac-adress est l'identifiant constructeur d'une carte réseau. Es-tu sûr qu'elle ait vraiment pris naissance dans les spécification d'Ethernet ? Rien n'empêche techniquement une carte réseau d'avoir un identifiant, quelque soit la couche de transport utilisée.
De plus, en TCP/IP il existe les protocoles ARP et RARP pour résoudre une adresse IP en adresse physique et réciproquement. Le seul problème, c'est que les serveurs qui implémentent ce protocole par défaut sont rare.
En plus, il va sans dire que cela n'est censé fonctionner en principe que sur un réseau local, sinon tu accéderais à des données confidentielles à l'utilisateur.
Lis la norme IEE-754-1985 qui définit les nombres à virgule flottante. Il précise que les valeurs INF et Nan sont définies, et gcc/g++ sait les gérer. C'est Nan que j'utiliserais (puisque c'est vrai).
En C++, tu peux définir une classe dérivant immédiatement de double pour éviter les transtypages et autres.
class ElaboratedDouble : public double
{
public:
bool defined;
}
Tu peux également redéfinir l'opérateur de casting (double) (même si redéfinir les opérateurs de casting pose toujours plus de problème que cela n'en résoud) et tenter de lancer une exception si la valeur n'est pas définie.
Posté par Obsidian .
En réponse au message POST.
Évalué à 5.
Par exemple, pour un CGI c'est pas compliqué, on balances tout sur son stdin en modifiant quelques variables d'environnement, et on renvoie au client le stdout, mais pour une banale page web, comment ça se gère ?
Ben pour une banale page web, en principe c'est ton serveur qui gère tout cela. Ce que je tire de ton message, c'est qu'apparement, ton plugin, c'est un mini serveur web. Donc dans ce cas (POST), tu dois refaire le travail exactement comme tu le ferais avec une application CGI, qui n'est que la définition de l'interface entre le serveur WEB et ton application, ce qui n'a pas lieu d'être ici puisque tu écoutes directement les connexions.
Dans le cas de POST, les données pouvant être très longues et/ou confidentielles, il est hors de question de les coder dans l'URL ni même dans les entêtes ! Elles font partie du document. Ce document est ensuite présenté à la discrétion du client (le navigateur), mais en général c'est :
Content-Type: application/x-www-form-urlencoded
... qui est un type mime défini et donc (probablement) décrit clairement par une RFC. La mauvaise nouvelle, c'est que si tu ne peux pas utiliser un module tout fait (style CGI en perl), il faudra te recoltiner l'implémentation des différents protocoles si tu veux être parfaitement compatible avec tes clients, à moins d'utiliser une entête du style "Accept-xxxx" pour informer le client des langues que tu connais vraiment.
En pratique, les arguments passés par un formulaire POST au moment où tu cliques sur un bouton sont encodés exactement de la même façon qu'un GET mais sur la première ligne des données, après les entêtes.
Fais par exemple un "nc -l -p 5678" pour te mettre à l'écoute du port 5678 (par exemple), puis écris une petite page web qui contiendra juste un formulaire de type POST et dont l'action sera "http://127.0.0.1:5678(...)". Tu obtiendras un exemple parlant de ce qu'un navigateur web envoie à un serveur dans ta situation.
Pour tes codes de retour, c'est le protocole HTTP qu'il faut respecter. Cela n'a rien à voir avec le POST en particulier, si ce n'est que c'est la plupart du temps avec un formulaire que l'on fait des opérations coté serveur autre que la simple consultation de page. Donc tu écris simplement sur la sortie standard :
Bonjour, je suis face à problème fort fâcheux : en effet, un petit insecte (une sorte de vermisseau) d'environ 2mm de long et moins épais qu'une feuille de papier je dirais, s'est introduit sous la « vitre » de mon écran LCD.
Tu peux utiliser gdb, c'est très efficace contre les vilaines bébêtes :-)
vu que tu utilise ubuntu il est probable que tu ne soit pas un acharne de la ligne de commande
Eh bien en fait si. La difficulté étant en général de faire le chemin inverse, c'est-à-dire trouver la voie tracée par la distribution plutôt que d'aller directement faire les modifs qui s'imposent. Par contre j'aime beaucoup les distributions à la fois chatoyantes et bien intégrées, et il n'y en a pas beaucoup.
De plus, on est ici dans le forum linux.debutants. Il est un peu tôt pour aller recompiler un module, faire les configs et installer un script d'init SysV comme on le faisait avec le pilote d'EagleUSB (qui m'a rendu de grands services, toutes choses égales par ailleurs).
Je dois vraiment être un geek parce qu'à l'époque (il y a 16-17 ans déjà, pfff), je bidouillais pas mal mon MO6, et alors que ma classe foutait le souk en cours d'espagnol, le professeur interimaire me condamne injustement à copier 100 fois « No debo hablar en clase » alors que j'étais resté très calme quand mes voisins de derrière se battaient à coups de chaise ! :-)
10 OPEN "O",#1,"LPRT:"
20 FOR I=0 TO 49
30 PRINT #1,"No debo hablar en clase. ";
40 PRINT #1,"No debo hablar en clase."
50 NEXT
La double ligne me permettait d'exploiter pleinement les 80 colonnes de ma PR-90 612M, ce qui était encore un luxe à l'époque. Je lui ai rendu le papier. Il s'en est rendu compte une petite dizaine de minutes après. Il me l'a violement redéposé sur ma table en hurlant « Tu vas le copier 1000 fois ! », puis, se reprenant : « ... dont 300 fois à la main. ».
[^] # Re: Pour sort, ca depend des options
Posté par Obsidian . En réponse au journal M'enfin ?? .... Évalué à 2.
Il est normal que ce soit le comportement par défaut.
[^] # Re: Plusieurs raisons possibles.
Posté par Obsidian . En réponse au journal M'enfin ?? .... Évalué à 4.
# Plusieurs raisons possibles.
Posté par Obsidian . En réponse au journal M'enfin ?? .... Évalué à 8.
Il se peut très bien que GNU sort ait été écrit simplement pour faire ce qu'il a besoin de faire et que personne n'ait jamais eu le besoin de mettre la pression aux développeurs pour en faire une voiture de course. Cela ne me dérange pas plus que cela ...
Mais surtout, synsort c'est un logiciel propriétaire ? Code source fermé, etc ? Si c'est le cas, il y a eu une équipe de développement spécialement affectée à ce projet en particulier, ce qui favorise les efforts d'optimisation. Le logiciel a été conçu pour çà. Ensuite, si ton logiciel est livré déjà compilé, sans les sources, etc. et n'est pas spécialement un projet GNU, ou de philosophie Unix, il y a fort à parier qu'ils fassent un usage poussé de fonctions assembleur propre à la machine sur laquelle tu tournes (99% du temps un PC, même si Windows ou Linux) et tirent avantage des jeux d'instructions étendu style MMX etc. Et en ce sens, ils ont parfaitement raison. Une opération de tri est pratiquement un cas d'école dans ce domaine.
A cela, on peut ajouter la façon dont les différents outils acquièrent leurs données, et gèrent les fichiers. Je suppose que sort est capable d'utiliser mmap depuis longtemps, mais il doit rester un programme tout-terrain, gérant les ressources avec des appels les plus conventionnels possibles.
Avec tout cela, j'ai presque envie de dire que 3x la vitesse de sort, c'est honorable mais sans plus. Je suis persuadé qu'un algo de tueur optimisé par un démomaker (ou pire, un programmeur de 8 bits :-) devrait pouvoir monter jusqu'à 10 fois la vitesse de base (à vue de nez bien sûr).
[^] # Re: Eh beh!
Posté par Obsidian . En réponse au sondage Que conseiller à Mandriva de racheter ?. Évalué à 7.
[^] # Re: Eh beh!
Posté par Obsidian . En réponse au sondage Que conseiller à Mandriva de racheter ?. Évalué à 2.
[^] # Re: Haha
Posté par Obsidian . En réponse au journal La fin de Gandi?. Évalué à 1.
[^] # Re: remarque c'est pas con...
Posté par Obsidian . En réponse au journal ils ont de l'humour.... Évalué à 9.
[^] # Re: remarque c'est pas con...
Posté par Obsidian . En réponse au journal ils ont de l'humour.... Évalué à 4.
Ben, le SMB (ports 135 à 139), BackOrifice (31337) et Kazaa (1214). Une vraie petite machine Windows, quoi ! :-)
[^] # Re: normalement non
Posté par Obsidian . En réponse au message Adresse Mac. Évalué à 2.
De plus, en TCP/IP il existe les protocoles ARP et RARP pour résoudre une adresse IP en adresse physique et réciproquement. Le seul problème, c'est que les serveurs qui implémentent ce protocole par défaut sont rare.
En plus, il va sans dire que cela n'est censé fonctionner en principe que sur un réseau local, sinon tu accéderais à des données confidentielles à l'utilisateur.
[^] # Re: Le texte
Posté par Obsidian . En réponse au journal ils ont de l'humour.... Évalué à 2.
# Double et C++
Posté par Obsidian . En réponse au message Marquer un double comme étant non élaboré.. Évalué à 3.
En C++, tu peux définir une classe dérivant immédiatement de double pour éviter les transtypages et autres.
class ElaboratedDouble : public double
{
public:
bool defined;
}
Tu peux également redéfinir l'opérateur de casting (double) (même si redéfinir les opérateurs de casting pose toujours plus de problème que cela n'en résoud) et tenter de lancer une exception si la valeur n'est pas définie.
[^] # Re: suite : evolution
Posté par Obsidian . En réponse au message problèmes de link C++. Évalué à 2.
[^] # Re: ESR et la religion
Posté par Obsidian . En réponse au journal L'importance du choix du pseudo. Évalué à 3.
# CGIs et serveurs Web, même combat.
Posté par Obsidian . En réponse au message POST. Évalué à 5.
Ben pour une banale page web, en principe c'est ton serveur qui gère tout cela. Ce que je tire de ton message, c'est qu'apparement, ton plugin, c'est un mini serveur web. Donc dans ce cas (POST), tu dois refaire le travail exactement comme tu le ferais avec une application CGI, qui n'est que la définition de l'interface entre le serveur WEB et ton application, ce qui n'a pas lieu d'être ici puisque tu écoutes directement les connexions.
Dans le cas de POST, les données pouvant être très longues et/ou confidentielles, il est hors de question de les coder dans l'URL ni même dans les entêtes ! Elles font partie du document. Ce document est ensuite présenté à la discrétion du client (le navigateur), mais en général c'est :
Content-Type: application/x-www-form-urlencoded
... qui est un type mime défini et donc (probablement) décrit clairement par une RFC. La mauvaise nouvelle, c'est que si tu ne peux pas utiliser un module tout fait (style CGI en perl), il faudra te recoltiner l'implémentation des différents protocoles si tu veux être parfaitement compatible avec tes clients, à moins d'utiliser une entête du style "Accept-xxxx" pour informer le client des langues que tu connais vraiment.
En pratique, les arguments passés par un formulaire POST au moment où tu cliques sur un bouton sont encodés exactement de la même façon qu'un GET mais sur la première ligne des données, après les entêtes.
Fais par exemple un "nc -l -p 5678" pour te mettre à l'écoute du port 5678 (par exemple), puis écris une petite page web qui contiendra juste un formulaire de type POST et dont l'action sera "http://127.0.0.1:5678(...)". Tu obtiendras un exemple parlant de ce qu'un navigateur web envoie à un serveur dans ta situation.
Pour tes codes de retour, c'est le protocole HTTP qu'il faut respecter. Cela n'a rien à voir avec le POST en particulier, si ce n'est que c'est la plupart du temps avec un formulaire que l'on fait des opérations coté serveur autre que la simple consultation de page. Donc tu écris simplement sur la sortie standard :
HTTP/1.0 200 OK
Content-Type: text/html
Début de ton document ...
et tout devrait marcher comme sur des roulettes.
[^] # Re: Choisir son vrai nom ?
Posté par Obsidian . En réponse au journal L'importance du choix du pseudo. Évalué à 4.
# Chasse aux bugs.
Posté par Obsidian . En réponse au journal Démonter un écran LCD ?. Évalué à 8.
Tu peux utiliser gdb, c'est très efficace contre les vilaines bébêtes :-)
# man netstat
Posté par Obsidian . En réponse au message amina. Évalué à 3.
$ netstat -lpatue et tu sauras quel programme occupe ton port.
Il a des chances que tu aie effectivement déjà lancé le programme en question. Détruis-le avec kill.
$ apt-get install nmap
[^] # Re: la gestion d'erreur c'est pas pour les chiens...
Posté par Obsidian . En réponse au message renommer & remove fichier. Évalué à 4.
[^] # Re: Ouais, c'est facile
Posté par Obsidian . En réponse au journal Espionnage chez Valéo: Info ou Intox ?. Évalué à 3.
[^] # Re: une solution possible
Posté par Obsidian . En réponse au message lame. Évalué à 2.
is good for you !
[^] # Re: voila chantons tous
Posté par Obsidian . En réponse au journal Espionnage chez Valéo: Info ou Intox ?. Évalué à 3.
[^] # Re: PLus d'information est nécessaire
Posté par Obsidian . En réponse au message configuration internet. Évalué à 2.
Eh bien en fait si. La difficulté étant en général de faire le chemin inverse, c'est-à-dire trouver la voie tracée par la distribution plutôt que d'aller directement faire les modifs qui s'imposent. Par contre j'aime beaucoup les distributions à la fois chatoyantes et bien intégrées, et il n'y en a pas beaucoup.
De plus, on est ici dans le forum linux.debutants. Il est un peu tôt pour aller recompiler un module, faire les configs et installer un script d'init SysV comme on le faisait avec le pilote d'EagleUSB (qui m'a rendu de grands services, toutes choses égales par ailleurs).
[^] # Re: Ouais, c'est facile
Posté par Obsidian . En réponse au journal Espionnage chez Valéo: Info ou Intox ?. Évalué à 10.
Encore un coup des chinois du FBI :-)
[^] # Re: que fait la police ?
Posté par Obsidian . En réponse au journal Espionnage chez Valéo: Info ou Intox ?. Évalué à 6.
Free Kevin Li Li !
Et tant pis s'ils sont tous les deux déjà sortis (pas ensemble, bien sûr).
[^] # Ma vie
Posté par Obsidian . En réponse au journal Si j'avais su codé.... Évalué à 2.
10 OPEN "O",#1,"LPRT:"
20 FOR I=0 TO 49
30 PRINT #1,"No debo hablar en clase. ";
40 PRINT #1,"No debo hablar en clase."
50 NEXT
La double ligne me permettait d'exploiter pleinement les 80 colonnes de ma PR-90 612M, ce qui était encore un luxe à l'époque. Je lui ai rendu le papier. Il s'en est rendu compte une petite dizaine de minutes après. Il me l'a violement redéposé sur ma table en hurlant « Tu vas le copier 1000 fois ! », puis, se reprenant : « ... dont 300 fois à la main. ».
:-)