New blog entry (mandelbrot ascii)

This commit is contained in:
Yann Esposito (Yogsototh) 2011-07-10 13:06:37 +02:00
parent 03bae1fed0
commit 05a0c14d21
23 changed files with 1175 additions and 198 deletions

View 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>

View 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
View file

@ -0,0 +1 @@
/Users/esposito/Sites/webroot/output/Scratch/img/blog/Haskell-Mandelbrot

View file

@ -1 +1 @@
./multi/blog/Password-Management.md
./multi/blog/Haskell-Mandelbrot.md

View 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

View file

@ -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">&uarr;</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">&uarr;</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">&uarr;</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">&uarr;</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>

View file

@ -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&nbsp;<span class="nicer">»</span></a>
</div>
</div>
<div class="flush"></div>

View file

@ -134,6 +134,10 @@
</div>
<div class="next_article">
<a href="/Scratch/en/blog/Haskell-Mandelbrot/">ASCII Haskell Mandelbrot&nbsp;<span class="nicer">»</span></a>
</div>
</div>

View 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)

View 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">&darr; Menu &darr;</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"> &#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<span class="Keyword">;</span>f c z n=<span class="Keyword">if</span>(r(abs(z))<span class="Keyword">&gt;</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">&gt;(</span>f (C z<span class="String">)</span></span> (C(0,0)) 32,(fst z<span class="Keyword">&gt;</span>l - q/2))) [(x,y)<span class="Keyword">|</span>y<span class="Keyword">&lt;</span>-[p,(p+((o-p)/a))..o],x<span class="Keyword">&lt;</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">&quot;</span> .,<span class="String"><span class="String">`</span>'°\&quot;:;-+oO0123456789=!%*§&amp;$@#&quot;!!i):rst p;rst True=&quot;\n&quot;;rst False=&quot;&quot;</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)++&quot;\x1b[H\x1b[25A&quot;++im (n+1)</span></span>
</pre>
</div></div>
<p>To launch it, you&rsquo;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">&amp;&amp;</span> animandel
</pre>
<p>Here is some image after 50 iterations:</p>
<pre class="twilight">
5555666666666666666666666666666655555555554O+++&nbsp;: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&quot;+O0111222222222222222222222222</span>
<span class="String">34444444443333330OO03333334444444443332222221100O+-oO001122222222221110-O1111122</span>
<span class="String">22333333333332210--01223333333333322222222211000o-°+o00000122222111110o°;o001111</span>
<span class="String">11OO112222222111O;;O111222222211OO111122211000Oo-&quot;&nbsp;:+ooOOOO.O0000000OOo'°oOO0000</span>
<span class="String">0O;+O01122211000O--O00011221110O+;O00000OO +oooo-:&nbsp;:-+oo++&quot;;oOO0000Ooo+;;+oooO00</span>
<span class="String">o+&quot;+oO00OO OOOOoo::ooOOOO°OO00Oo+&quot;+ooOooo+;°---&quot;,' ,,&quot;;--:&nbsp;;-+oo+ +++;;°°;;-++:;</span>
<span class="String">,° °':°: <span class="String">`</span></span> <span class="String"><span class="String">&quot;</span><span class="String"><span class="String">`</span>&quot;.°° °° &quot;°&quot;. &nbsp;:'&quot;, '°<span class="String">`</span></span>°<span class="String">&quot;</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+&quot;+oo+oo-'-++;+++-:,:::&quot;<span class="String">`</span></span> °::°°&nbsp;:-<span class="Keyword">;</span><span class="Keyword">;</span>--,<span class="Keyword">;</span>-<span class="Keyword">;</span> <span class="String"><span class="String">&quot;</span> <span class="String">&quot;</span></span> <span class="Keyword">;</span>-<span class="Keyword">;</span><span class="String"><span class="String">&quot;</span>:</span>
<span class="String">OO<span class="String">&quot;</span></span>-O0000000000Oo--oO0000000000O-:oO0000Oo::+++<span class="Keyword">;</span><span class="Keyword">;</span>: <span class="String"><span class="String">&quot;</span>:<span class="String">&quot;</span></span>-++-<span class="String"><span class="String">'</span>;+oooOOoooo-::-oooo++</span>
<span class="String">10;-111222222110O--O011222222111- 01111110oOOOoo-:&nbsp;:-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">&quot;</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&nbsp;:: Complex -<span class="Keyword">&gt;</span> Float
real (C (x,y)) = x
im&nbsp;:: Complex -<span class="Keyword">&gt;</span> Float
im (C (x,y)) = y
f&nbsp;:: Complex -<span class="Keyword">&gt;</span> Complex -<span class="Keyword">&gt;</span> Int -<span class="Keyword">&gt;</span> Complex
f c z 0 = z
f c z n = f c ((z*z)+c) (n-1)
cabs&nbsp;:: Complex -<span class="Keyword">&gt;</span> Float
cabs = real.abs
tst&nbsp;:: Complex -<span class="Keyword">&gt;</span> Bool
tst c = (cabs (f c (C(0.0,0.0)) 32)) <span class="Keyword">&lt;</span> 2
bmandel bottomleft topright = map (<span class="Constant">\z</span> -<span class="Keyword">&gt;</span> (tst (C z), (fst z <span class="Keyword">&gt;</span> right - hstep/2 ))) [(x,y) <span class="Keyword">|</span> y <span class="Keyword">&lt;</span>- [bottom,(bottom + vstep)..top], x<span class="Keyword">&lt;</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&nbsp;:: Complex -<span class="Keyword">&gt;</span> Complex -<span class="Keyword">&gt;</span> String
mandel bottomleft topright = concat $ map treat $ bmandel bottomleft topright
where
treat (True,jump) = <span class="String"><span class="String">&quot;</span> <span class="String">&quot;</span></span> ++ rst jump
treat (False,jump) = <span class="String"><span class="String">&quot;</span>@<span class="String">&quot;</span></span> ++ rst jump
rst True = <span class="String"><span class="String">&quot;</span>\n<span class="String">&quot;</span></span>
rst False = <span class="String"><span class="String">&quot;</span><span class="String">&quot;</span></span>
main = <span class="Keyword">do</span>
x <span class="Keyword">&lt;</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">&quot;</span>\x1b[H\x1b[25A<span class="String">&quot;</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>&nbsp;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>&nbsp;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>&nbsp;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>

View file

@ -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&nbsp;<span class="nicer">»</span></a>
</div>

View file

@ -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">&lt;p&gt;Here is the obfuscated code:&lt;/p&gt;
&lt;div class="code"&gt;&lt;div class="file"&gt;&lt;a href="/Scratch/en/blog/Haskell-Mandelbrot/code/animandel.hs"&gt; &amp;#x27A5; animandel.hs &lt;/a&gt;&lt;/div&gt;&lt;div class="withfile"&gt;
&lt;pre class="twilight"&gt;
a=27&lt;span class="Keyword"&gt;;&lt;/span&gt;b=79&lt;span class="Keyword"&gt;;&lt;/span&gt;c=C(-2.0,-1.0)&lt;span class="Keyword"&gt;;&lt;/span&gt;d=C(1.0,1.0)&lt;span class="Keyword"&gt;;&lt;/span&gt;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)&lt;span class="Keyword"&gt;;&lt;/span&gt;C(x,y)+C(z,t)=C(x+z,y+t)&lt;span class="Keyword"&gt;;&lt;/span&gt;abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
r(C(x,y))=x&lt;span class="Keyword"&gt;;&lt;/span&gt;i(C(x,y))=y
f&amp;nbsp;:: C -&lt;span class="Keyword"&gt;&amp;gt;&lt;/span&gt; C -&lt;span class="Keyword"&gt;&amp;gt;&lt;/span&gt; Int -&lt;span class="Keyword"&gt;&amp;gt;&lt;/span&gt; Int
f c z 0=0...&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</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.....&lt;span class="Constant"&gt;&lt;strong&gt;a......b&lt;/strong&gt;&lt;/spa
&lt;div&gt;&lt;pre class="twilight"&gt;
git clone ssh...&lt;/pre&gt;&lt;/div&gt;</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">&lt;h1 class="first" id="gitgit-for-what"&gt;&lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt; for what?&lt;/h1&gt;
&lt;div class="intro"&gt;
&lt;p&gt;If you just want to use &lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt; &lt;strong&gt;immediately&lt;/strong&gt;, just read dark part. You read this part later to understand correctly foundations of version systems and not doing strange things.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt; is a &lt;abbr title="Decentralized Concurent Versions System"&gt;DCVS&lt;/abbr&gt;, which means a Decentralized Concurrent Versions System. Let&amp;rsquo;s analyze each part of this long term:&lt;/p&gt;
&lt;h3 id="versions-system"&gt;Versions System&lt;/h3&gt;
&lt;p&gt;Firstly, versions system manage files.
When somebody work with files without a versions system, the following happens frequently:&lt;/p&gt;
...&lt;/p&gt;</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">&lt;h1 class="first" id="here-we-go"&gt;Here we go!&lt;/h1&gt;
&lt;p&gt;Here is one from many way to use &lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt;. This method is sufficient to work on a project. Not there is many other &lt;em&gt;workflows&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="basic-usage"&gt;Basic usage&lt;/h2&gt;
&lt;p&gt;Work with &lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt; immediately:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get modification done by others &lt;span class="black"&gt;&lt;code&gt;git pull&lt;/code&gt;&lt;/span&gt;,&lt;/li&gt;
&lt;li&gt;See details of these modifications &lt;span class="black"&gt;&lt;code&gt;git log&lt;/code&gt;&lt;/span&gt;,&lt;/li&gt;
&lt;li&gt;Many times:
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Make an atomic modification&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Verify details of this modification: &lt;span class="black"&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/span&gt; and &lt;span class="black"&gt;&lt;code&gt;git diff&lt;/code&gt;&lt;/span&gt;,&lt;/li&gt;
&lt;li&gt;Add ...&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</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...&lt;/pre&gt;&lt;/div&gt;</content>
&lt;div&gt;&lt;pre class="twilight"&gt;
$ g...&lt;/pre&gt;&lt;/div&gt;</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">&lt;h1 class="first" id="here-we-go"&gt;Here we go!&lt;/h1&gt;
&lt;p&gt;Here is one from many way to use &lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt;. This method is sufficient to work on a project. Not there is many other &lt;em&gt;workflows&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="basic-usage"&gt;Basic usage&lt;/h2&gt;
&lt;p&gt;Work with &lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt; immediately:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get modification done by others &lt;span class="black"&gt;&lt;code&gt;git pull&lt;/code&gt;&lt;/span&gt;,&lt;/li&gt;
&lt;li&gt;See details of these modifications &lt;span class="black"&gt;&lt;code&gt;git log&lt;/code&gt;&lt;/span&gt;,&lt;/li&gt;
&lt;li&gt;Many times:
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Make an atomic modification&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Verify details of this modification: &lt;span class="black"&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/span&gt; and &lt;span class="black"&gt;&lt;code&gt;git diff&lt;/code&gt;&lt;/span&gt;,&lt;/li&gt;
&lt;li&gt;Add ...&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;</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">&lt;h1 class="first" id="gitgit-for-what"&gt;&lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt; for what?&lt;/h1&gt;
&lt;div class="intro"&gt;
&lt;p&gt;If you just want to use &lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt; &lt;strong&gt;immediately&lt;/strong&gt;, just read dark part. You read this part later to understand correctly foundations of version systems and not doing strange things.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt; is a &lt;abbr title="Decentralized Concurent Versions System"&gt;DCVS&lt;/abbr&gt;, which means a Decentralized Concurrent Versions System. Let&amp;rsquo;s analyze each part of this long term:&lt;/p&gt;
&lt;h3 id="versions-system"&gt;Versions System&lt;/h3&gt;
&lt;p&gt;Firstly, versions system manage files.
When somebody work with files without a versions system, the following happens frequently:&lt;/p&gt;
...&lt;/p&gt;</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
&lt;div&gt;&lt;div class="code"&gt;&lt;div class="file"&gt;&lt;a href="/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/code/gitconfig"&gt; &amp;#x27A5; gitconfig &lt;/a&gt;&lt;/div&gt;&lt;div class="withfile"&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</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">&lt;h1 class="first" id="why-git-is-cool"&gt;Why Git is cool?&lt;/h1&gt;
&lt;p&gt;Because with &lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt; you can work on many part of some project totally independently. This is the true efficiency of decentralisation.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Using the &lt;code&gt;git rebase&lt;/code&gt; you can decide which modifications should be forget or merged into only one modification.&lt;/p&gt;
&lt;p&gt;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...&lt;/p&gt;</content>
</entry>
</feed>

View file

@ -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"> &#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>
<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">&uarr;</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">&uarr;</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">&uarr;</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">&uarr;</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">

View file

@ -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&nbsp;<span class="nicer">»</span></a>
</div>
</div>
<div class="flush"></div>

View file

@ -134,6 +134,10 @@
</div>
<div class="next_article">
<a href="/Scratch/fr/blog/Haskell-Mandelbrot/">Mandelbrot avec haskell&nbsp;<span class="nicer">»</span></a>
</div>
</div>

View 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)

View 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">&darr; Menu &darr;</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 &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> 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">&gt;</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">&gt;(</span>f (C z<span class="String">)</span></span> (C(0,0)) 32,(fst z<span class="Keyword">&gt;</span>l - q/2))) [(x,y)<span class="Keyword">|</span>y<span class="Keyword">&lt;</span>-[p,(p+((o-p)/a))..o],x<span class="Keyword">&lt;</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">&quot;</span> .,<span class="String"><span class="String">`</span>'°\&quot;:;-+oO0123456789=!%*§&amp;$@#&quot;!!i):rst p;rst True=&quot;\n&quot;;rst False=&quot;&quot;</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)++&quot;\x1b[H\x1b[25A&quot;++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&nbsp;:</p>
<pre class="twilight">ghc --make animandel.hs <span class="Keyword">&amp;&amp;</span> animandel
</pre>
<p>Voici le résultat après 50 itérations.</p>
<pre class="twilight">
5555666666666666666666666666666655555555554O+++&nbsp;: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&quot;+O0111222222222222222222222222</span>
<span class="String">34444444443333330OO03333334444444443332222221100O+-oO001122222222221110-O1111122</span>
<span class="String">22333333333332210--01223333333333322222222211000o-°+o00000122222111110o°;o001111</span>
<span class="String">11OO112222222111O;;O111222222211OO111122211000Oo-&quot;&nbsp;:+ooOOOO.O0000000OOo'°oOO0000</span>
<span class="String">0O;+O01122211000O--O00011221110O+;O00000OO +oooo-:&nbsp;:-+oo++&quot;;oOO0000Ooo+;;+oooO00</span>
<span class="String">o+&quot;+oO00OO OOOOoo::ooOOOO°OO00Oo+&quot;+ooOooo+;°---&quot;,' ,,&quot;;--:&nbsp;;-+oo+ +++;;°°;;-++:;</span>
<span class="String">,° °':°: <span class="String">`</span></span> <span class="String"><span class="String">&quot;</span><span class="String"><span class="String">`</span>&quot;.°° °° &quot;°&quot;. &nbsp;:'&quot;, '°<span class="String">`</span></span>°<span class="String">&quot;</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+&quot;+oo+oo-'-++;+++-:,:::&quot;<span class="String">`</span></span> °::°°&nbsp;:-<span class="Keyword">;</span><span class="Keyword">;</span>--,<span class="Keyword">;</span>-<span class="Keyword">;</span> <span class="String"><span class="String">&quot;</span> <span class="String">&quot;</span></span> <span class="Keyword">;</span>-<span class="Keyword">;</span><span class="String"><span class="String">&quot;</span>:</span>
<span class="String">OO<span class="String">&quot;</span></span>-O0000000000Oo--oO0000000000O-:oO0000Oo::+++<span class="Keyword">;</span><span class="Keyword">;</span>: <span class="String"><span class="String">&quot;</span>:<span class="String">&quot;</span></span>-++-<span class="String"><span class="String">'</span>;+oooOOoooo-::-oooo++</span>
<span class="String">10;-111222222110O--O011222222111- 01111110oOOOoo-:&nbsp;:-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">&quot;</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&nbsp;:: Complex -<span class="Keyword">&gt;</span> Float
real (C (x,y)) = x
im&nbsp;:: Complex -<span class="Keyword">&gt;</span> Float
im (C (x,y)) = y
f&nbsp;:: Complex -<span class="Keyword">&gt;</span> Complex -<span class="Keyword">&gt;</span> Int -<span class="Keyword">&gt;</span> Complex
f c z 0 = z
f c z n = f c ((z*z)+c) (n-1)
cabs&nbsp;:: Complex -<span class="Keyword">&gt;</span> Float
cabs = real.abs
tst&nbsp;:: Complex -<span class="Keyword">&gt;</span> Bool
tst c = (cabs (f c (C(0.0,0.0)) 32)) <span class="Keyword">&lt;</span> 2
bmandel bottomleft topright = map (<span class="Constant">\z</span> -<span class="Keyword">&gt;</span> (tst (C z), (fst z <span class="Keyword">&gt;</span> right - hstep/2 ))) [(x,y) <span class="Keyword">|</span> y <span class="Keyword">&lt;</span>- [bottom,(bottom + vstep)..top], x<span class="Keyword">&lt;</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&nbsp;:: Complex -<span class="Keyword">&gt;</span> Complex -<span class="Keyword">&gt;</span> String
mandel bottomleft topright = concat $ map treat $ bmandel bottomleft topright
where
treat (True,jump) = <span class="String"><span class="String">&quot;</span> <span class="String">&quot;</span></span> ++ rst jump
treat (False,jump) = <span class="String"><span class="String">&quot;</span>@<span class="String">&quot;</span></span> ++ rst jump
rst True = <span class="String"><span class="String">&quot;</span>\n<span class="String">&quot;</span></span>
rst False = <span class="String"><span class="String">&quot;</span><span class="String">&quot;</span></span>
main = <span class="Keyword">do</span>
x <span class="Keyword">&lt;</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">&quot;</span>\x1b[H\x1b[25A<span class="String">&quot;</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>&nbsp;Password Management</a>
</div>
<div class="previous_article">
<a href="/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/"><span class="nicer">«</span>&nbsp;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>&nbsp;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>

View file

@ -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&nbsp;<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

View file

@ -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">&lt;p&gt;Voici le code &amp;ldquo;obfusqu&#233;&amp;rdquo;&amp;nbsp;:&lt;/p&gt;
&lt;div class="code"&gt;&lt;div class="file"&gt;&lt;a href="/Scratch/fr/blog/Haskell-Mandelbrot/code/animandel.hs"&gt; &amp;#x27A5; animandel.hs &lt;/a&gt;&lt;/div&gt;&lt;div class="withfile"&gt;
&lt;pre class="twilight"&gt;
a=27&lt;span class="Keyword"&gt;;&lt;/span&gt;b=79&lt;span class="Keyword"&gt;;&lt;/span&gt;c=C(-2.0,-1.0)&lt;span class="Keyword"&gt;;&lt;/span&gt;d=C(1.0,1.0)&lt;span class="Keyword"&gt;;&lt;/span&gt;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)&lt;span class="Keyword"&gt;;&lt;/span&gt;C(x,y)+C(z,t)=C(x+z,y+t)&lt;span class="Keyword"&gt;;&lt;/span&gt;abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
r(C(x,y))=x&lt;span class="Keyword"&gt;;&lt;/span&gt;i(C(x,y))=y
f&amp;nbsp;:: C -&lt;span class="Keyword"&gt;&amp;gt;&lt;/span&gt; C -&lt;span class="Keyword"&gt;&amp;gt;&lt;/span&gt; Int -&lt;span class="Keyword"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</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
&lt;p&gt;Toutes les branches locales utilisent le m&#234;me r&#233;pertoire. Ainsi on peu changer de branche tr&#232;s ais&#233;ment et rapidement. On peut aussi changer de branche alors que certains fichier sont en cours de modifications. On peut m&#234;me pousser le vice jusqu&amp;rsquo;&#224; modifier un fichier, changer de branche, commiter une partie seulement des modifications de ce fichier dans la branche courante. Revenir dans l&amp;rsquo;ancienne branche et commi...&lt;/p&gt;</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">&lt;h1 class="first" id="liste-de-commandes"&gt;Liste de commandes&lt;/h1&gt;
&lt;h2 id="les-commandes-pour-chaque-choses"&gt;Les commandes pour chaque choses&lt;/h2&gt;
&lt;p&gt;Dans la premi&#232;re partie, nous avons vu la liste des probl&#232;mes r&#233;solus par &lt;a href="http://git-scm.org" title="Git"&gt;Git&lt;/a&gt;. En r&#233;sum&#233; Git doit pouvoir&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;r&#233;cup&#233;rer les modifications des autres&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;envoyer ses modifications aux autres&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;revenir dans le temps&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;lister les diff&#233;rences entre chaque version&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;nommer certaines versions pour s&amp;rsquo;y r&#233;f&#233;rer facilement&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;afficher l&amp;rsquo;historique des modifications&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;savoir qui a fait quoi et quand&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;g&#233;rer des conflits&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;manipuler facileme...&lt;/li&gt;&lt;/ul&gt;</content>
</entry>
</feed>

View file

@ -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 &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>
<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&rsquo;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>&nbsp;: </span> J&rsquo;ai fait un système simple de macros pour mon blog. Par exemple, il me suffit d&rsquo;é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&rsquo;ai ajouter un système de macro pour mon système de blog.
Lorsqu&rsquo;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&rsquo;on est habitué à <span style="text-transform: uppercase">L<sup st
</ul><a class="return" href="#tagcloud">&uarr;</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&rsquo;on est habitué à <span style="text-transform: uppercase">L<sup st
</ul><a class="return" href="#tagcloud">&uarr;</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&rsquo;on est habitué à <span style="text-transform: uppercase">L<sup st
</ul><a class="return" href="#tagcloud">&uarr;</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&rsquo;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&rsquo;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">

View file

@ -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>

View file

@ -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