New blog entry (mandelbrot ascii)
This commit is contained in:
parent
03bae1fed0
commit
05a0c14d21
23 changed files with 1175 additions and 198 deletions
117
content/html/en/blog/Haskell-Mandelbrot.md
Normal file
117
content/html/en/blog/Haskell-Mandelbrot.md
Normal file
|
@ -0,0 +1,117 @@
|
|||
-----
|
||||
isHidden: false
|
||||
menupriority: 1
|
||||
kind: article
|
||||
created_at: 2011-07-10T12:41:26+02:00
|
||||
title: ASCII Haskell Mandelbrot
|
||||
author_name: Yann Esposito
|
||||
author_uri: yannesposito.com
|
||||
# tags:
|
||||
-----
|
||||
Here is the obfuscated code:
|
||||
|
||||
<code class="zsh" file="animandel.hs">
|
||||
a=27;b=79;c=C(-2.0,-1.0);d=C(1.0,1.0);e=C(-2.501,-1.003)
|
||||
newtype C = C (Double,Double) deriving (Show,Eq)
|
||||
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t);C(x,y)+C(z,t)=C(x+z,y+t);abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
|
||||
r(C(x,y))=x;i(C(x,y))=y
|
||||
f :: C -> C -> Int -> Int
|
||||
f c z 0=0;f c z n=if(r(abs(z))>2)then n else f c ((z*z)+c) (n-1)
|
||||
h j k = map (\z->(f (C z) (C(0,0)) 32,(fst z>l - q/2))) [(x,y)|y<-[p,(p+((o-p)/a))..o],x<-[m,(m + q)..l]] where o=i k;p=i j;m=r j;l=r k;q=(l-m)/b
|
||||
u j k = concat $ map v $ h j k where v (i,p)=(" .,`'°\":;-+oO0123456789=!%*§&$@#"!!i):rst p;rst True="\n";rst False=""
|
||||
main = putStrLn $ im 0 where cl n (C (x,y))=let cs=(1.1**n-1) in C ((x+cs*(r e))/cs+1,(y+cs*(i e))/cs+1);bl n=cl n c;tr n=cl n d;im n=u (bl n) (tr n)++"\x1b[H\x1b[25A"++im (n+1)
|
||||
</code>
|
||||
|
||||
To launch it, you'll need to have [haskell](http://haskell.org) installed and to run:
|
||||
|
||||
<code class="zsh">ghc --make animandel.hs && animandel</code>
|
||||
|
||||
Here is some image after 50 iterations:
|
||||
|
||||
<code class="zsh">
|
||||
5555666666666666666666666666666655555555554O+++ :o022334444444444444444444444444
|
||||
5555556666666666666666666666665555555555543210O-+O112333344444444444444444444444
|
||||
55555555666666666666666666665555555555444333210o`O012333333444444444444444444444
|
||||
4555555555566666666666666555555555544444333331O+°°,'0233333334444444444444444433
|
||||
44444445555555556666555555555444444444433333210o-:O01122333333334444444444443333
|
||||
44444444444444445555444444444444444444333332211O+ -o1112222223333333344433333222
|
||||
444444444444433331133334444444444444433332221110o"+O0111222222222222222222222222
|
||||
34444444443333330OO03333334444444443332222221100O+-oO001122222222221110-O1111122
|
||||
22333333333332210--01223333333333322222222211000o-°+o00000122222111110o°;o001111
|
||||
11OO112222222111O;;O111222222211OO111122211000Oo-" :+ooOOOO.O0000000OOo'°oOO0000
|
||||
0O;+O01122211000O--O00011221110O+;O00000OO +oooo-: :-+oo++";oOO0000Ooo+;;+oooO00
|
||||
o+"+oO00OO OOOOoo::ooOOOO°OO00Oo+"+ooOooo+;°---",' ,,";--: ;-+oo+ +++;;°°;;-++:;
|
||||
,° °':°: ` "`".°° °° "°". :'", '°`°":`°` ,,`` . . .°°'°° ` .. `'°.
|
||||
+-`-oo+oo+'+o+`--°°;-`+o+"+oo+oo-'-++;+++-:,:::"` °::°° :-;;--,;-; " " ;-;":
|
||||
OO"-O0000000000Oo--oO0000000000O-:oO0000Oo::+++;;: ":"-++-';+oooOOoooo-::-oooo++
|
||||
10;-111222222110O--O011222222111- 01111110oOOOoo-: :-ooooo`:OO000000OO+;;+OOO000
|
||||
22122222222222110++0112222222222111222222221000O+:,;.O000001111111100Oo:-OO00000
|
||||
3344444433333332-,°-2333333344444433322222221100o-;oO00011222222221111O'+0111111
|
||||
444444444444333320023333444444444444433322221110O.:O0011222222222222211-01112222
|
||||
44444444444444443333444444444444444444333332211O. -o1112222222223333333333322222
|
||||
44444444445555555555555555444444444444433333210O-"oO1122223333333444444444433333
|
||||
444555555555666666666666555555555444444433333' '`:+O0233333333444444444444444433
|
||||
</code>
|
||||
|
||||
Here is the more readable version. I believe with this far more readable version, no more explanation is needed.
|
||||
|
||||
<code class="zsh">
|
||||
-- Screen size
|
||||
nbvert = 27
|
||||
nbhor = 79
|
||||
init_bottom_left = C (-2.0,-1.0)
|
||||
init_top_right = C (1.0,1.0)
|
||||
interrest = C (-2.5,-1.0)
|
||||
|
||||
newtype Complex = C (Float,Float) deriving (Show,Eq)
|
||||
instance Num Complex where
|
||||
fromInteger n = C (fromIntegral n,0.0)
|
||||
C (x,y) * C (z,t) = C (z*x - y*t, y*z + x*t)
|
||||
C (x,y) + C (z,t) = C (x+z, y+t)
|
||||
abs (C (x,y)) = C (sqrt (x*x + y*y),0.0)
|
||||
signum (C (x,y)) = C (signum x , 0.0)
|
||||
|
||||
real :: Complex -> Float
|
||||
real (C (x,y)) = x
|
||||
im :: Complex -> Float
|
||||
im (C (x,y)) = y
|
||||
|
||||
f :: Complex -> Complex -> Int -> Complex
|
||||
f c z 0 = z
|
||||
f c z n = f c ((z*z)+c) (n-1)
|
||||
|
||||
cabs :: Complex -> Float
|
||||
cabs = real.abs
|
||||
|
||||
tst :: Complex -> Bool
|
||||
tst c = (cabs (f c (C(0.0,0.0)) 32)) < 2
|
||||
|
||||
bmandel bottomleft topright = map (\z -> (tst (C z), (fst z > right - hstep/2 ))) [(x,y) | y <- [bottom,(bottom + vstep)..top], x<-[left,(left + hstep)..right]]
|
||||
where
|
||||
top = im topright
|
||||
bottom = im bottomleft
|
||||
left = real bottomleft
|
||||
right = real topright
|
||||
vstep=(top-bottom)/nbvert
|
||||
hstep=(right-left)/nbhor
|
||||
|
||||
mandel :: Complex -> Complex -> String
|
||||
mandel bottomleft topright = concat $ map treat $ bmandel bottomleft topright
|
||||
where
|
||||
treat (True,jump) = " " ++ rst jump
|
||||
treat (False,jump) = "@" ++ rst jump
|
||||
rst True = "\n"
|
||||
rst False = ""
|
||||
|
||||
main = do
|
||||
x <- getContents
|
||||
putStrLn $ infinitemandel 0
|
||||
where
|
||||
closer n (C (x,y)) =
|
||||
let cst = (1.1**n - 1) in
|
||||
C ( (x + cst*(real interrest))/cst+1,
|
||||
(y + cst*(im interrest))/cst+1 )
|
||||
bottomleftn n = closer n init_bottom_left
|
||||
toprightn n = closer n init_top_right
|
||||
infinitemandel n = mandel (bottomleftn n) (toprightn n) ++ "\x1b[H\x1b[25A" ++ infinitemandel (n+1)
|
||||
</code>
|
117
content/html/fr/blog/Haskell-Mandelbrot.md
Normal file
117
content/html/fr/blog/Haskell-Mandelbrot.md
Normal file
|
@ -0,0 +1,117 @@
|
|||
-----
|
||||
isHidden: false
|
||||
menupriority: 1
|
||||
kind: article
|
||||
created_at: 2011-07-10T12:41:26+02:00
|
||||
title: Mandelbrot avec haskell
|
||||
author_name: Yann Esposito
|
||||
author_uri: yannesposito.com
|
||||
# tags:
|
||||
-----
|
||||
Voici le code "obfusqué" :
|
||||
|
||||
<code class="zsh" file="animandel.hs">
|
||||
a=27;b=79;c=C(-2.0,-1.0);d=C(1.0,1.0);e=C(-2.501,-1.003)
|
||||
newtype C = C (Double,Double) deriving (Show,Eq)
|
||||
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t);C(x,y)+C(z,t)=C(x+z,y+t);abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
|
||||
r(C(x,y))=x;i(C(x,y))=y
|
||||
f :: C -> C -> Int -> Int
|
||||
f c z 0=0;f c z n=if(r(abs(z))>2)then n else f c ((z*z)+c) (n-1)
|
||||
h j k = map (\z->(f (C z) (C(0,0)) 32,(fst z>l - q/2))) [(x,y)|y<-[p,(p+((o-p)/a))..o],x<-[m,(m + q)..l]] where o=i k;p=i j;m=r j;l=r k;q=(l-m)/b
|
||||
u j k = concat $ map v $ h j k where v (i,p)=(" .,`'°\":;-+oO0123456789=!%*§&$@#"!!i):rst p;rst True="\n";rst False=""
|
||||
main = putStrLn $ im 0 where cl n (C (x,y))=let cs=(1.1**n-1) in C ((x+cs*(r e))/cs+1,(y+cs*(i e))/cs+1);bl n=cl n c;tr n=cl n d;im n=u (bl n) (tr n)++"\x1b[H\x1b[25A"++im (n+1)
|
||||
</code>
|
||||
|
||||
Pour le lancer, [haskell](http://haskell.org) doit être installé. Puis vous devez écrire dans un terminal :
|
||||
|
||||
<code class="zsh">ghc --make animandel.hs && animandel</code>
|
||||
|
||||
Voici le résultat après 50 itérations.
|
||||
|
||||
<code class="zsh">
|
||||
5555666666666666666666666666666655555555554O+++ :o022334444444444444444444444444
|
||||
5555556666666666666666666666665555555555543210O-+O112333344444444444444444444444
|
||||
55555555666666666666666666665555555555444333210o`O012333333444444444444444444444
|
||||
4555555555566666666666666555555555544444333331O+°°,'0233333334444444444444444433
|
||||
44444445555555556666555555555444444444433333210o-:O01122333333334444444444443333
|
||||
44444444444444445555444444444444444444333332211O+ -o1112222223333333344433333222
|
||||
444444444444433331133334444444444444433332221110o"+O0111222222222222222222222222
|
||||
34444444443333330OO03333334444444443332222221100O+-oO001122222222221110-O1111122
|
||||
22333333333332210--01223333333333322222222211000o-°+o00000122222111110o°;o001111
|
||||
11OO112222222111O;;O111222222211OO111122211000Oo-" :+ooOOOO.O0000000OOo'°oOO0000
|
||||
0O;+O01122211000O--O00011221110O+;O00000OO +oooo-: :-+oo++";oOO0000Ooo+;;+oooO00
|
||||
o+"+oO00OO OOOOoo::ooOOOO°OO00Oo+"+ooOooo+;°---",' ,,";--: ;-+oo+ +++;;°°;;-++:;
|
||||
,° °':°: ` "`".°° °° "°". :'", '°`°":`°` ,,`` . . .°°'°° ` .. `'°.
|
||||
+-`-oo+oo+'+o+`--°°;-`+o+"+oo+oo-'-++;+++-:,:::"` °::°° :-;;--,;-; " " ;-;":
|
||||
OO"-O0000000000Oo--oO0000000000O-:oO0000Oo::+++;;: ":"-++-';+oooOOoooo-::-oooo++
|
||||
10;-111222222110O--O011222222111- 01111110oOOOoo-: :-ooooo`:OO000000OO+;;+OOO000
|
||||
22122222222222110++0112222222222111222222221000O+:,;.O000001111111100Oo:-OO00000
|
||||
3344444433333332-,°-2333333344444433322222221100o-;oO00011222222221111O'+0111111
|
||||
444444444444333320023333444444444444433322221110O.:O0011222222222222211-01112222
|
||||
44444444444444443333444444444444444444333332211O. -o1112222222223333333333322222
|
||||
44444444445555555555555555444444444444433333210O-"oO1122223333333444444444433333
|
||||
444555555555666666666666555555555444444433333' '`:+O0233333333444444444444444433
|
||||
</code>
|
||||
|
||||
Here is the more readable version. I believe with this far more readable version, no more explanation is needed.
|
||||
|
||||
<code class="zsh">
|
||||
-- Screen size
|
||||
nbvert = 27
|
||||
nbhor = 79
|
||||
init_bottom_left = C (-2.0,-1.0)
|
||||
init_top_right = C (1.0,1.0)
|
||||
interrest = C (-2.5,-1.0)
|
||||
|
||||
newtype Complex = C (Float,Float) deriving (Show,Eq)
|
||||
instance Num Complex where
|
||||
fromInteger n = C (fromIntegral n,0.0)
|
||||
C (x,y) * C (z,t) = C (z*x - y*t, y*z + x*t)
|
||||
C (x,y) + C (z,t) = C (x+z, y+t)
|
||||
abs (C (x,y)) = C (sqrt (x*x + y*y),0.0)
|
||||
signum (C (x,y)) = C (signum x , 0.0)
|
||||
|
||||
real :: Complex -> Float
|
||||
real (C (x,y)) = x
|
||||
im :: Complex -> Float
|
||||
im (C (x,y)) = y
|
||||
|
||||
f :: Complex -> Complex -> Int -> Complex
|
||||
f c z 0 = z
|
||||
f c z n = f c ((z*z)+c) (n-1)
|
||||
|
||||
cabs :: Complex -> Float
|
||||
cabs = real.abs
|
||||
|
||||
tst :: Complex -> Bool
|
||||
tst c = (cabs (f c (C(0.0,0.0)) 32)) < 2
|
||||
|
||||
bmandel bottomleft topright = map (\z -> (tst (C z), (fst z > right - hstep/2 ))) [(x,y) | y <- [bottom,(bottom + vstep)..top], x<-[left,(left + hstep)..right]]
|
||||
where
|
||||
top = im topright
|
||||
bottom = im bottomleft
|
||||
left = real bottomleft
|
||||
right = real topright
|
||||
vstep=(top-bottom)/nbvert
|
||||
hstep=(right-left)/nbhor
|
||||
|
||||
mandel :: Complex -> Complex -> String
|
||||
mandel bottomleft topright = concat $ map treat $ bmandel bottomleft topright
|
||||
where
|
||||
treat (True,jump) = " " ++ rst jump
|
||||
treat (False,jump) = "@" ++ rst jump
|
||||
rst True = "\n"
|
||||
rst False = ""
|
||||
|
||||
main = do
|
||||
x <- getContents
|
||||
putStrLn $ infinitemandel 0
|
||||
where
|
||||
closer n (C (x,y)) =
|
||||
let cst = (1.1**n - 1) in
|
||||
C ( (x + cst*(real interrest))/cst+1,
|
||||
(y + cst*(im interrest))/cst+1 )
|
||||
bottomleftn n = closer n init_bottom_left
|
||||
toprightn n = closer n init_top_right
|
||||
infinitemandel n = mandel (bottomleftn n) (toprightn n) ++ "\x1b[H\x1b[25A" ++ infinitemandel (n+1)
|
||||
</code>
|
1
img_latest_blog_dir
Symbolic link
1
img_latest_blog_dir
Symbolic link
|
@ -0,0 +1 @@
|
|||
/Users/esposito/Sites/webroot/output/Scratch/img/blog/Haskell-Mandelbrot
|
|
@ -1 +1 @@
|
|||
./multi/blog/Password-Management.md
|
||||
./multi/blog/Haskell-Mandelbrot.md
|
121
multi/blog/Haskell-Mandelbrot.md
Normal file
121
multi/blog/Haskell-Mandelbrot.md
Normal file
|
@ -0,0 +1,121 @@
|
|||
-----
|
||||
isHidden: false
|
||||
menupriority: 1
|
||||
kind: article
|
||||
created_at: 2011-07-10T12:41:26+02:00
|
||||
en: title: ASCII Haskell Mandelbrot
|
||||
fr: title: Mandelbrot avec haskell
|
||||
author_name: Yann Esposito
|
||||
author_uri: yannesposito.com
|
||||
# tags:
|
||||
-----
|
||||
en: Here is the obfuscated code:
|
||||
fr: Voici le code "obfusqué" :
|
||||
|
||||
<code class="zsh" file="animandel.hs">
|
||||
a=27;b=79;c=C(-2.0,-1.0);d=C(1.0,1.0);e=C(-2.501,-1.003)
|
||||
newtype C = C (Double,Double) deriving (Show,Eq)
|
||||
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t);C(x,y)+C(z,t)=C(x+z,y+t);abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
|
||||
r(C(x,y))=x;i(C(x,y))=y
|
||||
f :: C -> C -> Int -> Int
|
||||
f c z 0=0;f c z n=if(r(abs(z))>2)then n else f c ((z*z)+c) (n-1)
|
||||
h j k = map (\z->(f (C z) (C(0,0)) 32,(fst z>l - q/2))) [(x,y)|y<-[p,(p+((o-p)/a))..o],x<-[m,(m + q)..l]] where o=i k;p=i j;m=r j;l=r k;q=(l-m)/b
|
||||
u j k = concat $ map v $ h j k where v (i,p)=(" .,`'°\":;-+oO0123456789=!%*§&$@#"!!i):rst p;rst True="\n";rst False=""
|
||||
main = putStrLn $ im 0 where cl n (C (x,y))=let cs=(1.1**n-1) in C ((x+cs*(r e))/cs+1,(y+cs*(i e))/cs+1);bl n=cl n c;tr n=cl n d;im n=u (bl n) (tr n)++"\x1b[H\x1b[25A"++im (n+1)
|
||||
</code>
|
||||
|
||||
en: To launch it, you'll need to have [haskell](http://haskell.org) installed and to run:
|
||||
fr: Pour le lancer, [haskell](http://haskell.org) doit être installé. Puis vous devez écrire dans un terminal :
|
||||
|
||||
<code class="zsh">ghc --make animandel.hs && animandel</code>
|
||||
|
||||
en: Here is some image after 50 iterations:
|
||||
fr: Voici le résultat après 50 itérations.
|
||||
|
||||
<code class="zsh">
|
||||
5555666666666666666666666666666655555555554O+++ :o022334444444444444444444444444
|
||||
5555556666666666666666666666665555555555543210O-+O112333344444444444444444444444
|
||||
55555555666666666666666666665555555555444333210o`O012333333444444444444444444444
|
||||
4555555555566666666666666555555555544444333331O+°°,'0233333334444444444444444433
|
||||
44444445555555556666555555555444444444433333210o-:O01122333333334444444444443333
|
||||
44444444444444445555444444444444444444333332211O+ -o1112222223333333344433333222
|
||||
444444444444433331133334444444444444433332221110o"+O0111222222222222222222222222
|
||||
34444444443333330OO03333334444444443332222221100O+-oO001122222222221110-O1111122
|
||||
22333333333332210--01223333333333322222222211000o-°+o00000122222111110o°;o001111
|
||||
11OO112222222111O;;O111222222211OO111122211000Oo-" :+ooOOOO.O0000000OOo'°oOO0000
|
||||
0O;+O01122211000O--O00011221110O+;O00000OO +oooo-: :-+oo++";oOO0000Ooo+;;+oooO00
|
||||
o+"+oO00OO OOOOoo::ooOOOO°OO00Oo+"+ooOooo+;°---",' ,,";--: ;-+oo+ +++;;°°;;-++:;
|
||||
,° °':°: ` "`".°° °° "°". :'", '°`°":`°` ,,`` . . .°°'°° ` .. `'°.
|
||||
+-`-oo+oo+'+o+`--°°;-`+o+"+oo+oo-'-++;+++-:,:::"` °::°° :-;;--,;-; " " ;-;":
|
||||
OO"-O0000000000Oo--oO0000000000O-:oO0000Oo::+++;;: ":"-++-';+oooOOoooo-::-oooo++
|
||||
10;-111222222110O--O011222222111- 01111110oOOOoo-: :-ooooo`:OO000000OO+;;+OOO000
|
||||
22122222222222110++0112222222222111222222221000O+:,;.O000001111111100Oo:-OO00000
|
||||
3344444433333332-,°-2333333344444433322222221100o-;oO00011222222221111O'+0111111
|
||||
444444444444333320023333444444444444433322221110O.:O0011222222222222211-01112222
|
||||
44444444444444443333444444444444444444333332211O. -o1112222222223333333333322222
|
||||
44444444445555555555555555444444444444433333210O-"oO1122223333333444444444433333
|
||||
444555555555666666666666555555555444444433333' '`:+O0233333333444444444444444433
|
||||
</code>
|
||||
|
||||
Here is the more readable version. I believe with this far more readable version, no more explanation is needed.
|
||||
|
||||
<code class="zsh">
|
||||
-- Screen size
|
||||
nbvert = 27
|
||||
nbhor = 79
|
||||
init_bottom_left = C (-2.0,-1.0)
|
||||
init_top_right = C (1.0,1.0)
|
||||
interrest = C (-2.5,-1.0)
|
||||
|
||||
newtype Complex = C (Float,Float) deriving (Show,Eq)
|
||||
instance Num Complex where
|
||||
fromInteger n = C (fromIntegral n,0.0)
|
||||
C (x,y) * C (z,t) = C (z*x - y*t, y*z + x*t)
|
||||
C (x,y) + C (z,t) = C (x+z, y+t)
|
||||
abs (C (x,y)) = C (sqrt (x*x + y*y),0.0)
|
||||
signum (C (x,y)) = C (signum x , 0.0)
|
||||
|
||||
real :: Complex -> Float
|
||||
real (C (x,y)) = x
|
||||
im :: Complex -> Float
|
||||
im (C (x,y)) = y
|
||||
|
||||
f :: Complex -> Complex -> Int -> Complex
|
||||
f c z 0 = z
|
||||
f c z n = f c ((z*z)+c) (n-1)
|
||||
|
||||
cabs :: Complex -> Float
|
||||
cabs = real.abs
|
||||
|
||||
tst :: Complex -> Bool
|
||||
tst c = (cabs (f c (C(0.0,0.0)) 32)) < 2
|
||||
|
||||
bmandel bottomleft topright = map (\z -> (tst (C z), (fst z > right - hstep/2 ))) [(x,y) | y <- [bottom,(bottom + vstep)..top], x<-[left,(left + hstep)..right]]
|
||||
where
|
||||
top = im topright
|
||||
bottom = im bottomleft
|
||||
left = real bottomleft
|
||||
right = real topright
|
||||
vstep=(top-bottom)/nbvert
|
||||
hstep=(right-left)/nbhor
|
||||
|
||||
mandel :: Complex -> Complex -> String
|
||||
mandel bottomleft topright = concat $ map treat $ bmandel bottomleft topright
|
||||
where
|
||||
treat (True,jump) = " " ++ rst jump
|
||||
treat (False,jump) = "@" ++ rst jump
|
||||
rst True = "\n"
|
||||
rst False = ""
|
||||
|
||||
main = do
|
||||
x <- getContents
|
||||
putStrLn $ infinitemandel 0
|
||||
where
|
||||
closer n (C (x,y)) =
|
||||
let cst = (1.1**n - 1) in
|
||||
C ( (x + cst*(real interrest))/cst+1,
|
||||
(y + cst*(im interrest))/cst+1 )
|
||||
bottomleftn n = closer n init_bottom_left
|
||||
toprightn n = closer n init_top_right
|
||||
infinitemandel n = mandel (bottomleftn n) (toprightn n) ++ "\x1b[H\x1b[25A" ++ infinitemandel (n+1)
|
||||
</code>
|
File diff suppressed because one or more lines are too long
|
@ -248,7 +248,7 @@ But you can easily translate from Ruby to Javascript.</p>
|
|||
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="day">19</span>
|
||||
<span class="month">Jun</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -671,7 +671,7 @@ But you can easily translate from Ruby to Javascript.</p>
|
|||
</ul><a class="return" href="#tagcloud">↑</a></div><div id="iPhone" class="list"><h4>iPhone</h4><ul style="list-style-type: none; margin: 0;">
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">1</span>
|
||||
<span class="day">2</span>
|
||||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -716,7 +716,7 @@ But you can easily translate from Ruby to Javascript.</p>
|
|||
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="day">19</span>
|
||||
<span class="month">Jun</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -779,7 +779,7 @@ But you can easily translate from Ruby to Javascript.</p>
|
|||
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="day">19</span>
|
||||
<span class="month">Jun</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -986,7 +986,7 @@ But you can easily translate from Ruby to Javascript.</p>
|
|||
</ul><a class="return" href="#tagcloud">↑</a></div><div id="Objective_C" class="list"><h4>Objective-C</h4><ul style="list-style-type: none; margin: 0;">
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">1</span>
|
||||
<span class="day">2</span>
|
||||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -1013,7 +1013,7 @@ But you can easily translate from Ruby to Javascript.</p>
|
|||
</ul><a class="return" href="#tagcloud">↑</a></div><div id="popup" class="list"><h4>popup</h4><ul style="list-style-type: none; margin: 0;">
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="day">19</span>
|
||||
<span class="month">Jun</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -1067,7 +1067,7 @@ But you can easily translate from Ruby to Javascript.</p>
|
|||
</ul><a class="return" href="#tagcloud">↑</a></div><div id="Programming" class="list"><h4>Programming</h4><ul style="list-style-type: none; margin: 0;">
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">1</span>
|
||||
<span class="day">2</span>
|
||||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -1499,7 +1499,7 @@ But you can easily translate from Ruby to Javascript.</p>
|
|||
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="day">19</span>
|
||||
<span class="month">Jun</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
|
|
@ -274,6 +274,10 @@ But I believe it would be a really hard task just to simulate the access of curr
|
|||
</div>
|
||||
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/Haskell-Mandelbrot/">ASCII Haskell Mandelbrot <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="flush"></div>
|
||||
|
|
|
@ -134,6 +134,10 @@
|
|||
</div>
|
||||
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/Haskell-Mandelbrot/">ASCII Haskell Mandelbrot <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
|
10
output/Scratch/en/blog/Haskell-Mandelbrot/code/animandel.hs
Normal file
10
output/Scratch/en/blog/Haskell-Mandelbrot/code/animandel.hs
Normal file
|
@ -0,0 +1,10 @@
|
|||
|
||||
a=27;b=79;c=C(-2.0,-1.0);d=C(1.0,1.0);e=C(-2.501,-1.003)
|
||||
newtype C = C (Double,Double) deriving (Show,Eq)
|
||||
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t);C(x,y)+C(z,t)=C(x+z,y+t);abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
|
||||
r(C(x,y))=x;i(C(x,y))=y
|
||||
f :: C -> C -> Int -> Int
|
||||
f c z 0=0;f c z n=if(r(abs(z))>2)then n else f c ((z*z)+c) (n-1)
|
||||
h j k = map (\z->(f (C z) (C(0,0)) 32,(fst z>l - q/2))) [(x,y)|y<-[p,(p+((o-p)/a))..o],x<-[m,(m + q)..l]] where o=i k;p=i j;m=r j;l=r k;q=(l-m)/b
|
||||
u j k = concat $ map v $ h j k where v (i,p)=(" .,`'°\":;-+oO0123456789=!%*§&$@#"!!i):rst p;rst True="\n";rst False=""
|
||||
main = putStrLn $ im 0 where cl n (C (x,y))=let cs=(1.1**n-1) in C ((x+cs*(r e))/cs+1,(y+cs*(i e))/cs+1);bl n=cl n c;tr n=cl n d;im n=u (bl n) (tr n)++"\x1b[H\x1b[25A"++im (n+1)
|
287
output/Scratch/en/blog/Haskell-Mandelbrot/index.html
Normal file
287
output/Scratch/en/blog/Haskell-Mandelbrot/index.html
Normal file
|
@ -0,0 +1,287 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
|
||||
|
||||
<link rel="shortcut icon" type="image/x-icon" href="/Scratch/img/favicon.ico" />
|
||||
<link rel="stylesheet" type="text/css" href="/Scratch/assets/css/main.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/Scratch/css/twilight.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/Scratch/css/idc.css" />
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://feeds.feedburner.com/yannespositocomen"/>
|
||||
|
||||
<link rel="alternate" lang="fr" xml:lang="fr" title="Mandelbrot avec haskell" type="text/html" hreflang="fr" href="/Scratch/fr/blog/Haskell-Mandelbrot/" />
|
||||
<link rel="alternate" lang="en" xml:lang="en" title="ASCII Haskell Mandelbrot" type="text/html" hreflang="en" href="/Scratch/en/blog/Haskell-Mandelbrot/" />
|
||||
<script type="text/javascript" src="/Scratch/js/jquery-1.3.1.min.js"></script>
|
||||
<script type="text/javascript" src="/Scratch/js/jquery.cookie.js"></script>
|
||||
<script type="text/javascript" src="/Scratch/js/index.js"></script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script>
|
||||
<![endif]-->
|
||||
<!-- < % if containMaths %>
|
||||
<script type="text/javascript" src="/Scratch/js/MathJax/MathJax.js"></script>
|
||||
< % end %>
|
||||
-->
|
||||
<title>ASCII Haskell Mandelbrot</title>
|
||||
</head>
|
||||
<body lang="en">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="loading..."/></div>');
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
<div id="content">
|
||||
|
||||
<div id="choix">
|
||||
<div class="return"><a href="#entete">↓ Menu ↓</a></div>
|
||||
<div id="choixlang">
|
||||
<a href="/Scratch/fr/blog/Haskell-Mandelbrot/" onclick="setLanguage('fr')">en Français</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="titre">
|
||||
<h1>
|
||||
ASCII Haskell Mandelbrot
|
||||
</h1>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="flush"></div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="flush"></div>
|
||||
<div id="afterheader">
|
||||
<div class="corps">
|
||||
<p>Here is the obfuscated code:</p>
|
||||
|
||||
<div class="code"><div class="file"><a href="/Scratch/en/blog/Haskell-Mandelbrot/code/animandel.hs"> ➥ animandel.hs </a></div><div class="withfile">
|
||||
<pre class="twilight">
|
||||
a=27<span class="Keyword">;</span>b=79<span class="Keyword">;</span>c=C(-2.0,-1.0)<span class="Keyword">;</span>d=C(1.0,1.0)<span class="Keyword">;</span>e=C(-2.501,-1.003)
|
||||
newtype C = C (Double,Double) deriving (Show,Eq)
|
||||
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t)<span class="Keyword">;</span>C(x,y)+C(z,t)=C(x+z,y+t)<span class="Keyword">;</span>abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
|
||||
r(C(x,y))=x<span class="Keyword">;</span>i(C(x,y))=y
|
||||
f :: C -<span class="Keyword">></span> C -<span class="Keyword">></span> Int -<span class="Keyword">></span> Int
|
||||
f c z 0=0<span class="Keyword">;</span>f c z n=<span class="Keyword">if</span>(r(abs(z))<span class="Keyword">></span>2)<span class="Keyword">then</span> n <span class="Keyword">else</span> f c ((z*z)+c) (n-1)
|
||||
h j k = map (<span class="Constant">\z</span>-<span class="String"><span class="String">>(</span>f (C z<span class="String">)</span></span> (C(0,0)) 32,(fst z<span class="Keyword">></span>l - q/2))) [(x,y)<span class="Keyword">|</span>y<span class="Keyword"><</span>-[p,(p+((o-p)/a))..o],x<span class="Keyword"><</span>-[m,(m + q)..l]] where o=i k<span class="Keyword">;</span>p=i j<span class="Keyword">;</span>m=r j<span class="Keyword">;</span>l=r k<span class="Keyword">;</span>q=(l-m)/b
|
||||
u j k = concat $ map v $ h j k where v (i,p)=(<span class="String"><span class="String">"</span> .,<span class="String"><span class="String">`</span>'°\":;-+oO0123456789=!%*§&$@#"!!i):rst p;rst True="\n";rst False=""</span></span>
|
||||
<span class="String"><span class="String">main = putStrLn $ im 0 where cl n (C (x,y))=let cs=(1.1**n-1) in C ((x+cs*(r e))/cs+1,(y+cs*(i e))/cs+1);bl n=cl n c;tr n=cl n d;im n=u (bl n) (tr n)++"\x1b[H\x1b[25A"++im (n+1)</span></span>
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>To launch it, you’ll need to have <a href="http://haskell.org">haskell</a> installed and to run:</p>
|
||||
|
||||
<pre class="twilight">ghc --make animandel.hs <span class="Keyword">&&</span> animandel
|
||||
</pre>
|
||||
|
||||
<p>Here is some image after 50 iterations:</p>
|
||||
|
||||
<pre class="twilight">
|
||||
5555666666666666666666666666666655555555554O+++ :o022334444444444444444444444444
|
||||
5555556666666666666666666666665555555555543210O-+O112333344444444444444444444444
|
||||
55555555666666666666666666665555555555444333210o<span class="String"><span class="String">`</span>O012333333444444444444444444444</span>
|
||||
<span class="String">4555555555566666666666666555555555544444333331O+°°,'0233333334444444444444444433</span>
|
||||
<span class="String">44444445555555556666555555555444444444433333210o-:O01122333333334444444444443333</span>
|
||||
<span class="String">44444444444444445555444444444444444444333332211O+ -o1112222223333333344433333222</span>
|
||||
<span class="String">444444444444433331133334444444444444433332221110o"+O0111222222222222222222222222</span>
|
||||
<span class="String">34444444443333330OO03333334444444443332222221100O+-oO001122222222221110-O1111122</span>
|
||||
<span class="String">22333333333332210--01223333333333322222222211000o-°+o00000122222111110o°;o001111</span>
|
||||
<span class="String">11OO112222222111O;;O111222222211OO111122211000Oo-" :+ooOOOO.O0000000OOo'°oOO0000</span>
|
||||
<span class="String">0O;+O01122211000O--O00011221110O+;O00000OO +oooo-: :-+oo++";oOO0000Ooo+;;+oooO00</span>
|
||||
<span class="String">o+"+oO00OO OOOOoo::ooOOOO°OO00Oo+"+ooOooo+;°---",' ,,";--: ;-+oo+ +++;;°°;;-++:;</span>
|
||||
<span class="String">,° °':°: <span class="String">`</span></span> <span class="String"><span class="String">"</span><span class="String"><span class="String">`</span>".°° °° "°". :'", '°<span class="String">`</span></span>°<span class="String">"</span></span>:<span class="String"><span class="String">`</span>°<span class="String">`</span></span> ,,<span class="String"><span class="String">`</span><span class="String">`</span></span> . . .°°<span class="String"><span class="String">'</span>°° ` .. `<span class="String">'</span></span>°.
|
||||
+-<span class="String"><span class="String">`</span>-oo+oo+'+o+<span class="String">`</span></span>--°°<span class="Keyword">;</span>-<span class="String"><span class="String">`</span>+o+"+oo+oo-'-++;+++-:,:::"<span class="String">`</span></span> °::°° :-<span class="Keyword">;</span><span class="Keyword">;</span>--,<span class="Keyword">;</span>-<span class="Keyword">;</span> <span class="String"><span class="String">"</span> <span class="String">"</span></span> <span class="Keyword">;</span>-<span class="Keyword">;</span><span class="String"><span class="String">"</span>:</span>
|
||||
<span class="String">OO<span class="String">"</span></span>-O0000000000Oo--oO0000000000O-:oO0000Oo::+++<span class="Keyword">;</span><span class="Keyword">;</span>: <span class="String"><span class="String">"</span>:<span class="String">"</span></span>-++-<span class="String"><span class="String">'</span>;+oooOOoooo-::-oooo++</span>
|
||||
<span class="String">10;-111222222110O--O011222222111- 01111110oOOOoo-: :-ooooo`:OO000000OO+;;+OOO000</span>
|
||||
<span class="String">22122222222222110++0112222222222111222222221000O+:,;.O000001111111100Oo:-OO00000</span>
|
||||
<span class="String">3344444433333332-,°-2333333344444433322222221100o-;oO00011222222221111O<span class="String">'</span></span>+0111111
|
||||
444444444444333320023333444444444444433322221110O.:O0011222222222222211-01112222
|
||||
44444444444444443333444444444444444444333332211O. -o1112222222223333333333322222
|
||||
44444444445555555555555555444444444444433333210O-<span class="String"><span class="String">"</span>oO1122223333333444444444433333</span>
|
||||
<span class="String">444555555555666666666666555555555444444433333' '<span class="String"><span class="String">`</span>:+O0233333333444444444444444433</span></span>
|
||||
</pre>
|
||||
|
||||
<p>Here is the more readable version. I believe with this far more readable version, no more explanation is needed.</p>
|
||||
|
||||
<pre class="twilight">
|
||||
-- Screen size
|
||||
nbvert = 27
|
||||
nbhor = 79
|
||||
init_bottom_left = C (-2.0,-1.0)
|
||||
init_top_right = C (1.0,1.0)
|
||||
interrest = C (-2.5,-1.0)
|
||||
|
||||
newtype Complex = C (Float,Float) deriving (Show,Eq)
|
||||
instance Num Complex where
|
||||
fromInteger n = C (fromIntegral n,0.0)
|
||||
C (x,y) * C (z,t) = C (z*x - y*t, y*z + x*t)
|
||||
C (x,y) + C (z,t) = C (x+z, y+t)
|
||||
abs (C (x,y)) = C (sqrt (x*x + y*y),0.0)
|
||||
signum (C (x,y)) = C (signum x , 0.0)
|
||||
|
||||
real :: Complex -<span class="Keyword">></span> Float
|
||||
real (C (x,y)) = x
|
||||
im :: Complex -<span class="Keyword">></span> Float
|
||||
im (C (x,y)) = y
|
||||
|
||||
f :: Complex -<span class="Keyword">></span> Complex -<span class="Keyword">></span> Int -<span class="Keyword">></span> Complex
|
||||
f c z 0 = z
|
||||
f c z n = f c ((z*z)+c) (n-1)
|
||||
|
||||
cabs :: Complex -<span class="Keyword">></span> Float
|
||||
cabs = real.abs
|
||||
|
||||
tst :: Complex -<span class="Keyword">></span> Bool
|
||||
tst c = (cabs (f c (C(0.0,0.0)) 32)) <span class="Keyword"><</span> 2
|
||||
|
||||
bmandel bottomleft topright = map (<span class="Constant">\z</span> -<span class="Keyword">></span> (tst (C z), (fst z <span class="Keyword">></span> right - hstep/2 ))) [(x,y) <span class="Keyword">|</span> y <span class="Keyword"><</span>- [bottom,(bottom + vstep)..top], x<span class="Keyword"><</span>-[left,(left + hstep)..right]]
|
||||
where
|
||||
top = im topright
|
||||
bottom = im bottomleft
|
||||
left = real bottomleft
|
||||
right = real topright
|
||||
vstep=(top-bottom)/nbvert
|
||||
hstep=(right-left)/nbhor
|
||||
|
||||
mandel :: Complex -<span class="Keyword">></span> Complex -<span class="Keyword">></span> String
|
||||
mandel bottomleft topright = concat $ map treat $ bmandel bottomleft topright
|
||||
where
|
||||
treat (True,jump) = <span class="String"><span class="String">"</span> <span class="String">"</span></span> ++ rst jump
|
||||
treat (False,jump) = <span class="String"><span class="String">"</span>@<span class="String">"</span></span> ++ rst jump
|
||||
rst True = <span class="String"><span class="String">"</span>\n<span class="String">"</span></span>
|
||||
rst False = <span class="String"><span class="String">"</span><span class="String">"</span></span>
|
||||
|
||||
main = <span class="Keyword">do</span>
|
||||
x <span class="Keyword"><</span>- getContents
|
||||
putStrLn $ infinitemandel 0
|
||||
where
|
||||
closer n (C (x,y)) =
|
||||
let cst = (1.1**n - 1) <span class="Keyword">in</span>
|
||||
C ( (x + cst*(real interrest))/cst+1,
|
||||
(y + cst*(im interrest))/cst+1 )
|
||||
bottomleftn n = closer n init_bottom_left
|
||||
toprightn n = closer n init_top_right
|
||||
infinitemandel n = mandel (bottomleftn n) (toprightn n) ++ <span class="String"><span class="String">"</span>\x1b[H\x1b[25A<span class="String">"</span></span> ++ infinitemandel (n+1)
|
||||
</pre>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="choixrss">
|
||||
<a id="rss" href="http://feeds.feedburner.com/yannespositocomen">
|
||||
Subscribe
|
||||
</a>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
$('#comment').hide();
|
||||
$('#clickcomment').click(showComments);
|
||||
});
|
||||
function showComments() {
|
||||
$('#comment').show();
|
||||
$('#clickcomment').fadeOut();
|
||||
}
|
||||
document.write('<div id="clickcomment">Comments</div>');
|
||||
</script>
|
||||
<div class="flush"></div>
|
||||
<div class="corps" id="comment">
|
||||
<h2 class="first">comments</h2>
|
||||
<noscript>
|
||||
You must enable javascript to comment.
|
||||
</noscript>
|
||||
|
||||
<script type="text/javascript">
|
||||
var idcomments_acct = 'a307f0044511ff1b5cfca573fc0a52e7';
|
||||
var idcomments_post_id = '/Scratch/en/blog/Haskell-Mandelbrot/';
|
||||
var idcomments_post_url = 'http://yannesposito.com/Scratch/en/blog/Haskell-Mandelbrot/';
|
||||
</script>
|
||||
<span id="IDCommentsPostTitle" style="display:none"></span>
|
||||
<script type='text/javascript' src='/Scratch/js/genericCommentWrapperV2.js'></script>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="entete" class="corps_spaced">
|
||||
<div id="liens">
|
||||
<ul><li><a href="/Scratch/en/">Home</a></li>
|
||||
<li><a href="/Scratch/en/blog/">Blog</a></li>
|
||||
<li><a href="/Scratch/en/softwares/">Softwares</a></li>
|
||||
<li><a href="/Scratch/en/about/">About</a></li></ul>
|
||||
</div>
|
||||
<div class="flush"></div>
|
||||
<hr/>
|
||||
<div id="next_before_articles">
|
||||
<div id="previous_articles">
|
||||
previous entries
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/Password-Management/"><span class="nicer">«</span> 40 character's passwords</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/2011-04-20-Now-hosted-on-github/"><span class="nicer">«</span> Now hosted on github</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/"><span class="nicer">«</span> Why I won't use CoffeeScript (sadly)</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div id="next_articles">
|
||||
next entries
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="flush"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="bottom">
|
||||
<div>
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Copyright ©, Yann Esposito</a>
|
||||
</div>
|
||||
<div id="lastmod">
|
||||
Created: 07/10/2011
|
||||
Modified: 07/10/2011
|
||||
</div>
|
||||
<div>
|
||||
Entirely done with
|
||||
<a href="http://www.vim.org">Vim</a>
|
||||
and
|
||||
<a href="http://nanoc.stoneship.org">nanoc</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="/Scratch/en/validation/">Validation</a>
|
||||
<a href="http://validator.w3.org/check?uri=referer"> [xhtml] </a>
|
||||
.
|
||||
<a href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3"> [css] </a>
|
||||
.
|
||||
<a href="http://validator.w3.org/feed/check.cgi?url=http%3A//yannesposito.com/Scratch/en/blog/feed/feed.xml">[rss]</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var clicky = { log: function(){ return; }, goal: function(){ return; }};
|
||||
var clicky_site_id = 66374971;
|
||||
(function() {
|
||||
var s = document.createElement('script');
|
||||
s.type = 'text/javascript';
|
||||
s.async = true;
|
||||
s.src = ( document.location.protocol == 'https:' ? 'https://static.getclicky.com/js' : 'http://static.getclicky.com/js' );
|
||||
( document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0] ).appendChild( s );
|
||||
})();
|
||||
</script>
|
||||
<noscript><p><img alt="Clicky" width="1" height="1" src="http://in.getclicky.com/66374971ns.gif" /></p></noscript>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -259,6 +259,10 @@ Further more using shorter password make it even harder for an attaquer to retri
|
|||
<div id="next_articles">
|
||||
next entries
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/en/blog/Haskell-Mandelbrot/">ASCII Haskell Mandelbrot <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -2,13 +2,34 @@
|
|||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<id>http://yannesposito.com/</id>
|
||||
<title>Yogsototh's last blogs entries</title>
|
||||
<updated>2011-05-18T11:14:28Z</updated>
|
||||
<updated>2011-07-10T10:41:26Z</updated>
|
||||
<link rel="alternate" href="http://yannesposito.com/"/>
|
||||
<link rel="self" href="http://feeds.feedburner.com/yannespositocomen"/>
|
||||
<author>
|
||||
<name>Yann Esposito</name>
|
||||
<uri>http://yannesposito.com</uri>
|
||||
</author>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2011-07-10:/Scratch/en/blog/Haskell-Mandelbrot/</id>
|
||||
<title type="html">ASCII Haskell Mandelbrot</title>
|
||||
<published>2011-07-10T10:41:26Z</published>
|
||||
<updated>2011-07-10T10:41:26Z</updated>
|
||||
<author>
|
||||
<name>Yann Esposito</name>
|
||||
<uri>yannesposito.com</uri>
|
||||
</author>
|
||||
<link rel="alternate" href="http://yannesposito.com/Scratch/en/blog/Haskell-Mandelbrot/"/>
|
||||
<content type="html"><p>Here is the obfuscated code:</p>
|
||||
|
||||
<div class="code"><div class="file"><a href="/Scratch/en/blog/Haskell-Mandelbrot/code/animandel.hs"> &#x27A5; animandel.hs </a></div><div class="withfile">
|
||||
<pre class="twilight">
|
||||
a=27<span class="Keyword">;</span>b=79<span class="Keyword">;</span>c=C(-2.0,-1.0)<span class="Keyword">;</span>d=C(1.0,1.0)<span class="Keyword">;</span>e=C(-2.501,-1.003)
|
||||
newtype C = C (Double,Double) deriving (Show,Eq)
|
||||
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t)<span class="Keyword">;</span>C(x,y)+C(z,t)=C(x+z,y+t)<span class="Keyword">;</span>abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
|
||||
r(C(x,y))=x<span class="Keyword">;</span>i(C(x,y))=y
|
||||
f&nbsp;:: C -<span class="Keyword">&gt;</span> C -<span class="Keyword">&gt;</span> Int -<span class="Keyword">&gt;</span> Int
|
||||
f c z 0=0...</pre></div></div></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2011-05-18:/Scratch/en/blog/Password-Management/</id>
|
||||
<title type="html">40 character's passwords</title>
|
||||
|
@ -938,6 +959,63 @@ a.....<span class="Constant"><strong>a......b</strong></spa
|
|||
<div><pre class="twilight">
|
||||
git clone ssh...</pre></div></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2009-11-12:/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/</id>
|
||||
<title type="html">Git for n00b</title>
|
||||
<published>2009-11-12T09:39:54Z</published>
|
||||
<updated>2009-11-12T09:39:54Z</updated>
|
||||
<author>
|
||||
<name>Yann Esposito</name>
|
||||
<uri>yannesposito.com</uri>
|
||||
</author>
|
||||
<link rel="alternate" href="http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/"/>
|
||||
<content type="html"><h1 class="first" id="gitgit-for-what"><a href="http://git-scm.org" title="Git">Git</a> for what?</h1>
|
||||
|
||||
|
||||
<div class="intro">
|
||||
|
||||
|
||||
<p>If you just want to use <a href="http://git-scm.org" title="Git">Git</a> <strong>immediately</strong>, just read dark part. You read this part later to understand correctly foundations of version systems and not doing strange things.</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<p><a href="http://git-scm.org" title="Git">Git</a> is a <abbr title="Decentralized Concurent Versions System">DCVS</abbr>, which means a Decentralized Concurrent Versions System. Let&rsquo;s analyze each part of this long term:</p>
|
||||
|
||||
<h3 id="versions-system">Versions System</h3>
|
||||
|
||||
<p>Firstly, versions system manage files.
|
||||
When somebody work with files without a versions system, the following happens frequently:</p>
|
||||
...</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2009-11-12:/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/</id>
|
||||
<title type="html">Git for n00b</title>
|
||||
<published>2009-11-12T09:39:54Z</published>
|
||||
<updated>2009-11-12T09:39:54Z</updated>
|
||||
<author>
|
||||
<name>Yann Esposito</name>
|
||||
<uri>yannesposito.com</uri>
|
||||
</author>
|
||||
<link rel="alternate" href="http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/"/>
|
||||
<content type="html"><h1 class="first" id="here-we-go">Here we go!</h1>
|
||||
|
||||
<p>Here is one from many way to use <a href="http://git-scm.org" title="Git">Git</a>. This method is sufficient to work on a project. Not there is many other <em>workflows</em>.</p>
|
||||
|
||||
<h2 id="basic-usage">Basic usage</h2>
|
||||
|
||||
<p>Work with <a href="http://git-scm.org" title="Git">Git</a> immediately:</p>
|
||||
|
||||
<ul>
|
||||
<li>Get modification done by others <span class="black"><code>git pull</code></span>,</li>
|
||||
<li>See details of these modifications <span class="black"><code>git log</code></span>,</li>
|
||||
<li>Many times:
|
||||
<ul>
|
||||
<li><em>Make an atomic modification</em></li>
|
||||
<li>Verify details of this modification: <span class="black"><code>git status</code></span> and <span class="black"><code>git diff</code></span>,</li>
|
||||
<li>Add ...</li></ul></li></ul></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2009-11-12:/Scratch/en/blog/2009-11-12-Git-for-n00b/commandes-avancees/</id>
|
||||
<title type="html">Git for n00b</title>
|
||||
|
@ -970,63 +1048,6 @@ git clone ssh...</pre></div></content>
|
|||
|
||||
<div><pre class="twilight">
|
||||
$ g...</pre></div></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2009-11-12:/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/</id>
|
||||
<title type="html">Git for n00b</title>
|
||||
<published>2009-11-12T09:39:54Z</published>
|
||||
<updated>2009-11-12T09:39:54Z</updated>
|
||||
<author>
|
||||
<name>Yann Esposito</name>
|
||||
<uri>yannesposito.com</uri>
|
||||
</author>
|
||||
<link rel="alternate" href="http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/"/>
|
||||
<content type="html"><h1 class="first" id="here-we-go">Here we go!</h1>
|
||||
|
||||
<p>Here is one from many way to use <a href="http://git-scm.org" title="Git">Git</a>. This method is sufficient to work on a project. Not there is many other <em>workflows</em>.</p>
|
||||
|
||||
<h2 id="basic-usage">Basic usage</h2>
|
||||
|
||||
<p>Work with <a href="http://git-scm.org" title="Git">Git</a> immediately:</p>
|
||||
|
||||
<ul>
|
||||
<li>Get modification done by others <span class="black"><code>git pull</code></span>,</li>
|
||||
<li>See details of these modifications <span class="black"><code>git log</code></span>,</li>
|
||||
<li>Many times:
|
||||
<ul>
|
||||
<li><em>Make an atomic modification</em></li>
|
||||
<li>Verify details of this modification: <span class="black"><code>git status</code></span> and <span class="black"><code>git diff</code></span>,</li>
|
||||
<li>Add ...</li></ul></li></ul></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2009-11-12:/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/</id>
|
||||
<title type="html">Git for n00b</title>
|
||||
<published>2009-11-12T09:39:54Z</published>
|
||||
<updated>2009-11-12T09:39:54Z</updated>
|
||||
<author>
|
||||
<name>Yann Esposito</name>
|
||||
<uri>yannesposito.com</uri>
|
||||
</author>
|
||||
<link rel="alternate" href="http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/"/>
|
||||
<content type="html"><h1 class="first" id="gitgit-for-what"><a href="http://git-scm.org" title="Git">Git</a> for what?</h1>
|
||||
|
||||
|
||||
<div class="intro">
|
||||
|
||||
|
||||
<p>If you just want to use <a href="http://git-scm.org" title="Git">Git</a> <strong>immediately</strong>, just read dark part. You read this part later to understand correctly foundations of version systems and not doing strange things.</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<p><a href="http://git-scm.org" title="Git">Git</a> is a <abbr title="Decentralized Concurent Versions System">DCVS</abbr>, which means a Decentralized Concurrent Versions System. Let&rsquo;s analyze each part of this long term:</p>
|
||||
|
||||
<h3 id="versions-system">Versions System</h3>
|
||||
|
||||
<p>Firstly, versions system manage files.
|
||||
When somebody work with files without a versions system, the following happens frequently:</p>
|
||||
...</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2009-11-12:/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/</id>
|
||||
|
@ -1067,24 +1088,4 @@ $ sudo port install git-core
|
|||
<div><div class="code"><div class="file"><a href="/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/code/gitconfig"> &#x27A5; gitconfig </a></div><div class="withfile">
|
||||
</div></div></div></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2009-11-12:/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/</id>
|
||||
<title type="html">Git for n00b</title>
|
||||
<published>2009-11-12T09:39:54Z</published>
|
||||
<updated>2009-11-12T09:39:54Z</updated>
|
||||
<author>
|
||||
<name>Yann Esposito</name>
|
||||
<uri>yannesposito.com</uri>
|
||||
</author>
|
||||
<link rel="alternate" href="http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/"/>
|
||||
<content type="html"><h1 class="first" id="why-git-is-cool">Why Git is cool?</h1>
|
||||
|
||||
<p>Because with <a href="http://git-scm.org" title="Git">Git</a> you can work on many part of some project totally independently. This is the true efficiency of decentralisation.</p>
|
||||
|
||||
<p>Each branch use the same directory. Then you can easily change your branch. You can also change branch when some files are modified. You can then dispatch your work on many different branches and merge them on one master branch at will.</p>
|
||||
|
||||
<p>Using the <code>git rebase</code> you can decide which modifications should be forget or merged into only one modification.</p>
|
||||
|
||||
<p>What does it mean for real usage? You can focus on coding. For example, you can code, a fix for bug b01 and for bug b02 and code a feature f03. Once finished you can creat...</p></content>
|
||||
</entry>
|
||||
</feed>
|
||||
|
|
|
@ -73,6 +73,37 @@ Last 5 Articles
|
|||
</div>
|
||||
|
||||
|
||||
<h1>
|
||||
<span class="date">
|
||||
<span class="day">10</span>
|
||||
<span class="month">Jul</span>
|
||||
<span class="year">2011</span>
|
||||
</span>
|
||||
<a href="/Scratch/en/blog/Haskell-Mandelbrot/">ASCII Haskell Mandelbrot <span class="nicer">»</span></a>
|
||||
</h1>
|
||||
|
||||
<div class="corps">
|
||||
|
||||
<p>Here is the obfuscated code:</p>
|
||||
|
||||
<div class="code"><div class="file"><a href="/Scratch/en/blog/Haskell-Mandelbrot/code/animandel.hs"> ➥ animandel.hs </a></div><div class="withfile">
|
||||
<pre class="twilight">
|
||||
a=27<span class="Keyword">;</span>b=79<span class="Keyword">;</span>c=C(-2.0,-1.0)<span class="Keyword">;</span>d=C(1.0,1.0)<span class="Keyword">;</span>e=C(-2.501,-1.003)
|
||||
newtype C = C (Double,Double) deriving (Show,Eq)
|
||||
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t)<span class="Keyword">;</span>C(x,y)+C(z,t)=C(x+z,y+t)<span class="Keyword">;</span>abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
|
||||
r(C(x,y))=x<span class="Keyword">;</span>i(C(x,y))=y
|
||||
f :: C -<span class="Keyword">></span> C -<span class="Keyword">></span> Int -<span class="Keyword">></span> Int
|
||||
f c z 0=0...</pre></div></div>
|
||||
|
||||
<div class="flush"></div>
|
||||
<div>
|
||||
<p>
|
||||
<a href="/Scratch/en/blog/Haskell-Mandelbrot/">Read more <span class="nicer">»</span></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<h1>
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
|
@ -219,39 +250,6 @@ But I will revive a bit this blog.</p>
|
|||
|
||||
</div>
|
||||
|
||||
<h1>
|
||||
<span class="date">
|
||||
<span class="day">26</span>
|
||||
<span class="month">Oct</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
<a href="/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/">LaTeX like macro for markdown <span class="nicer">»</span></a>
|
||||
</h1>
|
||||
|
||||
<div class="corps">
|
||||
|
||||
|
||||
<div class="intro">
|
||||
|
||||
|
||||
<p><span class="sc"><abbr title="Too long; don't read">tl;dr</abbr>: </span> I made a simple macro system for my blog. Now I juste have to write %<span />latex and it show as <span style="text-transform: uppercase">L<sup style="vertical-align: 0.15em; margin-left: -0.36em; margin-right: -0.15em; font-size: .85em">a</sup>T<sub style="vertical-align: -0.5ex; margin-left: -0.1667em; margin-right: -0.125em; font-size: 1em">e</sub>X</span>.</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<p>I added a macro system for my blog system.
|
||||
When we are used to <span style="text-transform: uppercase">L<sup style="vertical-align: 0.15em; margin-left: -0.36em; margin-right: -0.15em; font-size: .85em">a</sup>T<sub style="vertical-align: -0.5ex; margin-left: -0.1667em; margin-right: -0.125em; font-size: 1em">e</sub></span></p></div>
|
||||
|
||||
<div class="flush"></div>
|
||||
<div>
|
||||
<p>
|
||||
<a href="/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/">Read more <span class="nicer">»</span></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="corps">
|
||||
<div>
|
||||
|
@ -428,7 +426,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style="vertica
|
|||
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="day">19</span>
|
||||
<span class="month">Jun</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -851,7 +849,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style="vertica
|
|||
</ul><a class="return" href="#tagcloud">↑</a></div><div id="iPhone" class="list"><h4>iPhone</h4><ul style="list-style-type: none; margin: 0;">
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">1</span>
|
||||
<span class="day">2</span>
|
||||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -896,7 +894,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style="vertica
|
|||
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="day">19</span>
|
||||
<span class="month">Jun</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -959,7 +957,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style="vertica
|
|||
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="day">19</span>
|
||||
<span class="month">Jun</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -1166,7 +1164,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style="vertica
|
|||
</ul><a class="return" href="#tagcloud">↑</a></div><div id="Objective_C" class="list"><h4>Objective-C</h4><ul style="list-style-type: none; margin: 0;">
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">1</span>
|
||||
<span class="day">2</span>
|
||||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -1193,7 +1191,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style="vertica
|
|||
</ul><a class="return" href="#tagcloud">↑</a></div><div id="popup" class="list"><h4>popup</h4><ul style="list-style-type: none; margin: 0;">
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="day">19</span>
|
||||
<span class="month">Jun</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -1247,7 +1245,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style="vertica
|
|||
</ul><a class="return" href="#tagcloud">↑</a></div><div id="Programming" class="list"><h4>Programming</h4><ul style="list-style-type: none; margin: 0;">
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">1</span>
|
||||
<span class="day">2</span>
|
||||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -1679,7 +1677,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style="vertica
|
|||
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="day">19</span>
|
||||
<span class="month">Jun</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -1845,6 +1843,10 @@ When we are used to <span style="text-transform: uppercase">L<sup style="vertica
|
|||
<h2 id="archives">Archives</h2>
|
||||
|
||||
<div id="sousliens" class="archive"><h4 class="button" onclick="$('#archives_2011').slideToggle()">[2011]</h4><ul id="archives_2011"><li><span class="date">
|
||||
<span class="day">10</span>
|
||||
<span class="month">Jul</span>
|
||||
<span class="year">2011</span>
|
||||
</span> <a href="/Scratch/en/blog/Haskell-Mandelbrot/">ASCII Haskell Mandelbrot<span class="nicer">»</span></a></li><li><span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="month">May</span>
|
||||
<span class="year">2011</span>
|
||||
|
@ -1881,7 +1883,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style="vertica
|
|||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span> <a href="/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/">Use git to calculate trusted mtimes<span class="nicer">»</span></a></li><li><span class="date">
|
||||
<span class="day">1</span>
|
||||
<span class="day">2</span>
|
||||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span> <a href="/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/">base64 and sha1 on iPhone<span class="nicer">»</span></a></li><li><span class="date">
|
||||
|
@ -1909,7 +1911,7 @@ When we are used to <span style="text-transform: uppercase">L<sup style="vertica
|
|||
<span class="month">Jul</span>
|
||||
<span class="year">2010</span>
|
||||
</span> <a href="/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/">Cappuccino vs jQuery<span class="nicer">»</span></a></li><li><span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="day">19</span>
|
||||
<span class="month">Jun</span>
|
||||
<span class="year">2010</span>
|
||||
</span> <a href="/Scratch/en/blog/2010-06-19-jQuery-popup-the-easy-way/">jQuery popup the easy way<span class="nicer">»</span></a></li><li><span class="date">
|
||||
|
|
|
@ -272,6 +272,10 @@ Mais il me semble que ça serait un travail très difficile rien que pour simule
|
|||
</div>
|
||||
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/fr/blog/Haskell-Mandelbrot/">Mandelbrot avec haskell <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="flush"></div>
|
||||
|
|
|
@ -134,6 +134,10 @@
|
|||
</div>
|
||||
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/fr/blog/Haskell-Mandelbrot/">Mandelbrot avec haskell <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
|
10
output/Scratch/fr/blog/Haskell-Mandelbrot/code/animandel.hs
Normal file
10
output/Scratch/fr/blog/Haskell-Mandelbrot/code/animandel.hs
Normal file
|
@ -0,0 +1,10 @@
|
|||
|
||||
a=27;b=79;c=C(-2.0,-1.0);d=C(1.0,1.0);e=C(-2.501,-1.003)
|
||||
newtype C = C (Double,Double) deriving (Show,Eq)
|
||||
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t);C(x,y)+C(z,t)=C(x+z,y+t);abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
|
||||
r(C(x,y))=x;i(C(x,y))=y
|
||||
f :: C -> C -> Int -> Int
|
||||
f c z 0=0;f c z n=if(r(abs(z))>2)then n else f c ((z*z)+c) (n-1)
|
||||
h j k = map (\z->(f (C z) (C(0,0)) 32,(fst z>l - q/2))) [(x,y)|y<-[p,(p+((o-p)/a))..o],x<-[m,(m + q)..l]] where o=i k;p=i j;m=r j;l=r k;q=(l-m)/b
|
||||
u j k = concat $ map v $ h j k where v (i,p)=(" .,`'°\":;-+oO0123456789=!%*§&$@#"!!i):rst p;rst True="\n";rst False=""
|
||||
main = putStrLn $ im 0 where cl n (C (x,y))=let cs=(1.1**n-1) in C ((x+cs*(r e))/cs+1,(y+cs*(i e))/cs+1);bl n=cl n c;tr n=cl n d;im n=u (bl n) (tr n)++"\x1b[H\x1b[25A"++im (n+1)
|
287
output/Scratch/fr/blog/Haskell-Mandelbrot/index.html
Normal file
287
output/Scratch/fr/blog/Haskell-Mandelbrot/index.html
Normal file
|
@ -0,0 +1,287 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
|
||||
|
||||
<link rel="shortcut icon" type="image/x-icon" href="/Scratch/img/favicon.ico" />
|
||||
<link rel="stylesheet" type="text/css" href="/Scratch/assets/css/main.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/Scratch/css/twilight.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/Scratch/css/idc.css" />
|
||||
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://feeds.feedburner.com/yannespositocomfr"/>
|
||||
|
||||
<link rel="alternate" lang="fr" xml:lang="fr" title="Mandelbrot avec haskell" type="text/html" hreflang="fr" href="/Scratch/fr/blog/Haskell-Mandelbrot/" />
|
||||
<link rel="alternate" lang="en" xml:lang="en" title="ASCII Haskell Mandelbrot" type="text/html" hreflang="en" href="/Scratch/en/blog/Haskell-Mandelbrot/" />
|
||||
<script type="text/javascript" src="/Scratch/js/jquery-1.3.1.min.js"></script>
|
||||
<script type="text/javascript" src="/Scratch/js/jquery.cookie.js"></script>
|
||||
<script type="text/javascript" src="/Scratch/js/index.js"></script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js"></script>
|
||||
<![endif]-->
|
||||
<!-- < % if containMaths %>
|
||||
<script type="text/javascript" src="/Scratch/js/MathJax/MathJax.js"></script>
|
||||
< % end %>
|
||||
-->
|
||||
<title>Mandelbrot avec haskell</title>
|
||||
</head>
|
||||
<body lang="fr">
|
||||
<script type="text/javascript">// <![CDATA[
|
||||
document.write('<div id="blackpage"><img src="/Scratch/img/loading.gif" alt="Chargement en cours..."/></div>');
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
<div id="content">
|
||||
|
||||
<div id="choix">
|
||||
<div class="return"><a href="#entete">↓ Menu ↓</a></div>
|
||||
<div id="choixlang">
|
||||
<a href="/Scratch/en/blog/Haskell-Mandelbrot/" onclick="setLanguage('en')">in English</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="titre">
|
||||
<h1>
|
||||
Mandelbrot avec haskell
|
||||
</h1>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="flush"></div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="flush"></div>
|
||||
<div id="afterheader">
|
||||
<div class="corps">
|
||||
<p>Voici le code “obfusqué” :</p>
|
||||
|
||||
<div class="code"><div class="file"><a href="/Scratch/fr/blog/Haskell-Mandelbrot/code/animandel.hs"> ➥ animandel.hs </a></div><div class="withfile">
|
||||
<pre class="twilight">
|
||||
a=27<span class="Keyword">;</span>b=79<span class="Keyword">;</span>c=C(-2.0,-1.0)<span class="Keyword">;</span>d=C(1.0,1.0)<span class="Keyword">;</span>e=C(-2.501,-1.003)
|
||||
newtype C = C (Double,Double) deriving (Show,Eq)
|
||||
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t)<span class="Keyword">;</span>C(x,y)+C(z,t)=C(x+z,y+t)<span class="Keyword">;</span>abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
|
||||
r(C(x,y))=x<span class="Keyword">;</span>i(C(x,y))=y
|
||||
f :: C -<span class="Keyword">></span> C -<span class="Keyword">></span> Int -<span class="Keyword">></span> Int
|
||||
f c z 0=0<span class="Keyword">;</span>f c z n=<span class="Keyword">if</span>(r(abs(z))<span class="Keyword">></span>2)<span class="Keyword">then</span> n <span class="Keyword">else</span> f c ((z*z)+c) (n-1)
|
||||
h j k = map (<span class="Constant">\z</span>-<span class="String"><span class="String">>(</span>f (C z<span class="String">)</span></span> (C(0,0)) 32,(fst z<span class="Keyword">></span>l - q/2))) [(x,y)<span class="Keyword">|</span>y<span class="Keyword"><</span>-[p,(p+((o-p)/a))..o],x<span class="Keyword"><</span>-[m,(m + q)..l]] where o=i k<span class="Keyword">;</span>p=i j<span class="Keyword">;</span>m=r j<span class="Keyword">;</span>l=r k<span class="Keyword">;</span>q=(l-m)/b
|
||||
u j k = concat $ map v $ h j k where v (i,p)=(<span class="String"><span class="String">"</span> .,<span class="String"><span class="String">`</span>'°\":;-+oO0123456789=!%*§&$@#"!!i):rst p;rst True="\n";rst False=""</span></span>
|
||||
<span class="String"><span class="String">main = putStrLn $ im 0 where cl n (C (x,y))=let cs=(1.1**n-1) in C ((x+cs*(r e))/cs+1,(y+cs*(i e))/cs+1);bl n=cl n c;tr n=cl n d;im n=u (bl n) (tr n)++"\x1b[H\x1b[25A"++im (n+1)</span></span>
|
||||
</pre>
|
||||
</div></div>
|
||||
|
||||
<p>Pour le lancer, <a href="http://haskell.org">haskell</a> doit être installé. Puis vous devez écrire dans un terminal :</p>
|
||||
|
||||
<pre class="twilight">ghc --make animandel.hs <span class="Keyword">&&</span> animandel
|
||||
</pre>
|
||||
|
||||
<p>Voici le résultat après 50 itérations.</p>
|
||||
|
||||
<pre class="twilight">
|
||||
5555666666666666666666666666666655555555554O+++ :o022334444444444444444444444444
|
||||
5555556666666666666666666666665555555555543210O-+O112333344444444444444444444444
|
||||
55555555666666666666666666665555555555444333210o<span class="String"><span class="String">`</span>O012333333444444444444444444444</span>
|
||||
<span class="String">4555555555566666666666666555555555544444333331O+°°,'0233333334444444444444444433</span>
|
||||
<span class="String">44444445555555556666555555555444444444433333210o-:O01122333333334444444444443333</span>
|
||||
<span class="String">44444444444444445555444444444444444444333332211O+ -o1112222223333333344433333222</span>
|
||||
<span class="String">444444444444433331133334444444444444433332221110o"+O0111222222222222222222222222</span>
|
||||
<span class="String">34444444443333330OO03333334444444443332222221100O+-oO001122222222221110-O1111122</span>
|
||||
<span class="String">22333333333332210--01223333333333322222222211000o-°+o00000122222111110o°;o001111</span>
|
||||
<span class="String">11OO112222222111O;;O111222222211OO111122211000Oo-" :+ooOOOO.O0000000OOo'°oOO0000</span>
|
||||
<span class="String">0O;+O01122211000O--O00011221110O+;O00000OO +oooo-: :-+oo++";oOO0000Ooo+;;+oooO00</span>
|
||||
<span class="String">o+"+oO00OO OOOOoo::ooOOOO°OO00Oo+"+ooOooo+;°---",' ,,";--: ;-+oo+ +++;;°°;;-++:;</span>
|
||||
<span class="String">,° °':°: <span class="String">`</span></span> <span class="String"><span class="String">"</span><span class="String"><span class="String">`</span>".°° °° "°". :'", '°<span class="String">`</span></span>°<span class="String">"</span></span>:<span class="String"><span class="String">`</span>°<span class="String">`</span></span> ,,<span class="String"><span class="String">`</span><span class="String">`</span></span> . . .°°<span class="String"><span class="String">'</span>°° ` .. `<span class="String">'</span></span>°.
|
||||
+-<span class="String"><span class="String">`</span>-oo+oo+'+o+<span class="String">`</span></span>--°°<span class="Keyword">;</span>-<span class="String"><span class="String">`</span>+o+"+oo+oo-'-++;+++-:,:::"<span class="String">`</span></span> °::°° :-<span class="Keyword">;</span><span class="Keyword">;</span>--,<span class="Keyword">;</span>-<span class="Keyword">;</span> <span class="String"><span class="String">"</span> <span class="String">"</span></span> <span class="Keyword">;</span>-<span class="Keyword">;</span><span class="String"><span class="String">"</span>:</span>
|
||||
<span class="String">OO<span class="String">"</span></span>-O0000000000Oo--oO0000000000O-:oO0000Oo::+++<span class="Keyword">;</span><span class="Keyword">;</span>: <span class="String"><span class="String">"</span>:<span class="String">"</span></span>-++-<span class="String"><span class="String">'</span>;+oooOOoooo-::-oooo++</span>
|
||||
<span class="String">10;-111222222110O--O011222222111- 01111110oOOOoo-: :-ooooo`:OO000000OO+;;+OOO000</span>
|
||||
<span class="String">22122222222222110++0112222222222111222222221000O+:,;.O000001111111100Oo:-OO00000</span>
|
||||
<span class="String">3344444433333332-,°-2333333344444433322222221100o-;oO00011222222221111O<span class="String">'</span></span>+0111111
|
||||
444444444444333320023333444444444444433322221110O.:O0011222222222222211-01112222
|
||||
44444444444444443333444444444444444444333332211O. -o1112222222223333333333322222
|
||||
44444444445555555555555555444444444444433333210O-<span class="String"><span class="String">"</span>oO1122223333333444444444433333</span>
|
||||
<span class="String">444555555555666666666666555555555444444433333' '<span class="String"><span class="String">`</span>:+O0233333333444444444444444433</span></span>
|
||||
</pre>
|
||||
|
||||
<p>Here is the more readable version. I believe with this far more readable version, no more explanation is needed.</p>
|
||||
|
||||
<pre class="twilight">
|
||||
-- Screen size
|
||||
nbvert = 27
|
||||
nbhor = 79
|
||||
init_bottom_left = C (-2.0,-1.0)
|
||||
init_top_right = C (1.0,1.0)
|
||||
interrest = C (-2.5,-1.0)
|
||||
|
||||
newtype Complex = C (Float,Float) deriving (Show,Eq)
|
||||
instance Num Complex where
|
||||
fromInteger n = C (fromIntegral n,0.0)
|
||||
C (x,y) * C (z,t) = C (z*x - y*t, y*z + x*t)
|
||||
C (x,y) + C (z,t) = C (x+z, y+t)
|
||||
abs (C (x,y)) = C (sqrt (x*x + y*y),0.0)
|
||||
signum (C (x,y)) = C (signum x , 0.0)
|
||||
|
||||
real :: Complex -<span class="Keyword">></span> Float
|
||||
real (C (x,y)) = x
|
||||
im :: Complex -<span class="Keyword">></span> Float
|
||||
im (C (x,y)) = y
|
||||
|
||||
f :: Complex -<span class="Keyword">></span> Complex -<span class="Keyword">></span> Int -<span class="Keyword">></span> Complex
|
||||
f c z 0 = z
|
||||
f c z n = f c ((z*z)+c) (n-1)
|
||||
|
||||
cabs :: Complex -<span class="Keyword">></span> Float
|
||||
cabs = real.abs
|
||||
|
||||
tst :: Complex -<span class="Keyword">></span> Bool
|
||||
tst c = (cabs (f c (C(0.0,0.0)) 32)) <span class="Keyword"><</span> 2
|
||||
|
||||
bmandel bottomleft topright = map (<span class="Constant">\z</span> -<span class="Keyword">></span> (tst (C z), (fst z <span class="Keyword">></span> right - hstep/2 ))) [(x,y) <span class="Keyword">|</span> y <span class="Keyword"><</span>- [bottom,(bottom + vstep)..top], x<span class="Keyword"><</span>-[left,(left + hstep)..right]]
|
||||
where
|
||||
top = im topright
|
||||
bottom = im bottomleft
|
||||
left = real bottomleft
|
||||
right = real topright
|
||||
vstep=(top-bottom)/nbvert
|
||||
hstep=(right-left)/nbhor
|
||||
|
||||
mandel :: Complex -<span class="Keyword">></span> Complex -<span class="Keyword">></span> String
|
||||
mandel bottomleft topright = concat $ map treat $ bmandel bottomleft topright
|
||||
where
|
||||
treat (True,jump) = <span class="String"><span class="String">"</span> <span class="String">"</span></span> ++ rst jump
|
||||
treat (False,jump) = <span class="String"><span class="String">"</span>@<span class="String">"</span></span> ++ rst jump
|
||||
rst True = <span class="String"><span class="String">"</span>\n<span class="String">"</span></span>
|
||||
rst False = <span class="String"><span class="String">"</span><span class="String">"</span></span>
|
||||
|
||||
main = <span class="Keyword">do</span>
|
||||
x <span class="Keyword"><</span>- getContents
|
||||
putStrLn $ infinitemandel 0
|
||||
where
|
||||
closer n (C (x,y)) =
|
||||
let cst = (1.1**n - 1) <span class="Keyword">in</span>
|
||||
C ( (x + cst*(real interrest))/cst+1,
|
||||
(y + cst*(im interrest))/cst+1 )
|
||||
bottomleftn n = closer n init_bottom_left
|
||||
toprightn n = closer n init_top_right
|
||||
infinitemandel n = mandel (bottomleftn n) (toprightn n) ++ <span class="String"><span class="String">"</span>\x1b[H\x1b[25A<span class="String">"</span></span> ++ infinitemandel (n+1)
|
||||
</pre>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div id="choixrss">
|
||||
<a id="rss" href="http://feeds.feedburner.com/yannespositocomfr">
|
||||
s'abonner
|
||||
</a>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function(){
|
||||
$('#comment').hide();
|
||||
$('#clickcomment').click(showComments);
|
||||
});
|
||||
function showComments() {
|
||||
$('#comment').show();
|
||||
$('#clickcomment').fadeOut();
|
||||
}
|
||||
document.write('<div id="clickcomment">Commentaires</div>');
|
||||
</script>
|
||||
<div class="flush"></div>
|
||||
<div class="corps" id="comment">
|
||||
<h2 class="first">commentaires</h2>
|
||||
<noscript>
|
||||
Vous devez activer javascript pour commenter.
|
||||
</noscript>
|
||||
|
||||
<script type="text/javascript">
|
||||
var idcomments_acct = 'a307f0044511ff1b5cfca573fc0a52e7';
|
||||
var idcomments_post_id = '/Scratch/fr/blog/Haskell-Mandelbrot/';
|
||||
var idcomments_post_url = 'http://yannesposito.com/Scratch/fr/blog/Haskell-Mandelbrot/';
|
||||
</script>
|
||||
<span id="IDCommentsPostTitle" style="display:none"></span>
|
||||
<script type='text/javascript' src='/Scratch/js/genericCommentWrapperV2.js'></script>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="entete" class="corps_spaced">
|
||||
<div id="liens">
|
||||
<ul><li><a href="/Scratch/fr/">Bienvenue</a></li>
|
||||
<li><a href="/Scratch/fr/blog/">Blog</a></li>
|
||||
<li><a href="/Scratch/fr/softwares/">Softwares</a></li>
|
||||
<li><a href="/Scratch/fr/about/">À propos</a></li></ul>
|
||||
</div>
|
||||
<div class="flush"></div>
|
||||
<hr/>
|
||||
<div id="next_before_articles">
|
||||
<div id="previous_articles">
|
||||
articles précédents
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/fr/blog/Password-Management/"><span class="nicer">«</span> Password Management</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/"><span class="nicer">«</span> Hébergement github</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="previous_article">
|
||||
<a href="/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/"><span class="nicer">«</span> Pourquoi je n'utiliserai pas CoffeeScript (malheureusement)</a>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div id="next_articles">
|
||||
articles suivants
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="flush"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="bottom">
|
||||
<div>
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/deed.fr">Droits de reproduction ©, Yann Esposito</a>
|
||||
</div>
|
||||
<div id="lastmod">
|
||||
Écrit le : 10/07/2011
|
||||
modifié le : 10/07/2011
|
||||
</div>
|
||||
<div>
|
||||
Site entièrement réalisé avec
|
||||
<a href="http://www.vim.org">Vim</a>
|
||||
et
|
||||
<a href="http://nanoc.stoneship.org">nanoc</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="/Scratch/fr/validation/">Validation</a>
|
||||
<a href="http://validator.w3.org/check?uri=referer"> [xhtml] </a>
|
||||
.
|
||||
<a href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3"> [css] </a>
|
||||
.
|
||||
<a href="http://validator.w3.org/feed/check.cgi?url=http%3A//yannesposito.com/Scratch/fr/blog/feed/feed.xml">[rss]</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var clicky = { log: function(){ return; }, goal: function(){ return; }};
|
||||
var clicky_site_id = 66374971;
|
||||
(function() {
|
||||
var s = document.createElement('script');
|
||||
s.type = 'text/javascript';
|
||||
s.async = true;
|
||||
s.src = ( document.location.protocol == 'https:' ? 'https://static.getclicky.com/js' : 'http://static.getclicky.com/js' );
|
||||
( document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0] ).appendChild( s );
|
||||
})();
|
||||
</script>
|
||||
<noscript><p><img alt="Clicky" width="1" height="1" src="http://in.getclicky.com/66374971ns.gif" /></p></noscript>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -250,6 +250,10 @@ Avec des mots de passes plus petit, il est encore plus difficile pour un attaqua
|
|||
<div id="next_articles">
|
||||
articles suivants
|
||||
|
||||
<div class="next_article">
|
||||
<a href="/Scratch/fr/blog/Haskell-Mandelbrot/">Mandelbrot avec haskell <span class="nicer">»</span></a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -265,7 +269,7 @@ Avec des mots de passes plus petit, il est encore plus difficile pour un attaqua
|
|||
</div>
|
||||
<div id="lastmod">
|
||||
Écrit le : 18/05/2011
|
||||
modifié le : 08/06/2011
|
||||
modifié le : 09/06/2011
|
||||
</div>
|
||||
<div>
|
||||
Site entièrement réalisé avec
|
||||
|
|
|
@ -2,13 +2,33 @@
|
|||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<id>http://yannesposito.com/</id>
|
||||
<title>Yogsototh's last blogs entries</title>
|
||||
<updated>2011-05-18T11:14:28Z</updated>
|
||||
<updated>2011-07-10T10:41:26Z</updated>
|
||||
<link rel="alternate" href="http://yannesposito.com/"/>
|
||||
<link rel="self" href="http://feeds.feedburner.com/yannespositocomfr"/>
|
||||
<author>
|
||||
<name>Yann Esposito</name>
|
||||
<uri>http://yannesposito.com</uri>
|
||||
</author>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2011-07-10:/Scratch/fr/blog/Haskell-Mandelbrot/</id>
|
||||
<title type="html">Mandelbrot avec haskell</title>
|
||||
<published>2011-07-10T10:41:26Z</published>
|
||||
<updated>2011-07-10T10:41:26Z</updated>
|
||||
<author>
|
||||
<name>Yann Esposito</name>
|
||||
<uri>yannesposito.com</uri>
|
||||
</author>
|
||||
<link rel="alternate" href="http://yannesposito.com/Scratch/fr/blog/Haskell-Mandelbrot/"/>
|
||||
<content type="html"><p>Voici le code &ldquo;obfusqué&rdquo;&nbsp;:</p>
|
||||
|
||||
<div class="code"><div class="file"><a href="/Scratch/fr/blog/Haskell-Mandelbrot/code/animandel.hs"> &#x27A5; animandel.hs </a></div><div class="withfile">
|
||||
<pre class="twilight">
|
||||
a=27<span class="Keyword">;</span>b=79<span class="Keyword">;</span>c=C(-2.0,-1.0)<span class="Keyword">;</span>d=C(1.0,1.0)<span class="Keyword">;</span>e=C(-2.501,-1.003)
|
||||
newtype C = C (Double,Double) deriving (Show,Eq)
|
||||
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t)<span class="Keyword">;</span>C(x,y)+C(z,t)=C(x+z,y+t)<span class="Keyword">;</span>abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
|
||||
r(C(x,y))=x<span class="Keyword">;</span>i(C(x,y))=y
|
||||
f&nbsp;:: C -<span class="Keyword">&gt;</span> C -<span class="Keyword">&gt;</span> Int -<span class="Keyword">&gt;</span></pre></div></div></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2011-05-18:/Scratch/fr/blog/Password-Management/</id>
|
||||
<title type="html">Password Management</title>
|
||||
|
@ -974,31 +994,4 @@ $ sudo port install git-core
|
|||
|
||||
<p>Toutes les branches locales utilisent le même répertoire. Ainsi on peu changer de branche très aisément et rapidement. On peut aussi changer de branche alors que certains fichier sont en cours de modifications. On peut même pousser le vice jusqu&rsquo;à modifier un fichier, changer de branche, commiter une partie seulement des modifications de ce fichier dans la branche courante. Revenir dans l&rsquo;ancienne branche et commi...</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>tag:yannesposito.com,2009-11-12:/Scratch/fr/blog/2009-11-12-Git-for-n00b/commandes-avancees/</id>
|
||||
<title type="html">Git pour les nuls</title>
|
||||
<published>2009-11-12T09:39:54Z</published>
|
||||
<updated>2009-11-12T09:39:54Z</updated>
|
||||
<author>
|
||||
<name>Yann Esposito</name>
|
||||
<uri>yannesposito.com</uri>
|
||||
</author>
|
||||
<link rel="alternate" href="http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/commandes-avancees/"/>
|
||||
<content type="html"><h1 class="first" id="liste-de-commandes">Liste de commandes</h1>
|
||||
|
||||
<h2 id="les-commandes-pour-chaque-choses">Les commandes pour chaque choses</h2>
|
||||
|
||||
<p>Dans la première partie, nous avons vu la liste des problèmes résolus par <a href="http://git-scm.org" title="Git">Git</a>. En résumé Git doit pouvoir&nbsp;:</p>
|
||||
|
||||
<ul>
|
||||
<li>récupérer les modifications des autres&nbsp;;</li>
|
||||
<li>envoyer ses modifications aux autres&nbsp;;</li>
|
||||
<li>revenir dans le temps&nbsp;;</li>
|
||||
<li>lister les différences entre chaque version&nbsp;;</li>
|
||||
<li>nommer certaines versions pour s&rsquo;y référer facilement&nbsp;;</li>
|
||||
<li>afficher l&rsquo;historique des modifications&nbsp;;</li>
|
||||
<li>savoir qui a fait quoi et quand&nbsp;;</li>
|
||||
<li>gérer des conflits&nbsp;;</li>
|
||||
<li>manipuler facileme...</li></ul></content>
|
||||
</entry>
|
||||
</feed>
|
||||
|
|
|
@ -73,6 +73,36 @@ Les 5 derniers articles
|
|||
</div>
|
||||
|
||||
|
||||
<h1>
|
||||
<span class="date">
|
||||
<span class="day">10</span>
|
||||
<span class="month">Jul</span>
|
||||
<span class="year">2011</span>
|
||||
</span>
|
||||
<a href="/Scratch/fr/blog/Haskell-Mandelbrot/">Mandelbrot avec haskell <span class="nicer">»</span></a>
|
||||
</h1>
|
||||
|
||||
<div class="corps">
|
||||
|
||||
<p>Voici le code “obfusqué” :</p>
|
||||
|
||||
<div class="code"><div class="file"><a href="/Scratch/fr/blog/Haskell-Mandelbrot/code/animandel.hs"> ➥ animandel.hs </a></div><div class="withfile">
|
||||
<pre class="twilight">
|
||||
a=27<span class="Keyword">;</span>b=79<span class="Keyword">;</span>c=C(-2.0,-1.0)<span class="Keyword">;</span>d=C(1.0,1.0)<span class="Keyword">;</span>e=C(-2.501,-1.003)
|
||||
newtype C = C (Double,Double) deriving (Show,Eq)
|
||||
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t)<span class="Keyword">;</span>C(x,y)+C(z,t)=C(x+z,y+t)<span class="Keyword">;</span>abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
|
||||
r(C(x,y))=x<span class="Keyword">;</span>i(C(x,y))=y
|
||||
f :: C -<span class="Keyword">></span> C -<span class="Keyword">></span> Int -<span class="Keyword">></span></pre></div></div>
|
||||
|
||||
<div class="flush"></div>
|
||||
<div>
|
||||
<p>
|
||||
<a href="/Scratch/fr/blog/Haskell-Mandelbrot/">en lire plus <span class="nicer">»</span></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<h1>
|
||||
<span class="date">
|
||||
<span class="day">18</span>
|
||||
|
@ -213,39 +243,6 @@ Je n’en ai pas encore terminé avec ça. Mais si je tarde trop, je communi
|
|||
|
||||
</div>
|
||||
|
||||
<h1>
|
||||
<span class="date">
|
||||
<span class="day">26</span>
|
||||
<span class="month">Oct</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
<a href="/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/">Des macros LaTeX pour markdown <span class="nicer">»</span></a>
|
||||
</h1>
|
||||
|
||||
<div class="corps">
|
||||
|
||||
|
||||
<div class="intro">
|
||||
|
||||
|
||||
<p><span class="sc"><abbr title="Trop long à lire">tlàl</abbr> : </span> J’ai fait un système simple de macros pour mon blog. Par exemple, il me suffit d’écrire %<span />latex et ça affiche <span style="text-transform: uppercase">L<sup style="vertical-align: 0.15em; margin-left: -0.36em; margin-right: -0.15em; font-size: .85em">a</sup>T<sub style="vertical-align: -0.5ex; margin-left: -0.1667em; margin-right: -0.125em; font-size: 1em">e</sub>X</span>.</p>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<p>J’ai ajouter un système de macro pour mon système de blog.
|
||||
Lorsqu’on est habitué à <span style="text-transform: uppercase">L<sup style="vertical-align: 0.15em; margin-left: -0.36em; margin-right: -0.15em; font-size: .85em">a</sup>T</span></p></div>
|
||||
|
||||
<div class="flush"></div>
|
||||
<div>
|
||||
<p>
|
||||
<a href="/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/">en lire plus <span class="nicer">»</span></a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="corps">
|
||||
<div>
|
||||
|
@ -872,7 +869,7 @@ Lorsqu’on est habitué à <span style="text-transform: uppercase">L<sup st
|
|||
</ul><a class="return" href="#tagcloud">↑</a></div><div id="iPhone" class="list"><h4>iPhone</h4><ul style="list-style-type: none; margin: 0;">
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">1</span>
|
||||
<span class="day">2</span>
|
||||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -1178,7 +1175,7 @@ Lorsqu’on est habitué à <span style="text-transform: uppercase">L<sup st
|
|||
</ul><a class="return" href="#tagcloud">↑</a></div><div id="Objective_C" class="list"><h4>Objective-C</h4><ul style="list-style-type: none; margin: 0;">
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">1</span>
|
||||
<span class="day">2</span>
|
||||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -1223,7 +1220,7 @@ Lorsqu’on est habitué à <span style="text-transform: uppercase">L<sup st
|
|||
</ul><a class="return" href="#tagcloud">↑</a></div><div id="Programmation" class="list"><h4>Programmation</h4><ul style="list-style-type: none; margin: 0;">
|
||||
<li style="line-height: 3em; margin: 0;">
|
||||
<span class="date">
|
||||
<span class="day">1</span>
|
||||
<span class="day">2</span>
|
||||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span>
|
||||
|
@ -1839,6 +1836,10 @@ Lorsqu’on est habitué à <span style="text-transform: uppercase">L<sup st
|
|||
<h2 id="archives">Archives</h2>
|
||||
|
||||
<div id="sousliens" class="archive"><h4 class="button" onclick="$('#archives_2011').slideToggle()">[2011]</h4><ul id="archives_2011"><li><span class="date">
|
||||
<span class="day">10</span>
|
||||
<span class="month">Jul</span>
|
||||
<span class="year">2011</span>
|
||||
</span> <a href="/Scratch/fr/blog/Haskell-Mandelbrot/">Mandelbrot avec haskell<span class="nicer">»</span></a></li><li><span class="date">
|
||||
<span class="day">18</span>
|
||||
<span class="month">Mai</span>
|
||||
<span class="year">2011</span>
|
||||
|
@ -1875,7 +1876,7 @@ Lorsqu’on est habitué à <span style="text-transform: uppercase">L<sup st
|
|||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span> <a href="/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/">Utilisation de git pour calculer les mtimes<span class="nicer">»</span></a></li><li><span class="date">
|
||||
<span class="day">1</span>
|
||||
<span class="day">2</span>
|
||||
<span class="month">Sep</span>
|
||||
<span class="year">2010</span>
|
||||
</span> <a href="/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/">base64 et sha1 sur iPhone<span class="nicer">»</span></a></li><li><span class="date">
|
||||
|
|
|
@ -159,6 +159,9 @@
|
|||
<url>
|
||||
<loc>http://yannesposito.com/Scratch/en/blog/2010-06-15-Get-my-blog-engine/</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://yannesposito.com/Scratch/en/blog/Haskell-Mandelbrot/</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://yannesposito.com/Scratch/fr/about/technical_details/</loc>
|
||||
</url>
|
||||
|
@ -360,6 +363,9 @@
|
|||
<url>
|
||||
<loc>http://yannesposito.com/Scratch/en/blog/2010-03-23-Encapsulate-git/</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://yannesposito.com/Scratch/fr/blog/Haskell-Mandelbrot/</loc>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://yannesposito.com/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/</loc>
|
||||
</url>
|
||||
|
|
|
@ -188,7 +188,7 @@
|
|||
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Copyright ©, Yann Esposito</a>
|
||||
</div>
|
||||
<div id="lastmod">
|
||||
Modified: 06/09/2011
|
||||
Modified: 07/10/2011
|
||||
</div>
|
||||
<div>
|
||||
Entirely done with
|
||||
|
|
Loading…
Reference in a new issue