Je suppose que dans le premier cas le shell lance le premier echo et pipe son stdout au stdin de rev. Quand le premier echo quitte, son buffer stdout est vidé et donc rev recois la chaine par stdin. Puis le shell lance de la même manière sleep et le second echo, a chaque fois qu'un programme quitte son tampon de sortie est vidée.
Par contre, pour les deux rev, le buffer n'est vidé que quand le premier rev quitte, donc après les 2 secondes.
Ce qui est étrange c'est que quand stdout est le terminal, un retour à la ligne est sufisant pour vider le buffer de sortie. Apparemment ce n'est pas le cas pour un pipe.
Je vois deux solutions 'simple' une avec send (on envoie un message à l'objet, c'est la façon smalltalk d'appeler une methode il me semble) :
my_function="mi"
send(my_function,1,2,3,4);
my_function=:log
send(my_function,1,2,3,4)
Ou avec method et call cité plus haut :
my_function = method(:mi)
my_function.call(1,2,3,4)
Dans les deux cas on peu utiliser une chaine de carractere ou un symbole (:mi ou :log). J'imagine qu'avec un symbole le code doit etre plus performant, cela dit je n'en suis pas sur.
Comme en ruby la ligne de code "my_function(1,2,3,4)" serais equivalent à "self.send(:my_function,1,2,3,4)" je ne crois pas qu'il existe de solution où l'on puisse appeler "my_function(1,2,3,4)" comme on le ferais avec un pointeur de fonction en C par exemple.
Perso j'ai pondu ce code principalement pour le fun (d'où la lisibilité ;). Pour voir s'il était possible de reforger un flottant compréhensible par le processeur (ça marche et rien que pour voir printf afficher que 21.5+20.5=42, avec l'addition faite à la main, ça vaut le coup :).
Après, comme je l'ai déjà dit, en soit c'est totalement inutile, mais ça permet d'éprouver les algo dans un langage facile à coder et à déboguer (le C) pour les réimplémenter dans des langages un peu moins sympa a déboguer (comme en ASM pour microcontrolleur PIC16, ou en vhdl pour une implémentation hard).
L'opérateur ternaire peut se remplacer par (en version longue ...) :
if (sr!=0) {
res = 0x80000000;
} else {
res = 0;
}
Sinon pour le résultat étrange ... je vois au moins 2 choses :
si les mantisses sont alignés à droite, le réalignement après l'addition devrais être quelque chose comme "while(buf>0x0EFFFFFF)" (il faut que la mantisse résultante soit dans les 23Bits de poid faibles).
Ensuite ces 23bits doivent être recopier dans les 23bits de poids faible du flottant, pour ça une ligne comme :
res=res|(mantisseRes&0x0EFFFFFF);
parais plus adapté.
Enfin ce code ne gère pas les soustractions, donc dans le meilleur des cas tu obtiendra 5.5 (voir -5.5 si tu inverse a et b) :-).
Je m'étais amusé à coder ça il y à quelque temps. En fait j'ai commencé par la multiplication de short pour dériver sur la division puis les additions, division et multiplication flottantes. Tout ça juste avec des additions et des operations logique.
Le code, pas franchement très propre, est ici http://snipt.org/tgk . L'addition flottante est dans fadd().
L'idée c'est que chaque nombre est codé en 'mantisse*2^exposant'. Pour pouvoir additionner il faut donc que les deux exposant soit égaux, on multiplie donc l'exposant d'un des nombre pour obtenir le même exposant puis le résultat devient (mantisse1+mantisse2)*2^exposant.
Ce code n'a évidemment aucun intérêt pratique en C mais il permet d'évaluer les algorithmes qui permettent de ré-implémenté ces opérations sur des petits microcontrolleurs (qui n'ont parfois même pas de multiplication hard), ou en hard justement (vhdl&co...)
j'ai la même chose avec mozilla à paris avec club-internet.
mais lorsque j'essai avec telnet :
$ telnet karrakis.net 80
Trying 80.65.234.35...
Connected to karrakis.net.
Escape character is '^]'.
GET / HTTP/1.1
host: karrakis.net
connection: close
HTTP/1.1 200 OK
Date: Tue, 16 Sep 2003 20:18:37 GMT
Server: Apache
X-Powered-By: PHP/4.1.2
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
là rien est envoyé à part l'en tête http, même pas le < html>< body>< /body>< /html> donner par mozilla!
c'est assez bizarre mais c'est surment pas un problème de DNS.
# /sys/device/system/cpu
Posté par Arnaud Taffanel . En réponse au message Multi-Thread. Évalué à 3.
Il est aussi possible de désactiver des cpu sans redémarrer la machine :
Pour les réactiver il suffit de réécrire "1" dans les fichiers online.
# Buffer flush ...
Posté par Arnaud Taffanel . En réponse au message Flux dans un pipe. Évalué à 5.
Par contre, pour les deux rev, le buffer n'est vidé que quand le premier rev quitte, donc après les 2 secondes.
Ce qui est étrange c'est que quand stdout est le terminal, un retour à la ligne est sufisant pour vider le buffer de sortie. Apparemment ce n'est pas le cas pour un pipe.
# send et method/call
Posté par Arnaud Taffanel . En réponse au message Pointeur de fonction ?. Évalué à 2.
my_function="mi"
send(my_function,1,2,3,4);
my_function=:log
send(my_function,1,2,3,4)
Ou avec method et call cité plus haut :
my_function = method(:mi)
my_function.call(1,2,3,4)
my_function = method("log")
my_function.call(1,2,3,4)
Dans les deux cas on peu utiliser une chaine de carractere ou un symbole (:mi ou :log). J'imagine qu'avec un symbole le code doit etre plus performant, cela dit je n'en suis pas sur.
Comme en ruby la ligne de code "my_function(1,2,3,4)" serais equivalent à "self.send(:my_function,1,2,3,4)" je ne crois pas qu'il existe de solution où l'on puisse appeler "my_function(1,2,3,4)" comme on le ferais avec un pointeur de fonction en C par exemple.
Cordialement.
[^] # Re: Optimisation
Posté par Arnaud Taffanel . En réponse au message Addition de flottants. Évalué à 3.
Après, comme je l'ai déjà dit, en soit c'est totalement inutile, mais ça permet d'éprouver les algo dans un langage facile à coder et à déboguer (le C) pour les réimplémenter dans des langages un peu moins sympa a déboguer (comme en ASM pour microcontrolleur PIC16, ou en vhdl pour une implémentation hard).
[^] # Re: Une implémentation
Posté par Arnaud Taffanel . En réponse au message Addition de flottants. Évalué à 1.
if (sr!=0) {
res = 0x80000000;
} else {
res = 0;
}
Sinon pour le résultat étrange ... je vois au moins 2 choses :
si les mantisses sont alignés à droite, le réalignement après l'addition devrais être quelque chose comme "while(buf>0x0EFFFFFF)" (il faut que la mantisse résultante soit dans les 23Bits de poid faibles).
Ensuite ces 23bits doivent être recopier dans les 23bits de poids faible du flottant, pour ça une ligne comme :
res=res|(mantisseRes&0x0EFFFFFF);
parais plus adapté.
Enfin ce code ne gère pas les soustractions, donc dans le meilleur des cas tu obtiendra 5.5 (voir -5.5 si tu inverse a et b) :-).
# Une implémentation
Posté par Arnaud Taffanel . En réponse au message Addition de flottants. Évalué à 2.
Je m'étais amusé à coder ça il y à quelque temps. En fait j'ai commencé par la multiplication de short pour dériver sur la division puis les additions, division et multiplication flottantes. Tout ça juste avec des additions et des operations logique.
Le code, pas franchement très propre, est ici http://snipt.org/tgk . L'addition flottante est dans fadd().
L'idée c'est que chaque nombre est codé en 'mantisse*2^exposant'. Pour pouvoir additionner il faut donc que les deux exposant soit égaux, on multiplie donc l'exposant d'un des nombre pour obtenir le même exposant puis le résultat devient (mantisse1+mantisse2)*2^exposant.
Ce code n'a évidemment aucun intérêt pratique en C mais il permet d'évaluer les algorithmes qui permettent de ré-implémenté ces opérations sur des petits microcontrolleurs (qui n'ont parfois même pas de multiplication hard), ou en hard justement (vhdl&co...)
# Re: La toile ou ma connexion se comporte de façon étrange
Posté par Arnaud Taffanel . En réponse au journal La toile ou ma connexion se comporte de façon étrange. Évalué à 4.
mais lorsque j'essai avec telnet :
$ telnet karrakis.net 80
Trying 80.65.234.35...
Connected to karrakis.net.
Escape character is '^]'.
GET / HTTP/1.1
host: karrakis.net
connection: close
HTTP/1.1 200 OK
Date: Tue, 16 Sep 2003 20:18:37 GMT
Server: Apache
X-Powered-By: PHP/4.1.2
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
1e59
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd(...)">
<html xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml(...)">
..........reste de la page ..........
La page renvoyer avec telnet est la bonne. c'est peut etre PHP qui interprète mal des paramètres envoyés dans l'en-tête http par mozilla .....
Par contre avec debian-fr.org :
$ telnet debian-fr.org 80
Trying 62.4.21.252...
Connected to plouc.net.
Escape character is '^]'.
GET / HTTP/1.1
host: debian-fr.org
connection: close
HTTP/1.1 200 OK
Date: Tue, 16 Sep 2003 20:19:36 GMT
Server: Apache
X-Powered-By: PHP/4.2.3
Set-Cookie: PHPSESSID=ae273aba4ff94dc9c800af2ba4742e44; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
0
Connection closed by foreign host.
là rien est envoyé à part l'en tête http, même pas le < html>< body>< /body>< /html> donner par mozilla!
c'est assez bizarre mais c'est surment pas un problème de DNS.