#676 Le 22/03/2011, à 00:12
- Кຼزດ
Re : /* Topic des codeurs couche-tard [4] */
Michaël Chaize a écrit :Sur le Web, nous étions dans le domaine fragmenté du navigateur, entre Netscape et Internet Explorer ; nous avons créé Flash pour offrir une expérience consistante sur toutes les plates-formes. Sur mobile, nous repartons sur la même histoire. Et j'ai le sentiment que cela va s'accentuer, qu'il va y avoir de plus en plus de systèmes d'exploitation, et de plus en plus de fragmentation. Avec Flash player, nous disons à notre communauté de développeurs, "développez une fois, nous nous chargeons de rendre votre travail disponible sur un maximum d'écrans".
« Ce n'est pas très efficace »
Dernière modification par Кຼزດ (Le 22/03/2011, à 02:05)
dou
Hors ligne
#677 Le 22/03/2011, à 00:28
- cm-t
Re : /* Topic des codeurs couche-tard [4] */
'Nuit;
Actu Ubuntu ☺/
Pauses Ubuntu sur Paris \_< -t
[(π)] La Quadrature du net
Hors ligne
#678 Le 22/03/2011, à 00:34
- Pylades
Re : /* Topic des codeurs couche-tard [4] */
.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#679 Le 22/03/2011, à 03:15
- nesthib
Re : /* Topic des codeurs couche-tard [4] */
plop
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#680 Le 22/03/2011, à 03:41
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
Comme à chaque fois que j'ai du boulot ras la gueule, j'ai passé la soirée à faire un truc totalement useless >_<" : j'ai implémenté les optimisations que j'avais mentionné hier pour mon générateur de code brainfuck.
Pour rappel, la première version brutale c'était ça
import Data.List (intersperse)
import Data.Char (ord)
main :: IO ()
main = do str <- getContents
let base = initValue str
putStrLn $ initCode base str ++ dispCode base str
initValue :: String -> Int
initValue str = minimum $ map (ord) str
initCode :: Int -> String -> String
initCode base str = replicate base '+'
++ "["
++ (concat $ replicate (length str) ">+")
++ (replicate (length str) '<')
++ "-]"
dispCode :: Int -> String -> String
dispCode base str = '>' : ((concat.intersperse ">") $ map (dispChar base) str)
where dispChar offset c = reverse ('.' : replicate (ord c - offset) '+')
Bon les résultats n'étaient pas brillants :
grim7reaper@chaos bf_gen]$echo -n 'BN World!' | ./bf_gen1 | wc -m
522
grim7reaper@chaos bf_gen]$./bf_gen1 < ../CLFB/COPYING | wc -m
3000287
Je précise que le code généré pour la GPLv3 faisait planter mes interpréteurs brainfuck (« SIGSEGV », car on sortait de la mémoire (vu que j'avais limité la mémoire au minimum requis par le standard => 30 000 « cases »). Seul celui de Pylade s'en sortait (vu qu'il avait fait une mémoire « infinie »).
Suite à cette constatation, j'ai implémenté ma première optimisation : utilisation d'un alphabet pour ne charger qu'une seule fois chaque caractère en mémoire (quand je vous disais que l'algo précédent était à chier, c'était pas pour rire ). On obtient donc
import qualified Data.Set as Set
import qualified Data.Map as Map
import Data.Char (ord)
import Data.List (intersperse)
main :: IO ()
main = do str <- getContents
putStrLn $ genCode str
genCode:: String -> String
genCode str = initCode alphabet ++ (dispCode str memmap (length alphabet))
where alphabet = Set.toList $ Set.fromList str
memmap = Map.fromList (zip alphabet [1..])
initCode :: String -> String
initCode alphabet = replicate base '+'
++ "["
++ (concat $ replicate (length alphabet) ">+")
++ (replicate (length alphabet) '<')
++ "-]>"
++ ((concat.intersperse ">") $ map (setChar base) alphabet)
where base = minimum $ map (ord) alphabet
setChar offset c = replicate (ord c - offset) '+'
dispCode :: String -> Map.Map Char Int -> Int -> String
dispCode [] _ _ = []
dispCode (x:xs) memmap pos = move ++ dispCode xs memmap idx
where idx = case Map.lookup x memmap of
Just i -> i
Nothing -> 0 -- Impossible, juste pour eviter warning.
offset = idx - pos
move = if offset < 0
then reverse ('.' : replicate (abs(offset)) '<')
else reverse ('.' : replicate offset '>')
Je refais donc mes tests :
grim7reaper@chaos bf_gen]$echo -n 'BN World!' | ./bf_gen2 | wc -m
547
grim7reaper@chaos bf_gen]$./bf_gen2 < ../CLFB/COPYING | wc -m
889746
Bon on voit qu'on a pas gagné grand chose sur le "BN World!" (au contraire !), par contre niveau GPLv3 il n'y a pas photo : le gain est violent (et maintenant mes interpréteurs brainfuck ne se cassent pas les dents dessus).
J'en profite pour signaler que celui en C++ est d'ailleurs ~9 fois plus rapide que celui de Pylade sur ce coup (si on regarde que le temps user, en temps global je ne suis que ~3 fois plus rapide)
cppbfi GNU.bf 0,01s user 0,01s system 57% cpu 0,035 total
bf GNU.bf 0,09s user 0,00s system 88% cpu 0,098 total
(C'est bien sûr compilé avec les mêmes options).
Enfin, dernière optimisation : le choix d'une valeur d'initialisation plus judicieuse (moyenne au lieu du minimum). Code quasi‑identique au précédent (à ~3 lignes près)
-- Même code que précédemment.
initCode :: String -> String
initCode alphabet = replicate base '+'
++ "["
++ (concat $ replicate (length alphabet) ">+")
++ (replicate (length alphabet) '<')
++ "-]>"
++ ((concat.intersperse ">") $ map (setChar base) alphabet)
where base = (sum $ map (ord) alphabet) `div` length alphabet
setChar offset c = if diff < 0
then replicate (abs diff) '-'
else replicate diff '+'
where diff = ord c - offset
-- Même code que précédemment.
Bon, cette fois on obtient
grim7reaper@chaos bf_gen]$echo -n 'BN World!' | ./bf_gen3 | wc -m
385
grim7reaper@chaos bf_gen]$./bf_gen3 < ../CLFB/COPYING | wc -m
886289
Pas d'énormes gains sur la GPLv3 (mais gain quand même cela dit), en revanche on a enfin un truc potable sur le "BN World!"
Je suis donc fier de vous présentez mon
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+[>+>+>+>+>+>+>+>+>+<<<<<<<<<-]>------------------------------------------------
->------------------------------------------------>--------------->--->++++++>++
+++++++++++++++++>+++++++++++++++++++++++++++>++++++++++++++++++++++++++++++>+++
++++++++++++++++++++++++++++++<<<<<<.>.<<<.>>>>.>>>.>.<<.<.<<<<.
Bon, et si j'allais vraiment bosser maintenant
Dernière modification par grim7reaper (Le 22/03/2011, à 04:01)
Hors ligne
#681 Le 22/03/2011, à 08:42
- Compteur du TdCCT
Re : /* Topic des codeurs couche-tard [4] */
Scores totaux, depuis le début :
1) 2842 nesthib
2) 2649 samuncle
3) 2273 Pylade
4) 1846 Кຼزດ
5) 1552+5 grim7reaper /* ./viewtopic.php?pid=3486252#p3486252 */
6) 1385 cm-t
7) 997 :mad: ✰ :бешеный: ✰ :mad:
8) 846 helly
9) 812 \\Ouranos//
10) 659 gnuuat
11) 559 Lagierl
12) 474 tshirtman
13) 294 Rolinh
14) 246 The Uploader
15) 229 Kanor
16) 196 Askelon
17) 172 nathéo
18) 121 ǤƦƯƝƬ
19) 108 :!pakman
20) 93 petifrancais
21) 84 kamui57
22) 78 edge_one
22) 78 pierguiard
24) 70 gulp
25) 39 Le Rouge
26) 37 ilagas
27) 30 keny
28) 28 xapantu
29) 26 gustare
29) 26 d10g3n
31) 25 GentooUser
31) 25 Morgiver
33) 24 ไ୦บเઢ'
33) 24 Steap
35) 20 CROWD
36) 18 Ph3nix_
37) 15 timsy
38) 14 kouskous
39) 12 stratoboy
39) 12 sailing
39) 12 sakul
42) 11 alexises
42) 11 Crocoii
44) 10 Toineo
44) 10 NutMotion
44) 10 pseudovingtcinqcaracteres
44) 10 pfriedZ
44) 10 CasseTaTele
44) 10 Zeibux
50) 8 Mornagest
51) 7 Vista
52) 6 ubuntlin
52) 6 asma.geek
54) 5 tendances-tdct
54) 5 kinouchou
56) 4 danychou56
56) 4 Neros
56) 4 Biaise
56) 4 totoflute
56) 4 pinballyoda ㋛
56) 4 NLS le pingouin
62) 3 Revan26914
63) 2 SoJaS
63) 2 ceric
65) 1 geenux
Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !
J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).
Hors ligne
#682 Le 22/03/2011, à 08:42
- Compteur du TdCCT
Re : /* Topic des codeurs couche-tard [4] */
Scores de la période en cours :
1) 158 nesthib
2) 137 Pylade
3) 116 samuncle
4) 115 grim7reaper
5) 110 Кຼزດ
6) 83 cm-t
7) 73 :mad: ✰ :бешеный: ✰ :mad:
8) 46 Rolinh
9) 37 tshirtman
10) 27 :!pakman
11) 17 The Uploader
11) 17 Lagierl
13) 12 Kanor
14) 10 helly
14) 10 \\Ouranos//
16) 2 kamui57
Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !
J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).
Hors ligne
#683 Le 22/03/2011, à 11:24
- Pylades
Re : /* Topic des codeurs couche-tard [4] */
J'en profite pour signaler que celui en C++ est d'ailleurs ~9 fois plus rapide que celui de Pylade sur ce coup (si on regarde que le temps user, en temps global je ne suis que ~3 fois plus rapide)
Je ne crois pas que je t'aie donné ma dernière version… mais oui, je pourrais faire mieux. J'avais pensé à certaines optimisations, mais je ne les ai pas implémentées. Cela dit, la différence vient peut-être de la mise en buffer du code, et dans ce cas là les optimisations ne feraient que ralentir encore plus. ^^
Bon, et si j'allais vraiment bosser maintenant
Tiens, c'est une bonne idée, ça…
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#684 Le 22/03/2011, à 12:42
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++[>+>+>+>+>+>+>+>+>+<<<<<<<<<-]>---------------------------------------------
------->--------------------------------------------------->------------>+++>+++
+++++++++++++>+++++++++++++++++>++++++++++++++++++++++++>+++++++++++++++++++++++
++++>++++++++++++++++++++++++++++++<<<<<<.>>>.>..>.<<<<<<<.>>>.>>>>.>.<<.<<.<<<.
grim7reaper a écrit :J'en profite pour signaler que celui en C++ est d'ailleurs ~9 fois plus rapide que celui de Pylade sur ce coup (si on regarde que le temps user, en temps global je ne suis que ~3 fois plus rapide)
Je ne crois pas que je t'aie donné ma dernière version… mais oui, je pourrais faire mieux. J'avais pensé à certaines optimisations, mais je ne les ai pas implémentées. Cela dit, la différence vient peut-être de la mise en buffer du code, et dans ce cas là les optimisations ne feraient que ralentir encore plus. ^^
Hum, je crois que si.
T'avais une version très lente à la base, et tu en avais fait une autre que j'avais bien prise en compte et c'est celle-là il me semble.
Elle est bien meilleure, là c'est un cas parmi d'autres (sur d'autres scripts l'écart est plus faible, et je crois que sur un des scripts que j'avais testé tu es même meilleur).
C'est quoi que tu appelles la mise en « buffer » ?
Parce que moi aussi le code est chargé dans un buffer.
Édit : pour ceux qui veulent voir la GPLv3 en brainfuck c'est par ici (je le poste pas car c'est trop long).
Dernière modification par grim7reaper (Le 22/03/2011, à 12:51)
Hors ligne
#685 Le 22/03/2011, à 13:06
- Pylades
Re : /* Topic des codeurs couche-tard [4] */
Ouais, mais à ce moment là je ne fais pas que charger le code, regarde ma fonction buf_code qui est bien longue (83 lignes)…
Voilà la dernière version (je ne suis quand même pas sûr que t'aies la dernière, là).
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#686 Le 22/03/2011, à 13:23
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
Effectivement, je n'avais pas la toute dernière, mais vu les différences ça ne changera rien aux perf'
Pour l'en‑tête
51,52c51,52
< char* buf_code(const char*, size_t**);
< int move_pointer(struct data*, char);
---
> static char* buf_code(const char*, size_t**);
> static int move_pointer(struct data*, char);
Pour le source
108c108
< char* buf_code(const char* src, size_t** match)
---
> static char* buf_code(const char* src, size_t** match)
182a183
> free(*match);
191c192
< int move_pointer(struct data* dt, char forward)
---
> static int move_pointer(struct data* dt, char forward)
Dernière modification par grim7reaper (Le 22/03/2011, à 13:26)
Hors ligne
#687 Le 22/03/2011, à 13:30
- Pylades
Re : /* Topic des codeurs couche-tard [4] */
Ah ouais, ça ne va pas chercher bien loin…
Mais note tout de même que c'est beaucoup mieux sans free manquant !
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#688 Le 22/03/2011, à 13:37
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
Oui, effectivement. Rien que ça, ça justifie que je remplace la version que j'avais par celle-là
Hors ligne
#689 Le 22/03/2011, à 13:47
- helly
Re : /* Topic des codeurs couche-tard [4] */
Bon, j'vais essayer de mettre en place un dépôt git/svn/hg/truc sur mon nas, pour voir comment ça se passe, comme ça quand j'en aurai besoin…
C'est lequel le mieux à choper ?
J'vois avec arch qu'il y a git, svn, cvs, mercurial… Mais je ne vois pas trop la différence entre tous…
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#690 Le 22/03/2011, à 13:49
- The Uploader
Re : /* Topic des codeurs couche-tard [4] */
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#691 Le 22/03/2011, à 13:50
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
@helly : Darcs \o/
Théorie des patchs pour plus de souplesse + 100% Haskell + utilisé et recommandé par le Farfadet (c'est en lisant ces posts que je l'ai découvert, il était sur Mercurial avant (comme moi en fait)).
Sinon SVN et CVS c'est du centralisé (donc moisi, obligé d'avoir un serveur qui tourne donc chiant quand tu bosses seul en local ou sans le net). En gros c'est des vieux machins (CVS n'est même plus maintenu je crois)
Les autres c'est du décentralisé donc que du bon (oui, je ne suis pas objectif, je sais ).
Au pire, fait une recherche pour avoir des avis plus partiaux (enfin surtout plus développés).
@The Uploader : git c'est fait par un connard
Dernière modification par grim7reaper (Le 22/03/2011, à 13:52)
Hors ligne
#692 Le 22/03/2011, à 13:54
- helly
Re : /* Topic des codeurs couche-tard [4] */
'sorry uploader, j'ai plus tendance à faire confiance à grim, surtout s'il a aussi l'approbation du farfadet .
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#693 Le 22/03/2011, à 14:01
- helly
Re : /* Topic des codeurs couche-tard [4] */
Arf, il semble que ghc ne puisse pas tourner sur de l'ARM selon leur site .
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#694 Le 22/03/2011, à 14:04
- Kanor
Re : /* Topic des codeurs couche-tard [4] */
J'aime bien git mais Darcs semble bien intéressant je ne connaissais pas
je suis tombé sur un cas étrange
http://alternc.org/wiki/DocDarcs
Dernière modification par Kanor (Le 22/03/2011, à 14:06)
Hors ligne
#695 Le 22/03/2011, à 14:05
- compte supprimé
Re : /* Topic des codeurs couche-tard [4] */
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++[>+>+>+>+>+>+>+>+>+<<<<<<<<<-]>--------------------------------------------- ------->--------------------------------------------------->------------>+++>+++ +++++++++++++>+++++++++++++++++>++++++++++++++++++++++++>+++++++++++++++++++++++ ++++>++++++++++++++++++++++++++++++<<<<<<.>>>.>..>.<<<<<<<.>>>.>>>>.>.<<.<<.<<<. >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>++++++++++.
Fixed.
/me part en courant et évite les tirs de grim' et de Pylade
#696 Le 22/03/2011, à 14:09
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
'sorry uploader, j'ai plus tendance à faire confiance à grim, surtout s'il a aussi l'approbation du farfadet
.
En complément :
./viewtopic.php?pid=3647168#p3647168
./viewtopic.php?pid=4044800#p4044800
Tu noteras que c'est ce qu'il utilise pour son livre sur le C++.
Arf, il semble que ghc ne puisse pas tourner sur de l'ARM selon leur site
.
Arf, merde.
Bah mercurial c'est pas mal aussi dans ce cas.
@Lagierl : L'absence d''\n'était voulu.
Dernière modification par grim7reaper (Le 22/03/2011, à 14:14)
Hors ligne
#697 Le 22/03/2011, à 14:11
- helly
Re : /* Topic des codeurs couche-tard [4] */
Yep, j'vais faire avec mercurial alors.
J'ai quand mêem voulu essayer d'installer ghc, pour voir…
[13:07 root@Mine ~/ghc-7.0.2] # ./configure
checking for gfind... no
checking for find... /usr/bin/find
checking for sort... /usr/bin/sort
checking for ghc... no
configure: error: GHC is required unless bootstrapping from .hc files.
Cool ! Pour installer ghc, il faut avoir ghc d'installé !
Stack overflow ! \☺/
Dernière modification par helly (Le 22/03/2011, à 14:16)
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#698 Le 22/03/2011, à 14:17
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
J'ai l'impression qu'il y a quand même un portage qui existe (même s'il ne fait pas parti de leur priorité). Peut-être de ce côté‑là (ou pas, en tout cas, on dirait qu'il y a bien quelque chose qui existe).
Cool ! Pour installer ghc, il faut avoir ghc d'installer !
Bah normal, vu que le ghc est écrit en Haskell…
Tu sais qu'il te faut un compilo C pour compiler un compilateur C (sauf s'il est écrit entièrement en assembleur, ce qui me semble tendu) ?
Bah là c'est pareil, c'est le fameux bootstrapping.
Il y a peut-être moyen de faire une cross-compilation…
Dernière modification par grim7reaper (Le 22/03/2011, à 14:22)
Hors ligne
#699 Le 22/03/2011, à 14:25
- The Uploader
Re : /* Topic des codeurs couche-tard [4] */
git c'est fait par un connard
Nan, un idiot. ^^ (git = idiot en anglais british)
sorry, 'uploader [...]
mais euh, darcs n'a pas de github, s'nul!
Dernière modification par The Uploader (Le 22/03/2011, à 14:27)
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne
#700 Le 22/03/2011, à 14:33
- grim7reaper
Re : /* Topic des codeurs couche-tard [4] */
git c'est fait par un connard
Nan, un idiot. ^^ (git = idiot en anglais british)
Tu es sûr ?
Idiot ça me semble bien soft, je trouve que connard (ou un truc du genre) est une meilleure traduction.
sorry, 'uploader [...]
mais euh, darcs n'a pas de github, s'nul!
github ça-pue-c-est-pas-libre.
gitorious c'est mieux :]
Dernière modification par grim7reaper (Le 22/03/2011, à 14:36)
Hors ligne