From 2229b217a2fc9c3c0a74e75148ce12f0a659a03d Mon Sep 17 00:00:00 2001 From: yogsototh Date: Sat, 16 Mar 2013 09:31:39 +0100 Subject: [PATCH] publishing --- Scratch/css/darkmodern.css | 2 +- Scratch/css/fonts/social_font.ttf | Bin 0 -> 67820 bytes Scratch/css/modern.css | 2 +- Scratch/css/scientific.css | 2 +- Scratch/en/about/old/index.html | 2 +- Scratch/en/blog/01_nanoc/index.html | 50 +- Scratch/en/blog/02_ackgrep/index.html | 50 +- Scratch/en/blog/03_losthighway/index.html | 50 +- Scratch/en/blog/04_drm/index.html | 50 +- .../05_git_create_remote_branch/index.html | 50 +- Scratch/en/blog/06_How_I_use_git/index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../11_Load_Disqus_Asynchronously/index.html | 58 +- .../index.html | 56 +- .../blog/2009-09-jQuery-Tag-Cloud/index.html | 62 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../2009-10-Focus-vs-Minimalism/index.html | 70 +- .../index.html | 54 +- .../index.html | 50 +- .../index.html | 50 +- .../2009-10-untaught-git-usage/index.html | 50 +- .../blog/2009-11-12-Git-for-n00b/index.html | 50 +- .../2009-12-06-iphone-call-filter/index.html | 58 +- .../en/blog/2009-12-14-Git-vs--Bzr/index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 54 +- .../index.html | 50 +- .../index.html | 50 +- .../en/blog/2010-03-22-Git-Tips/index.html | 50 +- .../2010-03-23-Encapsulate-git/index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../2010-06-15-Get-my-blog-engine/index.html | 50 +- .../index.html | 62 +- .../index.html | 162 ++-- .../index.html | 106 ++- .../index.html | 50 +- .../index.html | 50 +- .../2010-07-09-Indecidabilities/index.html | 50 +- .../index.html | 58 +- .../index.html | 50 +- .../index.html | 66 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../blog/2010-10-14-Fun-with-wav/index.html | 50 +- .../index.html | 50 +- .../blog/2011-01-03-Happy-New-Year/index.html | 50 +- .../index.html | 50 +- .../index.html | 58 +- .../en/blog/A-more-convenient-diff/index.html | 50 +- .../Category-Theory-Presentation/index.html | 50 +- Scratch/en/blog/Haskell-Mandelbrot/index.html | 74 +- .../blog/Haskell-OpenGL-Mandelbrot/index.html | 280 +++---- .../en/blog/Haskell-the-Hard-Way/index.html | 122 ++- .../Higher-order-function-in-zsh/index.html | 56 +- .../blog/Learn-Vim-Progressively/index.html | 50 +- .../blog/Lost_Highway_Demistified/index.html | 50 +- .../en/blog/Password-Management/index.html | 50 +- .../en/blog/SVG-and-m4-fractals/index.html | 50 +- .../blog/Social-link-the-right-way/index.html | 284 +++++++ .../en/blog/Typography-and-the-Web/index.html | 50 +- .../en/blog/Yesod-excellent-ideas/index.html | 52 +- .../Yesod-tutorial-for-newbies/index.html | 78 +- Scratch/en/blog/feed/feed.xml | 783 ++++++++---------- Scratch/en/blog/index.html | 3 + Scratch/en/blog/mvc/index.html | 50 +- .../index.html | 50 +- Scratch/fr/about/old/index.html | 2 +- Scratch/fr/blog/01_nanoc/index.html | 50 +- Scratch/fr/blog/02_ackgrep/index.html | 50 +- Scratch/fr/blog/03_losthighway/index.html | 50 +- Scratch/fr/blog/04_drm/index.html | 50 +- .../05_git_create_remote_branch/index.html | 50 +- Scratch/fr/blog/06_How_I_use_git/index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../11_Load_Disqus_Asynchronously/index.html | 58 +- .../index.html | 56 +- .../blog/2009-09-jQuery-Tag-Cloud/index.html | 62 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../2009-10-Focus-vs-Minimalism/index.html | 70 +- .../index.html | 54 +- .../index.html | 50 +- .../index.html | 50 +- .../2009-10-untaught-git-usage/index.html | 50 +- .../blog/2009-11-12-Git-for-n00b/index.html | 50 +- .../2009-12-06-iphone-call-filter/index.html | 58 +- .../fr/blog/2009-12-14-Git-vs--Bzr/index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 54 +- .../index.html | 50 +- .../index.html | 50 +- .../fr/blog/2010-03-22-Git-Tips/index.html | 50 +- .../2010-03-23-Encapsulate-git/index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../2010-06-15-Get-my-blog-engine/index.html | 50 +- .../index.html | 62 +- .../index.html | 162 ++-- .../index.html | 106 ++- .../index.html | 50 +- .../index.html | 50 +- .../2010-07-09-Indecidabilities/index.html | 50 +- .../index.html | 58 +- .../index.html | 50 +- .../index.html | 66 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../index.html | 50 +- .../blog/2010-10-14-Fun-with-wav/index.html | 50 +- .../index.html | 50 +- .../blog/2011-01-03-Happy-New-Year/index.html | 50 +- .../index.html | 50 +- .../index.html | 58 +- .../fr/blog/A-more-convenient-diff/index.html | 50 +- .../Category-Theory-Presentation/index.html | 50 +- Scratch/fr/blog/Haskell-Mandelbrot/index.html | 74 +- .../blog/Haskell-OpenGL-Mandelbrot/index.html | 280 +++---- .../fr/blog/Haskell-the-Hard-Way/index.html | 122 ++- .../Higher-order-function-in-zsh/index.html | 56 +- .../blog/Learn-Vim-Progressively/index.html | 50 +- .../fr/blog/Password-Management/index.html | 50 +- .../fr/blog/SVG-and-m4-fractals/index.html | 50 +- .../blog/Social-link-the-right-way/index.html | 285 +++++++ .../fr/blog/Typography-and-the-Web/index.html | 50 +- .../fr/blog/Yesod-excellent-ideas/index.html | 52 +- .../Yesod-tutorial-for-newbies/index.html | 78 +- Scratch/fr/blog/feed/feed.xml | 769 ++++++++--------- Scratch/fr/blog/index.html | 3 + Scratch/fr/blog/mvc/index.html | 50 +- .../index.html | 50 +- .../blog/Social-link-the-right-way/main.png | Bin 0 -> 2953 bytes Scratch/js/index.js | 12 + YBlog/YPassword_files/YPassword-1.6.zip | Bin 0 -> 192168 bytes YBlog/YPassword_files/forcePaste.app.zip | Bin 0 -> 263306 bytes YPassword/index.html | 28 + index.html | 16 +- 157 files changed, 5006 insertions(+), 5409 deletions(-) create mode 100644 Scratch/css/fonts/social_font.ttf create mode 100644 Scratch/en/blog/Social-link-the-right-way/index.html create mode 100644 Scratch/fr/blog/Social-link-the-right-way/index.html create mode 100644 Scratch/img/blog/Social-link-the-right-way/main.png create mode 100644 YBlog/YPassword_files/YPassword-1.6.zip create mode 100644 YBlog/YPassword_files/forcePaste.app.zip create mode 100644 YPassword/index.html diff --git a/Scratch/css/darkmodern.css b/Scratch/css/darkmodern.css index 4c3b4aa..854f990 100644 --- a/Scratch/css/darkmodern.css +++ b/Scratch/css/darkmodern.css @@ -1 +1 @@ - html{padding:0}body{padding:0;margin:0;font-family:"Droid Sans", Helvetica, sans-serif !important;font-size:16px;line-height:24px;background:#073642;color:#93a1a1}a{text-decoration:none;color:#268bd2}a:visited{color:#268bd2}a:hover{color:#cb4b16;text-shadow:0 0 1px #dc322f}.corps a{color:#93a1a1}.corps a:after{content:"*";line-height:0;font-size:0.66em;vertical-align:super}.corps a:visited{color:#93a1a1}#navigation{text-align:center;padding:1em;letter-spacing:0.25em}#navigation .sep{opacity:0.3;font-style:italic}#blackpage, #nojsredirect{top:0;left:0;width:100%;min-height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:fixed;text-align:center;background:#002b36}#content{background:#001823;color:#93a1a1;width:720px;margin:0 auto;padding:0}#content #titre h1{padding:0 64px;margin:64px auto;text-align:center;font-weight:200}#content h1, #content h2, #content h3, #content h4, #content h5, #content h6{padding:0 64px;margin:64px 0;color:#839496}#content table{margin:16px 0;padding:0 64px}#content table tr:nth-child(odd){background-color:#002b36}#content table tr th{border:solid medium #073642;padding:4px;margin:0}#content table tr td{border:solid 1px #073642;padding:4px;margin:0}#content figure, #content .figure{margin:0;padding:0}#content figure figcaption, #content figure .caption, #content .figure figcaption, #content .figure .caption{padding:0 64px;margin:16px 0}#content p{padding:0 64px;margin:16px 0}#content img{max-width:100%;display:block;border-top:medium solid;border-bottom:medium solid;margin:64px auto}#content pre{background:#002b36;font-family:monaco, monospace;font-size:16px;overflow:auto;padding:16px;line-height:17.92px;border-top:solid 1px #073642;border-bottom:solid 1px #073642}#content pre code{background:none;border:none}#content ul{list-style:none}#content ul li:before{content:"- "}#content ul{padding-left:0;margin:16px 64px;text-indent:-8px}#content ol{padding-left:0;margin:16px 64px}#content .toc a, #content #markdown-toc a{color:#93a1a1}#content .toc ol li, #content .toc ul li, #content #markdown-toc ol li, #content #markdown-toc ul li{margin:8px 0}#content ol li ul, #content ol li ol, #content ul li ol, #content ul li ul{margin:8px 24px;list-style:none}#content li p{display:inline;margin:0;padding:0}#entete > #choix > #choixrss{margin:0;padding:0}#entete > #choix > #choixlang{float:left}#choixlang{float:left}#switchcss{float:right}#choix{text-align:center}#choix > div{display:inline-block}#header{border-bottom:8px solid #073642}#choix{text-align:center;font-size:12px;padding:0 16px;font-weight:bold}#choix #switchcss{float:right}.cut{color:#93a1a1;font-size:10.66667px;opacity:0.5;display:block;text-align:right}.cut:after{content:" »"}.cut:hover{opacity:1}hr{color:#586e75;border-color:#073642;margin:0 64px}p code, li code{padding:1px 2px;background:#002b36;border:solid 1px #073642}#content blockquote{border:solid 1px #073642;background:#002b36}#content blockquote p{padding:0 16px}#content blockquote code{background:#002b36;border:solid 1px rgba(0, 0, 0, 0.1)}#content blockquote pre code{background:none;border:none}#social, #choixrss, #comment{margin:16px 64px}#social{text-align:center;opacity:0.3}#social:hover{opacity:1}#comment img{width:auto;max-width:100%}.intro{width:646px;margin:0 auto;font-size:14px;line-height:21px;color:#839496}.intro blockquote hr{display:none}.left{float:left}.right{float:right}#content img.right, #content img.left{max-width:30%;border:medium solid}#content img.left{margin:0 32px 0 64px}#content img.right{margin:0 64px 0 32px}.flush{clear:both}#bottom{padding:16px 0;text-align:center;font-size:14px;line-height:21px}#entete{padding:16px 0;text-align:center}#entete ul{text-indent:0}#entete ul li:before{content:""}#entete ul li{display:inline-block}#entete ul li span.active{color:#cb4b16}#entete ul li > *{padding:2px 16px;border:solid}#previous_articles{float:left;text-align:left}#next_articles{float:right;text-align:right}.corps{padding-bottom:32px}#tagcloud{margin:16px 64px;font-size:14px;line-height:21px}#sousliens.archive > ul{display:none}#sousliens.archive > h4:hover{cursor:pointer}#hiddenDivs > div{display:none}.list{margin:16px 64px}pre .list{margin:0 0}#content img#mainlogo{width:auto;margin:0 auto;display:block;max-width:100%}.date, .day, .month, .year{display:inline-block;padding-left:10px;text-align:right}.day{width:10px}.month{width:20px}.year{width:30px}.date{margin-right:10px}#content .popularblock{display:block;float:left;margin:1.5%;width:30%}#content .popularblock a:after{content:""}#content .popularblock figure, #content .popularblock .figure{width:100%;overflow:hidden}#content .popularblock figure img, #content .popularblock .figure img{height:120px}#content .popularblock figure figcaption, #content .popularblock figure .caption, #content .popularblock .figure figcaption, #content .popularblock .figure .caption{padding:0;text-align:center}.base03{color:#002b36}.base02{color:#073642}.base01{color:#586e75}.base00{color:#657b83}.base0{color:#839496}.base1{color:#93a1a1}.base2{color:#eee8d5}.base3{color:#fdf6e3}.yellow{color:#b58900}.orange{color:#cb4b16}.red{color:#dc322f}.magenta{color:#d33682}.violet{color:#6c71c4}.blue{color:#268bd2}.cyan{color:#2aa198}.green{color:#859900}#content section.slide{min-height:20em;border-top:1.6px solid #073642;border-bottom:1.6px solid #073642;margin:64px 0;background-color:#002b36;color:#93a1a1;padding:16px 0}#content section.slide > *{padding:0 16px}#content section.slide a{text-decoration:none;color:#839496}#content section.slide a:visited{color:#586e75}#content section.slide pre{padding:16px;margin:16px}#content section.slide pre, #content section.slide code{background-color:#002b36;border:1px solid #073642}#content section.slide pre code, #content section.slide code code{border:none;background:none}#content section.slide blockquote{background-color:#002b36;border-color:#073642}#content section.slide h1, #content section.slide h2, #content section.slide h3, #content section.slide h4, #content section.slide h5, #content section.slide h6{color:#839496}#content section.slide ul{margin:16px 0;padding:0}#content section.slide ul li{margin:8px 24px}#content section.slide img{display:block;max-width:80%;margin:16px auto;padding:8px;background-color:#002b36;border:solid 1px #073642}#content section.slide img.right, #content section.slide img.left, #content section.slide figure.right, #content section.slide figure.left, #content section.slide .figure.right, #content section.slide .figure.left{max-width:26%;margin:8px}#content section.slide img.right figcaption, #content section.slide img.left figcaption, #content section.slide figure.right figcaption, #content section.slide figure.left figcaption, #content section.slide .figure.right figcaption, #content section.slide .figure.left figcaption{padding:0;text-align:center}#content section.slide figure, #content section.slide .figure{max-width:80%;margin:0 auto}#content section.slide figure img, #content section.slide .figure img{max-width:80%}.codefile{font-size:11.2px;text-align:right;margin-bottom:-32px}.footnotes{font-size:12.8px}#next_before_articles{font-size:11.2px;padding:0 64px;margin:16px 0}#content .inlineblockimg{width:60px;margin:0 8px;text-align:center;vertical-align:middle;display:inline-block}#content img.inlineimage{display:inline-block;max-height:48px;max-width:48px;border:solid;box-shadow:none;margin:0 auto;vertical-align:middle;font-size:7px;font-family:Helvetica, sans-serif;overflow:hidden}a.rss{background-color:#f8f8f8;background-image:-moz-linear-gradient(center top, white, #dedede);border:1px solid #cccccc;border-radius:3px 3px 3px 3px;color:#cb4b16;cursor:pointer;display:inline-block;font-size:13px;font-weight:bold;height:20px;font-family:sans-serif;line-height:20px;overflow:hidden;padding:0 5px;position:relative;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);margin:0 20px}a.rss:hover{background-image:-moz-linear-gradient(center top, white, #f3f3f3)} \ No newline at end of file + @font-face{font-family:"social";src:url("fonts/social_font.ttf") format("truetype");font-weight:normal;font-style:normal}.social{font-family:social}#social{font-size:2em;text-align:center;opacity:0.3}#social .message{font-size:10px}#social:hover{opacity:1}html{padding:0}body{padding:0;margin:0;font-family:"Droid Sans", Helvetica, sans-serif !important;font-size:16px;line-height:24px;background:#073642;color:#93a1a1}a{text-decoration:none;color:#268bd2}a:visited{color:#268bd2}a:hover{color:#cb4b16;text-shadow:0 0 1px #dc322f}.corps a{color:#93a1a1}.corps a:after{content:"*";line-height:0;font-size:0.66em;vertical-align:super}.corps a:visited{color:#93a1a1}#navigation{text-align:center;padding:1em;letter-spacing:0.25em}#navigation .sep{opacity:0.3;font-style:italic}#blackpage, #nojsredirect{top:0;left:0;width:100%;min-height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:fixed;text-align:center;background:#002b36}#content{background:#001823;color:#93a1a1;width:100%;max-width:720px;margin:0 auto;padding:0}#content #titre h1{padding:0 64px;margin:64px auto;text-align:center;font-weight:200}#content h1, #content h2, #content h3, #content h4, #content h5, #content h6{padding:0 64px;margin:64px 0;color:#839496}#content table{margin:16px 0;padding:0 64px}#content table tr:nth-child(odd){background-color:#002b36}#content table tr th{border:solid medium #073642;padding:4px;margin:0}#content table tr td{border:solid 1px #073642;padding:4px;margin:0}#content figure, #content .figure{margin:0;padding:0}#content figure figcaption, #content figure .caption, #content .figure figcaption, #content .figure .caption{padding:0 64px;margin:16px 0}#content p{padding:0 64px;margin:16px 0}#content img{max-width:100%;display:block;border-top:medium solid;border-bottom:medium solid;margin:64px auto}#content pre{background:#002b36;font-family:monaco, monospace;font-size:16px;overflow:auto;padding:16px;line-height:17.92px;border-top:solid 1px #073642;border-bottom:solid 1px #073642}#content pre code{background:none;border:none}#content ul{list-style:none}#content ul li:before{content:"- "}#content ul{padding-left:0;margin:16px 64px;text-indent:-8px}#content ol{padding-left:0;margin:16px 64px}#content .toc a, #content #markdown-toc a{color:#93a1a1}#content .toc ol li, #content .toc ul li, #content #markdown-toc ol li, #content #markdown-toc ul li{margin:8px 0}#content ol li ul, #content ol li ol, #content ul li ol, #content ul li ul{margin:8px 24px;list-style:none}#content li p{display:inline;margin:0;padding:0}@media only screen and (max-width:592px){#content{padding:0;width:100%}#content .corps{padding:0 1em}}#entete > #choix > #choixlang{float:left}#choixlang{float:left}#switchcss{float:right}#choix{text-align:center}#choix > div{display:inline-block}#header{border-bottom:8px solid #073642}#choix{text-align:center;font-size:12px;padding:0 16px;font-weight:bold}#choix #switchcss{float:right}.cut{color:#93a1a1;font-size:10.66667px;opacity:0.5;display:block;text-align:right}.cut:after{content:" »"}.cut:hover{opacity:1}hr{color:#586e75;border-color:#073642;margin:0 64px}p code, li code{padding:1px 2px;background:#002b36;border:solid 1px #073642}#content blockquote{border:solid 1px #073642;background:#002b36}#content blockquote p{padding:0 16px}#content blockquote code{background:#002b36;border:solid 1px rgba(0, 0, 0, 0.1)}#content blockquote pre code{background:none;border:none}#social, #comment{margin:16px 64px}#social{text-align:center;opacity:0.3}#social:hover{opacity:1}#comment img{width:auto;max-width:100%}.intro{width:100%;max-width:646px;margin:0 auto;font-size:14px;line-height:21px;color:#839496}.intro blockquote hr{display:none}.left{float:left}.right{float:right}#content img.right, #content img.left{max-width:30%;border:medium solid}#content img.left{margin:0 32px 0 64px}#content img.right{margin:0 64px 0 32px}.flush{clear:both}#bottom{padding:16px 0;text-align:center;font-size:14px;line-height:21px}#entete{padding:16px 0;text-align:center}#entete ul{text-indent:0}#entete ul li:before{content:""}#entete ul li{display:inline-block}#entete ul li span.active{color:#cb4b16}#entete ul li > *{padding:2px 16px;border:solid}#previous_articles{float:left;text-align:left}#next_articles{float:right;text-align:right}.corps{padding-bottom:32px}#tagcloud{margin:16px 64px;font-size:14px;line-height:21px}#sousliens.archive > ul{display:none}#sousliens.archive > h4:hover{cursor:pointer}#hiddenDivs > div{display:none}.list{margin:16px 64px}pre .list{margin:0 0}#content img#mainlogo{width:auto;margin:0 auto;display:block;max-width:100%}.date, .day, .month, .year{display:inline-block;padding-left:10px;text-align:right}.day{width:10px}.month{width:20px}.year{width:30px}.date{margin-right:10px}#content .popularblock{display:block;float:left;margin:1.5%;width:30%}#content .popularblock a:after{content:""}#content .popularblock figure, #content .popularblock .figure{width:100%;overflow:hidden}#content .popularblock figure img, #content .popularblock .figure img{height:120px}#content .popularblock figure figcaption, #content .popularblock figure .caption, #content .popularblock .figure figcaption, #content .popularblock .figure .caption{padding:0;text-align:center}.base03{color:#002b36}.base02{color:#073642}.base01{color:#586e75}.base00{color:#657b83}.base0{color:#839496}.base1{color:#93a1a1}.base2{color:#eee8d5}.base3{color:#fdf6e3}.yellow{color:#b58900}.orange{color:#cb4b16}.red{color:#dc322f}.magenta{color:#d33682}.violet{color:#6c71c4}.blue{color:#268bd2}.cyan{color:#2aa198}.green{color:#859900}#content section.slide{min-height:20em;border-top:1.6px solid #073642;border-bottom:1.6px solid #073642;margin:64px 0;background-color:#002b36;color:#93a1a1;padding:16px 0}#content section.slide > *{padding:0 16px}#content section.slide a{text-decoration:none;color:#839496}#content section.slide a:visited{color:#586e75}#content section.slide pre{padding:16px;margin:16px}#content section.slide pre, #content section.slide code{background-color:#002b36;border:1px solid #073642}#content section.slide pre code, #content section.slide code code{border:none;background:none}#content section.slide blockquote{background-color:#002b36;border-color:#073642}#content section.slide h1, #content section.slide h2, #content section.slide h3, #content section.slide h4, #content section.slide h5, #content section.slide h6{color:#839496}#content section.slide ul{margin:16px 0;padding:0}#content section.slide ul li{margin:8px 24px}#content section.slide img{display:block;max-width:80%;margin:16px auto;padding:8px;background-color:#002b36;border:solid 1px #073642}#content section.slide img.right, #content section.slide img.left, #content section.slide figure.right, #content section.slide figure.left, #content section.slide .figure.right, #content section.slide .figure.left{max-width:26%;margin:8px}#content section.slide img.right figcaption, #content section.slide img.left figcaption, #content section.slide figure.right figcaption, #content section.slide figure.left figcaption, #content section.slide .figure.right figcaption, #content section.slide .figure.left figcaption{padding:0;text-align:center}#content section.slide figure, #content section.slide .figure{max-width:80%;margin:0 auto}#content section.slide figure img, #content section.slide .figure img{max-width:80%}.codefile{font-size:11.2px;text-align:right;margin-bottom:-32px}.footnotes{font-size:12.8px}#next_before_articles{font-size:11.2px;padding:0 64px;margin:16px 0}#totop{text-align:center;margin:0 auto}#content .inlineblockimg{width:60px;margin:16px;text-align:center;vertical-align:middle;display:inline-block}#content img.inlineimage{display:inline-block;max-height:48px;max-width:48px;border:solid;box-shadow:none;margin:0 auto;vertical-align:middle;font-size:7px;font-family:Helvetica, sans-serif;overflow:hidden} \ No newline at end of file diff --git a/Scratch/css/fonts/social_font.ttf b/Scratch/css/fonts/social_font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f0b16d3264db9827affc1af6266f496cebe2fcc8 GIT binary patch literal 67820 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 Ru`Mc+0=V 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

_j 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 #choix > #choixrss{margin:0;padding:0}#entete > #choix > #choixlang{float:left}#choixlang{float:left}#switchcss{float:right}#choix{text-align:center}#choix > div{display:inline-block}#header{border-bottom:8px solid #93a1a1}#choix{text-align:center;font-size:12px;padding:0 16px;font-weight:bold}#choix #switchcss{float:right}.cut{color:#586e75;font-size:10.66667px;opacity:0.5;display:block;text-align:right}.cut:after{content:" »"}.cut:hover{opacity:1}hr{color:#93a1a1;border-color:#eee8d5;margin:0 64px}p code, li code{padding:1px 2px;background:#fdf6e3;border:solid 1px #eee8d5}#content blockquote{border:solid 1px #eee8d5;background:#fdf6e3}#content blockquote p{padding:0 16px}#content blockquote code{background:#fdf6e3;border:solid 1px rgba(0, 0, 0, 0.1)}#content blockquote pre code{background:none;border:none}#social, #choixrss, #comment{margin:16px 64px}#social{text-align:center;opacity:0.3}#social:hover{opacity:1}#comment img{width:auto;max-width:100%}.intro{width:646px;margin:0 auto;font-size:14px;line-height:21px;color:#657b83}.intro blockquote hr{display:none}.left{float:left}.right{float:right}#content img.right, #content img.left{max-width:30%;border:medium solid}#content img.left{margin:0 32px 0 64px}#content img.right{margin:0 64px 0 32px}.flush{clear:both}#bottom{padding:16px 0;text-align:center;font-size:14px;line-height:21px}#entete{padding:16px 0;text-align:center}#entete ul{text-indent:0}#entete ul li:before{content:""}#entete ul li{display:inline-block}#entete ul li span.active{color:#cb4b16}#entete ul li > *{padding:2px 16px;border:solid}#previous_articles{float:left;text-align:left}#next_articles{float:right;text-align:right}.corps{padding-bottom:32px}#tagcloud{margin:16px 64px;font-size:14px;line-height:21px}#sousliens.archive > ul{display:none}#sousliens.archive > h4:hover{cursor:pointer}#hiddenDivs > div{display:none}.list{margin:16px 64px}pre .list{margin:0 0}#content img#mainlogo{width:auto;margin:0 auto;display:block;max-width:100%}.date, .day, .month, .year{display:inline-block;padding-left:10px;text-align:right}.day{width:10px}.month{width:20px}.year{width:30px}.date{margin-right:10px}#content .popularblock{display:block;float:left;margin:1.5%;width:30%}#content .popularblock a:after{content:""}#content .popularblock figure, #content .popularblock .figure{width:100%;overflow:hidden}#content .popularblock figure img, #content .popularblock .figure img{height:120px}#content .popularblock figure figcaption, #content .popularblock figure .caption, #content .popularblock .figure figcaption, #content .popularblock .figure .caption{padding:0;text-align:center}.base03{color:#002b36}.base02{color:#073642}.base01{color:#586e75}.base00{color:#657b83}.base0{color:#839496}.base1{color:#93a1a1}.base2{color:#eee8d5}.base3{color:#fdf6e3}.yellow{color:#b58900}.orange{color:#cb4b16}.red{color:#dc322f}.magenta{color:#d33682}.violet{color:#6c71c4}.blue{color:#268bd2}.cyan{color:#2aa198}.green{color:#859900}#content section.slide{min-height:20em;border-top:1.6px solid #073642;border-bottom:1.6px solid #073642;margin:64px 0;background-color:#fdf6e3;color:#586e75;padding:16px 0}#content section.slide > *{padding:0 16px}#content section.slide a{text-decoration:none;color:#657b83}#content section.slide a:visited{color:#93a1a1}#content section.slide pre{padding:16px;margin:16px}#content section.slide pre, #content section.slide code{background-color:#fdf6e3;border:1px solid #eee8d5}#content section.slide pre code, #content section.slide code code{border:none;background:none}#content section.slide blockquote{background-color:#fdf6e3;border-color:#eee8d5}#content section.slide h1, #content section.slide h2, #content section.slide h3, #content section.slide h4, #content section.slide h5, #content section.slide h6{color:#657b83}#content section.slide ul{margin:16px 0;padding:0}#content section.slide ul li{margin:8px 24px}#content section.slide img{display:block;max-width:80%;margin:16px auto;padding:8px;background-color:#fdf6e3;border:solid 1px #eee8d5}#content section.slide img.right, #content section.slide img.left, #content section.slide figure.right, #content section.slide figure.left, #content section.slide .figure.right, #content section.slide .figure.left{max-width:26%;margin:8px}#content section.slide img.right figcaption, #content section.slide img.left figcaption, #content section.slide figure.right figcaption, #content section.slide figure.left figcaption, #content section.slide .figure.right figcaption, #content section.slide .figure.left figcaption{padding:0;text-align:center}#content section.slide figure, #content section.slide .figure{max-width:80%;margin:0 auto}#content section.slide figure img, #content section.slide .figure img{max-width:80%}.codefile{font-size:11.2px;text-align:right;margin-bottom:-32px}.footnotes{font-size:12.8px}#next_before_articles{font-size:11.2px;padding:0 64px;margin:16px 0}#content .inlineblockimg{width:60px;margin:0 8px;text-align:center;vertical-align:middle;display:inline-block}#content img.inlineimage{display:inline-block;max-height:48px;max-width:48px;border:solid;box-shadow:none;margin:0 auto;vertical-align:middle;font-size:7px;font-family:Helvetica, sans-serif;overflow:hidden}a.rss{background-color:#f8f8f8;background-image:-moz-linear-gradient(center top, white, #dedede);border:1px solid #cccccc;border-radius:3px 3px 3px 3px;color:#cb4b16;cursor:pointer;display:inline-block;font-size:13px;font-weight:bold;height:20px;font-family:sans-serif;line-height:20px;overflow:hidden;padding:0 5px;position:relative;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);margin:0 20px}a.rss:hover{background-image:-moz-linear-gradient(center top, white, #f3f3f3)} \ No newline at end of file + @font-face{font-family:"social";src:url("fonts/social_font.ttf") format("truetype");font-weight:normal;font-style:normal}.social{font-family:social}#social{font-size:2em;text-align:center;opacity:0.3}#social .message{font-size:10px}#social:hover{opacity:1}html{padding:0}body{padding:0;margin:0;font-family:"Droid Sans", Helvetica, sans-serif !important;font-size:16px;line-height:24px;background:#93a1a1;color:#586e75}a{text-decoration:none;color:#268bd2}a:visited{color:#268bd2}a:hover{color:#cb4b16;text-shadow:0 0 1px #dc322f}.corps a{color:#586e75}.corps a:after{content:"*";line-height:0;font-size:0.66em;vertical-align:super}.corps a:visited{color:#586e75}#navigation{text-align:center;padding:1em;letter-spacing:0.25em}#navigation .sep{opacity:0.3;font-style:italic}#blackpage, #nojsredirect{top:0;left:0;width:100%;min-height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:fixed;text-align:center;background:#fdf6e3}#content{background:#fffffb;color:#586e75;width:100%;max-width:720px;margin:0 auto;padding:0}#content #titre h1{padding:0 64px;margin:64px auto;text-align:center;font-weight:200}#content h1, #content h2, #content h3, #content h4, #content h5, #content h6{padding:0 64px;margin:64px 0;color:#657b83}#content table{margin:16px 0;padding:0 64px}#content table tr:nth-child(odd){background-color:#fdf6e3}#content table tr th{border:solid medium #eee8d5;padding:4px;margin:0}#content table tr td{border:solid 1px #eee8d5;padding:4px;margin:0}#content figure, #content .figure{margin:0;padding:0}#content figure figcaption, #content figure .caption, #content .figure figcaption, #content .figure .caption{padding:0 64px;margin:16px 0}#content p{padding:0 64px;margin:16px 0}#content img{max-width:100%;display:block;border-top:medium solid;border-bottom:medium solid;margin:64px auto}#content pre{background:#fdf6e3;font-family:monaco, monospace;font-size:16px;overflow:auto;padding:16px;line-height:17.92px;border-top:solid 1px #eee8d5;border-bottom:solid 1px #eee8d5}#content pre code{background:none;border:none}#content ul{list-style:none}#content ul li:before{content:"- "}#content ul{padding-left:0;margin:16px 64px;text-indent:-8px}#content ol{padding-left:0;margin:16px 64px}#content .toc a, #content #markdown-toc a{color:#586e75}#content .toc ol li, #content .toc ul li, #content #markdown-toc ol li, #content #markdown-toc ul li{margin:8px 0}#content ol li ul, #content ol li ol, #content ul li ol, #content ul li ul{margin:8px 24px;list-style:none}#content li p{display:inline;margin:0;padding:0}@media only screen and (max-width:592px){#content{padding:0;width:100%}#content .corps{padding:0 1em}}#entete > #choix > #choixlang{float:left}#choixlang{float:left}#switchcss{float:right}#choix{text-align:center}#choix > div{display:inline-block}#header{border-bottom:8px solid #93a1a1}#choix{text-align:center;font-size:12px;padding:0 16px;font-weight:bold}#choix #switchcss{float:right}.cut{color:#586e75;font-size:10.66667px;opacity:0.5;display:block;text-align:right}.cut:after{content:" »"}.cut:hover{opacity:1}hr{color:#93a1a1;border-color:#eee8d5;margin:0 64px}p code, li code{padding:1px 2px;background:#fdf6e3;border:solid 1px #eee8d5}#content blockquote{border:solid 1px #eee8d5;background:#fdf6e3}#content blockquote p{padding:0 16px}#content blockquote code{background:#fdf6e3;border:solid 1px rgba(0, 0, 0, 0.1)}#content blockquote pre code{background:none;border:none}#social, #comment{margin:16px 64px}#social{text-align:center;opacity:0.3}#social:hover{opacity:1}#comment img{width:auto;max-width:100%}.intro{width:100%;max-width:646px;margin:0 auto;font-size:14px;line-height:21px;color:#657b83}.intro blockquote hr{display:none}.left{float:left}.right{float:right}#content img.right, #content img.left{max-width:30%;border:medium solid}#content img.left{margin:0 32px 0 64px}#content img.right{margin:0 64px 0 32px}.flush{clear:both}#bottom{padding:16px 0;text-align:center;font-size:14px;line-height:21px}#entete{padding:16px 0;text-align:center}#entete ul{text-indent:0}#entete ul li:before{content:""}#entete ul li{display:inline-block}#entete ul li span.active{color:#cb4b16}#entete ul li > *{padding:2px 16px;border:solid}#previous_articles{float:left;text-align:left}#next_articles{float:right;text-align:right}.corps{padding-bottom:32px}#tagcloud{margin:16px 64px;font-size:14px;line-height:21px}#sousliens.archive > ul{display:none}#sousliens.archive > h4:hover{cursor:pointer}#hiddenDivs > div{display:none}.list{margin:16px 64px}pre .list{margin:0 0}#content img#mainlogo{width:auto;margin:0 auto;display:block;max-width:100%}.date, .day, .month, .year{display:inline-block;padding-left:10px;text-align:right}.day{width:10px}.month{width:20px}.year{width:30px}.date{margin-right:10px}#content .popularblock{display:block;float:left;margin:1.5%;width:30%}#content .popularblock a:after{content:""}#content .popularblock figure, #content .popularblock .figure{width:100%;overflow:hidden}#content .popularblock figure img, #content .popularblock .figure img{height:120px}#content .popularblock figure figcaption, #content .popularblock figure .caption, #content .popularblock .figure figcaption, #content .popularblock .figure .caption{padding:0;text-align:center}.base03{color:#002b36}.base02{color:#073642}.base01{color:#586e75}.base00{color:#657b83}.base0{color:#839496}.base1{color:#93a1a1}.base2{color:#eee8d5}.base3{color:#fdf6e3}.yellow{color:#b58900}.orange{color:#cb4b16}.red{color:#dc322f}.magenta{color:#d33682}.violet{color:#6c71c4}.blue{color:#268bd2}.cyan{color:#2aa198}.green{color:#859900}#content section.slide{min-height:20em;border-top:1.6px solid #073642;border-bottom:1.6px solid #073642;margin:64px 0;background-color:#fdf6e3;color:#586e75;padding:16px 0}#content section.slide > *{padding:0 16px}#content section.slide a{text-decoration:none;color:#657b83}#content section.slide a:visited{color:#93a1a1}#content section.slide pre{padding:16px;margin:16px}#content section.slide pre, #content section.slide code{background-color:#fdf6e3;border:1px solid #eee8d5}#content section.slide pre code, #content section.slide code code{border:none;background:none}#content section.slide blockquote{background-color:#fdf6e3;border-color:#eee8d5}#content section.slide h1, #content section.slide h2, #content section.slide h3, #content section.slide h4, #content section.slide h5, #content section.slide h6{color:#657b83}#content section.slide ul{margin:16px 0;padding:0}#content section.slide ul li{margin:8px 24px}#content section.slide img{display:block;max-width:80%;margin:16px auto;padding:8px;background-color:#fdf6e3;border:solid 1px #eee8d5}#content section.slide img.right, #content section.slide img.left, #content section.slide figure.right, #content section.slide figure.left, #content section.slide .figure.right, #content section.slide .figure.left{max-width:26%;margin:8px}#content section.slide img.right figcaption, #content section.slide img.left figcaption, #content section.slide figure.right figcaption, #content section.slide figure.left figcaption, #content section.slide .figure.right figcaption, #content section.slide .figure.left figcaption{padding:0;text-align:center}#content section.slide figure, #content section.slide .figure{max-width:80%;margin:0 auto}#content section.slide figure img, #content section.slide .figure img{max-width:80%}.codefile{font-size:11.2px;text-align:right;margin-bottom:-32px}.footnotes{font-size:12.8px}#next_before_articles{font-size:11.2px;padding:0 64px;margin:16px 0}#totop{text-align:center;margin:0 auto}#content .inlineblockimg{width:60px;margin:16px;text-align:center;vertical-align:middle;display:inline-block}#content img.inlineimage{display:inline-block;max-height:48px;max-width:48px;border:solid;box-shadow:none;margin:0 auto;vertical-align:middle;font-size:7px;font-family:Helvetica, sans-serif;overflow:hidden} \ No newline at end of file diff --git a/Scratch/css/scientific.css b/Scratch/css/scientific.css index 0e2e3ce..bfe0a76 100644 --- a/Scratch/css/scientific.css +++ b/Scratch/css/scientific.css @@ -1 +1 @@ - @font-face{font-family:"cmuntt";src:url("fonts/cmuntt.eot");src:local("☺"), url("fonts/cmuntt.svg") format("svg"), url("fonts/cmuntt.ttf") format("truetype");font-weight:normal;font-style:normal}@font-face{font-family:"ComputerModern";src:url("fonts/cmunrb.eot");src:local("☺"), url("fonts/cmunrb.svg") format("svg"), url("fonts/cmunrb.ttf") format("truetype");font-weight:bold}@font-face{font-family:"ComputerModern";src:url("fonts/cmunsl.eot");src:local("☺"), url("fonts/cmunsl.svg") format("svg"), url("fonts/cmunsl.ttf") format("truetype");font-style:italic, oblique}@font-face{font-family:"ComputerModern";src:url("fonts/cmunrm.eot");src:local("☺"), url("fonts/cmunrm.svg") format("svg"), url("fonts/cmunrm.ttf") format("truetype");font-weight:normal;font-style:normal}i, em{font-style:italic}b, strong, h1, h2, h3, h4, h5, h6{font-weight:bold}table.description tr td{border:1px solid #eeeef1}.assombris20{background-color:#eeeef1}body{color:#002b36;background-color:#fafafc}::selection{background:#002b36;color:#93a1a1}::-moz-selection{background:#002b36;color:#93a1a1}pre, code, a.cut{font-family:Incosolata, Monaco, monospace}pre::selection{background:#fdf6e3;color:#586e75}pre *::selection{background:#fdf6e3;color:#586e75}pre::-moz-selection{background:#fdf6e3;color:#586e75}pre *::-moz-selection{background:#fdf6e3;color:#586e75}a:hover{text-shadow:0 0 2px #ffaaaa}a, a:link, a:visited, a:active, a:hover{text-decoration:none;outline:none}a, a:link, a:visited, a:active{color:#002b36}a:hover{color:#cb4b16}hr{color:#eeeef1;border-top:1px solid #eeeef1;border-bottom:none;border-left:none;border-right:none}ul{list-style:none}.corps ul li:before{content:"- "}ul{padding-left:0;margin-left:1.5ex;text-indent:-1.5ex}ol{padding-left:0}.toc ol li, .toc ul li{margin:0.5em 0}ol li ul, ol li ol, ul li ol, ul li ul{margin:0.5em 1.5em;list-style:none}body, h1, h2, h3, h4, #entete, .tagname{text-rendering:optimizelegibility;line-height:1.5em}body{font-family:Georgia, Palatino, "Century Schoolbook L", "Times New Roman", Times, serif}#choix{font-style:italic}#navigation{letter-spacing:0.25em;margin:1em auto 2em;font-size:1.25em;text-align:center;font-weight:bold}#navigation .sep{opacity:0.3;font-style:italic}.article #afterheader{counter-reset:niv02}.article #afterheader h2{counter-increment:niv02;counter-reset:niv03;marker-offset:3em}.article #afterheader h2:before{content:counter(niv02) ". "}.article #afterheader h3{counter-increment:niv03;counter-reset:niv04}.article #afterheader h3:before{content:counter(niv02) "." counter(niv03) ". "}.article #afterheader h4{counter-increment:niv04}.article #afterheader h4:before{content:counter(niv02) "." counter(niv03) "." counter(niv04) ". "}pre{background-color:#002b36;color:#839496;box-shadow:0 0 5px #d0d0d2 inset;border-radius:3px;padding:1em;line-height:1.1em;font-size:0.9em}p{margin-bottom:1.2em}.corps blockquote{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;font-style:italic;padding:0.5em 1em;color:#555566}.corps blockquote ul{margin-left:0}.corps blockquote a:hover{color:#cb4b16}.corps blockquote i, .corps blockquote em{font-weight:normal;font-style:normal;color:#002b36}.corps blockquote strong, .corps blockquote b{font-weight:bold;color:#002b36}.corps blockquote > ul{padding-left:1.5em}abbr, acronym{text-transform:uppercase;font-size:0.8em;text-decoration:none;border-bottom-width:0}#titre{letter-spacing:-0.06em;border-bottom:4px double #ccccd0;border-top:4px double #ccccd0}#liens .active, #sousliens{color:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1}#liens .active a, #sousliens a{color:#666677}#liens .active a:hover, #sousliens a:hover{color:#cb4b16}#liens .active a:hover strong, #liens .active a:hover b, #liens .active a:hover i, #liens .active a:hover em, #liens .active a:hover .nicer, #sousliens a:hover strong, #sousliens a:hover b, #sousliens a:hover i, #sousliens a:hover em, #sousliens a:hover .nicer{color:#ffb17c}#liens .active hr, #sousliens hr{color:#666677;border-top:1px solid #666677}#liens .active strong, #liens .active b, #liens .active i, #liens .active em, #sousliens strong, #sousliens b, #sousliens i, #sousliens em{color:#002b36}#liens a{border:1px solid #eeeeee;background:rgba(0, 0, 0, 0.05);box-shadow:0 0 2px white, 0 0 3px #cccccc inset;border:1px solid rgba(0, 0, 0, 0.1);border-radius:3px}#liens a:hover{background:rgba(0, 0, 0, 0.1);box-shadow:0 0 6px #555555 inset}#liens .active{text-shadow:0 0 2px rgba(0, 0, 0, 0.5);background-color:#f7f7f9;border:1px solid #e9e9eb;box-shadow:0 0 3px #c7c7c9 inset;border-radius:3px;border-top:none}#lastmod{font-size:0.9em}.nojsbutton{font-size:2.5em}#clickcomment, #choixrss > a{display:block;width:20%;cursor:pointer;margin:1em 0;padding:1em;font-size:16px;line-height:1.4em;border:1px solid #fafafc;color:#ccccd0}#clickcomment:hover, #choixrss > a:hover{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;color:#dc5c27;text-shadow:0 0 2px #ffaaaa}#clickcomment:hover ul, #choixrss > a:hover ul{margin-left:0}#clickcomment:active, #choixrss > a:active{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;color:#dc5c27;text-shadow:0 0 2px #ffaaaa;background:#f4f4f6}#clickcomment:active ul, #choixrss > a:active ul{margin-left:0}.return > a, #choixrss > a{float:right}#choix .return > a, #choix #choixrss > a{margin-top:0}#choix #switchcss{float:right}#choix #choixlang{float:left}#choix #choixlang a, #choix #switchcss a{margin-top:0;width:100%}.small{font-size:0.8em}.sc{text-transform:uppercase;font-size:0.8em}.impact, .darkimpact{font-size:2em;margin:0 auto 1em auto;line-height:1.3em}h1 > .date{font-size:0.6em;color:#002b36}.date{font-size:0.8em;color:#fafafc;border:1px solid #002b36;text-align:center;width:4.1em;line-height:1.5em;display:inline-block;vertical-align:middle;margin-right:1em}.date .day, .date .month, .date .year{display:block}.date .day{color:#002b36;background-color:#fafafc;float:left;width:1.7em}.date .month{float:right;width:2.3em;background-color:#002b36;color:#fafafc}.date .year{line-height:3ex;clear:both;color:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1;border-radius:0}.date .year a{color:#666677}.date .year a:hover{color:#cb4b16}.date .year a:hover strong, .date .year a:hover b, .date .year a:hover i, .date .year a:hover em, .date .year a:hover .nicer{color:#ffb17c}.date .year hr{color:#666677;border-top:1px solid #666677}.date .year strong, .date .year b, .date .year i, .date .year em{color:#002b36}body{text-align:center;font-size:16px}body > #entete{position:absolute;left:0;top:0.5em;width:100%;min-width:45em;z-index:8000;padding-bottom:1em;margin-bottom:3em}#titre h2{width:80%;margin-left:auto;margin-right:auto;text-align:center;color:#ccccd0}#titre{text-align:center;width:100%}#titre h1, #titre h2{padding-left:1em;padding-right:1em}#bottom{clear:right;margin-right:0px;padding:1.5em;line-height:1.5em;color:#224d58;margin-top:2em;text-align:center}#bottom a{color:#113c47}#bottom a:hover{color:#cb4b16}#sousliens{padding:1em 0;line-height:2em}#sousliens ul{list-style:none;margin-left:4em}ul.horizontal li{display:inline;font-size:0.9em}ul.horizontal{margin-top:0px;margin-bottom:0px}#entete{padding-top:0.1em;border-top:1px solid #ccccd0;border-bottom:1px solid #ccccd0}#liens{width:100%;padding:0;clear:both;margin-top:0.5em}#liens ul{width:100%;clear:both;padding:0;margin:0}#liens ul li{display:inline-block;height:4em;margin-left:0.2em;margin-right:0.2em;width:23%}#liens ul li a, #liens ul li span{width:100%;display:block;line-height:4em}.clear{clear:both}#content{line-height:2em;margin-left:auto;margin-right:auto;margin-top:0;position:relative;clear:both;width:100%;max-width:47em}@media only screen and (max-width:45em){#content{padding:0;width:100%}#content img{max-width:80%}#content .corps{padding:0 1em}}.encadre, .black, .intro, .resume, .shadow{padding:2em;margin-top:2em;margin-bottom:2em}.encadre, .black, .shadow{color:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1}.encadre a, .black a, .shadow a{color:#666677}.encadre a:hover, .black a:hover, .shadow a:hover{color:#cb4b16}.encadre a:hover strong, .encadre a:hover b, .encadre a:hover i, .encadre a:hover em, .encadre a:hover .nicer, .black a:hover strong, .black a:hover b, .black a:hover i, .black a:hover em, .black a:hover .nicer, .shadow a:hover strong, .shadow a:hover b, .shadow a:hover i, .shadow a:hover em, .shadow a:hover .nicer{color:#ffb17c}.encadre hr, .black hr, .shadow hr{color:#666677;border-top:1px solid #666677}.encadre strong, .encadre b, .encadre i, .encadre em, .black strong, .black b, .black i, .black em, .shadow strong, .shadow b, .shadow i, .shadow em{color:#002b36}.intro, .resume{font-size:0.9em;font-style:italic;padding:0.5em 1em;color:#555566}.intro a:hover, .resume a:hover{color:#cb4b16}.intro i, .intro em, .resume i, .resume em{font-weight:normal;font-style:normal;color:#002b36}.intro strong, .intro b, .resume strong, .resume b{font-weight:bold;color:#002b36}#afterheader > h1{width:100%;padding-top:1.5em;text-align:left}#afterheader{padding-left:0em;padding-right:0em}#sousliens{margin-top:3em;margin-bottom:3em;font-size:1.2em;letter-spacing:1px;text-align:left;clear:both}.twilight{line-height:1.1em}.corps{font-size:1.25em;line-height:1.5em;text-align:justify;padding:3em 3em;margin:0;clear:both}.corps p, .corps ol, .corps ul, .corps blockquote, .corps pre, .corps code{margin-top:1.5em;margin-bottom:1.5em}.corps pre code{margin:0}.corps p, .corps ol, .corps ul, .corps blockquote{line-height:1.5em}.corps ul li ul, .corps ol li ul, .corps ul li ol, .corps ol li ol{margin-top:0;margin-bottom:0}.corps img{max-width:80%;border:1px solid #ccccd0;background-color:#fafafc;padding:0.5em;box-shadow:0 10px 15px #cccccc;border-radius:3px}.corps a:hover img{background-color:#dc3a05}figure, .figure{margin:3em 0}figure img, .figure img{box-shadow:0 10px 15px #cccccc inset}figure figcaption, figure .caption, .figure figcaption, .figure .caption{text-align:center;margin:0.5em 0}figure.left, figure.right, .figure.right, .figure.left{max-width:30%}img.clean{border:none;background-color:none;box-shadow:none}#address{clear:both}.definitionCell{width:5em;vertical-align:top;text-align:center;font-weight:bold}.valueCell{text-align:right}.smallblock{float:left;width:50%;font-size:1em;font-weight:bold}.largeblock{float:right;width:70%;font-size:1em}#blackpage, #nojsredirect{top:0;left:0;width:100%;min-height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;text-align:center}#blackpage{color:#002b36;background-color:#fafafc;font-family:Georgia, serif;font-style:italic;padding-top:8em;z-index:9000;cursor:wait}#blackpage .corps code, #blackpage .corps pre{font-family:monospace}#blackpage img{background:none;border:none;max-width:80%;margin:0 auto}#blackpage a{cursor:pointer}#blackpage .preh1{font-size:1.5em;font-weight:bold;margin-bottom:1em}#blackpage .preh2{font-size:1.2em;font-style:italic;margin-bottom:1em}#blackpage .preintro{text-align:left;width:47em;margin:0 auto}#nojsredirect{z-index:9001}.nojsbutton{width:50%;padding:1em;border:solid 3px white;margin-left:auto;margin-right:auto;margin-top:2em;z-index:9002}.codefile{font-size:0.8em;text-align:right;padding-right:1em;margin-right:0.1;margin-bottom:-1em}.flush{clear:both}table.description{border-spacing:5px;border-collapse:separate;margin-right:auto;margin-left:auto}table.description tr td{padding-left:0.5em;padding-right:0.5em;padding-top:0.5ex;padding-bottom:0.5ex;vertical-align:middle;margin-right:5px}ul.long li{margin-bottom:1em}img{display:block;margin:1.2em auto;background:none;border:none}img.right{max-width:30%;margin-top:0.6em;margin-left:2em}img.left{float:left;max-width:30%;margin-top:0.6em;margin-right:2em}img.inside{display:inline;vertical-align:middle}pre{overflow-x:auto;overflow-y:hidden}.impact, .darkimpact{text-align:left;width:66%;padding-left:0.25em;padding-right:0.25em}table.impact{text-align:left}table.impact tr td{padding-left:0.25em;padding-right:0.25em}#liens{font-size:1.2em}#iemessage{font-size:1.2em;color:#cccccc;margin:-10px;padding:1px 0;background:#333333}#iemessage strong, #iemessage b, #iemessage i, #iemessage em{color:#cccccc}#iemessage a, #iemessage a:visited{color:#eeccaa}.tagname{display:inline;cursor:pointer;margin-left:0.5em;margin-right:0.5em}.list{margin-top:3em}#menuMessage{font-size:1.2em;line-height:1.5em;width:100%;text-align:center}#next_before_articles{clear:both;width:100%;font-size:1.2em;padding-top:1em;padding-bottom:1em}#previous_articles, #next_articles{color:#888899;font-size:0.8em;font-style:italic}#previous_articles{float:left;margin-left:1em;width:45%;text-align:left}.previous_article, .next_article{margin-top:1em}#next_articles{float:right;width:45%;margin-right:1em;text-align:right}#rss{font-size:1.2em;text-align:center;display:block;width:100%;float:right;padding:1em 0.1em}.corps .return a{color:#eeeef1;padding:0.1em;line-height:1.5em;font-size:1.5em;height:1.5em;float:left;font-size:2em;margin-top:-0.5em;margin-left:-2em;width:1.5em}a.return{color:#eeeef1;padding:0.1em;line-height:1.5em;font-size:1.5em;height:1.5em;font-size:2em;width:1.5em;display:block}a.return:hover{color:#888899}.corps .return a:hover{color:#cb4b16}.footnotes{font-size:0.8em}.footnotes ol{color:#839496;font-weight:bold}.footnotes ol p{color:#002b36;font-weight:normal;font-style:normal}.fontnotes ol{margin-left:0}.typeset img{display:inline;border:none;margin:0;padding:0}strong, b, i, em{color:#888899}strong a, b a, i a, em a{color:#002b36}strong a:hover, b a:hover, i a:hover, em a:hover{color:#cb4b16}.corps p strong, .corps p b, .corps p i, .corps p em{color:#555566}a:hover strong, a:hover b, a:hover i, a:hover em{color:#dc5c27}a:hover .nicer{color:#ffb17c}.nicer{color:#ccccd0;font-family:"Lucida Grande", Tahoma}.block{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;width:26.5%;padding:1em;border-radius:2px;text-align:left;line-height:1em;margin-left:1%;margin-right:1%;font-size:0.8em;height:9em}.block ul{margin-left:0}.block a{color:#002b36}.block a:hover{color:#cb4b16}.block h3{margin:0;font-size:1.3em}.block p{line-height:1.2em}.left{float:left}.right{float:right}.corps p a, .corps ul a{color:#555566}.corps p a:hover, .corps ul a:hover{color:#cb4b16}ul.bloglist, .archive ul{list-style-type:none;margin:0}ul.bloglist li, .archive ul li{margin-bottom:1em}.button{cursor:pointer;text-align:center}#tagcloud{font-size:0.8em;background:#f2f2f4;box-shadow:0 0 6px #ccccd0;border-radius:3px;line-height:2.5em;padding:2em;text-align:justify}.pala{font-family:Palatino}sup{vertical-align:top;font-size:0.7em}.article .corps a:after{content:"†";vertical-align:super;line-height:0;font-size:0.66em;color:#888899}.article .corps .footnotes a:after, .article .corps sup a:after{content:""}.article .corps sup a{font-weight:bold;padding:0 0.3em;margin-left:2px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}.article .corps sup a:hover{color:#cb4b16}ul#markdown-toc, .intro .toc ul{text-transform:uppercase;font-size:0.8em;list-style:none;padding-left:1.5em}ul#markdown-toc a:after, .intro .toc ul a:after{content:""}ul#markdown-toc ul ul, .intro .toc ul ul ul{font-variant:normal;line-height:1em;font-size:1em;margin-bottom:1em}table{border:1px solid #ccccd0}table tr td{padding:2px 0.5em}table tr:nth-child(odd){background-color:#f2f2f4}table tr:nth-child(even){background-color:#fafafc}p pre code, ul li pre code, ol li pre code{background:none;border:none;padding:0}p code, ul li code, ol li code{background:#f0f0f2;border:solid 1px #ccccd0;padding:2px}ul.sameline{list-style:none}ul.sameline li{float:left;margin-left:0.5em}.resumearticle{background-color:#f2f2f4;border-radius:7px;box-shadow:0 0 5px #c7c7b8 inset, 0 0 5px white;margin:1em 0;padding:1em}a.cut{font-size:12px;text-align:right;display:block;width:100%;opacity:0.5;border:1px solid #fafafc;border-radius:3px}a.cut:hover{opacity:1;background-color:#f2f2f4;border-color:#ccccd0;box-shadow:0 0 3px #ccccd0 inset}a.cut strong{font-weight:bold}.codehighlight pre{border-left:4px solid #ccccd0}#social{text-align:center;opacity:0.3}#social:hover{opacity:1}.popularblock{width:30.3333%;margin:0 1.5%;float:left}.popularblock figure{margin:0}.popularblock figure img{max-width:80%;max-height:6em}.inlineblockimg{width:48px;margin:0 8px;text-align:center;vertical-align:middle;display:inline-block;line-height:0.8em;overflow:hidden;border:solid 1px}img.inlineimage{padding:0;max-height:48px;max-width:48px;border:none;box-shadow:none;margin:0 auto;vertical-align:middle;font-size:7px;font-family:Helvetica, sans-serif;overflow:hidden}section.slide{border-color:#ccccd0;border:solid 1px;margin-bottom:1em;padding:0.5em;font-family:sans-serif;font-size:0.8em;min-height:25em}a.rss{background-color:#f8f8f8;background-image:-moz-linear-gradient(center top, white, #dedede);border:1px solid #cccccc;border-radius:3px 3px 3px 3px;color:#cb4b16;cursor:pointer;display:inline-block;font-size:13px;font-weight:bold;height:20px;font-family:sans-serif;line-height:20px;overflow:hidden;padding:0 5px;position:relative;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);margin:0 20px}a.rss:hover{background-image:-moz-linear-gradient(center top, white, #f3f3f3)}.base03{color:#002b36}.base02{color:#073642}.base01{color:#586e75}.base00{color:#657b83}.base0{color:#839496}.base1{color:#93a1a1}.base2{color:#eee8d5}.base3{color:#fdf6e3}.yellow{color:#b58900}.orange{color:#cb4b16}.red{color:#dc322f}.magenta{color:#d33682}.violet{color:#6c71c4}.blue{color:#268bd2}.cyan{color:#2aa198}.green{color:#859900}#header{opacity:0.25}#header:hover{opacity:1} \ No newline at end of file + @font-face{font-family:"cmuntt";src:url("fonts/cmuntt.eot");src:local("☺"), url("fonts/cmuntt.svg") format("svg"), url("fonts/cmuntt.ttf") format("truetype");font-weight:normal;font-style:normal}@font-face{font-family:"social";src:url("fonts/social_font.ttf") format("truetype");font-weight:normal;font-style:normal}.social{font-family:social}@font-face{font-family:"ComputerModern";src:url("fonts/cmunrb.eot");src:local("☺"), url("fonts/cmunrb.svg") format("svg"), url("fonts/cmunrb.ttf") format("truetype");font-weight:bold}@font-face{font-family:"ComputerModern";src:url("fonts/cmunsl.eot");src:local("☺"), url("fonts/cmunsl.svg") format("svg"), url("fonts/cmunsl.ttf") format("truetype");font-style:italic, oblique}@font-face{font-family:"ComputerModern";src:url("fonts/cmunrm.eot");src:local("☺"), url("fonts/cmunrm.svg") format("svg"), url("fonts/cmunrm.ttf") format("truetype");font-weight:normal;font-style:normal}i, em{font-style:italic}b, strong, h1, h2, h3, h4, h5, h6{font-weight:bold}table.description tr td{border:1px solid #eeeef1}.assombris20{background-color:#eeeef1}body{color:#002b36;background-color:#fafafc}::selection{background:#002b36;color:#93a1a1}::-moz-selection{background:#002b36;color:#93a1a1}pre, code, a.cut{font-family:Incosolata, Monaco, monospace}pre::selection{background:#fdf6e3;color:#586e75}pre *::selection{background:#fdf6e3;color:#586e75}pre::-moz-selection{background:#fdf6e3;color:#586e75}pre *::-moz-selection{background:#fdf6e3;color:#586e75}a:hover{text-shadow:0 0 2px #ffaaaa}a, a:link, a:visited, a:active, a:hover{text-decoration:none;outline:none}a, a:link, a:visited, a:active{color:#002b36}a:hover{color:#cb4b16}hr{color:#eeeef1;border-top:1px solid #eeeef1;border-bottom:none;border-left:none;border-right:none}ul{list-style:none}.corps ul li:before{content:"- "}ul{padding-left:0;margin-left:1.5ex;text-indent:-1.5ex}ol{padding-left:0}.toc ol li, .toc ul li{margin:0.5em 0}ol li ul, ol li ol, ul li ol, ul li ul{margin:0.5em 1.5em;list-style:none}body, h1, h2, h3, h4, #entete, .tagname{text-rendering:optimizelegibility;line-height:1.5em}body{font-family:Georgia, Palatino, "Century Schoolbook L", "Times New Roman", Times, serif}#navigation{letter-spacing:0.25em;margin:1em auto 2em;font-size:1.25em;text-align:center;font-weight:bold}#navigation .sep{opacity:0.3;font-style:italic}.article #afterheader{counter-reset:niv02}.article #afterheader h2{counter-increment:niv02;counter-reset:niv03;marker-offset:3em}.article #afterheader h2:before{content:counter(niv02) ". "}.article #afterheader h3{counter-increment:niv03;counter-reset:niv04}.article #afterheader h3:before{content:counter(niv02) "." counter(niv03) ". "}.article #afterheader h4{counter-increment:niv04}.article #afterheader h4:before{content:counter(niv02) "." counter(niv03) "." counter(niv04) ". "}pre{background-color:#002b36;color:#839496;box-shadow:0 0 5px #d0d0d2 inset;border-radius:3px;padding:1em;line-height:1.1em;font-size:0.9em}p{margin-bottom:1.2em}.corps blockquote{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;font-style:italic;padding:0.5em 1em;color:#555566}.corps blockquote ul{margin-left:0}.corps blockquote a:hover{color:#cb4b16}.corps blockquote i, .corps blockquote em{font-weight:normal;font-style:normal;color:#002b36}.corps blockquote strong, .corps blockquote b{font-weight:bold;color:#002b36}.corps blockquote > ul{padding-left:1.5em}abbr, acronym{text-transform:uppercase;font-size:0.8em;text-decoration:none;border-bottom-width:0}#titre{letter-spacing:-0.06em;margin:2em 0;border-bottom:4px double #ccccd0;border-top:4px double #ccccd0}#liens .active, #sousliens{color:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1}#liens .active a, #sousliens a{color:#666677}#liens .active a:hover, #sousliens a:hover{color:#cb4b16}#liens .active a:hover strong, #liens .active a:hover b, #liens .active a:hover i, #liens .active a:hover em, #liens .active a:hover .nicer, #sousliens a:hover strong, #sousliens a:hover b, #sousliens a:hover i, #sousliens a:hover em, #sousliens a:hover .nicer{color:#ffb17c}#liens .active hr, #sousliens hr{color:#666677;border-top:1px solid #666677}#liens .active strong, #liens .active b, #liens .active i, #liens .active em, #sousliens strong, #sousliens b, #sousliens i, #sousliens em{color:#002b36}#liens a{border:1px solid #eeeeee;background:rgba(0, 0, 0, 0.05);box-shadow:0 0 2px white, 0 0 3px #cccccc inset;border:1px solid rgba(0, 0, 0, 0.1);border-radius:3px}#liens a:hover{background:rgba(0, 0, 0, 0.1);box-shadow:0 0 6px #555555 inset}#liens .active{text-shadow:0 0 2px rgba(0, 0, 0, 0.5);background-color:#f7f7f9;border:1px solid #e9e9eb;box-shadow:0 0 3px #c7c7c9 inset;border-radius:3px;border-top:none}#lastmod{font-size:0.9em}.nojsbutton{font-size:2.5em}#clickcomment, #choixrss > a{display:block;width:20%;cursor:pointer;margin:1em 0;padding:1em;font-size:16px;line-height:1.4em;border:1px solid #fafafc;color:#ccccd0}#clickcomment:hover, #choixrss > a:hover{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;color:#dc5c27;text-shadow:0 0 2px #ffaaaa}#clickcomment:hover ul, #choixrss > a:hover ul{margin-left:0}#clickcomment:active, #choixrss > a:active{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;color:#dc5c27;text-shadow:0 0 2px #ffaaaa;background:#f4f4f6}#clickcomment:active ul, #choixrss > a:active ul{margin-left:0}.return > a, #choixrss > a{float:right}#choix .return > a, #choix #choixrss > a{margin-top:0}#choix #switchcss{float:right}#choix #choixlang{float:left}#choix #choixlang a, #choix #switchcss a{margin-top:0;width:100%}.small{font-size:0.8em}.tiny{font-size:0.6em}.sc{text-transform:uppercase;font-size:0.8em}.impact, .darkimpact{font-size:2em;margin:0 auto 1em auto;line-height:1.3em}h1 > .date{font-size:0.6em;color:#002b36}.date{font-size:0.8em;color:#fafafc;border:1px solid #002b36;text-align:center;width:4.1em;line-height:1.5em;display:inline-block;vertical-align:middle;margin-right:1em}.date .day, .date .month, .date .year{display:block}.date .day{color:#002b36;background-color:#fafafc;float:left;width:1.7em}.date .month{float:right;width:2.3em;background-color:#002b36;color:#fafafc}.date .year{line-height:3ex;clear:both;color:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1;border-radius:0}.date .year a{color:#666677}.date .year a:hover{color:#cb4b16}.date .year a:hover strong, .date .year a:hover b, .date .year a:hover i, .date .year a:hover em, .date .year a:hover .nicer{color:#ffb17c}.date .year hr{color:#666677;border-top:1px solid #666677}.date .year strong, .date .year b, .date .year i, .date .year em{color:#002b36}body{text-align:center;font-size:16px}body > #entete{position:absolute;left:0;top:0.5em;width:100%;min-width:45em;z-index:8000;padding-bottom:1em;margin-bottom:3em}#titre h2{width:80%;margin-left:auto;margin-right:auto;text-align:center;color:#ccccd0}#titre{text-align:center;width:100%}#titre h1, #titre h2{padding-left:1em;padding-right:1em}#bottom{clear:right;margin-right:0px;padding:1.5em;line-height:1.5em;color:#224d58;margin-top:2em;text-align:center}#bottom a{color:#113c47}#bottom a:hover{color:#cb4b16}#sousliens{padding:1em 0;line-height:2em}#sousliens ul{list-style:none;margin-left:4em}ul.horizontal li{display:inline;font-size:0.9em}ul.horizontal{margin-top:0px;margin-bottom:0px}#entete{padding-top:0.1em;border-top:1px solid #ccccd0;border-bottom:1px solid #ccccd0}#liens{width:100%;padding:0;clear:both;margin-top:0.5em}#liens ul{width:100%;clear:both;padding:0;margin:0}#liens ul li{display:inline-block;height:4em;margin-left:0.2em;margin-right:0.2em;width:23%}#liens ul li a, #liens ul li span{width:100%;display:block;line-height:4em}.clear{clear:both}#content{line-height:2em;margin-left:auto;margin-right:auto;margin-top:0;position:relative;clear:both;width:100%;max-width:47em}@media only screen and (max-width:45em){#content{padding:0;width:100%}#content img{max-width:80%}#content .corps{padding:0 1em}}.encadre, .black, .intro, .resume, .shadow{padding:2em;margin-top:2em;margin-bottom:2em}.encadre, .black, .shadow{color:#002b36;border:#ccccd0 solid 1px;border-radius:5px;box-shadow:0 0 2px #ccccd0 inset;background-color:#eeeef1}.encadre a, .black a, .shadow a{color:#666677}.encadre a:hover, .black a:hover, .shadow a:hover{color:#cb4b16}.encadre a:hover strong, .encadre a:hover b, .encadre a:hover i, .encadre a:hover em, .encadre a:hover .nicer, .black a:hover strong, .black a:hover b, .black a:hover i, .black a:hover em, .black a:hover .nicer, .shadow a:hover strong, .shadow a:hover b, .shadow a:hover i, .shadow a:hover em, .shadow a:hover .nicer{color:#ffb17c}.encadre hr, .black hr, .shadow hr{color:#666677;border-top:1px solid #666677}.encadre strong, .encadre b, .encadre i, .encadre em, .black strong, .black b, .black i, .black em, .shadow strong, .shadow b, .shadow i, .shadow em{color:#002b36}.intro, .resume{font-size:0.9em;font-style:italic;padding:0.5em 1em;color:#555566}.intro a:hover, .resume a:hover{color:#cb4b16}.intro i, .intro em, .resume i, .resume em{font-weight:normal;font-style:normal;color:#002b36}.intro strong, .intro b, .resume strong, .resume b{font-weight:bold;color:#002b36}#afterheader > h1{width:100%;padding-top:1.5em;text-align:left}#afterheader{padding-left:0em;padding-right:0em}#sousliens{margin-top:3em;margin-bottom:3em;font-size:1.2em;letter-spacing:1px;text-align:left;clear:both}.twilight{line-height:1.1em}.corps{font-size:1.25em;line-height:1.5em;text-align:justify;padding:3em 3em;margin:0;clear:both}.corps p, .corps ol, .corps ul, .corps blockquote, .corps pre, .corps code{margin-top:1.5em;margin-bottom:1.5em}.corps pre code{margin:0}.corps p, .corps ol, .corps ul, .corps blockquote{line-height:1.5em}.corps ul li ul, .corps ol li ul, .corps ul li ol, .corps ol li ol{margin-top:0;margin-bottom:0}.corps img{max-width:80%;border:1px solid #ccccd0;background-color:#fafafc;padding:0.5em;box-shadow:0 10px 15px #cccccc;border-radius:3px}.corps a:hover img{background-color:#dc3a05}figure, .figure{margin:3em 0}figure img, .figure img{box-shadow:0 10px 15px #cccccc inset}figure figcaption, figure .caption, .figure figcaption, .figure .caption{text-align:center;margin:0.5em 0}figure.left, figure.right, .figure.right, .figure.left{max-width:30%}img.clean{border:none;background-color:none;box-shadow:none}#address{clear:both}.definitionCell{width:5em;vertical-align:top;text-align:center;font-weight:bold}.valueCell{text-align:right}.smallblock{float:left;width:50%;font-size:1em;font-weight:bold}.largeblock{float:right;width:70%;font-size:1em}#blackpage, #nojsredirect{top:0;left:0;width:100%;min-height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:absolute;text-align:center}#blackpage{color:#002b36;background-color:#fafafc;font-family:Georgia, serif;font-style:italic;padding-top:8em;z-index:9000;cursor:wait}#blackpage .corps code, #blackpage .corps pre{font-family:monospace}#blackpage img{background:none;border:none;max-width:80%;margin:0 auto}#blackpage a{cursor:pointer}#blackpage .preh1{font-size:1.5em;font-weight:bold;margin-bottom:1em}#blackpage .preh2{font-size:1.2em;font-style:italic;margin-bottom:1em}#blackpage .preintro{text-align:left;width:47em;margin:0 auto}#nojsredirect{z-index:9001}.nojsbutton{width:50%;padding:1em;border:solid 3px white;margin-left:auto;margin-right:auto;margin-top:2em;z-index:9002}.codefile{font-size:0.8em;text-align:right;padding-right:1em;margin-right:0.1;margin-bottom:-1em}.flush{clear:both}table.description{border-spacing:5px;border-collapse:separate;margin-right:auto;margin-left:auto}table.description tr td{padding-left:0.5em;padding-right:0.5em;padding-top:0.5ex;padding-bottom:0.5ex;vertical-align:middle;margin-right:5px}ul.long li{margin-bottom:1em}img{display:block;margin:1.2em auto;background:none;border:none}img.right{max-width:30%;margin-top:0.6em;margin-left:2em}img.left{float:left;max-width:30%;margin-top:0.6em;margin-right:2em}img.inside{display:inline;vertical-align:middle}pre{overflow-x:auto;overflow-y:hidden}.impact, .darkimpact{text-align:left;width:66%;padding-left:0.25em;padding-right:0.25em}table.impact{text-align:left}table.impact tr td{padding-left:0.25em;padding-right:0.25em}#liens{font-size:1.2em}#iemessage{font-size:1.2em;color:#cccccc;margin:-10px;padding:1px 0;background:#333333}#iemessage strong, #iemessage b, #iemessage i, #iemessage em{color:#cccccc}#iemessage a, #iemessage a:visited{color:#eeccaa}.tagname{display:inline;cursor:pointer;margin-left:0.5em;margin-right:0.5em}.list{margin-top:3em}#menuMessage{font-size:1.2em;line-height:1.5em;width:100%;text-align:center}#next_before_articles{clear:both;width:100%;font-size:1.2em;padding-top:1em;padding-bottom:1em}#previous_articles, #next_articles{color:#888899;font-size:0.8em;font-style:italic}#previous_articles{float:left;margin-left:1em;width:45%;text-align:left}.previous_article, .next_article{margin-top:1em}#next_articles{float:right;width:45%;margin-right:1em;text-align:right}.corps .return a{color:#eeeef1;padding:0.1em;line-height:1.5em;font-size:1.5em;height:1.5em;float:left;font-size:2em;margin-top:-0.5em;margin-left:-2em;width:1.5em}a.return{color:#eeeef1;padding:0.1em;line-height:1.5em;font-size:1.5em;height:1.5em;font-size:2em;width:1.5em;display:block}a.return:hover{color:#888899}.corps .return a:hover{color:#cb4b16}.footnotes{font-size:0.8em}.footnotes ol{color:#839496;font-weight:bold}.footnotes ol p{color:#002b36;font-weight:normal;font-style:normal}.fontnotes ol{margin-left:0}.typeset img{display:inline;border:none;margin:0;padding:0}strong, b, i, em{color:#888899}strong a, b a, i a, em a{color:#002b36}strong a:hover, b a:hover, i a:hover, em a:hover{color:#cb4b16}.corps p strong, .corps p b, .corps p i, .corps p em{color:#555566}a:hover strong, a:hover b, a:hover i, a:hover em{color:#dc5c27}a:hover .nicer{color:#ffb17c}.nicer{color:#ccccd0;font-family:"Lucida Grande", Tahoma}.block{border:solid 1px #ccccd0;border-radius:2px;box-shadow:0 0 4px #f2f2f4 inset;background-color:#f8f8fa;width:26.5%;padding:1em;border-radius:2px;text-align:left;line-height:1em;margin-left:1%;margin-right:1%;font-size:0.8em;height:9em}.block ul{margin-left:0}.block a{color:#002b36}.block a:hover{color:#cb4b16}.block h3{margin:0;font-size:1.3em}.block p{line-height:1.2em}.left{float:left}.right{float:right}.corps p a, .corps ul a{color:#555566}.corps p a:hover, .corps ul a:hover{color:#cb4b16}ul.bloglist, .archive ul{list-style-type:none;margin:0}ul.bloglist li, .archive ul li{margin-bottom:1em}.button{cursor:pointer;text-align:center}#tagcloud{font-size:0.8em;background:#f2f2f4;box-shadow:0 0 6px #ccccd0;border-radius:3px;line-height:2.5em;padding:2em;text-align:justify}.pala{font-family:Palatino}sup{vertical-align:top;font-size:0.7em}.article .corps a:after{content:"†";vertical-align:super;line-height:0;font-size:0.66em;color:#888899}.article .corps .nostar a:after{content:""}.article .corps .footnotes a:after, .article .corps sup a:after{content:""}.article .corps sup a{font-weight:bold;padding:0 0.3em;margin-left:2px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}.article .corps sup a:hover{color:#cb4b16}ul#markdown-toc, .intro .toc ul{text-transform:uppercase;font-size:0.8em;list-style:none;padding-left:1.5em}ul#markdown-toc a:after, .intro .toc ul a:after{content:""}ul#markdown-toc ul ul, .intro .toc ul ul ul{font-variant:normal;line-height:1em;font-size:1em;margin-bottom:1em}table{border:1px solid #ccccd0}table tr td{padding:2px 0.5em}table tr:nth-child(odd){background-color:#f2f2f4}table tr:nth-child(even){background-color:#fafafc}p pre code, ul li pre code, ol li pre code{background:none;border:none;padding:0}p code, ul li code, ol li code{background:#f0f0f2;border:solid 1px #ccccd0;padding:2px}ul.sameline{list-style:none}ul.sameline li{float:left;margin-left:0.5em}.resumearticle{background-color:#f2f2f4;border-radius:7px;box-shadow:0 0 5px #c7c7b8 inset, 0 0 5px white;margin:1em 0;padding:1em}a.cut{font-size:12px;text-align:right;display:block;width:100%;opacity:0.5;border:1px solid #fafafc;border-radius:3px}a.cut:hover{opacity:1;background-color:#f2f2f4;border-color:#ccccd0;box-shadow:0 0 3px #ccccd0 inset}a.cut strong{font-weight:bold}.codehighlight pre{border-left:4px solid #ccccd0}#social{font-size:2em;text-align:center;opacity:0.3}#social .message{font-size:10px}#social:hover{opacity:1}.popularblock{width:30.3333%;margin:0 1.5%;float:left}.popularblock figure{margin:0}.popularblock figure img{max-width:80%;max-height:6em}.inlineblockimg{width:48px;margin:8px;text-align:center;vertical-align:middle;display:inline-block;line-height:0.8em;overflow:hidden;border:solid 1px}img.inlineimage{padding:0;max-height:48px;max-width:48px;border:none;box-shadow:none;margin:0 auto;vertical-align:middle;font-size:7px;font-family:Helvetica, sans-serif;overflow:hidden}section.slide{border-color:#ccccd0;border:solid 1px;margin-bottom:1em;padding:0.5em;font-family:sans-serif;font-size:0.8em;min-height:25em}a.rss{background-color:#f8f8f8;background-image:-moz-linear-gradient(center top, white, #dedede);border:1px solid #cccccc;border-radius:3px 3px 3px 3px;color:#cb4b16;cursor:pointer;display:inline-block;font-size:13px;font-weight:bold;height:20px;font-family:sans-serif;line-height:20px;overflow:hidden;padding:0 5px;position:relative;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5)}a.rss:hover{background-image:-moz-linear-gradient(center top, white, #f3f3f3)}.base03{color:#002b36}.base02{color:#073642}.base01{color:#586e75}.base00{color:#657b83}.base0{color:#839496}.base1{color:#93a1a1}.base2{color:#eee8d5}.base3{color:#fdf6e3}.yellow{color:#b58900}.orange{color:#cb4b16}.red{color:#dc322f}.magenta{color:#d33682}.violet{color:#6c71c4}.blue{color:#268bd2}.cyan{color:#2aa198}.green{color:#859900}#header{opacity:0.25}#header:hover{opacity:1} \ No newline at end of file diff --git a/Scratch/en/about/old/index.html b/Scratch/en/about/old/index.html index 3fe1855..1413b01 100644 --- a/Scratch/en/about/old/index.html +++ b/Scratch/en/about/old/index.html @@ -60,7 +60,7 @@

diff --git a/Scratch/en/blog/01_nanoc/index.html b/Scratch/en/blog/01_nanoc/index.html index ade86c7..a739b7f 100644 --- a/Scratch/en/blog/01_nanoc/index.html +++ b/Scratch/en/blog/01_nanoc/index.html @@ -32,16 +32,8 @@ document.write(''); // +
- - @@ -49,7 +41,7 @@

Nanoc

-
+

What is nanoc?

It is not exactly a CMS. But a Framework to generate static web pages.

@@ -59,25 +51,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -95,6 +88,7 @@ comments powered by Disqus
+
Published on 2008-10-10 diff --git a/Scratch/en/blog/02_ackgrep/index.html b/Scratch/en/blog/02_ackgrep/index.html index 78c287f..ec21d2f 100644 --- a/Scratch/en/blog/02_ackgrep/index.html +++ b/Scratch/en/blog/02_ackgrep/index.html @@ -32,16 +32,8 @@ document.write(''); // +
-
-
@@ -49,7 +41,7 @@

Better than Grep

-
+

update

As Andy Lester told me ack is a simple file you only have to copy in your ~/bin folder. Now I’ve got ack on my professional server.

@@ -74,25 +66,26 @@ listeFic=( /(.) ) autoload zargs zargs – $listeFic – grep $1 |
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -110,6 +103,7 @@ listeFic=( /(.) ) autoload zargs zargs – $listeFic – grep $1 | comments powered by Disqus
+
Published on 2009-07-22 diff --git a/Scratch/en/blog/03_losthighway/index.html b/Scratch/en/blog/03_losthighway/index.html index 5c445d5..a485444 100644 --- a/Scratch/en/blog/03_losthighway/index.html +++ b/Scratch/en/blog/03_losthighway/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

A try to demystify 'Lost Highway'

-
+

Lost Highway

@@ -131,25 +123,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -167,6 +160,7 @@ comments powered by Disqus
+
Published on 2009-08-04 diff --git a/Scratch/en/blog/04_drm/index.html b/Scratch/en/blog/04_drm/index.html index b32a200..c5730e2 100644 --- a/Scratch/en/blog/04_drm/index.html +++ b/Scratch/en/blog/04_drm/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

DRM are EVIL

-
+

DRM are EVIL (+1)

My wife bought about 500€ (at least) of TV Shows on iTunes. She bought the first season of Battlestar Gallactica in english (she notified the language after the dowload). DRM make it impossible to play it with french sub-titles.

@@ -70,25 +62,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -106,6 +99,7 @@ comments powered by Disqus
+
Published on 2009-08-15 diff --git a/Scratch/en/blog/05_git_create_remote_branch/index.html b/Scratch/en/blog/05_git_create_remote_branch/index.html index 9e8bf73..5c72e2d 100644 --- a/Scratch/en/blog/05_git_create_remote_branch/index.html +++ b/Scratch/en/blog/05_git_create_remote_branch/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Git remote branch creation

-
+

easiest remote Git branch creation

I use git simply to synchronize stuff for personnal projects. Therefore, when I create a local branch I want most of time this branch to be created remotely.

@@ -66,25 +58,26 @@ branch=1gitbr
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -102,6 +95,7 @@ branch=1gitbrPlease enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
+
Published on 2009-08-17 diff --git a/Scratch/en/blog/06_How_I_use_git/index.html b/Scratch/en/blog/06_How_I_use_git/index.html index d7d591c..a6b0f7d 100644 --- a/Scratch/en/blog/06_How_I_use_git/index.html +++ b/Scratch/en/blog/06_How_I_use_git/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Git for self

-
+

central architecture

I use Git to manage my personnal projects. I have a centralized repository which all my computer should synchronize with. Unfortunately I didn’t find clearly what I needed on the official Git documentation.

@@ -175,25 +167,26 @@ done
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -211,6 +204,7 @@ done comments powered by Disqus
+
Published on 2009-08-18 diff --git a/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html b/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html index ecc6965..b51edbe 100644 --- a/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html +++ b/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Screensaver compilation option for Snow Leopard©

-
+

How to recompile your screensaver to be Snow Leopard(c) compatible

I upgraded to Mac OS X 10.6 Snow Leopard(c), and my YClock screensaver didn’t work on it. After searching on google, the problem seems to be just a recompilation away. Unfortunately, even recompiling it in 64 bit it didn’t work either. After a bit more research (thanks to ElectricSheep ).

@@ -61,25 +53,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -97,6 +90,7 @@ comments powered by Disqus
+
Published on 2009-09-06 diff --git a/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html b/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html index 6bdbe4b..d8a3fb5 100644 --- a/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html +++ b/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

ssh to Listen 443 on Snow Leopard

-
+

Surf everywhere as if you were at home

In order to bypass evil company firewall and to surf safely on unsafe wifi. I keep an ssh server listening on the port 443.

@@ -112,25 +104,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -148,6 +141,7 @@ comments powered by Disqus
+
Published on 2009-09-07 diff --git a/Scratch/en/blog/09_Why_I_didn-t_keep_whosamung-us/index.html b/Scratch/en/blog/09_Why_I_didn-t_keep_whosamung-us/index.html index 0b11b60..13c88f5 100644 --- a/Scratch/en/blog/09_Why_I_didn-t_keep_whosamung-us/index.html +++ b/Scratch/en/blog/09_Why_I_didn-t_keep_whosamung-us/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Why I didn't keep whos.amung.us

-
+

I changed from whos.amung.us to Google Analytics.

Most of time I prefer not to use the same product as everybody and try some new. But this time I believe whosamung.us had too much ads on the page. I had to put their image on my website and they only give then number of user currently on the website, not the number of visits.

@@ -66,25 +58,26 @@ Google Analytics > Who’s Amung Us
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -102,6 +95,7 @@ Google Analytics > Who’s Amung Us comments powered by Disqus
+
Published on 2009-09-11 diff --git a/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html b/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html index 0aa4525..ce98235 100644 --- a/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html +++ b/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Synchronize Custom WebSite with mobileMe

-
+

Update (2012/01/11)

iDisk should soon disapear. This entry is mainly obsolescent now.

@@ -284,25 +276,26 @@ print -P -- " Publish terminated"
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -320,6 +313,7 @@ print -P -- " Publish terminated" comments powered by Disqus
+
Published on 2009-09-11 diff --git a/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html b/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html index a4d662c..e32b2da 100644 --- a/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html +++ b/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Load Disqus Asynchronously

-
+

Update

In fact this method works for old threads. But it fails to create new post threads. This is why I tried and be conquered by intensedebate, as you can see in the bottom of this page.

@@ -73,14 +65,14 @@

Javascript

replace:

-
<script type="text/javascript" src="http://disqus.com/forums/YOUR_DISQUS_ID/embed.js"></script>
+
<script type="text/javascript" src="http://disqus.com/forums/YOUR_DISQUS_ID/embed.js"></script>

by

-
window.disqus_no_style=true;
-$(document).ready(function(){
-    $.getScript("http://disqus.com/forums/YOUR_DISQUS_ID/embed.js");
+
window.disqus_no_style=true;
+$(document).ready(function(){
+    $.getScript("http://disqus.com/forums/YOUR_DISQUS_ID/embed.js");
 });
@@ -92,25 +84,26 @@ $(document).ready( - - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -128,6 +121,7 @@ $(document).ready(comments powered by Disqus. comments powered by Disqus
+
Published on 2009-09-17 diff --git a/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html b/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html index 0ce639c..ce06e18 100644 --- a/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html +++ b/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Disqus versus Intense Debate (Why I switched)

-
+

Disqus vs. Intense Debate

I made a blog entry about how I tried to integrate Disqus. I had to wait Disqus comment to be displayed before loading correctly my page. This is why I tried to include it in a “non-blocking” way. Unfortunately, I had difficulties to make it works correctly.

@@ -59,13 +51,13 @@

During the time I tried to integrate Disqus I never tried Intense Debate. Now that I have tried, i must confess it does exactly what I needed.

In order to make it fully asynchronous, you’ve just to download their common js and replace the following line:

-
document.getElementsByTagName("head")[0].appendChild(commentScript);
+
document.getElementsByTagName("head")[0].appendChild(commentScript);

by:

-
$(document).ready( function() {
-    document.getElementsByTagName("head")[0].appendChild(commentScript);
+
$(document).ready( function() {
+    document.getElementsByTagName("head")[0].appendChild(commentScript);
 });
@@ -79,25 +71,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -115,6 +108,7 @@ comments powered by Disqus
+
Published on 2009-09-28 diff --git a/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html b/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html index ef86806..a6b9bda 100644 --- a/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html +++ b/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

jQuery Tag Cloud

-
+

Here is how I done the tag cloud of my blog. It is done mostly in jQuery. All my site is static and pages are generated with nanoc. It is (in my humble opinion) the modern geek way to make a website. The tagcloud should work for machine with and without javascript.

This is why I’ll give only a Ruby Generator, not a full javascript generator. But you can easily translate from Ruby to Javascript.

@@ -64,12 +56,12 @@

jQuery

Here is the simple jQuery code:

-
    $(document).ready( function(){$('.list').hide();} );
-    function tagSelected(id) {
-        $('.list').hide();
-        $('#'+id).fadeIn();
-        $('.tag.selected').removeClass('selected');
-        $('#tag_'+id).addClass('selected');
+
    $(document).ready( function(){$('.list').hide();} );
+    function tagSelected(id) {
+        $('.list').hide();
+        $('#'+id).fadeIn();
+        $('.tag.selected').removeClass('selected');
+        $('#tag_'+id).addClass('selected');
     }
@@ -248,25 +240,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -284,6 +277,7 @@ comments powered by Disqus
+
Published on 2009-09-23 diff --git a/Scratch/en/blog/2009-09-replace-all-except-some-part/index.html b/Scratch/en/blog/2009-09-replace-all-except-some-part/index.html index 761cc29..c025853 100644 --- a/Scratch/en/blog/2009-09-replace-all-except-some-part/index.html +++ b/Scratch/en/blog/2009-09-replace-all-except-some-part/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

replace all except some part

-
+

My problem is simple:

I want to filter a text except some part of it. I can match easily the part I don’t want to be filtered. For example

@@ -123,25 +115,26 @@ allExceptCode(:filter, content)
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -159,6 +152,7 @@ allExceptCode(:filter, content) comments powered by Disqus
+
Published on 2009-09-22 diff --git a/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html b/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html index 272b301..e3c907c 100644 --- a/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html +++ b/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

custom website synchronisation with mobileme (2)

-
+

I already talked about how I synchronized my website with mobileme. I ameliorated this script in order to make it incremental.

Here is my new script, it first create a map which associate to each file its hash. After that it compare this file to the remote one. Then for each different file, update the content.

@@ -128,25 +120,26 @@ if [[ “$1” = “-s” ]]; then swap else if [[ “$1” = “-d” ]]; then
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -164,6 +157,7 @@ if [[ “$1” = “-s” ]]; then swap else if [[ “$1” = “-d” ]]; then comments powered by Disqus
+
Published on 2009-10-28 diff --git a/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/index.html b/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/index.html index 31af4d2..044cf5b 100644 --- a/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/index.html +++ b/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

How to handle evil IE

-
+

For developer IE is a nightmare. This is why, I use a method to disable my standard CSS and enable a IE only CSS. I use jQuery to accomplish that.

@@ -76,25 +68,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +

+ These social sharing links preserve your privacy
+ +

Comments

@@ -112,6 +105,7 @@ comments powered by Disqus
+
Published on 2009-10-30 diff --git a/Scratch/en/blog/2009-10-Focus-vs-Minimalism/index.html b/Scratch/en/blog/2009-10-Focus-vs-Minimalism/index.html index 49baaf1..5d8924c 100644 --- a/Scratch/en/blog/2009-10-Focus-vs-Minimalism/index.html +++ b/Scratch/en/blog/2009-10-Focus-vs-Minimalism/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Focus > Minimalism

-
+

I believe the goal researched by minimalism is Focus. But I don’t believe minimalism should be the goal. Focus should be the goal, and I believe minimalism isn’t necessary to reach it.

This is why my design is not minimalist, but I decided to remove most of the navigation stuff of all pages of my website. May be I’ll prefer to hide the menu only when you are on blog article. For now, I hide the menu everywhere on the website.

@@ -74,19 +66,19 @@ top: 5em; left: 0; position: fixed; width: 10em; z-index: 9000; } ~~~~~~

The javascript code (using jQuery)

-
function hideMenu() {
-    $('#entete').animate({left:"-10em"}, 500 );
-    $('#menuButton').html('&rarr;');
+
function hideMenu() {
+    $('#entete').animate({left:"-10em"}, 500 );
+    $('#menuButton').html('&rarr;');
 }
-function showMenu() {
-    $('#entete').animate({left:"0em"}, 500 );
-    $('#menuButton').html('&larr;');
+function showMenu() {
+    $('#entete').animate({left:"0em"}, 500 );
+    $('#menuButton').html('&larr;');
 }
-function toggleMenu() {
-    if ( $('#entete').css('left')=='-10em' ) {
-        showMenu();
+function toggleMenu() {
+    if ( $('#entete').css('left')=='-10em' ) {
+        showMenu();
     } else {
-        hideMenu();
+        hideMenu();
     }
 }
@@ -95,25 +87,26 @@ top: 5em; left: 0; position: fixed; width: 10em; z-index: 9000; } ~~~~~~
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -131,6 +124,7 @@ top: 5em; left: 0; position: fixed; width: 10em; z-index: 9000; } ~~~~~~ comments powered by Disqus
+
Published on 2009-10-22 diff --git a/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/index.html b/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/index.html index 4ee41dd..34f133e 100644 --- a/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/index.html +++ b/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

How to preload your site with style

-
+

Example

Here is a live example of what appear while loading my pages.

@@ -114,8 +106,8 @@ Loading… and the associated jQuery code:

-
$(document).ready(function(){
-    $('#blackpage').fadeOut();
+
$(document).ready(function(){
+    $('#blackpage').fadeOut();
 });
@@ -124,25 +116,26 @@ Loading…
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -160,6 +153,7 @@ Loading… Please enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
+
Published on 2009-10-03 diff --git a/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html b/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html index 9942932..895f9c6 100644 --- a/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html +++ b/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Menu waiting to hide himself

-
+

I discussed earlier why I prefer to hide my navigation menu. I finally decided to hide it only after a short time. Just the time needed for a user to see it. But how make it disappear only when it is not used for some time?

Here is how to accomplish that easily.

@@ -102,25 +94,26 @@ autoHideMenu(0);
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -138,6 +131,7 @@ autoHideMenu(0);
comments powered by Disqus
+
Published on 2009-10-26 diff --git a/Scratch/en/blog/2009-10-launch-daemon-from-command-line/index.html b/Scratch/en/blog/2009-10-launch-daemon-from-command-line/index.html index 0c3f8c8..ca85343 100644 --- a/Scratch/en/blog/2009-10-launch-daemon-from-command-line/index.html +++ b/Scratch/en/blog/2009-10-launch-daemon-from-command-line/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

launch daemon from command line

-
+

Here is a tip, I don’t know why, but I almost always forgot how to do that.

When you want to launch a command and this command should not be killed after you close your terminal. Here is how to accomplish that from command line:

@@ -62,25 +54,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -98,6 +91,7 @@ comments powered by Disqus
+
Published on 2009-10-23 diff --git a/Scratch/en/blog/2009-10-untaught-git-usage/index.html b/Scratch/en/blog/2009-10-untaught-git-usage/index.html index 778f709..d9b6149 100644 --- a/Scratch/en/blog/2009-10-untaught-git-usage/index.html +++ b/Scratch/en/blog/2009-10-untaught-git-usage/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Untaught Git usage

-
+

I explain why I had so much difficulties to use Git. There is an “untaught rule” that make hard to work without. Until I read the good document.

“Cheap branches” aren’t designed to be totally isolated branches but rather should follow a “Master Branch”. There is a Standard Workflow to follow. If you don’t follow it, you prepare yourself with some hard time with Git.

@@ -190,25 +182,26 @@ OK
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -226,6 +219,7 @@ OK comments powered by Disqus
+
Published on 2009-10-13 diff --git a/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html b/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html index bba079e..a0106e1 100644 --- a/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html +++ b/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Git for n00b

-
+
@@ -437,25 +429,26 @@ $ git logfull
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -473,6 +466,7 @@ $ git logfull comments powered by Disqus
+
Published on 2009-11-12 diff --git a/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html b/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html index b8c6394..c310fa0 100644 --- a/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html +++ b/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html @@ -33,8 +33,32 @@ document.write(''); // +
+
+ +
+

iphone call filter

+
+
+
+
+

It is unbelievable you cannot filter your call with an iPhone! The only reason I see for that is a negotiation with phone operator to force users to get phone advertising. It is simple unacceptable.

+

I’m a λ iPhone’s user. The only way to filter your call and to manage blacklist is to jailbreak your iPhone. And I don’t want to do that. Then, if like me you find it unacceptable, just write a line to Apple: http://www.apple.com/feedback/iphone.html

+
+ +
+ + · + + · + + · + +
+ These social sharing links preserve your privacy +
-
- -
-

iphone call filter

-
-
-
-
-

It is unbelievable you cannot filter your call with an iPhone! The only reason I see for that is a negotiation with phone operator to force users to get phone advertising. It is simple unacceptable.

-

I’m a λ iPhone’s user. The only way to filter your call and to manage blacklist is to jailbreak your iPhone. And I don’t want to do that. Then, if like me you find it unacceptable, just write a line to Apple: http://www.apple.com/feedback/iphone.html

-
- -
- - RSS - - - - - - -
- -
-
-
+

Comments

@@ -93,6 +86,7 @@ comments powered by Disqus
+
Published on 2009-12-06 diff --git a/Scratch/en/blog/2009-12-14-Git-vs--Bzr/index.html b/Scratch/en/blog/2009-12-14-Git-vs--Bzr/index.html index 9caf384..a979793 100644 --- a/Scratch/en/blog/2009-12-14-Git-vs--Bzr/index.html +++ b/Scratch/en/blog/2009-12-14-Git-vs--Bzr/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Git vs. Bzr

-
+
@@ -140,25 +132,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -176,6 +169,7 @@ comments powered by Disqus
+
Published on 2009-12-14 diff --git a/Scratch/en/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html b/Scratch/en/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html index 9f71d61..a3279c5 100644 --- a/Scratch/en/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html +++ b/Scratch/en/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Change default shell on Mac OS X

-
+

I just found a way to change the default shell on Mac OS X. This note is mostly for me, but somebody else should find it useful. Just launch the following command:

@@ -61,25 +53,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -97,6 +90,7 @@ comments powered by Disqus
+
Published on 2010-01-04 diff --git a/Scratch/en/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html b/Scratch/en/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html index eb8c71a..1ca17f1 100644 --- a/Scratch/en/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html +++ b/Scratch/en/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

antialias font in Firefox under Ubuntu

-
+

How to stop using bad Microsoft© font under Ubuntu Linux in order to user nice anti aliased font under Firefox.

Just modify the /etc/fonts/local.conf with the following code:

@@ -115,25 +107,26 @@
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -151,6 +144,7 @@ comments powered by Disqus
+
Published on 2010-01-12 diff --git a/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html b/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html index f29edd5..6a0fc58 100644 --- a/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html +++ b/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Pragmatic Regular Expression Exclude

-
+

Sometimes you cannot simply write:

@@ -88,25 +80,26 @@ Notice this method is not always the best. For example try to write a regular ex
- - RSS - - - - - - -
- -
-
+ + · + + · + + · + +
+ These social sharing links preserve your privacy
+ +

Comments

@@ -124,6 +117,7 @@ Notice this method is not always the best. For example try to write a regular ex comments powered by Disqus
+
Published on 2010-02-15 diff --git a/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html b/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html index b135273..64fe681 100644 --- a/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html +++ b/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html @@ -33,16 +33,8 @@ document.write(''); // +
-
-
@@ -50,7 +42,7 @@

Pragmatic Regular Expression Exclude (2)

-
+

In my previous post I had given some trick to match all except something. On the same idea, the trick to match the smallest possible string. Say you want to match the string between ‘a’ and ‘b’, for example, you want to match:

@@ -119,7 +111,7 @@ That string should not match. This is why if we really want to match it correctl
 

Yes a bit complicated. But what if the string I wanted to match was even longer?

Here is the algorithm way to handle this easily. You reduce the problem to the first one letter matching:

-

# transform a simple randomly choosen character # to an unique ID # (you should verify the identifier is REALLY unique) # beware the unique ID must not contain the # choosen character s/X/was_x/g s/Y/was_y/g

+

# transform a simple randomly choosen character # to an unique ID # (you should verify the identifier is REALLY unique) # beware the unique ID must not contain the # choosen character s/X/wasx_/g s/Y/wasy_/g

transform the long string in this simple character

s/
  • @@ -131,7 +123,7 @@ s/X/
  • /g s/Y/</li>/g

    retransform the choosen character back

    -s/was_x/X/g s/was_y/Y/g
    +s/wasx_/X/g s/wasy_/Y/g
  • And it works in only 9 lines for any beginning and ending string. This solution should look less I AM THE GREAT REGEXP M45T3R, URAN00B, but is more convenient in my humble opinion. Further more, using this last solution prove you master regexp, because you know it is difficult to manage such problems with only a regexp.

    @@ -140,25 +132,26 @@ s/was_x/X/g s/was_y/Y/g
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -176,6 +169,7 @@ s/was_x/X/g s/was_y/Y/g comments powered by Disqus
    +
    Published on 2010-02-16 diff --git a/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html b/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html index 836fde6..460938f 100644 --- a/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html +++ b/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    split a file by keyword

    -
    +

    Strangely enough, I didn’t find any built-in tool to split a file by keyword. I made one myself in awk. I put it here mostly for myself. But it could also helps someone else. The following code split a file for each line containing the word UTC.

    @@ -71,25 +63,26 @@ Mon Dec 7 10:32:30 UTC 2009
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -107,6 +100,7 @@ Mon Dec 7 10:32:30 UTC 2009 comments powered by Disqus
    +
    Published on 2010-02-18 diff --git a/Scratch/en/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html b/Scratch/en/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html index 1c5b878..13b2d29 100644 --- a/Scratch/en/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html +++ b/Scratch/en/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    When regexp is not the best solution

    -
    +

    Regular expression are really useful. Unfortunately, they are not always the best way of doing things. Particularly when transformations you want to make are easy.

    I wanted to know how to get file extension from filename the fastest way possible. There is 3 natural way of doing this:

    @@ -97,25 +89,26 @@ chomp: 0.820000 0.040000 0.860000 ( 0.947432)
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -133,6 +126,7 @@ chomp: 0.820000 0.040000 0.860000 ( 0.947432) comments powered by Disqus
    +
    Published on 2010-02-23 diff --git a/Scratch/en/blog/2010-03-22-Git-Tips/index.html b/Scratch/en/blog/2010-03-22-Git-Tips/index.html index 6c4c27c..0a8b5fc 100644 --- a/Scratch/en/blog/2010-03-22-Git-Tips/index.html +++ b/Scratch/en/blog/2010-03-22-Git-Tips/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Git Tips

    -
    +

    clone from github behind an evil firewall

    Standard:

    @@ -86,25 +78,26 @@ $ zsh $ cd project $ for br in (git
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -122,6 +115,7 @@ $ zsh $ cd project $ for br in (gitPlease enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
    +
    Published on 2010-03-22 diff --git a/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html b/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html index 2fb5cb0..06a062a 100644 --- a/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html +++ b/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Encapsulate git

    -
    +
    Here is a solution to maintain divergent branches in git. Because it is easy to merge by mistake. I give a script that encapsulate git in order to forbid some merge and warn you some merge should be dangerous. @@ -108,25 +100,26 @@ case ARGV[0] when ‘allmerges’ then do_all_merges when ‘merge’ then do_me
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -144,6 +137,7 @@ case ARGV[0] when ‘allmerges’ then do_all_merges when ‘merge’ then do_me comments powered by Disqus
    +
    Published on 2010-03-23 diff --git a/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html b/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html index 6a55ba3..c1c44d1 100644 --- a/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html +++ b/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    I live again!

    -
    +

    Hi all!

    @@ -76,25 +68,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -112,6 +105,7 @@ comments powered by Disqus
    +
    Published on 2010-05-17 diff --git a/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html b/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html index a5487c9..ee9e47d 100644 --- a/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html +++ b/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    How to repair a cutted XML?

    -
    +

    For my main page, you can see, a list of my latest blog entry. And you have the first part of each article. To accomplish that, I needed to include the begining of the entry and to cut it somewhere. But now, I had to repair this cutted HTML.

    Here is an example:

    @@ -121,25 +113,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -157,6 +150,7 @@ comments powered by Disqus
    +
    Published on 2010-05-19 diff --git a/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html b/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html index 30d1699..a827b93 100644 --- a/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html +++ b/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Trees; Pragmatism and Formalism

    -
    +
    @@ -243,25 +235,26 @@ M - V - M - V - tag2 tag1
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -279,6 +272,7 @@ M - V - M - V - tag2 tag1 comments powered by Disqus
    +
    Published on 2010-05-24 diff --git a/Scratch/en/blog/2010-06-14-multi-language-choices/index.html b/Scratch/en/blog/2010-06-14-multi-language-choices/index.html index 4226037..165d585 100644 --- a/Scratch/en/blog/2010-06-14-multi-language-choices/index.html +++ b/Scratch/en/blog/2010-06-14-multi-language-choices/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    multi language choices

    -
    +

    I translate most of my blog entries in French and English. Most people advice me to have one file per language. Generally it ends with:

    @@ -84,25 +76,26 @@ here is an example of english text.
     				
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -120,6 +113,7 @@ here is an example of english text. comments powered by Disqus
    +
    Published on 2010-06-14 diff --git a/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html b/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html index 740cf51..182cb34 100644 --- a/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html +++ b/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Get my blog engine

    -
    +

    I published a light version of my blog engine based on nanoc yesterday night. By light, I mean a lighter, more portable CSS (without round border). You can get it on github.com.

    What this system provide?

    @@ -117,25 +109,26 @@ multi/blog/2010-06-01-the-title/third_part.md
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -153,6 +146,7 @@ multi/blog/2010-06-01-the-title/third_part.md comments powered by Disqus
    +
    Published on 2010-06-15 diff --git a/Scratch/en/blog/2010-06-17-hide-yourself-to-analytics/index.html b/Scratch/en/blog/2010-06-17-hide-yourself-to-analytics/index.html index b98ce55..d1dd21d 100644 --- a/Scratch/en/blog/2010-06-17-hide-yourself-to-analytics/index.html +++ b/Scratch/en/blog/2010-06-17-hide-yourself-to-analytics/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,16 +42,16 @@

    Hide Yourself to your Analytics

    -
    +

    This is a way not to count your own visits to your blog. First you should look on how I handle analytics. All analytics are handled in one javascript file, this make things really convenient.

    Then you need to know my method use the jquery-cookie.

    I check if the key admin is not set in the cookie before adding the visit.

    -
        var admin = $.cookie('admin');
    +
        var admin = $.cookie('admin');
         if (! admin) {
             // put your analytics code here
         } else {
    -        console.log("[WARNING] you're HIDDEN to analytics");
    +        console.log("[WARNING] you're HIDDEN to analytics");
         }

    then create two html files. One to hide:

    <?xml version="1.0" encoding="utf-8"?>
    @@ -72,8 +64,8 @@
             <script type="text/javascript" src="jquery.cookie.js"></script>
             <script>
                 $(document).ready(function(){
    -                $.cookie('admin',1);
    -                $('#info').html('Analytics can no more see you.')
    +                $.cookie('admin',1);
    +                $('#info').html('Analytics can no more see you.')
                 });
             </script>
             <title>Hide to analytics</title>
    @@ -93,8 +85,8 @@
             <script type="text/javascript" src="jquery.cookie.js"></script>
             <script>
                 $(document).ready(function(){
    -                $.cookie('admin',null);
    -                $('#info').html('Analytics can see you.')
    +                $.cookie('admin',null);
    +                $('#info').html('Analytics can see you.')
                 });
             </script>
             <title>Hide to analytics</title>
    @@ -107,25 +99,26 @@
     				
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -143,6 +136,7 @@ comments powered by Disqus
    +
    Published on 2010-06-17 diff --git a/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html b/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html index c6a0882..fc73014 100644 --- a/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html +++ b/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html @@ -33,8 +33,84 @@ document.write(''); // +
    +
    + +
    +

    Track Events with Google Analytics

    +
    +
    +
    +
    +

    Here is how to track all clicks on your website using google analytics asynchronously.

    +

    First in your html you need to use jQuery and a javscript file I named yga.js:

    +
        <script type="text/javascript" src="jquery.js"></script>
    +    <script type="text/javascript" src="yga.js"></script>
    +

    And here is the yga.js file:

    +
    $(document).ready( function() {
    +    // add an event to all link for google analytics
    +    $('a').click(function () {
    +        // tell analytics to save event
    +        try {
    +            var identifier=$(this).attr('id') ;
    +            var href=$(this).attr('href')
    +            var label="";
    +            if ( typeof( identifier ) != 'undefined' ) {
    +                label=label+'[id]:'+identifier
    +                category='JSLink'
    +            }
    +            if ( typeof( href ) != 'undefined' ) {
    +                label=label+' [href]:'+href
    +                if ( href[0] == '#' ) {
    +                    category='Anchor';
    +                } else {
    +                    category='Link';
    +                }
    +            }
    +            _gaq.push(['_trackEvent', category, 'clicked', label]);
    +            // console.log('[tracked]: ' + category + ' ; clicked ; ' + label );
    +        }
    +        catch (err) {
    +            console.log(err);
    +        }
    +
    +        // pause to allow google script to run
    +        var date = new Date();
    +        var curDate = null;
    +        do {
    +            curDate = new Date();
    +        } while(curDate-date < 300);
    +    });
    +});
    +
    +var _gaq = _gaq || [];
    +_gaq.push(['_setAccount', 'UA-XXXXXXXX-1']);
    +_gaq.push(['_trackPageview']);
    +
    +(function() {
    + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    + })();
    +

    Replace the: UA-XXXXXXXX-1 by your google analytics code and you’re done.

    +

    To see what occurs, simply go in Content and Event Tracking as shown in the following screenshot:

    +

    +

    Happy tracking!

    +
    + +
    + + · + + · + + · + +
    + These social sharing links preserve your privacy +
    -
    - -
    -

    Track Events with Google Analytics

    -
    -
    -
    -
    -

    Here is how to track all clicks on your website using google analytics asynchronously.

    -

    First in your html you need to use jQuery and a javscript file I named yga.js:

    -
        <script type="text/javascript" src="jquery.js"></script>
    -    <script type="text/javascript" src="yga.js"></script>
    -

    And here is the yga.js file:

    -
    $(document).ready( function() {
    -    // add an event to all link for google analytics
    -    $('a').click(function () {
    -        // tell analytics to save event
    -        try {
    -            var identifier=$(this).attr('id') ;
    -            var href=$(this).attr('href')
    -            var label="";
    -            if ( typeof( identifier ) != 'undefined' ) {
    -                label=label+'[id]:'+identifier
    -                category='JSLink'
    -            }
    -            if ( typeof( href ) != 'undefined' ) {
    -                label=label+' [href]:'+href
    -                if ( href[0] == '#' ) {
    -                    category='Anchor';
    -                } else {
    -                    category='Link';
    -                }
    -            }
    -            _gaq.push(['_trackEvent', category, 'clicked', label]);
    -            // console.log('[tracked]: ' + category + ' ; clicked ; ' + label );
    -        }
    -        catch (err) {
    -            console.log(err);
    -        }
    -
    -        // pause to allow google script to run
    -        var date = new Date();
    -        var curDate = null;
    -        do {
    -            curDate = new Date();
    -        } while(curDate-date < 300);
    -    });
    -});
    -
    -var _gaq = _gaq || [];
    -_gaq.push(['_setAccount', 'UA-XXXXXXXX-1']);
    -_gaq.push(['_trackPageview']);
    -
    -(function() {
    - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    - ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    - })();
    -

    Replace the: UA-XXXXXXXX-1 by your google analytics code and you’re done.

    -

    To see what occurs, simply go in Content and Event Tracking as shown in the following screenshot:

    -

    -

    Happy tracking!

    -
    - -
    - - RSS - - - - - - -
    - -
    -
    -
    +

    Comments

    @@ -145,6 +138,7 @@ comments powered by Disqus
    +
    Published on 2010-06-17 diff --git a/Scratch/en/blog/2010-06-19-jQuery-popup-the-easy-way/index.html b/Scratch/en/blog/2010-06-19-jQuery-popup-the-easy-way/index.html index 073a354..2d62a0f 100644 --- a/Scratch/en/blog/2010-06-19-jQuery-popup-the-easy-way/index.html +++ b/Scratch/en/blog/2010-06-19-jQuery-popup-the-easy-way/index.html @@ -33,8 +33,56 @@ document.write(''); // +
    +
    + +
    +

    jQuery popup the easy way

    +
    +
    +
    +
    +

    Here is a fast and easy way to create jQuery popup.

    +
    // --- code popup ---
    +function openPopup() {
    +    $(this).clone(false).appendTo($("#_code"));
    +    $("#_code").show();
    +}
    +
    +function closePopup() {
    +    $("#_code").html("");
    +    $("#_code").hide();
    +}
    +
    +function initCode() {
    +    $(".code").click(openPopup);
    +    $(".code").css({cursor: "pointer"});
    +    $('body').append('<div id="_code"></div>');
    +    $('#_code').css( { 'text-align': "justify", position: "fixed", 
    +                        left:0, top:0, width: "100%", height: "100%", 
    +                        "background-color": "rgba(0, 0, 0, 0.8)", 'z-index':2000, 'padding':'3px'} );
    +    $('#_code').hide();
    +    $('#_code').click(closePopup);
    +}
    +// --- end of code popup section ---
    +

    What does this code do?

    +

    At the loading of the page, I create a div as wide as the window. This div is a bit transparent. Then I hide it. I also take care to its z-index value to be sure it is behind all elements.

    +

    Then when we click on a div of class code, I copy the content into this new wide div, and I show it. Really simple but really efficient. No need to use a jQuery plugin.

    +
    + +
    + + · + + · + + · + +
    + These social sharing links preserve your privacy +
    -
    - -
    -

    jQuery popup the easy way

    -
    -
    -
    -
    -

    Here is a fast and easy way to create jQuery popup.

    -
    // --- code popup ---
    -function openPopup() {
    -    $(this).clone(false).appendTo($("#_code"));
    -    $("#_code").show();
    -}
    -
    -function closePopup() {
    -    $("#_code").html("");
    -    $("#_code").hide();
    -}
    -
    -function initCode() {
    -    $(".code").click(openPopup);
    -    $(".code").css({cursor: "pointer"});
    -    $('body').append('<div id="_code"></div>');
    -    $('#_code').css( { 'text-align': "justify", position: "fixed", 
    -                        left:0, top:0, width: "100%", height: "100%", 
    -                        "background-color": "rgba(0, 0, 0, 0.8)", 'z-index':2000, 'padding':'3px'} );
    -    $('#_code').hide();
    -    $('#_code').click(closePopup);
    -}
    -// --- end of code popup section ---
    -

    What does this code do?

    -

    At the loading of the page, I create a div as wide as the window. This div is a bit transparent. Then I hide it. I also take care to its z-index value to be sure it is behind all elements.

    -

    Then when we click on a div of class code, I copy the content into this new wide div, and I show it. Really simple but really efficient. No need to use a jQuery plugin.

    -
    - -
    - - RSS - - - - - - -
    - -
    -
    -
    +

    Comments

    @@ -117,6 +110,7 @@ comments powered by Disqus
    +
    Published on 2010-06-19 diff --git a/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html b/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html index da69e68..841b5fc 100644 --- a/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html +++ b/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Cappuccino vs jQuery

    -
    +
    @@ -146,25 +138,26 @@ hash=sha1( masterPassword + leakedTimes + domainName )
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -182,6 +175,7 @@ hash=sha1( masterPassword + leakedTimes + domainName ) comments powered by Disqus
    +
    Published on 2010-07-05 diff --git a/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html b/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html index d70af95..9a2de73 100644 --- a/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html +++ b/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Do not use CSS gradient with Chrome

    -
    +

    Some Reddit users reported my website was really long to load and to scroll. They thinks it was because of the ‘1px shadow’ I apply on all the text. I was a bit surprised, because I make some test into a really slow virtual machine. And all have always worked fine. In fact, what slow down so much are by order of importance:

      @@ -70,25 +62,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -106,6 +99,7 @@ comments powered by Disqus
    +
    Published on 2010-07-07 diff --git a/Scratch/en/blog/2010-07-09-Indecidabilities/index.html b/Scratch/en/blog/2010-07-09-Indecidabilities/index.html index 810b11f..649977d 100644 --- a/Scratch/en/blog/2010-07-09-Indecidabilities/index.html +++ b/Scratch/en/blog/2010-07-09-Indecidabilities/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Undecidabilities (part 1)

    -
    +

    <% # toremove_ %>

    @@ -145,25 +137,26 @@ Q(x) :
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -181,6 +174,7 @@ Q(x) : comments powered by Disqus
    +
    Published on 2010-08-11 diff --git a/Scratch/en/blog/2010-07-31-New-style-after-holidays/index.html b/Scratch/en/blog/2010-07-31-New-style-after-holidays/index.html index 6637ae8..2a19608 100644 --- a/Scratch/en/blog/2010-07-31-New-style-after-holidays/index.html +++ b/Scratch/en/blog/2010-07-31-New-style-after-holidays/index.html @@ -33,8 +33,32 @@ document.write(''); // +
    +
    + +
    +

    New style after holidays

    +
    +
    +
    +
    +

    Before my holidays many visitors tell me my website was too long to scroll. This is why I completely changed my website design. Now all should scroll smoothly on all platforms. I was inspired by Readability and iBooks(c) (the iPhone(c) application).

    +

    Tell me what you think of this new design.

    +
    + +
    + + · + + · + + · + +
    + These social sharing links preserve your privacy +
    -
    - -
    -

    New style after holidays

    -
    -
    -
    -
    -

    Before my holidays many visitors tell me my website was too long to scroll. This is why I completely changed my website design. Now all should scroll smoothly on all platforms. I was inspired by Readability and iBooks(c) (the iPhone(c) application).

    -

    Tell me what you think of this new design.

    -
    - -
    - - RSS - - - - - - -
    - -
    -
    -
    +

    Comments

    @@ -93,6 +86,7 @@ comments powered by Disqus
    +
    Published on 2010-07-31 diff --git a/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html b/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html index e3759ec..008520a 100644 --- a/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html +++ b/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Now hosted by heroku

    -
    +

    Now on Heroku

    I now changed my hosting to Heroku. I believe it will be far more reliable.

    @@ -117,25 +109,26 @@ git push heroku master
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -153,6 +146,7 @@ git push heroku master
    comments powered by Disqus
    +
    Published on 2010-08-23 diff --git a/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html b/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html index b81e8ce..1fa0814 100644 --- a/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html +++ b/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    send mail from command line with attached file

    -
    +

    I had to send a mail using only command line. I was surprised it isn’t straightforward at all. I didn’t had pine nor mutt or anything like that. Just mail and mailx.

    What Internet say (via google) is

    @@ -94,38 +86,36 @@ H4sICB6Ke0wAA2Rjcl93aXRob3V0X2tleXdvcmQuY3N2ANSdW5ubOJPH7/e7 </div> <div id="social"> - <span> - <a class="rss" href="http://feeds.feedburner.com/yannespositocomen">RSS</a> - </span> - <span> - <a href="https://twitter.com/share" class="twitter-share-button" data-via="yogsototh">Tweet</a> - <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> - </span> - <span> - <div class="g-plusone" data-size="medium" data-annotation="inline" data-width="106"></div> - <script type="text/javascript"> - (function() { - var po = document.createElement(" script'); po.type="text/javascript" ; po.async="true;" po.src="https://apis.google.com/js/plusone.js" ; var s="document.getElementsByTagName('script')[0];" s.parentNode.insertBefore(po, s); })(); < script> - -
    -
    -
    -

    Comments

    -
    - + var disqus_shortname = " yannesposito'; required: replace example with your forum shortname * * * DON'T EDIT BELOW THIS LINE * * * (function() { var dsq="document.createElement('script');" dsq.type="text/javascript" ; dsq.async="true;" dsq.src="http://" + disqus_shortname + '.disqus.com embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })(); < script> comments powered by Disqus
    +
    Published on 2010-08-31 diff --git a/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html b/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html index f2fc6f9..fdfb22f 100644 --- a/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html +++ b/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Use git to calculate trusted mtimes

    -
    +

    You can remark at the bottom of each page I provide a last modification date. This label was first calculated using the mtime of the file on the file system. But many times I modify this date just to force some recompilation. Therefore the date wasn’t a date of real modification.

    I use git to version my website. And fortunately I can know the last date of real change of a file. This is how I do this with nanoc:

    @@ -73,25 +65,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -109,6 +102,7 @@ comments powered by Disqus
    +
    Published on 2010-09-02 diff --git a/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html b/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html index 853e30b..2dd616b 100644 --- a/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html +++ b/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    base64 and sha1 on iPhone

    -
    +

    Lets be straight: here are two functions to add to your code to have base64 and hexadecimal version of the sha1 hash of an NSString.

    To use it, simply copy the code in your class and use as this:

    @@ -105,25 +97,26 @@ NSString *hex_hash = [self hex_sha1:@"some NSString to be sha1'ed"];
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -141,6 +134,7 @@ NSString *hex_hash = [self hex_sha1:@"some NSString to be sha1'ed"];Please enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
    +
    Published on 2010-09-02 diff --git a/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html b/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html index 7ea85bd..df77dd4 100644 --- a/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html +++ b/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    New Blog Design Constraints

    -
    +

    I changed the design of my blog. Now it should be far cleaner. I believe I use no CSS3 feature and far less javascript. Of course before my website was perfectly browsable without javascript. Unfortunately some CSS3 feature are not mature enough on some browser. For more details you can read my older blog entry. But the major problem came from, font-shadow and gradients. Then my new design obey to the following rules:

      @@ -62,25 +54,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -98,6 +91,7 @@ comments powered by Disqus
    +
    Published on 2010-10-06 diff --git a/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html b/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html index 953b0ef..a66deb4 100644 --- a/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html +++ b/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Secure eMail on Mac in few steps

    -
    +

    Title image

    @@ -81,25 +73,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -117,6 +110,7 @@ comments powered by Disqus
    +
    Published on 2010-10-10 diff --git a/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html b/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html index afa0541..048d252 100644 --- a/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html +++ b/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Fun with wav

    -
    +
    @@ -305,25 +297,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -341,6 +334,7 @@ comments powered by Disqus
    +
    Published on 2010-10-14 diff --git a/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html b/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html index 8c13ae8..b480103 100644 --- a/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html +++ b/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    LaTeX like macro for markdown

    -
    +
    @@ -112,25 +104,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -148,6 +141,7 @@ comments powered by Disqus
    +
    Published on 2010-10-26 diff --git a/Scratch/en/blog/2011-01-03-Happy-New-Year/index.html b/Scratch/en/blog/2011-01-03-Happy-New-Year/index.html index 6fa3ce9..025d709 100644 --- a/Scratch/en/blog/2011-01-03-Happy-New-Year/index.html +++ b/Scratch/en/blog/2011-01-03-Happy-New-Year/index.html @@ -32,16 +32,8 @@ document.write(''); // +
    -
    -
    @@ -49,7 +41,7 @@

    Happy New Year

    -
    +

    Happy New Year!

    I was busy during the last months. But I will revive a bit this blog.

    @@ -59,25 +51,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -95,6 +88,7 @@ comments powered by Disqus
    +
    Published on 2011-01-01 diff --git a/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html b/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html index 7aeb724..39676b6 100644 --- a/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html +++ b/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Why I won't use CoffeeScript (sadly)

    -
    +

    Title image

    @@ -131,25 +123,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -167,6 +160,7 @@ comments powered by Disqus
    +
    Published on 2011-01-03 diff --git a/Scratch/en/blog/2011-04-20-Now-hosted-on-github/index.html b/Scratch/en/blog/2011-04-20-Now-hosted-on-github/index.html index e7f1b2c..e146ee0 100644 --- a/Scratch/en/blog/2011-04-20-Now-hosted-on-github/index.html +++ b/Scratch/en/blog/2011-04-20-Now-hosted-on-github/index.html @@ -32,8 +32,32 @@ document.write(''); // +
    +
    + +
    +

    Now hosted on github

    +
    +
    +
    +
    +

    Title image

    +

    I am now hosted on github.

    +
    + +
    + + · + + · + + · + +
    + These social sharing links preserve your privacy +
    -
    - -
    -

    Now hosted on github

    -
    -
    -
    -
    -

    Title image

    -

    I am now hosted on github.

    -
    - -
    - - RSS - - - - - - -
    - -
    -
    -
    +

    Comments

    @@ -92,6 +85,7 @@ comments powered by Disqus
    +
    Published on 2011-04-20 diff --git a/Scratch/en/blog/A-more-convenient-diff/index.html b/Scratch/en/blog/A-more-convenient-diff/index.html index 8ebf2d5..15b0bf3 100644 --- a/Scratch/en/blog/A-more-convenient-diff/index.html +++ b/Scratch/en/blog/A-more-convenient-diff/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    A more convenient diff

    -
    +

    Diff is a very useful tool. But it is not so easy to read for us, simple mortal.

    This is why, when you use git it will use a better formatting and colorize it.

    @@ -80,25 +72,26 @@ diff -u $* | colorize_diff
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -116,6 +109,7 @@ diff -u $* | colorize_diff comments powered by Disqus
    +
    Published on 2011-08-17 diff --git a/Scratch/en/blog/Category-Theory-Presentation/index.html b/Scratch/en/blog/Category-Theory-Presentation/index.html index 9de4a59..76bc946 100644 --- a/Scratch/en/blog/Category-Theory-Presentation/index.html +++ b/Scratch/en/blog/Category-Theory-Presentation/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Category Theory Presentation

    -
    +
    Cateogry of Hask's endofunctors @@ -1018,25 +1010,26 @@ depth = cata phi where
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -1054,6 +1047,7 @@ depth = cata phi where comments powered by Disqus
    +
    Published on 2012-12-12 diff --git a/Scratch/en/blog/Haskell-Mandelbrot/index.html b/Scratch/en/blog/Haskell-Mandelbrot/index.html index effe489..9ae2412 100644 --- a/Scratch/en/blog/Haskell-Mandelbrot/index.html +++ b/Scratch/en/blog/Haskell-Mandelbrot/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,14 +42,14 @@

    ASCII Haskell Mandelbrot

    -
    +

    Here is the obfuscated code:

    -
    a=27;b=79;c=C(-2.0,-1.0);d=C(1.0,1.0);e=C(-2.501,-1.003)
    +
    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)
    +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 z 0=0;f c z n=if(r(abs(z))>2)then n else f c ((z*z)+c) (n-1)
    +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)
    @@ -96,18 +88,18 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&WWWW

    Here is the more readable version. I believe with this far more readable version, no more explanation is needed.

    nbvert = 30
     nbhor = 79
    -zoomfactor = 1.01
    -init_bottom_left = C (-2.0,-2.0)
    -init_top_right   = C (3.0,2.0)
    -interrest        = C (-1.713,-0.000)
    +zoomfactor = 1.01
    +init_bottom_left = C (-2.0,-2.0)
    +init_top_right   = C (3.0,2.0)
    +interrest        = C (-1.713,-0.000)
     
     newtype Complex = C (Float,Float) deriving (Show,Eq)
     instance Num Complex where
    -    fromInteger n     = C (fromIntegral n,0.0)
    +    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)
    +    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
    @@ -119,7 +111,7 @@ cabs = real.abs
     
     f :: Complex -> Complex -> Int -> Int
     f c z 0 = 0
    -f c z n = if (cabs z > 2) then n else f c ((z*z)+c) (n-1) 
    +f c z n = if (cabs z > 2) then n else f c ((z*z)+c) (n-1) 
     
     bmandel bottomleft topright = map (\z -> (f (C z) (C(0,0)) 32, (fst z > right - hstep/2 ))) [(x,y) | y <- [bottom,(bottom + vstep)..top], x<-[left,(left + hstep)..right]]
         where
    @@ -152,29 +144,30 @@ main = do
         putStrLn $ infinitemandel 0
         where
             window n = zoom init_bottom_left init_top_right interrest (zoomfactor**n) 
    -        infinitemandel n = mandel (window n) ++ "\x1b[H\x1b[25A" ++ infinitemandel (n+1)
    + infinitemandel n = mandel (window n) ++ "\x1b[H\x1b[25A" ++ infinitemandel (n+1)
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -192,6 +185,7 @@ main = do comments powered by Disqus
    +
    Published on 2011-07-10 diff --git a/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html b/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html index 956cac9..e87efe0 100644 --- a/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html +++ b/Scratch/en/blog/Haskell-OpenGL-Mandelbrot/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Haskell Progressive Example

    -
    +

    The B in Benoît B. Mandelbrot stand for Benoît B. Mandelbrot

    @@ -98,9 +90,9 @@ Another detail of the Mandelbulb

    We can consider two parts. The first being mostly some boilerplate2. And the second part more focused on OpenGL and content.

    Let’s play the song of our people

    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef

    For efficiency reason3, I will not use the default Haskell Complex data type.

    @@ -110,11 +102,11 @@ Another detail of the Mandelbulb
    instance Num Complex where
    -    fromInteger n = C (fromIntegral n,0.0)
    +    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)
    + abs (C (x,y)) = C (sqrt (x*x + y*y),0.0) + signum (C (x,y)) = C (signum x , 0.0)

    We declare some useful functions for manipulating complex numbers:

    @@ -201,16 +193,16 @@ allPoints = [ (x/width,ycolorFromValue n = let t :: Int -> GLfloat - t i = 0.5 + 0.5*cos( fromIntegral i / 10 ) + t i = 0.5 + 0.5*cos( fromIntegral i / 10 ) in - Color3 (t n) (t (n+5)) (t (n+10)) + Color3 (t n) (t (n+5)) (t (n+10))

    And now the mandel function. Given two coordinates in pixels, it returns some integer value:

    mandel x y = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
       in
           f (complex r i) 0 64
    @@ -226,7 +218,7 @@ allPoints = [ (x/width,y0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1) + else f c ((z*z)+c) (n-1)

    Well, if you download this file (look at the bottom of this section), compile it and run it this is the result:

    @@ -242,20 +234,20 @@ f c z n = if (magnitude z
    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef
     -- Use UNPACK data because it is faster
     -- The ! is for strict instead of lazy
     data Complex = C  {-# UNPACK #-} !Float 
                       {-# UNPACK #-} !Float 
                    deriving (Show,Eq)
     instance Num Complex where
    -    fromInteger n = C (fromIntegral n) 0.0
    +    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
    +    abs (C x y)     = C (sqrt (x*x + y*y)) 0.0
    +    signum (C x y)  = C (signum x) 0.0
     complex :: Float -> Float -> Complex
     complex x y = C x y
     
    @@ -282,7 +274,7 @@ main = do
       mainLoop
     display = do
        -- set the background color (dark solarized theme)
    -  clearColor $= Color4 0 0.1686 0.2117 1
    +  clearColor $= Color4 0 0.1686 0.2117 1
       clear [ColorBuffer] -- make the window black
       loadIdentity -- reset any transformation
       preservingMatrix drawMandelbrot
    @@ -347,8 +339,8 @@ positivePoints = do
     maxZeroIndex func minval maxval 0 = (minval+maxval)/2
     maxZeroIndex func minval maxval n = 
       if (func medpoint) /= 0 
    -       then maxZeroIndex func minval medpoint (n-1)
    -       else maxZeroIndex func medpoint maxval (n-1)
    +       then maxZeroIndex func minval medpoint (n-1)
    +       else maxZeroIndex func medpoint maxval (n-1)
       where medpoint = (minval+maxval)/2
    @@ -360,15 +352,15 @@ maxZeroIndex func minval maxval n =
    colorFromValue n =
       let 
           t :: Int -> GLfloat
    -      t i = 0.5 + 0.5*cos( fromIntegral i / 10 )
    +      t i = 0.5 + 0.5*cos( fromIntegral i / 10 )
       in
    -    Color3 (t n) (t (n+5)) (t (n+10))
    + Color3 (t n) (t (n+5)) (t (n+10))
    mandel x y = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
       in
           f (complex r i) 0 64
    @@ -378,7 +370,7 @@ maxZeroIndex func minval maxval n = f c z 0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1) + else f c ((z*z)+c) (n-1)
    @@ -406,9 +398,9 @@ f c z n = if (magnitude z
    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef
     type ColoredPoint = (GLfloat,GLfloat,GLfloat,Color3 GLfloat)
    @@ -476,7 +468,7 @@ main = do -- Some state variables (I know it feels BAD) angle <- newIORef ((35,0)::(GLfloat,GLfloat)) zoom <- newIORef (2::GLfloat) - campos <- newIORef ((0.7,0)::(GLfloat,GLfloat)) + campos <- newIORef ((0.7,0)::(GLfloat,GLfloat)) -- Function to call each frame idleCallback $= Just idle -- Function to call when keyboard or mouse is used @@ -516,18 +508,18 @@ mapSnd f (x,y) = ( x,f y) z $= 1 -- zoom p $= (0,0) -- camera position -- use of hjkl to rotate - kact a _ _ (Char 'h') Down = modVar a (mapFst (+0.5)) - kact a _ _ (Char 'l') Down = modVar a (mapFst (+(-0.5))) - kact a _ _ (Char 'j') Down = modVar a (mapSnd (+0.5)) - kact a _ _ (Char 'k') Down = modVar a (mapSnd (+(-0.5))) + kact a _ _ (Char 'h') Down = modVar a (mapFst (+0.5)) + kact a _ _ (Char 'l') Down = modVar a (mapFst (+(-0.5))) + kact a _ _ (Char 'j') Down = modVar a (mapSnd (+0.5)) + kact a _ _ (Char 'k') Down = modVar a (mapSnd (+(-0.5))) -- use o and i to zoom - kact _ z _ (Char 'o') Down = modVar z (*1.1) - kact _ z _ (Char 'i') Down = modVar z (*0.9) + kact _ z _ (Char 'o') Down = modVar z (*1.1) + kact _ z _ (Char 'i') Down = modVar z (*0.9) -- use sdfe to move the camera - kact _ _ p (Char 's') Down = modVar p (mapFst (+0.1)) - kact _ _ p (Char 'f') Down = modVar p (mapFst (+(-0.1))) - kact _ _ p (Char 'd') Down = modVar p (mapSnd (+0.1)) - kact _ _ p (Char 'e') Down = modVar p (mapSnd (+(-0.1))) + kact _ _ p (Char 's') Down = modVar p (mapFst (+0.1)) + kact _ _ p (Char 'f') Down = modVar p (mapFst (+(-0.1))) + kact _ _ p (Char 'd') Down = modVar p (mapSnd (+0.1)) + kact _ _ p (Char 'e') Down = modVar p (mapSnd (+(-0.1))) -- any other keys does nothing kact _ _ _ _ _ = return ()
    @@ -536,7 +528,7 @@ mapSnd f (x,y) = ( x,f y)
    display angle zoom position = do
        -- set the background color (dark solarized theme)
    -  clearColor $= Color4 0 0.1686 0.2117 1
    +  clearColor $= Color4 0 0.1686 0.2117 1
       clear [ColorBuffer,DepthBuffer]
       -- Transformation to change the view
       loadIdentity -- reset any transformation
    @@ -548,8 +540,8 @@ mapSnd f (x,y) = (  x,f y)
    scale z z z -- rotate (xangle,yangle) <- get angle - rotate xangle $ Vector3 1.0 0.0 (0.0::GLfloat) - rotate yangle $ Vector3 0.0 1.0 (0.0::GLfloat) + rotate xangle $ Vector3 1.0 0.0 (0.0::GLfloat) + rotate yangle $ Vector3 0.0 1.0 (0.0::GLfloat) -- Now that all transformation were made -- We create the object(s) @@ -598,17 +590,17 @@ depthPoints = do depthOf x' y' = maxZeroIndex (mandel x' y') 0 deep logdeep logdeep = floor ((log deep) / log 2) z1 = depthOf x y - z2 = depthOf (x+1) y - z3 = depthOf (x+1) (y+1) - z4 = depthOf x (y+1) - c1 = mandel x y (z1+1) - c2 = mandel (x+1) y (z2+1) - c3 = mandel (x+1) (y+1) (z3+1) - c4 = mandel x (y+1) (z4+1) + z2 = depthOf (x+1) y + z3 = depthOf (x+1) (y+1) + z4 = depthOf x (y+1) + c1 = mandel x y (z1+1) + c2 = mandel (x+1) y (z2+1) + c3 = mandel (x+1) (y+1) (z3+1) + c4 = mandel x (y+1) (z4+1) p1 = ( x /width, y /height, z1/deep, colorFromValue c1) - p2 = ((x+1)/width, y /height, z2/deep, colorFromValue c2) - p3 = ((x+1)/width,(y+1)/height, z3/deep, colorFromValue c3) - p4 = ( x /width,(y+1)/height, z4/deep, colorFromValue c4) + p2 = ((x+1)/width, y /height, z2/deep, colorFromValue c2) + p3 = ((x+1)/width,(y+1)/height, z3/deep, colorFromValue c3) + p4 = ( x /width,(y+1)/height, z4/deep, colorFromValue c4) if (and $ map (>=57) [c1,c2,c3,c4]) then [] else [p1,p2,p3,p1,p3,p4] @@ -619,13 +611,13 @@ depthPoints = do x <- [-width..width] y <- [-height..height] let - neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] + neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] depthOf (u,v) = maxZeroIndex (mandel u v) 0 deep logdeep logdeep = floor ((log deep) / log 2) -- zs are 3D points with found depth zs = map (\(u,v) -> (u,v,depthOf (u,v))) neighbors -- ts are 3D pixels + mandel value - ts = map (\(u,v,w) -> (u,v,w,mandel u v (w+1))) zs + ts = map (\(u,v,w) -> (u,v,w,mandel u v (w+1))) zs -- ps are 3D opengl points + color value ps = map (\(u,v,w,c') -> (u/width,v/height,w/deep,colorFromValue c')) ts @@ -643,7 +635,7 @@ depthPoints = do allPoints = planPoints ++ map inverseDepth planPoints where planPoints = depthPoints - inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c) + inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c)

    The rest of the program is very close to the preceding one.

    @@ -663,8 +655,8 @@ allPoints = planPoints ++ 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2
    @@ -673,9 +665,9 @@ maxZeroIndex func minval maxval n =
    colorFromValue n =
       let 
           t :: Int -> GLfloat
    -      t i = 0.7 + 0.3*cos( fromIntegral i / 10 )
    +      t i = 0.7 + 0.3*cos( fromIntegral i / 10 )
       in
    -    Color3 (t n) (t (n+5)) (t (n+10))
    + Color3 (t n) (t (n+5)) (t (n+10))

    We only changed from Complex to ExtComplex of the main f function.

    @@ -684,7 +676,7 @@ maxZeroIndex func minval maxval n = f c z 0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1) + else f c ((z*z)+c) (n-1)
    @@ -692,9 +684,9 @@ f c z n = if (magnitude z We simply add a new dimension to the mandel function and change the type signature of f from Complex to ExtComplex.

    mandel x y z = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    -      s = 2.0 * z / deep
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
    +      s = 2.0 * z / deep
       in
           f (extcomplex r i s) 0 64
    @@ -712,8 +704,8 @@ f c z n = if (magnitude z ExtComplex, the extended complexes
    -
    import YBoiler -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YBoiler -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths

    The yMainLoop takes two arguments: the title of the window and a function from time to triangles

    @@ -737,7 +729,7 @@ allPoints = planPoints ++ where planPoints = depthPoints ++ map inverseHeight depthPoints inverseHeight (x,y,z,c) = (x,-y,z,c) - inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c) + inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c)
    @@ -746,12 +738,12 @@ depthPoints = do x <- [-width..width] y <- [0..height] let - neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] + neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] depthOf (u,v) = maxZeroIndex (ymandel u v) 0 deep 7 -- zs are 3D points with found depth zs = map (\(u,v) -> (u,v,depthOf (u,v))) neighbors -- ts are 3D pixels + mandel value - ts = map (\(u,v,w) -> (u,v,w,ymandel u v (w+1))) zs + ts = map (\(u,v,w) -> (u,v,w,ymandel u v (w+1))) zs -- ps are 3D opengl points + color value ps = map (\(u,v,w,c') -> (u/width,v/height,w/deep,colorFromValue c')) ts @@ -772,16 +764,16 @@ depthPoints = do maxZeroIndex func minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 colorFromValue n = let t :: Int -> GLfloat - t i = 0.7 + 0.3*cos( fromIntegral i / 10 ) + t i = 0.7 + 0.3*cos( fromIntegral i / 10 ) in - ((t n),(t (n+5)),(t (n+10))) + ((t n),(t (n+5)),(t (n+10))) ymandel x y z = mandel (2*x/width) (2*y/height) (2*z/deep) 64
    @@ -815,8 +807,8 @@ ymandel x y z = mandel (2

    Here is a real working code, I’ve hidden most display functions. The YGL, is a kind of framework to display 3D functions. But it can easily be extended to many kind of representation.

    -
    import YGL -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YGL -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths

    We first set the mapping between user input and actions. The type of each couple should be of the form (user input, f) where (in a first time) f:World -> World. It means, the user input will transform the world state.

    @@ -830,16 +822,16 @@ inputActionMap = inputMapFromList [ ,(Press 'l' , rotate ydir (-5)) ,(Press 'o' , rotate zdir 5) ,(Press 'u' , rotate zdir (-5)) - ,(Press 'f' , translate xdir 0.1) - ,(Press 's' , translate xdir (-0.1)) - ,(Press 'e' , translate ydir 0.1) - ,(Press 'd' , translate ydir (-0.1)) - ,(Press 'z' , translate zdir 0.1) - ,(Press 'r' , translate zdir (-0.1)) - ,(Press '+' , zoom 1.1) - ,(Press '-' , zoom (1/1.1)) - ,(Press 'h' , resize 1.2) - ,(Press 'g' , resize (1/1.2)) + ,(Press 'f' , translate xdir 0.1) + ,(Press 's' , translate xdir (-0.1)) + ,(Press 'e' , translate ydir 0.1) + ,(Press 'd' , translate ydir (-0.1)) + ,(Press 'z' , translate zdir 0.1) + ,(Press 'r' , translate zdir (-0.1)) + ,(Press '+' , zoom 1.1) + ,(Press '-' , zoom (1/1.1)) + ,(Press 'h' , resize 1.2) + ,(Press 'g' , resize (1/1.2)) ]
    @@ -932,11 +924,11 @@ main = yMainLoop inputActionMap idleAction initialWorld< initialWorld = World { angle = makePoint3D (-30,-30,0) , position = makePoint3D (0,0,0) - , scale = 0.8 + , scale = 0.8 , shape = shapeFunc , box = Box3D { minPoint = makePoint3D (-2,-2,-2) , maxPoint = makePoint3D (2,2,2) - , resolution = 0.16 } + , resolution = 0.16 } , told = 0 }
    @@ -949,8 +941,8 @@ idleAction tnew world = world { , told = tnew } where - anglePerSec = 5.0 - delta = anglePerSec * elapsed / 1000.0 + anglePerSec = 5.0 + delta = anglePerSec * elapsed / 1000.0 elapsed = fromIntegral (tnew - (told world))
    @@ -962,7 +954,7 @@ shapeFunc res x y = let z = maxZeroIndex (ymandel x y) 0 1 20 in - if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | + if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | val <- [res], xeps <- [-val,val], yeps<-[-val,val]] then Nothing else Just (z,colorFromValue ((ymandel x y z) * 64)) @@ -974,9 +966,9 @@ shapeFunc res x y = colorFromValue n = let t :: Point -> Scalar - t i = 0.7 + 0.3*cos( i / 10 ) + t i = 0.7 + 0.3*cos( i / 10 ) in - makeColor (t n) (t (n+5)) (t (n+10)) + makeColor (t n) (t (n+5)) (t (n+10))

    The rest is similar to the preceding sections.

    @@ -994,8 +986,8 @@ colorFromValue n = maxZeroIndex _ minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 ymandel :: Point -> Point -> Point -> Point @@ -1022,8 +1014,8 @@ ymandel x y z = fromIntegral (ma
    -
    import YGL -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YGL -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths
     
     -- Centralize all user input interaction
     inputActionMap :: InputMap World
    @@ -1035,16 +1027,16 @@ inputActionMap = inputMapFromList [
         ,(Press 'l' , rotate ydir (-5))
         ,(Press 'o' , rotate zdir 5)
         ,(Press 'u' , rotate zdir (-5))
    -    ,(Press 'f' , translate xdir 0.1)
    -    ,(Press 's' , translate xdir (-0.1))
    -    ,(Press 'e' , translate ydir 0.1)
    -    ,(Press 'd' , translate ydir (-0.1))
    -    ,(Press 'z' , translate zdir 0.1)
    -    ,(Press 'r' , translate zdir (-0.1))
    -    ,(Press '+' , zoom 1.1)
    -    ,(Press '-' , zoom (1/1.1))
    -    ,(Press 'h' , resize 2.0)
    -    ,(Press 'g' , resize (1/2.0))
    +    ,(Press 'f' , translate xdir 0.1)
    +    ,(Press 's' , translate xdir (-0.1))
    +    ,(Press 'e' , translate ydir 0.1)
    +    ,(Press 'd' , translate ydir (-0.1))
    +    ,(Press 'z' , translate zdir 0.1)
    +    ,(Press 'r' , translate zdir (-0.1))
    +    ,(Press '+' , zoom 1.1)
    +    ,(Press '-' , zoom (1/1.1))
    +    ,(Press 'h' , resize 2.0)
    +    ,(Press 'g' , resize (1/2.0))
         ]
    @@ -1092,7 +1084,7 @@ rotate dir angleValue world = switchRotation :: World -> World switchRotation world = world { - anglePerSec = if anglePerSec world > 0 then 0 else 5.0 } + anglePerSec = if anglePerSec world > 0 then 0 else 5.0 } translate :: Point3D -> Scalar -> World -> World translate dir len world = @@ -1119,12 +1111,12 @@ main = yMainLoop inputActionMap idleAction initialWorld< initialWorld :: World initialWorld = World { angle = makePoint3D (30,30,0) - , anglePerSec = 5.0 + , anglePerSec = 5.0 , position = makePoint3D (0,0,0) - , scale = 1.0 + , scale = 1.0 , box = Box3D { minPoint = makePoint3D (0-eps, 0-eps, 0-eps) , maxPoint = makePoint3D (0+eps, 0+eps, 0+eps) - , resolution = 0.02 } + , resolution = 0.02 } , told = 0 -- We declare cache directly this time , cache = objectFunctionFromWorld initialWorld @@ -1168,7 +1160,7 @@ idleAction tnew world = , told = tnew } where - delta = anglePerSec world * elapsed / 1000.0 + delta = anglePerSec world * elapsed / 1000.0 elapsed = fromIntegral (tnew - (told world)) shapeFunc :: Scalar -> Function3D @@ -1176,7 +1168,7 @@ shapeFunc res x y = let z = maxZeroIndex (ymandel x y) 0 1 20 in - if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | + if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | val <- [res], xeps <- [-val,val], yeps<-[-val,val]] then Nothing else Just (z,colorFromValue 0) @@ -1185,9 +1177,9 @@ shapeFunc res x y = colorFromValue n = let t :: Point -> Scalar - t i = 0.0 + 0.5*cos( i /10 ) + t i = 0.0 + 0.5*cos( i /10 ) in - makeColor (t n) (t (n+5)) (t (n+10)) + makeColor (t n) (t (n+5)) (t (n+10)) -- given f min max nbtest, -- considering @@ -1202,8 +1194,8 @@ colorFromValue n = maxZeroIndex _ minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if func medpoint /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 ymandel :: Point -> Point -> Point -> Point @@ -1237,25 +1229,26 @@ ymandel x y z = fromIntegral (ma
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -1273,6 +1266,7 @@ ymandel x y z = fromIntegral (ma comments powered by Disqus
    +
    Published on 2012-06-15 diff --git a/Scratch/en/blog/Haskell-the-Hard-Way/index.html b/Scratch/en/blog/Haskell-the-Hard-Way/index.html index 54d6a63..87f8a65 100644 --- a/Scratch/en/blog/Haskell-the-Hard-Way/index.html +++ b/Scratch/en/blog/Haskell-the-Hard-Way/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Learn Haskell Fast and Hard

    -
    +

    Magritte pleasure principle

    @@ -258,7 +250,7 @@ Function declaration return x*x + y*y; }

    In Javascript:

    -
    function f(x,y) {
    +
    function f(x,y) {
         return x*x + y*y;
     }

    in Python:

    @@ -298,7 +290,7 @@ main = print (f f :: Int -> Int -> Int f x y = x*x + y*y -main = print (f 2.3 4.2)
    +main = print (f 2.3 4.2)

    You get this error:

    21_very_basic.lhs:6:23:
    @@ -316,7 +308,7 @@ main = print (f 
     
    f x y = x*x + y*y
     
    -main = print (f 2.3 4.2)
    +main = print (f 2.3 4.2)

    It works! Great, we don’t have to declare a new function for every single type. For example, in C, you’ll have to declare a function for int, for float, for long, for double, etc…

    But, what type should we declare? To discover the type Haskell has found for us, just launch ghci:

    @@ -363,7 +355,7 @@ g y ⇔ 3*3 + y*y
    f :: Num a => a -> a -> a
     f x y = x*x + y*y
     
    -main = print (f 3 2.4)
    +main = print (f 3 2.4)

    It works, because, 3 is a valid representation both for Fractional numbers like Float and for Integer. As 2.4 is a Fractional number, 3 is then interpreted as being also a Fractional number.

    01_basic/10_Introduction/23_very_basic.lhs

    @@ -377,7 +369,7 @@ f x y = x*x +x :: Int x = 3 y :: Float -y = 2.4 +y = 2.4 main = print (f x y) -- won't work because type x ≠ type y

    The compiler complains. The two parameters must have the same type.

    @@ -566,9 +558,9 @@ Functional style

    example: [1,2,3,4,5] ⇒ 2 + 4 ⇒ 6

    To show differences between the functional and imperative approach, I’ll start by providing an imperative solution (in Javascript):

    -
    function evenSum(list) {
    +
    function evenSum(list) {
         var result = 0;
    -    for (var i=0; i< list.length ; i++) {
    +    for (var i=0; i< list.length ; i++) {
             if (list[i] % 2 ==0) {
                 result += list[i];
             }
    @@ -809,7 +801,7 @@ myfunc list = foldl bar initialVa
     
    -- Version 6
     -- foldl' isn't accessible by default
     -- we need to import it from the module Data.List
    -import Data.List
    +import Data.List
     evenSum l = foldl' mysum 0 (filter even l)
       where mysum acc value = acc + value

    Version we can simplify by using directly a lambda notation. This way we don’t have to create the temporary name mysum.

    @@ -817,7 +809,7 @@ evenSum l = foldl' mysum 0 (-- Version 7 -- Generally it is considered a good practice -- to import only the necessary function(s) -import Data.List (foldl') +import Data.List (foldl') evenSum l = foldl' (\x y -> x+y) 0 (filter even l)

    And of course, we note that

    @@ -834,7 +826,7 @@ evenSum l = foldl' (\x y -> x

    02_Hard_Part/16_Functions.lhs

    Finally

    -- Version 8
    -import Data.List (foldl')
    +import Data.List (foldl')
     evenSum :: Integral a => [a] -> a
     evenSum l = foldl' (+) 0 (filter even l)

    foldl' isn’t the easiest function to intuit. If you are not used to it, you should study it a bit.

    @@ -854,13 +846,13 @@ evenSum l = foldl' (+) (f . g . h) x ⇔ f ( g (h x))

    We can take advantage of this operator to η-reduce our function:

    -- Version 9
    -import Data.List (foldl')
    +import Data.List (foldl')
     evenSum :: Integral a => [a] -> a
     evenSum = (foldl' (+) 0) . (filter even)

    Also, we could rename some parts to make it clearer:

    -- Version 10 
    -import Data.List (foldl')
    +import Data.List (foldl')
     sum' :: (Num a) => [a] -> a
     sum' = foldl' (+) 0
     evenSum :: Integral a => [a] -> a
    @@ -1012,9 +1004,9 @@ main = putStrLn And many accessors are made for you. Furthermore you can use another order when setting values.

    Example:

    data Complex = Num a => Complex { real :: a, img :: a}
    -c = Complex 1.0 2.0
    +c = Complex 1.0 2.0
     z = Complex { real = 3, img = 4 }
    -real c  1.0
    +real c  1.0
     img z  4

    02_Hard_Part/22_Types.lhs


    @@ -1058,7 +1050,7 @@ Trees

    Magritte, l

    We’ll just give another standard example: binary trees.

    -
    import Data.List
    +
    import Data.List
     
     data BinTree a = Empty
                      | Node a (BinTree a) (BinTree a)
    @@ -1263,7 +1255,7 @@ numbers = 0:map
     
     take' n [] = []
     take' 0 l = []
    -take' n (x:xs) = x:take' (n-1) xs
    +take' n (x:xs) = x:take' (n-1) xs
     
     main = print $ take' 10 numbers
    @@ -1281,8 +1273,8 @@ main = print $<

    This code is mostly the same as the previous one.

    -
    import Debug.Trace (trace)
    -import Data.List
    +
    import Debug.Trace (trace)
    +import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -1339,8 +1331,8 @@ main = print $< treeTakeDepth _ Empty = Empty treeTakeDepth 0 _ = Empty treeTakeDepth n (Node x left right) = let - nl = treeTakeDepth (n-1) left - nr = treeTakeDepth (n-1) right + nl = treeTakeDepth (n-1) left + nr = treeTakeDepth (n-1) right in Node x nl nr
    @@ -1366,8 +1358,8 @@ treeTakeDepth n (Node x left right) =
    iTree = Node 0 (dec iTree) (inc iTree)
             where
    -           dec (Node x l r) = Node (x-1) (dec l) (dec r) 
    -           inc (Node x l r) = Node (x+1) (inc l) (inc r) 
    + dec (Node x l r) = Node (x-1) (dec l) (dec r) + inc (Node x l r) = Node (x+1) (inc l) (inc r)

    Another way to create this tree is to use a higher order function. This function should be similar to map, but should work on BinTree instead of list. Here is such a function:

    @@ -1382,8 +1374,8 @@ treeMap f (Node x left right) =

    Our definition is now:

    infTreeTwo :: BinTree Int
    -infTreeTwo = Node 0 (treeMap (\x -> x-1) infTreeTwo) 
    -                    (treeMap (\x -> x+1) infTreeTwo) 
    +infTreeTwo = Node 0 (treeMap (\x -> x-1) infTreeTwo) + (treeMap (\x -> x+1) infTreeTwo)

    Look at the result for

    main = print $ treeTakeDepth 4 infTreeTwo
    @@ -1500,7 +1492,7 @@ main = do

    Argh! An evil error message and a crash! The first evolution will be to answer with a more friendly message.

    In order to do this, we must detect that something went wrong. Here is one way to do this. Use the type Maybe. It is a very common type in Haskell.

    -
    import Data.Maybe
    +
    import Data.Maybe

    What is this thing? Maybe is a type which takes one parameter. Its definition is:

    data Maybe a = Nothing | Just a
    @@ -1543,7 +1535,7 @@ main = do

    Our next evolution will be to prompt the user again and again until she enters a valid answer.

    We keep the first part:

    -
    import Data.Maybe
    +
    import Data.Maybe
     
     maybeRead :: Read a => String -> Maybe a
     maybeRead s = case reads s of
    @@ -1806,7 +1798,7 @@ main = do
       print $ sum list

    Is translated into:

    -
    import Data.Maybe
    +
    import Data.Maybe
     
     maybeRead :: Read a => String -> Maybe a
     maybeRead s = case reads s of
    @@ -1979,7 +1971,7 @@ The list monad
     

    Golconde de Magritte

    The list monad helps us to simulate non deterministic computations. Here we go:

    -
    import Control.Monad (guard)
    +
    import Control.Monad (guard)
     
     allCases = [1..10]
     
    @@ -2035,7 +2027,7 @@ More on Infinite Tree
     
     

    This code is mostly the same as the one in the tree section.

    -
    import Data.List
    +
    import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -2096,8 +2088,8 @@ treeFromList (x:xs) = treeTakeDepth _ Empty = Empty
     treeTakeDepth 0 _     = Empty
     treeTakeDepth n (Node x left right) = let
    -          nl = treeTakeDepth (n-1) left
    -          nr = treeTakeDepth (n-1) right
    +          nl = treeTakeDepth (n-1) left
    +          nr = treeTakeDepth (n-1) right
               in
                   Node x nl nr
    @@ -2147,8 +2139,8 @@ treeTakeDepth 4 (treeFromList shuffle)

    This code is mostly the same as the preceding one.

    -
    import Debug.Trace (trace)
    -import Data.List
    +
    import Debug.Trace (trace)
    +import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -2195,8 +2187,8 @@ treeTakeDepth 4 (treeFromList shuffle) treeTakeDepth _ Empty = Empty treeTakeDepth 0 _ = Empty treeTakeDepth n (Node x left right) = let - nl = treeTakeDepth (n-1) left - nr = treeTakeDepth (n-1) right + nl = treeTakeDepth (n-1) left + nr = treeTakeDepth (n-1) right in Node x nl nr
    @@ -2240,7 +2232,7 @@ safefilter f l = safefilter' f l nbTry safefilter' f (x:xs) n = if f x then x : safefilter' f xs nbTry - else safefilter' f xs (n-1)
    + else safefilter' f xs (n-1)

    Now run the program and be happy:

    @@ -2291,25 +2283,26 @@ treeFromList' (x:xs) n =
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -2327,6 +2320,7 @@ treeFromList' (x:xs) n = Please enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
    +
    Published on 2012-02-08 diff --git a/Scratch/en/blog/Higher-order-function-in-zsh/index.html b/Scratch/en/blog/Higher-order-function-in-zsh/index.html index d4253d1..179c625 100644 --- a/Scratch/en/blog/Higher-order-function-in-zsh/index.html +++ b/Scratch/en/blog/Higher-order-function-in-zsh/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Higher order function in zsh

    -
    +

    Title image

    @@ -107,11 +99,11 @@ done
  • The :t means tail; if toto=/path/to/file.ext then ${toto:t}=file.ext.
  • After ⇒

    -
    gif_to_png() { convert $1 ${1:r}.png && \rm -f $1 }
    +
    gif_to_png() { convert $1 ${1:r}.png && \rm -f $1 }
     
    -handle_resources() { map gif_to_png $1/resources/*.gif(.N) }
    +handle_resources() { map gif_to_png $1/resources/*.gif(.N) }
     
    -map handle_resources /path/to/projects/*(/N)
    +map handle_resources /path/to/projects/*(/N)

    No more bloc! It might be a little bit harder to read if you’re not used to functional programming notation. But it is more concise and robusts.

    Another example with some tests.

    Find all files in project not containing an s which their name contains their project name:

    @@ -205,25 +197,26 @@ function filter {
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -241,6 +234,7 @@ function filter { comments powered by Disqus
    +
    Published on 2011-09-28 diff --git a/Scratch/en/blog/Learn-Vim-Progressively/index.html b/Scratch/en/blog/Learn-Vim-Progressively/index.html index 442ed5a..a98d95b 100644 --- a/Scratch/en/blog/Learn-Vim-Progressively/index.html +++ b/Scratch/en/blog/Learn-Vim-Progressively/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Learn Vim Progressively

    -
    +

    Über leet use vim!

    @@ -311,25 +303,26 @@ $(document).ready(function() {
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -347,6 +340,7 @@ $(document).ready(function() { comments powered by Disqus
    +
    Published on 2011-08-25 diff --git a/Scratch/en/blog/Lost_Highway_Demistified/index.html b/Scratch/en/blog/Lost_Highway_Demistified/index.html index d78538d..2cf10f8 100644 --- a/Scratch/en/blog/Lost_Highway_Demistified/index.html +++ b/Scratch/en/blog/Lost_Highway_Demistified/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    A try to demystify 'Lost Highway'

    -
    +

    Lost Highway

    @@ -158,25 +150,26 @@ kind: article menupriority: 4 published: 2009-08-04 title: A try to demystify
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -194,6 +187,7 @@ kind: article menupriority: 4 published: 2009-08-04 title: A try to demystify comments powered by Disqus
    +
    Published on 2009-08-04 diff --git a/Scratch/en/blog/Password-Management/index.html b/Scratch/en/blog/Password-Management/index.html index f654cbb..12a3d8e 100644 --- a/Scratch/en/blog/Password-Management/index.html +++ b/Scratch/en/blog/Password-Management/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    40 character's passwords

    -
    +

    Title image

    @@ -114,25 +106,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -150,6 +143,7 @@ comments powered by Disqus
    +
    Published on 2011-05-18 diff --git a/Scratch/en/blog/SVG-and-m4-fractals/index.html b/Scratch/en/blog/SVG-and-m4-fractals/index.html index 179c47a..0449205 100644 --- a/Scratch/en/blog/SVG-and-m4-fractals/index.html +++ b/Scratch/en/blog/SVG-and-m4-fractals/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Increase the power of deficient languages.

    -
    +

    Yesod logo made in SVG and m4

    @@ -182,25 +174,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -218,6 +211,7 @@ comments powered by Disqus
    +
    Published on 2011-10-20 diff --git a/Scratch/en/blog/Social-link-the-right-way/index.html b/Scratch/en/blog/Social-link-the-right-way/index.html new file mode 100644 index 0000000..dad5837 --- /dev/null +++ b/Scratch/en/blog/Social-link-the-right-way/index.html @@ -0,0 +1,284 @@ + + + + + + YBlog - Social link the right way + + + + + + + + + + + + + +
    + + +
    +

    Social link the right way

    +
    +
    +
    +
    +

    Main image

    +
    + +

    tl;dr: Default share buttons track your user, aren’t uniform with your design, use computer ressources and slow down your web page loading.

    +

    Do it right. Use static links instead.

    +

    If you don’t want to read, just copy/paste this in your html:

    +
    <script>
    +var url=document.location;
    +document.write(
    +  '<'+'a href="https://twitter.com/home?status='+url+'" '
    +    +'target="_blank">Tweet this<'+'/a> - '
    +
    ++ '<'+'a href="http://www.facebook.com/sharer/sharer.php?u='+url+'" '
    +    +'target="_blank">Like this<'+'/a> - '
    +
    ++ '<'+'a href="https://plus.google.com/share?url='+url+'" '
    +    +'target="_blank">Share on G+<'+'/a>');
    +</script>
    +
    + +

    The problem

    +

    Ever been on a website and want to tweet about it? Fortunately, the website might have a button to help you. But do you really know what this button do?

    +

    The “Like”, “Tweet” and “+1” buttons will call a javascript. It will get access to your cookies. It helps the provider of the button to know who you are.

    +

    In plain English, the “+1” button will inform Google you are visiting the website, even if you don’t click on “+1”. The same is true for the “like” button for facebook and the “tweet this” button for twitter.

    +

    The problem is not only a privacy issue. In fact (sadly imho) this isn’t an issue for most people. These button consume computer ressources. Far more than a simple link. It thus slow down a bit the computer and consume energy. These button could also slow down the rendering of your web page.

    +

    Another aspect is their design. Their look and feel is mostly imposed by the provider.

    +

    The most problematic aspect in my opinion is to use a third party js on your website. What if tomorrow twitter update their tweet button? If the upgrade broke something for only a minority of people, they won’t fix it. This could occur anytime without any notification. They just have to add a document.write in their js you call asynchronously and BAM! Your website is just an empty blank page. And as you call many external ressources, it can be very difficult to find the origin of the problem.

    +

    Using social network buttons:

    +
      +
    • Pros: +
        +
      • help user share your website,
      • +
      • can provide a popularity indicator to your users.
      • +
    • +
    • Cons: +
        +
      • you help tracking your users,
      • +
      • generally doesn’t follow the design of your website,
      • +
      • use more computer ressources,
      • +
      • slow down your website,
      • +
      • executing third party js can break things silently.
      • +
    • +
    +

    Solutions

    +

    I will provide you two solutions with the following properties:

    +
      +
    • Pros: +
        +
      • help user share your website,
      • +
      • doesn’t follow your user,
      • +
      • use almost no computer ressource,
      • +
      • doesn’t slow down your website,
      • +
      • doesn’t execute any third party js on your website.
      • +
    • +
    • Cons: +
        +
      • doesn’t provide any popularity information.
      • +
    • +
    +

    Solution 1 (no js):

    +
    <a href="https://twitter.com/home?status=$url$"
    +    target="_blank">Tweet this</a>
    +
    +<a href="http://www.facebook.com/sharer/sharer.php?u=$url$"
    +    target="_blank">Like this</a>
    +
    +<a href="https://plus.google.com/share?url=$url$"
    +    target="_blank">Share on G+</a>
    +

    But you have to replace $url$ by the current url.

    +

    Solution 2 (Just copy/paste):

    +

    If you don’t want to write the url yourself, you could use some minimal js:

    +
    <script>
    +var url=document.location;
    +document.write(
    +  '<'+'a href="https://twitter.com/home?status='+url+'" '
    +    +'target="_blank">Tweet this<'+'/a> - '
    +
    ++ '<'+'a href="http://www.facebook.com/sharer/sharer.php?u='+url+'" '
    +    +'target="_blank">Like this<'+'/a> - '
    +
    ++ '<'+'a href="https://plus.google.com/share?url='+url+'" '
    +    +'target="_blank">Share on G+<'+'/a>');
    +</script>
    +

    Here is the result:

    +
    + +
    + +

    Good looking solutions

    +

    If you don’t want just text but nice icons. You have many choices:

    +
      +
    • Use images <img src="..."/> in the links.
    • +
    • Use icon fonts
    • +
    +

    As the first solution is pretty straightforward, I’ll explain the second one.

    +
      +
    1. Download the icon font here
    2. +
    3. put the font file(s) at some place (here ‘fonts/social_font.ttf’ relatively to your css file)
    4. +
    5. Add this to your css
    6. +
    +
    @font-face
    +  font-family: 'social'
    +  src: url('fonts/social_font.ttf') format('truetype')
    +  font-weight: normal
    +  font-style: normal
    +.social
    +  font-family: social
    +

    Now add this to your html:

    +

    Solution 1 (without js):

    +
    <a href="https://twitter.com/home?status=$url$"
    +    target="_blank"
    +    class="social">&#116;</a>
    +·
    +<a href="http://www.facebook.com/sharer/sharer.php?u=$url$"
    +   target="_blank"
    +   class="social">&#0096;</a>
    +·
    +<a href="https://plus.google.com/share?url=$url$"
    +    target="_blank"
    +    class="social">&#0103;</a>
    +

    Solution 2 (just copy/paste):

    +
    <script>
    +var url=document.location;
    +document.write(
    +    '<a href="https://twitter.com/home?status='+url+'"'
    +        + ' target="_blank"'
    +        + ' class="social">&#116;<'+'/a>'
    +    + ' · '
    +    + '<' + 'a href="http://www.facebook.com/sharer/sharer.php?u='+url+'"'
    +       + ' target="_blank"'
    +       + ' class="social">&#0096;<'+'/a>'
    +    + ' · '
    +    + '<a href="https://plus.google.com/share?url='+url+'"'
    +        + ' target="_blank"'
    +        + ' class="social">&#0103;<'+'/a>');
    +</script>
    +

    Here is the result:

    +
    + +
    + +

    Conclusion

    +
      +
    1. You get your design back,
    2. +
    3. You stop to help tracking people,
    4. +
    5. You use less computer ressources and more generally power ressources which is good for the planet,
    6. +
    7. Your web pages will load faster.
    8. +
    +

    ps: On my personal website I continue to use Google analytics. Therefore, Google (and only Google, not facebook nor twitter) can track you here. But I might change this in the future.

    +
    + +
    + + · + + · + + · + +
    + These social sharing links preserve your privacy +
    + + +
    +

    Comments

    +
    + + + comments powered by Disqus +
    + +
    +
    + Published on 2013-03-14 +
    + +
    + Yann Esposito© +
    +
    + Done with + Vim + & + Hakyll +
    +
    +
    + +
    + + + + + + + + diff --git a/Scratch/en/blog/Typography-and-the-Web/index.html b/Scratch/en/blog/Typography-and-the-Web/index.html index a7b456f..a226b6b 100644 --- a/Scratch/en/blog/Typography-and-the-Web/index.html +++ b/Scratch/en/blog/Typography-and-the-Web/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Typography and the Web

    -
    +

    @@ -107,25 +99,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -143,6 +136,7 @@ comments powered by Disqus
    +
    Published on 2012-02-02 diff --git a/Scratch/en/blog/Yesod-excellent-ideas/index.html b/Scratch/en/blog/Yesod-excellent-ideas/index.html index a892736..8ab0491 100644 --- a/Scratch/en/blog/Yesod-excellent-ideas/index.html +++ b/Scratch/en/blog/Yesod-excellent-ideas/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Yesod excellent ideas

    -
    +

    Title image

    @@ -65,7 +57,7 @@ SQL injection by a mom

    SQL injection by a mom

    When you create a web application, a lot of time is spent dealing with strings. Strings for URL, HTML, JavaScript, CSS, SQL, etc… To prevent malicious usage you have to protect each strings to be sure, no script will pass from one point to another. Suppose a user enter this user name:

    -
    Newton<script>alert("An apple fall")</script>
    +
    Newton<script>alert("An apple fall")</script>

    You must transform each < into &lt;. Without this transformation alert will appear each time you try to display this user name. Safe types associate with each string what kind of string it is. Is it a string for URL? For javascript? For HTML? And the right protection is made by default to prevent problems.

    Yesod does its best to handle cross scripting issues. Both between the client and the server and between the server and your DB. Here is an example:

    Go to the other page ~~~~~~

    @@ -127,25 +119,26 @@ toWidget hamletFile "buttonTemplate.hamlet"
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -163,6 +156,7 @@ toWidget hamletFile "buttonTemplate.hamlet"Please enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
    +
    Published on 2011-10-04 diff --git a/Scratch/en/blog/Yesod-tutorial-for-newbies/index.html b/Scratch/en/blog/Yesod-tutorial-for-newbies/index.html index 8b5b17b..db178e0 100644 --- a/Scratch/en/blog/Yesod-tutorial-for-newbies/index.html +++ b/Scratch/en/blog/Yesod-tutorial-for-newbies/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Haskell web programming

    -
    +

    Neo Flying at warp speed

    @@ -143,7 +135,7 @@ static/tmp
  • config/models
  • Obviously:

    -

    config/routes | is where you’ll configure the map %url → Code. |
    Handler/ | contains the files that will contain the code called when a %url is accessed. |
    templates/ | contains html, js and css templates. |
    config/models | is where you’ll configure the persistent objects (database tables). |

    +

    config/routes | is where you’ll configure the map url → Code. |
    Handler/ | contains the files that will contain the code called when a url is accessed. |
    templates/ | contains html, js and css templates. |
    config/models | is where you’ll configure the persistent objects (database tables). |

    During this tutorial we’ll modify other files as well, but we won’t explore them in detail.

    Also note, shell commands are executed in the root directory of your project instead specified otherwise.

    We are now ready to start!

    @@ -153,7 +145,7 @@ static/tmp

    Goal:

    Make a server that when accessed /echo/[some text] should return a web page containing “some text” inside an h1 bloc.

    -

    In a first time, we must declare the %url of the form /echo/... are meaningful. Let’s take a look at the file config/routes:

    +

    In a first time, we must declare the url of the form /echo/... are meaningful. Let’s take a look at the file config/routes:

     /static StaticR Static getStatic
     /auth   AuthR   Auth   getAuth
    @@ -169,7 +161,7 @@ static/tmp
     /echo/#String EchoR GET
     
    -

    This line contains three elements: the %url pattern, a handler name, an %http method. I am not particularly fan of the big R notation but this is the standard convention.

    +

    This line contains three elements: the url pattern, a handler name, an %http method. I am not particularly fan of the big R notation but this is the standard convention.

    If you save config/routes, you should see your terminal in which you launched yesod devel activate and certainly displaying an error message.

     Application.hs:31:1: Not in scope: `getEchoR'
    @@ -186,12 +178,12 @@ getEchoR theText = do
     

    TADA! It works!

    Bulletproof?

    Neo stops a myriad of bullets

    -

    Even this extremely minimal web application has some impressive properties. For exemple, imagine an attacker entering this %url:

    +

    Even this extremely minimal web application has some impressive properties. For exemple, imagine an attacker entering this url:

    [http://localhost:3000/echo/<a>I'm <script>alert("Bad!");](http://localhost:3000/echo/I’m

    " %>

    The special characters are protected for us. A malicious user could not hide some bad script inside.

    -

    This behavior is a direct consequence of type safety. The %url string is put inside a %url type. Then the interesting part in the %url is put inside a String type. To pass from %url type to String type some transformation are made. For example, replace all “%20” by space characters. Then to show the String inside an html document, the string is put inside an html type. Some transformations occurs like replace “<” by “&lt;”. Thanks to yesod, this tedious job is done for us.

    +

    This behavior is a direct consequence of type safety. The url string is put inside a url type. Then the interesting part in the url is put inside a String type. To pass from url type to String type some transformation are made. For example, replace all “%20” by space characters. Then to show the String inside an html document, the string is put inside an html type. Some transformations occurs like replace “<” by “&lt;”. Thanks to yesod, this tedious job is done for us.

    "http://localhost:3000/echo/some%20text<a>" :: URL
                         ↓
                   "some text<a>"                 :: String
    @@ -236,7 +228,7 @@ a:visited { col
     

    Generally you don’t want to have all your code inside a unique file. This is why we will separate our handlers. In a first time create a new file Handler/Echo.hs containing:

    module Handler.Echo where
     
    -import Import
    +import Import
     
     getEchoR :: String -> Handler RepHtml
     getEchoR theText = do
    @@ -249,7 +241,7 @@ getEchoR theText = do
     

    We must also declare this new Handler module inside Application.hs. Just after the “import Handler.Home”, add:

    -
    import Handler.Echo
    +
    import Handler.Echo

    This is it.

    ps: I am sure not so far in the future we could simply write yesod add-handler Echo to declare it and create a new handler file.

    Data.Text

    @@ -264,7 +256,7 @@ getEchoR theText = do

    And do the same in Handler/Echo.hs:

    module Handler.Echo where
     
    -import Import
    +import Import
     
     getEchoR :: Text -> Handler RepHtml
     getEchoR theText = do
    @@ -290,8 +282,8 @@ getEchoR theText = do
     

    This time the path /mirror will accept GET and POST requests. Add the corresponding new Handler file:

    module Handler.Mirror where
     
    -import Import
    -import qualified Data.Text as T
    +import Import
    +import qualified Data.Text as T
     
     getMirrorR :: Handler RepHtml
     getMirrorR = do
    @@ -349,11 +341,11 @@ Article
         )
     where
     
    -import Import
    -import Data.Monoid
    +import Import
    +import Data.Monoid
     
     -- to use Html into forms
    -import Yesod.Form.Nic (YesodNic, nicHtmlField)
    +import Yesod.Form.Nic (YesodNic, nicHtmlField)
     instance YesodNic App

    Remark: it is a best practice to add the YesodNic instance inside Foundation.hs. I put this definition here to make things easier but you should see a warning about this orphan instance. To put the include inside Foundation.hs is left as an exercice to the reader.

    Hint: Do not forget to put YesodNic and nicHtmlField inside the exported objects of the module.

    @@ -428,7 +420,7 @@ getArticleR articleId = do
    <p>A last try to <em>cross script</em> 
        and <em>SQL injection</em></p>
     <p>Here is the first try: 
    -   <script>alert("You loose");</script></p>
    +   <script>alert("You loose");</script></p>
     <p> And Here is the last </p>
     "); DROP TABLE ARTICLE;;

    Conclusion

    @@ -458,25 +450,26 @@ getArticleR articleId = do
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -494,6 +487,7 @@ getArticleR articleId = do comments powered by Disqus
    +
    Published on 2012-01-15 diff --git a/Scratch/en/blog/feed/feed.xml b/Scratch/en/blog/feed/feed.xml index a28384f..9931a24 100644 --- a/Scratch/en/blog/feed/feed.xml +++ b/Scratch/en/blog/feed/feed.xml @@ -8,8 +8,188 @@ Yann Esposito yann.esposito@gmail.com - 2012-12-12T00:00:00Z + 2013-03-14T00:00:00Z + Social link the right way + + http://yannesposito.com/Scratch/en/blog/Social-link-the-right-way/index.html + 2013-03-14T00:00:00Z + 2013-03-14T00:00:00Z + Main image

    +
    + +

    tl;dr: Default share buttons track your user, aren’t uniform with your design, use computer ressources and slow down your web page loading.

    +

    Do it right. Use static links instead.

    +

    If you don’t want to read, just copy/paste this in your html:

    +
    <script>
    +var url=document.location;
    +document.write(
    +  '<'+'a href="https://twitter.com/home?status='+url+'" '
    +    +'target="_blank">Tweet this<'+'/a> - '
    +
    ++ '<'+'a href="http://www.facebook.com/sharer/sharer.php?u='+url+'" '
    +    +'target="_blank">Like this<'+'/a> - '
    +
    ++ '<'+'a href="https://plus.google.com/share?url='+url+'" '
    +    +'target="_blank">Share on G+<'+'/a>');
    +</script>
    +
    + +

    The problem

    +

    Ever been on a website and want to tweet about it? Fortunately, the website might have a button to help you. But do you really know what this button do?

    +

    The “Like”, “Tweet” and “+1” buttons will call a javascript. It will get access to your cookies. It helps the provider of the button to know who you are.

    +

    In plain English, the “+1” button will inform Google you are visiting the website, even if you don’t click on “+1”. The same is true for the “like” button for facebook and the “tweet this” button for twitter.

    +

    The problem is not only a privacy issue. In fact (sadly imho) this isn’t an issue for most people. These button consume computer ressources. Far more than a simple link. It thus slow down a bit the computer and consume energy. These button could also slow down the rendering of your web page.

    +

    Another aspect is their design. Their look and feel is mostly imposed by the provider.

    +

    The most problematic aspect in my opinion is to use a third party js on your website. What if tomorrow twitter update their tweet button? If the upgrade broke something for only a minority of people, they won’t fix it. This could occur anytime without any notification. They just have to add a document.write in their js you call asynchronously and BAM! Your website is just an empty blank page. And as you call many external ressources, it can be very difficult to find the origin of the problem.

    +

    Using social network buttons:

    +
      +
    • Pros: +
        +
      • help user share your website,
      • +
      • can provide a popularity indicator to your users.
      • +
    • +
    • Cons: +
        +
      • you help tracking your users,
      • +
      • generally doesn’t follow the design of your website,
      • +
      • use more computer ressources,
      • +
      • slow down your website,
      • +
      • executing third party js can break things silently.
      • +
    • +
    +

    Solutions

    +

    I will provide you two solutions with the following properties:

    +
      +
    • Pros: +
        +
      • help user share your website,
      • +
      • doesn’t follow your user,
      • +
      • use almost no computer ressource,
      • +
      • doesn’t slow down your website,
      • +
      • doesn’t execute any third party js on your website.
      • +
    • +
    • Cons: +
        +
      • doesn’t provide any popularity information.
      • +
    • +
    +

    Solution 1 (no js):

    +
    <a href="https://twitter.com/home?status=$url$"
    +    target="_blank">Tweet this</a>
    +
    +<a href="http://www.facebook.com/sharer/sharer.php?u=$url$"
    +    target="_blank">Like this</a>
    +
    +<a href="https://plus.google.com/share?url=$url$"
    +    target="_blank">Share on G+</a>
    +

    But you have to replace $url$ by the current url.

    +

    Solution 2 (Just copy/paste):

    +

    If you don’t want to write the url yourself, you could use some minimal js:

    +
    <script>
    +var url=document.location;
    +document.write(
    +  '<'+'a href="https://twitter.com/home?status='+url+'" '
    +    +'target="_blank">Tweet this<'+'/a> - '
    +
    ++ '<'+'a href="http://www.facebook.com/sharer/sharer.php?u='+url+'" '
    +    +'target="_blank">Like this<'+'/a> - '
    +
    ++ '<'+'a href="https://plus.google.com/share?url='+url+'" '
    +    +'target="_blank">Share on G+<'+'/a>');
    +</script>
    +

    Here is the result:

    +
    + +
    + +

    Good looking solutions

    +

    If you don’t want just text but nice icons. You have many choices:

    +
      +
    • Use images <img src="..."/> in the links.
    • +
    • Use icon fonts
    • +
    +

    As the first solution is pretty straightforward, I’ll explain the second one.

    +
      +
    1. Download the icon font here
    2. +
    3. put the font file(s) at some place (here ‘fonts/social_font.ttf’ relatively to your css file)
    4. +
    5. Add this to your css
    6. +
    +
    @font-face
    +  font-family: 'social'
    +  src: url('fonts/social_font.ttf') format('truetype')
    +  font-weight: normal
    +  font-style: normal
    +.social
    +  font-family: social
    +

    Now add this to your html:

    +

    Solution 1 (without js):

    +
    <a href="https://twitter.com/home?status=$url$"
    +    target="_blank"
    +    class="social">&#116;</a>
    +·
    +<a href="http://www.facebook.com/sharer/sharer.php?u=$url$"
    +   target="_blank"
    +   class="social">&#0096;</a>
    +·
    +<a href="https://plus.google.com/share?url=$url$"
    +    target="_blank"
    +    class="social">&#0103;</a>
    +

    Solution 2 (just copy/paste):

    +
    <script>
    +var url=document.location;
    +document.write(
    +    '<a href="https://twitter.com/home?status='+url+'"'
    +        + ' target="_blank"'
    +        + ' class="social">&#116;<'+'/a>'
    +    + ' · '
    +    + '<' + 'a href="http://www.facebook.com/sharer/sharer.php?u='+url+'"'
    +       + ' target="_blank"'
    +       + ' class="social">&#0096;<'+'/a>'
    +    + ' · '
    +    + '<a href="https://plus.google.com/share?url='+url+'"'
    +        + ' target="_blank"'
    +        + ' class="social">&#0103;<'+'/a>');
    +</script>
    +

    Here is the result:

    +
    + +
    + +

    Conclusion

    +
      +
    1. You get your design back,
    2. +
    3. You stop to help tracking people,
    4. +
    5. You use less computer ressources and more generally power ressources which is good for the planet,
    6. +
    7. Your web pages will load faster.
    8. +
    +

    ps: On my personal website I continue to use Google analytics. Therefore, Google (and only Google, not facebook nor twitter) can track you here. But I might change this in the future.

    ]]>
    +
    + Category Theory Presentation http://yannesposito.com/Scratch/en/blog/Category-Theory-Presentation/index.html @@ -1035,9 +1215,9 @@ Another detail of the Mandelbulb

    We can consider two parts. The first being mostly some boilerplate2. And the second part more focused on OpenGL and content.

    Let’s play the song of our people

    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef

    For efficiency reason3, I will not use the default Haskell Complex data type.

    @@ -1047,11 +1227,11 @@ Another detail of the Mandelbulb
    instance Num Complex where
    -    fromInteger n = C (fromIntegral n,0.0)
    +    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)
    + abs (C (x,y)) = C (sqrt (x*x + y*y),0.0) + signum (C (x,y)) = C (signum x , 0.0)

    We declare some useful functions for manipulating complex numbers:

    @@ -1138,16 +1318,16 @@ allPoints = [ (x/width,ycolorFromValue n = let t :: Int -> GLfloat - t i = 0.5 + 0.5*cos( fromIntegral i / 10 ) + t i = 0.5 + 0.5*cos( fromIntegral i / 10 ) in - Color3 (t n) (t (n+5)) (t (n+10)) + Color3 (t n) (t (n+5)) (t (n+10))

    And now the mandel function. Given two coordinates in pixels, it returns some integer value:

    mandel x y = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
       in
           f (complex r i) 0 64
    @@ -1163,7 +1343,7 @@ allPoints = [ (x/width,y0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1)
    + else f c ((z*z)+c) (n-1)

    Well, if you download this file (look at the bottom of this section), compile it and run it this is the result:

    @@ -1179,20 +1359,20 @@ f c z n = if (magnitude z
    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef
     -- Use UNPACK data because it is faster
     -- The ! is for strict instead of lazy
     data Complex = C  {-# UNPACK #-} !Float 
                       {-# UNPACK #-} !Float 
                    deriving (Show,Eq)
     instance Num Complex where
    -    fromInteger n = C (fromIntegral n) 0.0
    +    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
    +    abs (C x y)     = C (sqrt (x*x + y*y)) 0.0
    +    signum (C x y)  = C (signum x) 0.0
     complex :: Float -> Float -> Complex
     complex x y = C x y
     
    @@ -1219,7 +1399,7 @@ main = do
       mainLoop
     display = do
        -- set the background color (dark solarized theme)
    -  clearColor $= Color4 0 0.1686 0.2117 1
    +  clearColor $= Color4 0 0.1686 0.2117 1
       clear [ColorBuffer] -- make the window black
       loadIdentity -- reset any transformation
       preservingMatrix drawMandelbrot
    @@ -1284,8 +1464,8 @@ positivePoints = do
     maxZeroIndex func minval maxval 0 = (minval+maxval)/2
     maxZeroIndex func minval maxval n = 
       if (func medpoint) /= 0 
    -       then maxZeroIndex func minval medpoint (n-1)
    -       else maxZeroIndex func medpoint maxval (n-1)
    +       then maxZeroIndex func minval medpoint (n-1)
    +       else maxZeroIndex func medpoint maxval (n-1)
       where medpoint = (minval+maxval)/2
    @@ -1297,15 +1477,15 @@ maxZeroIndex func minval maxval n =
    colorFromValue n =
       let 
           t :: Int -> GLfloat
    -      t i = 0.5 + 0.5*cos( fromIntegral i / 10 )
    +      t i = 0.5 + 0.5*cos( fromIntegral i / 10 )
       in
    -    Color3 (t n) (t (n+5)) (t (n+10))
    + Color3 (t n) (t (n+5)) (t (n+10))
    mandel x y = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
       in
           f (complex r i) 0 64
    @@ -1315,7 +1495,7 @@ maxZeroIndex func minval maxval n = f c z 0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1) + else f c ((z*z)+c) (n-1)
    @@ -1345,9 +1525,9 @@ f c z n = if (magnitude z
    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef
     type ColoredPoint = (GLfloat,GLfloat,GLfloat,Color3 GLfloat)
    @@ -1415,7 +1595,7 @@ main = do -- Some state variables (I know it feels BAD) angle <- newIORef ((35,0)::(GLfloat,GLfloat)) zoom <- newIORef (2::GLfloat) - campos <- newIORef ((0.7,0)::(GLfloat,GLfloat)) + campos <- newIORef ((0.7,0)::(GLfloat,GLfloat)) -- Function to call each frame idleCallback $= Just idle -- Function to call when keyboard or mouse is used @@ -1455,18 +1635,18 @@ mapSnd f (x,y) = ( x,f y) z $= 1 -- zoom p $= (0,0) -- camera position -- use of hjkl to rotate - kact a _ _ (Char 'h') Down = modVar a (mapFst (+0.5)) - kact a _ _ (Char 'l') Down = modVar a (mapFst (+(-0.5))) - kact a _ _ (Char 'j') Down = modVar a (mapSnd (+0.5)) - kact a _ _ (Char 'k') Down = modVar a (mapSnd (+(-0.5))) + kact a _ _ (Char 'h') Down = modVar a (mapFst (+0.5)) + kact a _ _ (Char 'l') Down = modVar a (mapFst (+(-0.5))) + kact a _ _ (Char 'j') Down = modVar a (mapSnd (+0.5)) + kact a _ _ (Char 'k') Down = modVar a (mapSnd (+(-0.5))) -- use o and i to zoom - kact _ z _ (Char 'o') Down = modVar z (*1.1) - kact _ z _ (Char 'i') Down = modVar z (*0.9) + kact _ z _ (Char 'o') Down = modVar z (*1.1) + kact _ z _ (Char 'i') Down = modVar z (*0.9) -- use sdfe to move the camera - kact _ _ p (Char 's') Down = modVar p (mapFst (+0.1)) - kact _ _ p (Char 'f') Down = modVar p (mapFst (+(-0.1))) - kact _ _ p (Char 'd') Down = modVar p (mapSnd (+0.1)) - kact _ _ p (Char 'e') Down = modVar p (mapSnd (+(-0.1))) + kact _ _ p (Char 's') Down = modVar p (mapFst (+0.1)) + kact _ _ p (Char 'f') Down = modVar p (mapFst (+(-0.1))) + kact _ _ p (Char 'd') Down = modVar p (mapSnd (+0.1)) + kact _ _ p (Char 'e') Down = modVar p (mapSnd (+(-0.1))) -- any other keys does nothing kact _ _ _ _ _ = return ()
    @@ -1475,7 +1655,7 @@ mapSnd f (x,y) = ( x,f y)
    display angle zoom position = do
        -- set the background color (dark solarized theme)
    -  clearColor $= Color4 0 0.1686 0.2117 1
    +  clearColor $= Color4 0 0.1686 0.2117 1
       clear [ColorBuffer,DepthBuffer]
       -- Transformation to change the view
       loadIdentity -- reset any transformation
    @@ -1487,8 +1667,8 @@ mapSnd f (x,y) = (  x,f y)
    scale z z z -- rotate (xangle,yangle) <- get angle - rotate xangle $ Vector3 1.0 0.0 (0.0::GLfloat) - rotate yangle $ Vector3 0.0 1.0 (0.0::GLfloat) + rotate xangle $ Vector3 1.0 0.0 (0.0::GLfloat) + rotate yangle $ Vector3 0.0 1.0 (0.0::GLfloat) -- Now that all transformation were made -- We create the object(s) @@ -1537,17 +1717,17 @@ depthPoints = do depthOf x' y' = maxZeroIndex (mandel x' y') 0 deep logdeep logdeep = floor ((log deep) / log 2) z1 = depthOf x y - z2 = depthOf (x+1) y - z3 = depthOf (x+1) (y+1) - z4 = depthOf x (y+1) - c1 = mandel x y (z1+1) - c2 = mandel (x+1) y (z2+1) - c3 = mandel (x+1) (y+1) (z3+1) - c4 = mandel x (y+1) (z4+1) + z2 = depthOf (x+1) y + z3 = depthOf (x+1) (y+1) + z4 = depthOf x (y+1) + c1 = mandel x y (z1+1) + c2 = mandel (x+1) y (z2+1) + c3 = mandel (x+1) (y+1) (z3+1) + c4 = mandel x (y+1) (z4+1) p1 = ( x /width, y /height, z1/deep, colorFromValue c1) - p2 = ((x+1)/width, y /height, z2/deep, colorFromValue c2) - p3 = ((x+1)/width,(y+1)/height, z3/deep, colorFromValue c3) - p4 = ( x /width,(y+1)/height, z4/deep, colorFromValue c4) + p2 = ((x+1)/width, y /height, z2/deep, colorFromValue c2) + p3 = ((x+1)/width,(y+1)/height, z3/deep, colorFromValue c3) + p4 = ( x /width,(y+1)/height, z4/deep, colorFromValue c4) if (and $ map (>=57) [c1,c2,c3,c4]) then [] else [p1,p2,p3,p1,p3,p4] @@ -1558,13 +1738,13 @@ depthPoints = do x <- [-width..width] y <- [-height..height] let - neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] + neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] depthOf (u,v) = maxZeroIndex (mandel u v) 0 deep logdeep logdeep = floor ((log deep) / log 2) -- zs are 3D points with found depth zs = map (\(u,v) -> (u,v,depthOf (u,v))) neighbors -- ts are 3D pixels + mandel value - ts = map (\(u,v,w) -> (u,v,w,mandel u v (w+1))) zs + ts = map (\(u,v,w) -> (u,v,w,mandel u v (w+1))) zs -- ps are 3D opengl points + color value ps = map (\(u,v,w,c') -> (u/width,v/height,w/deep,colorFromValue c')) ts @@ -1582,7 +1762,7 @@ depthPoints = do allPoints = planPoints ++ map inverseDepth planPoints where planPoints = depthPoints - inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c) + inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c)

    The rest of the program is very close to the preceding one.

    @@ -1602,8 +1782,8 @@ allPoints = planPoints ++ 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2
    @@ -1612,9 +1792,9 @@ maxZeroIndex func minval maxval n =
    colorFromValue n =
       let 
           t :: Int -> GLfloat
    -      t i = 0.7 + 0.3*cos( fromIntegral i / 10 )
    +      t i = 0.7 + 0.3*cos( fromIntegral i / 10 )
       in
    -    Color3 (t n) (t (n+5)) (t (n+10))
    + Color3 (t n) (t (n+5)) (t (n+10))

    We only changed from Complex to ExtComplex of the main f function.

    @@ -1623,7 +1803,7 @@ maxZeroIndex func minval maxval n = f c z 0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1) + else f c ((z*z)+c) (n-1)
    @@ -1631,9 +1811,9 @@ f c z n = if (magnitude z We simply add a new dimension to the mandel function and change the type signature of f from Complex to ExtComplex.

    mandel x y z = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    -      s = 2.0 * z / deep
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
    +      s = 2.0 * z / deep
       in
           f (extcomplex r i s) 0 64
    @@ -1651,8 +1831,8 @@ f c z n = if (magnitude z ExtComplex, the extended complexes
    -
    import YBoiler -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YBoiler -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths

    The yMainLoop takes two arguments: the title of the window and a function from time to triangles

    @@ -1676,7 +1856,7 @@ allPoints = planPoints ++ where planPoints = depthPoints ++ map inverseHeight depthPoints inverseHeight (x,y,z,c) = (x,-y,z,c) - inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c) + inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c)
    @@ -1685,12 +1865,12 @@ depthPoints = do x <- [-width..width] y <- [0..height] let - neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] + neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] depthOf (u,v) = maxZeroIndex (ymandel u v) 0 deep 7 -- zs are 3D points with found depth zs = map (\(u,v) -> (u,v,depthOf (u,v))) neighbors -- ts are 3D pixels + mandel value - ts = map (\(u,v,w) -> (u,v,w,ymandel u v (w+1))) zs + ts = map (\(u,v,w) -> (u,v,w,ymandel u v (w+1))) zs -- ps are 3D opengl points + color value ps = map (\(u,v,w,c') -> (u/width,v/height,w/deep,colorFromValue c')) ts @@ -1711,16 +1891,16 @@ depthPoints = do maxZeroIndex func minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 colorFromValue n = let t :: Int -> GLfloat - t i = 0.7 + 0.3*cos( fromIntegral i / 10 ) + t i = 0.7 + 0.3*cos( fromIntegral i / 10 ) in - ((t n),(t (n+5)),(t (n+10))) + ((t n),(t (n+5)),(t (n+10))) ymandel x y z = mandel (2*x/width) (2*y/height) (2*z/deep) 64
    @@ -1754,8 +1934,8 @@ ymandel x y z = mandel (2

    Here is a real working code, I’ve hidden most display functions. The YGL, is a kind of framework to display 3D functions. But it can easily be extended to many kind of representation.

    -
    import YGL -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YGL -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths

    We first set the mapping between user input and actions. The type of each couple should be of the form (user input, f) where (in a first time) f:World -> World. It means, the user input will transform the world state.

    @@ -1769,16 +1949,16 @@ inputActionMap = inputMapFromList [ ,(Press 'l' , rotate ydir (-5)) ,(Press 'o' , rotate zdir 5) ,(Press 'u' , rotate zdir (-5)) - ,(Press 'f' , translate xdir 0.1) - ,(Press 's' , translate xdir (-0.1)) - ,(Press 'e' , translate ydir 0.1) - ,(Press 'd' , translate ydir (-0.1)) - ,(Press 'z' , translate zdir 0.1) - ,(Press 'r' , translate zdir (-0.1)) - ,(Press '+' , zoom 1.1) - ,(Press '-' , zoom (1/1.1)) - ,(Press 'h' , resize 1.2) - ,(Press 'g' , resize (1/1.2)) + ,(Press 'f' , translate xdir 0.1) + ,(Press 's' , translate xdir (-0.1)) + ,(Press 'e' , translate ydir 0.1) + ,(Press 'd' , translate ydir (-0.1)) + ,(Press 'z' , translate zdir 0.1) + ,(Press 'r' , translate zdir (-0.1)) + ,(Press '+' , zoom 1.1) + ,(Press '-' , zoom (1/1.1)) + ,(Press 'h' , resize 1.2) + ,(Press 'g' , resize (1/1.2)) ]
    @@ -1871,11 +2051,11 @@ main = yMainLoop inputActionMap idleAction initialWorld< initialWorld = World { angle = makePoint3D (-30,-30,0) , position = makePoint3D (0,0,0) - , scale = 0.8 + , scale = 0.8 , shape = shapeFunc , box = Box3D { minPoint = makePoint3D (-2,-2,-2) , maxPoint = makePoint3D (2,2,2) - , resolution = 0.16 } + , resolution = 0.16 } , told = 0 }
    @@ -1888,8 +2068,8 @@ idleAction tnew world = world { , told = tnew } where - anglePerSec = 5.0 - delta = anglePerSec * elapsed / 1000.0 + anglePerSec = 5.0 + delta = anglePerSec * elapsed / 1000.0 elapsed = fromIntegral (tnew - (told world))
    @@ -1901,7 +2081,7 @@ shapeFunc res x y = let z = maxZeroIndex (ymandel x y) 0 1 20 in - if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | + if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | val <- [res], xeps <- [-val,val], yeps<-[-val,val]] then Nothing else Just (z,colorFromValue ((ymandel x y z) * 64)) @@ -1913,9 +2093,9 @@ shapeFunc res x y = colorFromValue n = let t :: Point -> Scalar - t i = 0.7 + 0.3*cos( i / 10 ) + t i = 0.7 + 0.3*cos( i / 10 ) in - makeColor (t n) (t (n+5)) (t (n+10)) + makeColor (t n) (t (n+5)) (t (n+10))

    The rest is similar to the preceding sections.

    @@ -1933,8 +2113,8 @@ colorFromValue n = maxZeroIndex _ minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 ymandel :: Point -> Point -> Point -> Point @@ -1961,8 +2141,8 @@ ymandel x y z = fromIntegral (ma
    -
    import YGL -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YGL -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths
     
     -- Centralize all user input interaction
     inputActionMap :: InputMap World
    @@ -1974,16 +2154,16 @@ inputActionMap = inputMapFromList [
         ,(Press 'l' , rotate ydir (-5))
         ,(Press 'o' , rotate zdir 5)
         ,(Press 'u' , rotate zdir (-5))
    -    ,(Press 'f' , translate xdir 0.1)
    -    ,(Press 's' , translate xdir (-0.1))
    -    ,(Press 'e' , translate ydir 0.1)
    -    ,(Press 'd' , translate ydir (-0.1))
    -    ,(Press 'z' , translate zdir 0.1)
    -    ,(Press 'r' , translate zdir (-0.1))
    -    ,(Press '+' , zoom 1.1)
    -    ,(Press '-' , zoom (1/1.1))
    -    ,(Press 'h' , resize 2.0)
    -    ,(Press 'g' , resize (1/2.0))
    +    ,(Press 'f' , translate xdir 0.1)
    +    ,(Press 's' , translate xdir (-0.1))
    +    ,(Press 'e' , translate ydir 0.1)
    +    ,(Press 'd' , translate ydir (-0.1))
    +    ,(Press 'z' , translate zdir 0.1)
    +    ,(Press 'r' , translate zdir (-0.1))
    +    ,(Press '+' , zoom 1.1)
    +    ,(Press '-' , zoom (1/1.1))
    +    ,(Press 'h' , resize 2.0)
    +    ,(Press 'g' , resize (1/2.0))
         ]
    @@ -2031,7 +2211,7 @@ rotate dir angleValue world = switchRotation :: World -> World switchRotation world = world { - anglePerSec = if anglePerSec world > 0 then 0 else 5.0 } + anglePerSec = if anglePerSec world > 0 then 0 else 5.0 } translate :: Point3D -> Scalar -> World -> World translate dir len world = @@ -2058,12 +2238,12 @@ main = yMainLoop inputActionMap idleAction initialWorld< initialWorld :: World initialWorld = World { angle = makePoint3D (30,30,0) - , anglePerSec = 5.0 + , anglePerSec = 5.0 , position = makePoint3D (0,0,0) - , scale = 1.0 + , scale = 1.0 , box = Box3D { minPoint = makePoint3D (0-eps, 0-eps, 0-eps) , maxPoint = makePoint3D (0+eps, 0+eps, 0+eps) - , resolution = 0.02 } + , resolution = 0.02 } , told = 0 -- We declare cache directly this time , cache = objectFunctionFromWorld initialWorld @@ -2107,7 +2287,7 @@ idleAction tnew world = , told = tnew } where - delta = anglePerSec world * elapsed / 1000.0 + delta = anglePerSec world * elapsed / 1000.0 elapsed = fromIntegral (tnew - (told world)) shapeFunc :: Scalar -> Function3D @@ -2115,7 +2295,7 @@ shapeFunc res x y = let z = maxZeroIndex (ymandel x y) 0 1 20 in - if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | + if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | val <- [res], xeps <- [-val,val], yeps<-[-val,val]] then Nothing else Just (z,colorFromValue 0) @@ -2124,9 +2304,9 @@ shapeFunc res x y = colorFromValue n = let t :: Point -> Scalar - t i = 0.0 + 0.5*cos( i /10 ) + t i = 0.0 + 0.5*cos( i /10 ) in - makeColor (t n) (t (n+5)) (t (n+10)) + makeColor (t n) (t (n+5)) (t (n+10)) -- given f min max nbtest, -- considering @@ -2141,8 +2321,8 @@ colorFromValue n = maxZeroIndex _ minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if func medpoint /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 ymandel :: Point -> Point -> Point -> Point @@ -2386,7 +2566,7 @@ Function declaration return x*x + y*y; }

    In Javascript:

    -
    function f(x,y) {
    +
    function f(x,y) {
         return x*x + y*y;
     }

    in Python:

    @@ -2426,7 +2606,7 @@ main = print (f f :: Int -> Int -> Int f x y = x*x + y*y -main = print (f 2.3 4.2)
    +main = print (f 2.3 4.2)

    You get this error:

    21_very_basic.lhs:6:23:
    @@ -2444,7 +2624,7 @@ main = print (f 
     
    f x y = x*x + y*y
     
    -main = print (f 2.3 4.2)
    +main = print (f 2.3 4.2)

    It works! Great, we don’t have to declare a new function for every single type. For example, in C, you’ll have to declare a function for int, for float, for long, for double, etc…

    But, what type should we declare? To discover the type Haskell has found for us, just launch ghci:

    @@ -2491,7 +2671,7 @@ g y ⇔ 3*3 + y*y
    f :: Num a => a -> a -> a
     f x y = x*x + y*y
     
    -main = print (f 3 2.4)
    +main = print (f 3 2.4)

    It works, because, 3 is a valid representation both for Fractional numbers like Float and for Integer. As 2.4 is a Fractional number, 3 is then interpreted as being also a Fractional number.

    01_basic/10_Introduction/23_very_basic.lhs

    @@ -2505,7 +2685,7 @@ f x y = x*x +x :: Int x = 3 y :: Float -y = 2.4 +y = 2.4 main = print (f x y) -- won't work because type x ≠ type y

    The compiler complains. The two parameters must have the same type.

    @@ -2694,9 +2874,9 @@ Functional style

    example: [1,2,3,4,5] ⇒ 2 + 4 ⇒ 6

    To show differences between the functional and imperative approach, I’ll start by providing an imperative solution (in Javascript):

    -
    function evenSum(list) {
    +
    function evenSum(list) {
         var result = 0;
    -    for (var i=0; i< list.length ; i++) {
    +    for (var i=0; i< list.length ; i++) {
             if (list[i] % 2 ==0) {
                 result += list[i];
             }
    @@ -2937,7 +3117,7 @@ myfunc list = foldl bar initialVa
     
    -- Version 6
     -- foldl' isn't accessible by default
     -- we need to import it from the module Data.List
    -import Data.List
    +import Data.List
     evenSum l = foldl' mysum 0 (filter even l)
       where mysum acc value = acc + value

    Version we can simplify by using directly a lambda notation. This way we don’t have to create the temporary name mysum.

    @@ -2945,7 +3125,7 @@ evenSum l = foldl' mysum 0 (
    -- Version 7
     -- Generally it is considered a good practice
     -- to import only the necessary function(s)
    -import Data.List (foldl')
    +import Data.List (foldl')
     evenSum l = foldl' (\x y -> x+y) 0 (filter even l)

    And of course, we note that

    @@ -2962,7 +3142,7 @@ evenSum l = foldl' (\x y ->02_Hard_Part/16_Functions.lhs

    Finally

    -- Version 8
    -import Data.List (foldl')
    +import Data.List (foldl')
     evenSum :: Integral a => [a] -> a
     evenSum l = foldl' (+) 0 (filter even l)

    foldl' isn’t the easiest function to intuit. If you are not used to it, you should study it a bit.

    @@ -2982,13 +3162,13 @@ evenSum l = foldl' (+) (f . g . h) x ⇔ f ( g (h x))

    We can take advantage of this operator to η-reduce our function:

    -- Version 9
    -import Data.List (foldl')
    +import Data.List (foldl')
     evenSum :: Integral a => [a] -> a
     evenSum = (foldl' (+) 0) . (filter even)

    Also, we could rename some parts to make it clearer:

    -- Version 10 
    -import Data.List (foldl')
    +import Data.List (foldl')
     sum' :: (Num a) => [a] -> a
     sum' = foldl' (+) 0
     evenSum :: Integral a => [a] -> a
    @@ -3140,9 +3320,9 @@ main = putStrLn And many accessors are made for you. Furthermore you can use another order when setting values.

    Example:

    data Complex = Num a => Complex { real :: a, img :: a}
    -c = Complex 1.0 2.0
    +c = Complex 1.0 2.0
     z = Complex { real = 3, img = 4 }
    -real c  1.0
    +real c  1.0
     img z  4

    02_Hard_Part/22_Types.lhs


    @@ -3186,7 +3366,7 @@ Trees

    Magritte, l

    We’ll just give another standard example: binary trees.

    -
    import Data.List
    +
    import Data.List
     
     data BinTree a = Empty
                      | Node a (BinTree a) (BinTree a)
    @@ -3391,7 +3571,7 @@ numbers = 0:map
     
     take' n [] = []
     take' 0 l = []
    -take' n (x:xs) = x:take' (n-1) xs
    +take' n (x:xs) = x:take' (n-1) xs
     
     main = print $ take' 10 numbers
    @@ -3409,8 +3589,8 @@ main = print $<

    This code is mostly the same as the previous one.

    -
    import Debug.Trace (trace)
    -import Data.List
    +
    import Debug.Trace (trace)
    +import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -3467,8 +3647,8 @@ main = print $< treeTakeDepth _ Empty = Empty treeTakeDepth 0 _ = Empty treeTakeDepth n (Node x left right) = let - nl = treeTakeDepth (n-1) left - nr = treeTakeDepth (n-1) right + nl = treeTakeDepth (n-1) left + nr = treeTakeDepth (n-1) right in Node x nl nr
    @@ -3494,8 +3674,8 @@ treeTakeDepth n (Node x left right) =
    iTree = Node 0 (dec iTree) (inc iTree)
             where
    -           dec (Node x l r) = Node (x-1) (dec l) (dec r) 
    -           inc (Node x l r) = Node (x+1) (inc l) (inc r) 
    + dec (Node x l r) = Node (x-1) (dec l) (dec r) + inc (Node x l r) = Node (x+1) (inc l) (inc r)

    Another way to create this tree is to use a higher order function. This function should be similar to map, but should work on BinTree instead of list. Here is such a function:

    @@ -3510,8 +3690,8 @@ treeMap f (Node x left right) =

    Our definition is now:

    infTreeTwo :: BinTree Int
    -infTreeTwo = Node 0 (treeMap (\x -> x-1) infTreeTwo) 
    -                    (treeMap (\x -> x+1) infTreeTwo) 
    +infTreeTwo = Node 0 (treeMap (\x -> x-1) infTreeTwo) + (treeMap (\x -> x+1) infTreeTwo)

    Look at the result for

    main = print $ treeTakeDepth 4 infTreeTwo
    @@ -3628,7 +3808,7 @@ main = do

    Argh! An evil error message and a crash! The first evolution will be to answer with a more friendly message.

    In order to do this, we must detect that something went wrong. Here is one way to do this. Use the type Maybe. It is a very common type in Haskell.

    -
    import Data.Maybe
    +
    import Data.Maybe

    What is this thing? Maybe is a type which takes one parameter. Its definition is:

    data Maybe a = Nothing | Just a
    @@ -3671,7 +3851,7 @@ main = do

    Our next evolution will be to prompt the user again and again until she enters a valid answer.

    We keep the first part:

    -
    import Data.Maybe
    +
    import Data.Maybe
     
     maybeRead :: Read a => String -> Maybe a
     maybeRead s = case reads s of
    @@ -3934,7 +4114,7 @@ main = do
       print $ sum list

    Is translated into:

    -
    import Data.Maybe
    +
    import Data.Maybe
     
     maybeRead :: Read a => String -> Maybe a
     maybeRead s = case reads s of
    @@ -4107,7 +4287,7 @@ The list monad
     

    Golconde de Magritte

    The list monad helps us to simulate non deterministic computations. Here we go:

    -
    import Control.Monad (guard)
    +
    import Control.Monad (guard)
     
     allCases = [1..10]
     
    @@ -4163,7 +4343,7 @@ More on Infinite Tree
     
     

    This code is mostly the same as the one in the tree section.

    -
    import Data.List
    +
    import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -4224,8 +4404,8 @@ treeFromList (x:xs) = treeTakeDepth _ Empty = Empty
     treeTakeDepth 0 _     = Empty
     treeTakeDepth n (Node x left right) = let
    -          nl = treeTakeDepth (n-1) left
    -          nr = treeTakeDepth (n-1) right
    +          nl = treeTakeDepth (n-1) left
    +          nr = treeTakeDepth (n-1) right
               in
                   Node x nl nr
    @@ -4275,8 +4455,8 @@ treeTakeDepth 4 (treeFromList shuffle)

    This code is mostly the same as the preceding one.

    -
    import Debug.Trace (trace)
    -import Data.List
    +
    import Debug.Trace (trace)
    +import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -4323,8 +4503,8 @@ treeTakeDepth 4 (treeFromList shuffle) treeTakeDepth _ Empty = Empty treeTakeDepth 0 _ = Empty treeTakeDepth n (Node x left right) = let - nl = treeTakeDepth (n-1) left - nr = treeTakeDepth (n-1) right + nl = treeTakeDepth (n-1) left + nr = treeTakeDepth (n-1) right in Node x nl nr
    @@ -4368,7 +4548,7 @@ safefilter f l = safefilter' f l nbTry safefilter' f (x:xs) n = if f x then x : safefilter' f xs nbTry - else safefilter' f xs (n-1)
    + else safefilter' f xs (n-1)

    Now run the program and be happy:

    @@ -4573,7 +4753,7 @@ static/tmp
  • config/models
  • Obviously:

    -

    config/routes | is where you’ll configure the map %url → Code. |
    Handler/ | contains the files that will contain the code called when a %url is accessed. |
    templates/ | contains html, js and css templates. |
    config/models | is where you’ll configure the persistent objects (database tables). |

    +

    config/routes | is where you’ll configure the map url → Code. |
    Handler/ | contains the files that will contain the code called when a url is accessed. |
    templates/ | contains html, js and css templates. |
    config/models | is where you’ll configure the persistent objects (database tables). |

    During this tutorial we’ll modify other files as well, but we won’t explore them in detail.

    Also note, shell commands are executed in the root directory of your project instead specified otherwise.

    We are now ready to start!

    @@ -4583,7 +4763,7 @@ static/tmp

    Goal:

    Make a server that when accessed /echo/[some text] should return a web page containing “some text” inside an h1 bloc.

    -

    In a first time, we must declare the %url of the form /echo/... are meaningful. Let’s take a look at the file config/routes:

    +

    In a first time, we must declare the url of the form /echo/... are meaningful. Let’s take a look at the file config/routes:

     /static StaticR Static getStatic
     /auth   AuthR   Auth   getAuth
    @@ -4599,7 +4779,7 @@ static/tmp
     /echo/#String EchoR GET
     
    -

    This line contains three elements: the %url pattern, a handler name, an %http method. I am not particularly fan of the big R notation but this is the standard convention.

    +

    This line contains three elements: the url pattern, a handler name, an %http method. I am not particularly fan of the big R notation but this is the standard convention.

    If you save config/routes, you should see your terminal in which you launched yesod devel activate and certainly displaying an error message.

     Application.hs:31:1: Not in scope: `getEchoR'
    @@ -4616,12 +4796,12 @@ getEchoR theText = do
     

    TADA! It works!

    Bulletproof?

    Neo stops a myriad of bullets

    -

    Even this extremely minimal web application has some impressive properties. For exemple, imagine an attacker entering this %url:

    +

    Even this extremely minimal web application has some impressive properties. For exemple, imagine an attacker entering this url:

    [http://localhost:3000/echo/<a>I'm <script>alert("Bad!");](http://localhost:3000/echo/I’m

    " %>

    The special characters are protected for us. A malicious user could not hide some bad script inside.

    -

    This behavior is a direct consequence of type safety. The %url string is put inside a %url type. Then the interesting part in the %url is put inside a String type. To pass from %url type to String type some transformation are made. For example, replace all “%20” by space characters. Then to show the String inside an html document, the string is put inside an html type. Some transformations occurs like replace “<” by “&lt;”. Thanks to yesod, this tedious job is done for us.

    +

    This behavior is a direct consequence of type safety. The url string is put inside a url type. Then the interesting part in the url is put inside a String type. To pass from url type to String type some transformation are made. For example, replace all “%20” by space characters. Then to show the String inside an html document, the string is put inside an html type. Some transformations occurs like replace “<” by “&lt;”. Thanks to yesod, this tedious job is done for us.

    "http://localhost:3000/echo/some%20text<a>" :: URL
                         ↓
                   "some text<a>"                 :: String
    @@ -4666,7 +4846,7 @@ a:visited { col
     

    Generally you don’t want to have all your code inside a unique file. This is why we will separate our handlers. In a first time create a new file Handler/Echo.hs containing:

    module Handler.Echo where
     
    -import Import
    +import Import
     
     getEchoR :: String -> Handler RepHtml
     getEchoR theText = do
    @@ -4679,7 +4859,7 @@ getEchoR theText = do
     

    We must also declare this new Handler module inside Application.hs. Just after the “import Handler.Home”, add:

    -
    import Handler.Echo
    +
    import Handler.Echo

    This is it.

    ps: I am sure not so far in the future we could simply write yesod add-handler Echo to declare it and create a new handler file.

    Data.Text

    @@ -4694,7 +4874,7 @@ getEchoR theText = do

    And do the same in Handler/Echo.hs:

    module Handler.Echo where
     
    -import Import
    +import Import
     
     getEchoR :: Text -> Handler RepHtml
     getEchoR theText = do
    @@ -4720,8 +4900,8 @@ getEchoR theText = do
     

    This time the path /mirror will accept GET and POST requests. Add the corresponding new Handler file:

    module Handler.Mirror where
     
    -import Import
    -import qualified Data.Text as T
    +import Import
    +import qualified Data.Text as T
     
     getMirrorR :: Handler RepHtml
     getMirrorR = do
    @@ -4779,11 +4959,11 @@ Article
         )
     where
     
    -import Import
    -import Data.Monoid
    +import Import
    +import Data.Monoid
     
     -- to use Html into forms
    -import Yesod.Form.Nic (YesodNic, nicHtmlField)
    +import Yesod.Form.Nic (YesodNic, nicHtmlField)
     instance YesodNic App

    Remark: it is a best practice to add the YesodNic instance inside Foundation.hs. I put this definition here to make things easier but you should see a warning about this orphan instance. To put the include inside Foundation.hs is left as an exercice to the reader.

    Hint: Do not forget to put YesodNic and nicHtmlField inside the exported objects of the module.

    @@ -4858,7 +5038,7 @@ getArticleR articleId = do
    <p>A last try to <em>cross script</em> 
        and <em>SQL injection</em></p>
     <p>Here is the first try: 
    -   <script>alert("You loose");</script></p>
    +   <script>alert("You loose");</script></p>
     <p> And Here is the last </p>
     "); DROP TABLE ARTICLE;;

    Conclusion

    @@ -5039,7 +5219,7 @@ getArticleR articleId = do SQL injection by a mom

    SQL injection by a mom

    When you create a web application, a lot of time is spent dealing with strings. Strings for URL, HTML, JavaScript, CSS, SQL, etc… To prevent malicious usage you have to protect each strings to be sure, no script will pass from one point to another. Suppose a user enter this user name:

    -
    Newton<script>alert("An apple fall")</script>
    +
    Newton<script>alert("An apple fall")</script>

    You must transform each < into &lt;. Without this transformation alert will appear each time you try to display this user name. Safe types associate with each string what kind of string it is. Is it a string for URL? For javascript? For HTML? And the right protection is made by default to prevent problems.

    Yesod does its best to handle cross scripting issues. Both between the client and the server and between the server and your DB. Here is an example:

    Go to the other page ~~~~~~

    @@ -5321,11 +5501,11 @@ done
  • The :t means tail; if toto=/path/to/file.ext then ${toto:t}=file.ext.
  • After ⇒

    -
    gif_to_png() { convert $1 ${1:r}.png && \rm -f $1 }
    +
    gif_to_png() { convert $1 ${1:r}.png && \rm -f $1 }
     
    -handle_resources() { map gif_to_png $1/resources/*.gif(.N) }
    +handle_resources() { map gif_to_png $1/resources/*.gif(.N) }
     
    -map handle_resources /path/to/projects/*(/N)
    +map handle_resources /path/to/projects/*(/N)

    No more bloc! It might be a little bit harder to read if you’re not used to functional programming notation. But it is more concise and robusts.

    Another example with some tests.

    Find all files in project not containing an s which their name contains their project name:

    @@ -5417,268 +5597,5 @@ function filter { print $result }
    ]]> - - Learn Vim Progressively - - http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/index.html - 2011-08-25T00:00:00Z - 2011-08-25T00:00:00Z - Über leet use vim!

    -
    - -

    tl;dr: You want to teach yourself vim (the best text editor known to human kind) in the fastest way possible. This is my way of doing it. You start by learning the minimal to survive, then you integrate all the tricks slowly.

    -
    - -

    Vim the Six Billion Dollar editor

    -
    -

    Better, Stronger, Faster.

    -
    -

    Learn vim and it will be your last text editor. There isn’t any better text editor that I know of. It is hard to learn, but incredible to use.

    -

    I suggest you teach yourself Vim in 4 steps:

    -
      -
    1. Survive
    2. -
    3. Feel comfortable
    4. -
    5. Feel Better, Stronger, Faster
    6. -
    7. Use superpowers of vim
    8. -
    -

    By the end of this journey, you’ll become a vim superstar.

    -

    But before we start, just a warning. Learning vim will be painful at first. It will take time. It will be a lot like playing a musical instrument. Don’t expect to be more efficient with vim than with another editor in less than 3 days. In fact it will certainly take 2 weeks instead of 3 days.

    -

    1st Level – Survive

    -
      -
    1. Install vim
    2. -
    3. Launch vim
    4. -
    5. DO NOTHING! Read.
    6. -
    -

    In a standard editor, typing on the keyboard is enough to write something and see it on the screen. Not this time. Vim is in Normal mode. Let’s go to Insert mode. Type the letter i.

    -

    You should feel a bit better. You can type letters like in a standard editor. To get back to Normal mode just press the ESC key.

    -

    You now know how to switch between Insert and Normal mode. And now, here are the commands that you need in order to survive in Normal mode:

    -
    -
      -
    • iInsert mode. Type ESC to return to Normal mode.
    • -
    • x → Delete the char under the cursor
    • -
    • :wq → Save and Quit (:w save, :q quit)
    • -
    • dd → Delete (and copy) the current line
    • -
    • p → Paste
    • -
    -

    Recommended:

    -
      -
    • hjkl (highly recommended but not mandatory) → basic cursor move (←↓↑→). Hint: j looks like a down arrow.
    • -
    • :help <command> → Show help about <command>. You can use :help without a <command> to get general help.
    • -
    -
    -

    Only 5 commands. That is all you need to get started. Once these command start to become natural (maybe after a day or so), you should move on to level 2.

    -

    But first, just a little remark about Normal mode. In standard editors, to copy you have to use the Ctrl key (Ctrl-c generally). In fact, when you press Ctrl, it is as if all of your keys change meaning. Using vim in normal mode is a bit like having the editor automatically press the Ctrl key for you.

    -

    A last word about notations:

    -
      -
    • instead of writing Ctrl-λ, I’ll write <C-λ>.
    • -
    • commands starting with : end with <enter>. For example, when I write :q, I mean :q<enter>.
    • -
    -

    2nd Level – Feel comfortable

    -

    You know the commands required for survival. It’s time to learn a few more commands. These are my suggestions:

    -
      -
    1. Insert mode variations:

      -
      -
        -
      • a → insert after the cursor
      • -
      • o → insert a new line after the current one
      • -
      • O → insert a new line before the current one
      • -
      • cw → replace from the cursor to the end of the word
      • -
      -
    2. -
    3. Basic moves

      -
      -
        -
      • 0 → go to the first column
      • -
      • ^ → go to the first non-blank character of the line
      • -
      • $ → go to the end of line
      • -
      • g_ → go to the last non-blank character of line
      • -
      • /pattern → search for pattern
      • -
      -
    4. -
    5. Copy/Paste

      -
      -
        -
      • P → paste before, remember p is paste after current position.
      • -
      • yy → copy the current line, easier but equivalent to ddP
      • -
      -
    6. -
    7. Undo/Redo

      -
      -
        -
      • u → undo
      • -
      • <C-r> → redo
      • -
      -
    8. -
    9. Load/Save/Quit/Change File (Buffer)

      -
      -
        -
      • :e <path/to/file> → open
      • -
      • :w → save
      • -
      • :saveas <path/to/file> → save to <path/to/file>
      • -
      • :x, ZZ or :wq → save and quit (:x only save if necessary)
      • -
      • :q! → quit without saving, also: :qa! to quit even if there are modified hidden buffers.
      • -
      • :bn (resp. :bp) → show next (resp. previous) file (buffer)
      • -
      -
    10. -
    -

    Take the time to learn all of these command. Once done, you should be able to do every thing you are able to do in other editors. You may still feel a bit awkward. But follow me to the next level and you’ll see why vim is worth the extra work.

    -

    3rd Level – Better. Stronger. Faster.

    -

    Congratulation for reaching this far! Now we can start with the interesting stuff. At level 3, we’ll only talk about commands which are compatible with the old vi editor.

    -

    Better

    -

    Let’s look at how vim could help you to repeat yourself:

    -
      -
    1. . → (dot) will repeat the last command,
    2. -
    3. N<command> → will repeat the command N times.
    4. -
    -

    Some examples, open a file and type:

    -
    -
      -
    • 2dd → will delete 2 lines
    • -
    • 3p → will paste the text 3 times
    • -
    • 100idesu [ESC] → will write “desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu”
    • -
    • . → Just after the last command will write again the 100 “desu”.
    • -
    • 3. → Will write 3 “desu” (and not 300, how clever).
    • -
    -
    -

    Stronger

    -

    Knowing how to move efficiently with vim is very important. Don’t skip this section.

    -
      -
    1. NG → Go to line N
    2. -
    3. gg → shortcut for 1G - go to the start of the file
    4. -
    5. G → Go to last line
    6. -
    7. Word moves:

      -
      -
        -
      1. w → go to the start of the following word,
      2. -
      3. e → go to the end of this word.
      4. -
      -

      By default, words are composed of letters and the underscore character. Let’s call a WORD a group of letter separated by blank characters. If you want to consider WORDS, then just use uppercase characters:

      -
        -
      1. W → go to the start of the following WORD,
      2. -
      3. E → go to the end of this WORD.
      4. -
      -

      Word moves example

      -
    8. -
    -

    Now let’s talk about very efficient moves:

    -
    -
      -
    • % : Go to the corresponding (, {, [.
    • -
    • * (resp. #) : go to next (resp. previous) occurrence of the word under the cursor
    • -
    -
    -

    Believe me, the last three commands are gold.

    -

    Faster

    -

    Remember about the importance of vi moves? Here is the reason. Most commands can be used using the following general format:

    -

    <start position><command><end position>

    -

    For example : 0y$ means

    -
      -
    • 0 → go to the beginning of this line
    • -
    • y → yank from here
    • -
    • $ → up to the end of this line
    • -
    -

    We also can do things like ye, yank from here to the end of the word. But also y2/foo yank up to the second occurrence of “foo”.

    -

    But what was true for y (yank), is also true for d (delete), v (visual select), gU (uppercase), gu (lowercase), etc…

    -

    4th Level – Vim Superpowers

    -

    With all preceding commands you should be comfortable using vim. But now, here are the killer features. Some of these features were the reason I started to use vim.

    -

    Move on current line: 0 ^ $ g_ f F t T , ;

    -
    -
      -
    • 0 → go to column 0
    • -
    • ^ → go to first character on the line
    • -
    • $ → go to the last column
    • -
    • g_ → go to the last character on the line
    • -
    • fa → go to next occurrence of the letter a on the line. , (resp. ;) will find the next (resp. previous) occurrence.
    • -
    • t, → go to just before the character ,.
    • -
    • 3fa → find the 3rd occurrence of a on this line.
    • -
    • F and T → like f and t but backward. Line moves
    • -
    -
    -

    A useful tip is: dt" → remove everything until the ".

    -

    Zone selection <action>a<object> or <action>i<object>

    -

    These command can only be used after an operator in visual mode. But they are very powerful. Their main pattern is:

    -

    <action>a<object> and <action>i<object>

    -

    Where action can be any action, for example, d (delete), y (yank), v (select in visual mode). The object can be: w a word, W a WORD (extended word), s a sentence, p a paragraph. But also, natural character such as ", ', ), }, ].

    -

    Suppose the cursor is on the first o of (map (+) ("foo")).

    -
    -
      -
    • vi" → will select foo.
    • -
    • va" → will select "foo".
    • -
    • vi) → will select "foo".
    • -
    • va) → will select ("foo").
    • -
    • v2i) → will select map (+) ("foo")
    • -
    • v2a) → will select (map (+) ("foo"))
    • -
    -
    -

    Text objects selection

    -

    Select rectangular blocks: <C-v>.

    -

    Rectangular blocks are very useful for commenting many lines of code. Typically: 0<C-v><C-d>I-- [ESC]

    -
      -
    • ^ → go to the first non-blank character of the line
    • -
    • <C-v> → Start block selection
    • -
    • <C-d> → move down (could also be jjj or %, etc…)
    • -
    • I-- [ESC] → write -- to comment each line
    • -
    -

    Rectangular blocks

    -

    Note: in Windows you might have to use <C-q> instead of <C-v> if your clipboard is not empty.

    -

    Completion: <C-n> and <C-p>.

    -

    In Insert mode, just type the start of a word, then type <C-p>, magic… Completion

    -

    Macros : qa do something q, @a, @@

    -

    qa record your actions in the register a. Then @a will replay the macro saved into the register a as if you typed it. @@ is a shortcut to replay the last executed macro.

    -
    -

    Example

    -

    On a line containing only the number 1, type this:

    -
      -
    • qaYp<C-a>q

    • -
    • qa start recording.
    • -
    • Yp duplicate this line.
    • -
    • <C-a> increment the number.
    • -
    • q stop recording.

    • -
    • @a → write 2 under the 1
    • -
    • @@ → write 3 under the 2
    • -
    • Now do 100@@ will create a list of increasing numbers until 103.

    • -
    -
    -

    Macros

    -

    Visual selection: v,V,<C-v>

    -

    We saw an example with <C-v>. There is also v and V. Once the selection has been made, you can:

    -
      -
    • J → join all the lines together.
    • -
    • < (resp. >) → indent to the left (resp. to the right).
    • -
    • = → auto indent
    • -
    -

    Autoindent

    -

    Add something at the end of all visually selected lines:

    -
      -
    • <C-v>
    • -
    • go to desired line (jjj or <C-d> or /pattern or % etc…)
    • -
    • $ go to the end of the line
    • -
    • A, write text, ESC.
    • -
    -

    Append to many lines

    -

    Splits: :split and vsplit.

    -

    These are the most important commands, but you should look at :help split.

    -
    -
      -
    • :split → create a split (:vsplit create a vertical split)
    • -
    • <C-w><dir> : where dir is any of hjkl or ←↓↑→ to change the split.
    • -
    • <C-w>_ (resp. <C-w>|) : maximise the size of the split (resp. vertical split)
    • -
    • <C-w>+ (resp. <C-w>-) : Grow (resp. shrink) split
    • -
    -
    -

    Split

    -

    Conclusion

    -

    That was 90% of the commands I use every day. I suggest that you learn no more than one or two new commands per day. After two to three weeks you’ll start to feel the power of vim in your hands.

    -

    Learning Vim is more a matter of training than plain memorization. Fortunately vim comes with some very good tools and excellent documentation. Run vimtutor until you are familiar with most basic commands. Also, you should read this page carefully: :help usr_02.txt.

    -

    Then, you will learn about !, folds, registers, plugins and many other features. Learn vim like you’d learn piano and all should be fine.

    - - -]]>
    - diff --git a/Scratch/en/blog/index.html b/Scratch/en/blog/index.html index df6106f..e52e41b 100644 --- a/Scratch/en/blog/index.html +++ b/Scratch/en/blog/index.html @@ -103,6 +103,9 @@ Learn Haskell Fast and Hard »
    -
    @@ -49,7 +41,7 @@

    MVC explained

    -
    +

    Why This article and for whom?

    Many website explaining how MVC works. But I can’t found one who explain why.

    @@ -69,25 +61,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -105,6 +98,7 @@ comments powered by Disqus
    +
    Published on 2009-07-06 diff --git a/Scratch/en/blog/programming-language-experience/index.html b/Scratch/en/blog/programming-language-experience/index.html index 5b552eb..11d8b7f 100644 --- a/Scratch/en/blog/programming-language-experience/index.html +++ b/Scratch/en/blog/programming-language-experience/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Programming Language Experience

    -
    +

    Title image

    @@ -209,25 +201,26 @@ X=whatever[C,D]
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + These social sharing links preserve your privacy
    + +

    Comments

    @@ -245,6 +238,7 @@ X=whatever[C,D]
    comments powered by Disqus
    +
    Published on 2011-09-28 diff --git a/Scratch/fr/about/old/index.html b/Scratch/fr/about/old/index.html index 296bcb9..793c839 100644 --- a/Scratch/fr/about/old/index.html +++ b/Scratch/fr/about/old/index.html @@ -60,7 +60,7 @@
    diff --git a/Scratch/fr/blog/01_nanoc/index.html b/Scratch/fr/blog/01_nanoc/index.html index c348003..c14214c 100644 --- a/Scratch/fr/blog/01_nanoc/index.html +++ b/Scratch/fr/blog/01_nanoc/index.html @@ -32,16 +32,8 @@ document.write(''); // +
    -
    -
    @@ -49,7 +41,7 @@

    nanoc

    -
    +

    Qu’est-ce que nanoc ?

    Il ne s’agit pas exactement d’un CMS, mais plutôt d’un système de gestion de pages statiques.

    @@ -59,25 +51,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -95,6 +88,7 @@ comments powered by Disqus
    +
    Published on 2008-10-10 diff --git a/Scratch/fr/blog/02_ackgrep/index.html b/Scratch/fr/blog/02_ackgrep/index.html index 757e899..0a0013b 100644 --- a/Scratch/fr/blog/02_ackgrep/index.html +++ b/Scratch/fr/blog/02_ackgrep/index.html @@ -32,16 +32,8 @@ document.write(''); // +
    -
    -
    @@ -49,7 +41,7 @@

    Mieux que grep

    -
    +

    Mise à jour

    Comme Andy Lester me l’a fait remarqué. ack est un simple fichier perl qu’il suffit de copier dans son répertoire personnel ~/bin. Maintenant j’ai ack sur mon serveur professionnel.

    @@ -74,25 +66,26 @@ listeFic=( /(.) ) autoload zargs zargs – $listeFic – grep $1 |
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -110,6 +103,7 @@ listeFic=( /(.) ) autoload zargs zargs – $listeFic – grep $1 | comments powered by Disqus
    +
    Published on 2009-07-22 diff --git a/Scratch/fr/blog/03_losthighway/index.html b/Scratch/fr/blog/03_losthighway/index.html index 1fd3444..7949161 100644 --- a/Scratch/fr/blog/03_losthighway/index.html +++ b/Scratch/fr/blog/03_losthighway/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Lost Highway démystifié (un peu)

    -
    +

    Lost Highway

    @@ -133,25 +125,26 @@ Lost Highway ne laisse pas indiférent. Le revoir ne lasse pas même s’il parr
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -169,6 +162,7 @@ Lost Highway ne laisse pas indiférent. Le revoir ne lasse pas même s’il parr comments powered by Disqus
    +
    Published on 2009-08-04 diff --git a/Scratch/fr/blog/04_drm/index.html b/Scratch/fr/blog/04_drm/index.html index 7bae0af..13b8940 100644 --- a/Scratch/fr/blog/04_drm/index.html +++ b/Scratch/fr/blog/04_drm/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Les protections anti-copies sont LE MAL

    -
    +

    Protections anti-copie = Belle connerie (+1)!

    Ma femme a acheté pour environ 500€ (au moins) de séries télé sur iTunes. Mais elles s’est trompé pour la première saison de Battlestar Galactica. Qu’elle a téléchargé en anglais. Hors comme les séries sont protégées, on ne peut simplement pas voir la série avec des sous-titres !

    @@ -70,25 +62,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -106,6 +99,7 @@ comments powered by Disqus
    +
    Published on 2009-08-15 diff --git a/Scratch/fr/blog/05_git_create_remote_branch/index.html b/Scratch/fr/blog/05_git_create_remote_branch/index.html index 78eb5f4..7b0fc39 100644 --- a/Scratch/fr/blog/05_git_create_remote_branch/index.html +++ b/Scratch/fr/blog/05_git_create_remote_branch/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Création de branches externe avec Git

    -
    +

    Créer une branche Git externe facilement

    J’utilise Git pour synchroniser des projets personnels. C’est pourquoi quand je crée une branche locale je souhaite quasiment toujours qu’elle soit aussi créée en externe (remote).

    @@ -66,25 +58,26 @@ branch=1gitbr
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -102,6 +95,7 @@ branch=1gitbrPlease enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
    +
    Published on 2009-08-17 diff --git a/Scratch/fr/blog/06_How_I_use_git/index.html b/Scratch/fr/blog/06_How_I_use_git/index.html index f99fbef..47f8ce5 100644 --- a/Scratch/fr/blog/06_How_I_use_git/index.html +++ b/Scratch/fr/blog/06_How_I_use_git/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Git en solo

    -
    +

    central architecture

    @@ -184,25 +176,26 @@ done
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -220,6 +213,7 @@ done
    comments powered by Disqus
    +
    Published on 2009-08-18 diff --git a/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html b/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html index 718953e..208359a 100644 --- a/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html +++ b/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Compilation d'économiseur d'écran sous Snow Leopard©

    -
    +

    Comment recompiler un économiseur d’écran sous Snow Leopard(c)

    Mon économiseur d’écran ne fonctionnait plus sous Mac OS X 10.6 Snow Leopard(c). Après un peu de recherche sous google, le problème semblait pouvoir être réglé avec une recompilation. Cependant, même en recomilant en 64 bits ça ne fonctionnait toujours pas. Après un peu plus de recherches (merci à ElectricSheep ), j’ai découvert les bons paramètres.

    @@ -60,25 +52,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -96,6 +89,7 @@ comments powered by Disqus
    +
    Published on 2009-09-06 diff --git a/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html b/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html index 2d022ef..ec9b1f6 100644 --- a/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html +++ b/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    ssh sur le port 443 avec Snow Leopard

    -
    +

    Surfez partout comme si vous étiez chez vous

    Que ce soit pour surfer en toute sécurité depuis un accès wifi non sécurisé ou pour contourner les parefeux diaboliques des entreprises. J’ai configuré un serveur ssh écoutant sur le port 443 chez moi.

    @@ -111,25 +103,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -147,6 +140,7 @@ comments powered by Disqus
    +
    Published on 2009-09-07 diff --git a/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/index.html b/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/index.html index 3874157..8f982f6 100644 --- a/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/index.html +++ b/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Pourquoi je n'ai pas conservé whos.amung.us

    -
    +

    J’ai arrété d’utiliser whos.amung.us en faveur de Google Analytics.

    La plupart du temps je préfère ne pas utiliser le même produit que tout le monde. J’aime bien essayer des choses un peu nouvelles. Mais whosamung.us avait trop de publicités. Je devais affichier une de leur image sur mon site qui n’écrivait que le nombre de personne actuellement présentes. Pas les nombres de visites.

    @@ -66,25 +58,26 @@ Google Analytics > Who’s Amung Us
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -102,6 +95,7 @@ Google Analytics > Who’s Amung Us comments powered by Disqus
    +
    Published on 2009-09-11 diff --git a/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html b/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html index b202aad..0d1a342 100644 --- a/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html +++ b/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Héberger son site personnel sur le site mobileMe

    -
    +

    Mise à jour du (2012/01/11)

    iDisk va bientôt disparaître. Cet article est donc presque complètement obsolète.

    @@ -284,25 +276,26 @@ print -P -- " Publish terminated"
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -320,6 +313,7 @@ print -P -- " Publish terminated" comments powered by Disqus
    +
    Published on 2009-09-11 diff --git a/Scratch/fr/blog/11_Load_Disqus_Asynchronously/index.html b/Scratch/fr/blog/11_Load_Disqus_Asynchronously/index.html index af37d50..e956657 100644 --- a/Scratch/fr/blog/11_Load_Disqus_Asynchronously/index.html +++ b/Scratch/fr/blog/11_Load_Disqus_Asynchronously/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Load Disqus Asynchronously [en]

    -
    +

    Update

    In fact this method works for old threads. But it fails to create new post threads. This is why I tried and be conquered by intensedebate, as you can see in the bottom of this page.

    @@ -73,14 +65,14 @@

    Javascript

    replace:

    -
    <script type="text/javascript" src="http://disqus.com/forums/YOUR_DISQUS_ID/embed.js"></script>
    +
    <script type="text/javascript" src="http://disqus.com/forums/YOUR_DISQUS_ID/embed.js"></script>

    by

    -
    window.disqus_no_style=true;
    -$(document).ready(function(){
    -    $.getScript("http://disqus.com/forums/YOUR_DISQUS_ID/embed.js");
    +
    window.disqus_no_style=true;
    +$(document).ready(function(){
    +    $.getScript("http://disqus.com/forums/YOUR_DISQUS_ID/embed.js");
     });
    @@ -92,25 +84,26 @@ $(document).ready( - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -128,6 +121,7 @@ $(document).ready(comments powered by Disqus. comments powered by Disqus
    +
    Published on 2009-09-17 diff --git a/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html b/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html index 51be9a1..829c1df 100644 --- a/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html +++ b/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Disqus contre Intense Debate (pourquois j'ai changé)

    -
    +

    Disqus vs. Intense Debate

    J’ai écrit un article sur la façon dont j’ai essayé d’intégrer Disqus. Mon problème majeur avec Disqus c’était que ma page ne s’affichait pas correctement tant que les commentaire n’avait pas fini de s’afficher. Ça m’est arrivé plusieurs fois d’avoir ma page complètement bloquée parce que les serveurs de Disqus ne répondait pas. C’est pourquoi j’ai essayer de l’inclure de manière asynchrone. Cependant j’ai eu des difficultés pour le faire fonctionner correctement.

    @@ -59,13 +51,13 @@

    Lorsque j’ai commencé à intégrer Disqus je n’ai jamais essayé Intense Debate. Maintenant que j’ai essayé je doit dire que je suis conquis. Il correspond exactement à ce que j’espérais de ce type de service.

    Pour le rendre complètement asynchrone il suffit de récupérer leur js commun et de remplacer la ligne suivante :

    -
    document.getElementsByTagName("head")[0].appendChild(commentScript);
    +
    document.getElementsByTagName("head")[0].appendChild(commentScript);

    par (si vous utilisez jQuery) :

    -
    $(document).ready( function() {
    -    document.getElementsByTagName("head")[0].appendChild(commentScript);
    +
    $(document).ready( function() {
    +    document.getElementsByTagName("head")[0].appendChild(commentScript);
     });
    @@ -79,25 +71,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -115,6 +108,7 @@ comments powered by Disqus
    +
    Published on 2009-09-28 diff --git a/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/index.html b/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/index.html index 1f70200..e4ce7e6 100644 --- a/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/index.html +++ b/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    jQuery Tag Cloud [en]

    -
    +

    Here is how I done the tag cloud of my blog. It is done mostly in jQuery. All my site is static and pages are generated with nanoc. It is (in my humble opinion) the modern geek way to make a website.

    This is why I’ll give only a Ruby Generator, not a full javascript generator. But you can easily translate from Ruby to Javascript.

    @@ -64,12 +56,12 @@

    jQuery

    Here is the simple jQuery code:

    -
        $(document).ready( function(){$('.list').hide();} );
    -    function tagSelected(id) {
    -        $('.list').hide();
    -        $('#'+id).fadeIn();
    -        $('.tag.selected').removeClass('selected');
    -        $('#tag_'+id).addClass('selected');
    +
        $(document).ready( function(){$('.list').hide();} );
    +    function tagSelected(id) {
    +        $('.list').hide();
    +        $('#'+id).fadeIn();
    +        $('.tag.selected').removeClass('selected');
    +        $('#tag_'+id).addClass('selected');
         }
    @@ -248,25 +240,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -284,6 +277,7 @@ comments powered by Disqus
    +
    Published on 2009-09-23 diff --git a/Scratch/fr/blog/2009-09-replace-all-except-some-part/index.html b/Scratch/fr/blog/2009-09-replace-all-except-some-part/index.html index 6c81b63..d0fd3ed 100644 --- a/Scratch/fr/blog/2009-09-replace-all-except-some-part/index.html +++ b/Scratch/fr/blog/2009-09-replace-all-except-some-part/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Remplacer tout sauf une partie

    -
    +

    My problem is simple:

    I want to filter a text except some part of it. I can match easily the part I don’t want to be filtered. For example

    @@ -123,25 +115,26 @@ allExceptCode(:filter, content)
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -159,6 +152,7 @@ allExceptCode(:filter, content) comments powered by Disqus
    +
    Published on 2009-09-22 diff --git a/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html b/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html index 64d2f99..b9b0236 100644 --- a/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html +++ b/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Synchronisation avec mobileme (2)

    -
    +

    J’ai déjà discuté de la façon dont je synchronise mon site web sur mobileme. J’ai amélioré mon script pour le rendre incrémental.

    Voici mon script, il créé tout d’abord un fichier qui contient la liste des fichiers avec leur hash. Afin de les comparer avec ceux qui sont en ligne sans avoir à les parcourir. Ensuite pour chaque fichier qui semble différent, je met à jour le contenu.

    @@ -136,25 +128,26 @@ fi
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -172,6 +165,7 @@ fi
    comments powered by Disqus
    +
    Published on 2009-10-28 diff --git a/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/index.html b/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/index.html index 95a17ad..69e282d 100644 --- a/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/index.html +++ b/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Une CSS pour IE seulement

    -
    +

    Pour les développeur de site web Internet Explorer est un cauchemar. C’est pourquoi j’utilise un style complètement différent pour ce navigateur. Avec la librairie jQuery.

    @@ -76,25 +68,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +

    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -112,6 +105,7 @@ comments powered by Disqus
    +
    Published on 2009-10-30 diff --git a/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/index.html b/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/index.html index 4fa6ea1..d51f7bd 100644 --- a/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/index.html +++ b/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Focus > Minimalisme

    -
    +

    Je crois que le but du minimalisme est de facilité le Focus c’est-à-dire la concentration sur le contenu. Je crois que le minimalisme doit être un moyen et pas une fin. Le Focus devrait être le but, et je pense que le minimalisme n’est pas obligatoire pour l’atteindre.

    C’est pourquoi mon design n’est pas minimaliste. Mais j’ai décidé d’enlever la majorité des objets servant à la navigation pour améliorer l’attention sur l’article. Peut-être que plus tard, je préfèrerai laisser le menu dans les pages normales du site pour ne le cacher que dans les articles de blog. Pour l’instant je le cache partout.

    @@ -74,19 +66,19 @@ top: 5em; left: 0; position: fixed; width: 10em; z-index: 9000; } ~~~~~~

    Le code javascript (utilisant jQuery)

    -
    function hideMenu() {
    -    $('#entete').animate({left:"-10em"}, 500 );
    -    $('#menuButton').html('&rarr;');
    +
    function hideMenu() {
    +    $('#entete').animate({left:"-10em"}, 500 );
    +    $('#menuButton').html('&rarr;');
     }
    -function showMenu() {
    -    $('#entete').animate({left:"0em"}, 500 );
    -    $('#menuButton').html('&larr;');
    +function showMenu() {
    +    $('#entete').animate({left:"0em"}, 500 );
    +    $('#menuButton').html('&larr;');
     }
    -function toggleMenu() {
    -    if ( $('#entete').css('left')=='-10em' ) {
    -        showMenu();
    +function toggleMenu() {
    +    if ( $('#entete').css('left')=='-10em' ) {
    +        showMenu();
         } else {
    -        hideMenu();
    +        hideMenu();
         }
     }
    @@ -95,25 +87,26 @@ top: 5em; left: 0; position: fixed; width: 10em; z-index: 9000; } ~~~~~~
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -131,6 +124,7 @@ top: 5em; left: 0; position: fixed; width: 10em; z-index: 9000; } ~~~~~~ comments powered by Disqus
    +
    Published on 2009-10-22 diff --git a/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/index.html b/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/index.html index 7b2f677..d34d4a9 100644 --- a/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/index.html +++ b/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Charger une page web avec style

    -
    +

    Exemple

    Voici comment apparaissent mes pages pendant leur chargement.

    @@ -114,8 +106,8 @@ Loading… ainsi que le code jQuery associé :

    -
    $(document).ready(function(){
    -    $('#blackpage').fadeOut();
    +
    $(document).ready(function(){
    +    $('#blackpage').fadeOut();
     });
    @@ -124,25 +116,26 @@ Loading…
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -160,6 +153,7 @@ Loading… Please enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
    +
    Published on 2009-10-03 diff --git a/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html b/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html index 0c7fb79..5da1186 100644 --- a/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html +++ b/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Un menu qui attends avant de se cacher

    -
    +

    J’ai déjà dit pourquoi je préférais que mon menu de navigation soit caché. J’ai finalement décidé d’attendre un peu avant de cacher le menu. Juste le temps que l’utilisateur le voit. Mais voilà. Comment faire pour qu’il ne disparaisse que lorsque l’on ne s’en sert pas pendant un petit moment ?

    Voici la solution que j’utilise avec jQuery

    @@ -102,25 +94,26 @@ autoHideMenu(0);
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -138,6 +131,7 @@ autoHideMenu(0);
    comments powered by Disqus
    +
    Published on 2009-10-26 diff --git a/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/index.html b/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/index.html index 4872bc0..bb63820 100644 --- a/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/index.html +++ b/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    lancer un démon en ligne de commande

    -
    +

    Une petite astuce dont je ne me souvient jamais (je ne sais pas pourquoi).

    Lorsque que vous souhaitez lancer une commande qui ne soit pas tuée après la fermeture du terminal voici comment s’y prendre :

    @@ -62,25 +54,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -98,6 +91,7 @@ comments powered by Disqus
    +
    Published on 2009-10-23 diff --git a/Scratch/fr/blog/2009-10-untaught-git-usage/index.html b/Scratch/fr/blog/2009-10-untaught-git-usage/index.html index ead7a9c..9f22a44 100644 --- a/Scratch/fr/blog/2009-10-untaught-git-usage/index.html +++ b/Scratch/fr/blog/2009-10-untaught-git-usage/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Usages non dits de Git

    -
    +

    Je décris pourquoi j’ai eu tant de mal à me faire à Git. Il y a en effet une partie “non dite” qui m’a bloqué pendant un bon moment. Jusqu’à ce que je découvre le bon document.

    Le fait est que les branches légères ne sont pas destinée à être des branches isolées. Ainsi, il y a un “workflow standard” qui s’il n’est pas suivi rend l’utilisation de Git inappropriée.

    @@ -190,25 +182,26 @@ OK
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -226,6 +219,7 @@ OK comments powered by Disqus
    +
    Published on 2009-10-13 diff --git a/Scratch/fr/blog/2009-11-12-Git-for-n00b/index.html b/Scratch/fr/blog/2009-11-12-Git-for-n00b/index.html index 356df6d..ff1cc6d 100644 --- a/Scratch/fr/blog/2009-11-12-Git-for-n00b/index.html +++ b/Scratch/fr/blog/2009-11-12-Git-for-n00b/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Git pour les nuls

    -
    +
    @@ -431,25 +423,26 @@ $ git logfull
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -467,6 +460,7 @@ $ git logfull comments powered by Disqus
    +
    Published on 2009-11-12 diff --git a/Scratch/fr/blog/2009-12-06-iphone-call-filter/index.html b/Scratch/fr/blog/2009-12-06-iphone-call-filter/index.html index f645264..e8a5529 100644 --- a/Scratch/fr/blog/2009-12-06-iphone-call-filter/index.html +++ b/Scratch/fr/blog/2009-12-06-iphone-call-filter/index.html @@ -33,8 +33,32 @@ document.write(''); // +
    +
    + +
    +

    Filtrage d'appel avec l'iPhone

    +
    +
    +
    +
    +

    Il est vraiment incroyable que le filtrage d’appel soit impossible avec un iPhone ! Le seul intérêt que j’y vois, c’est une négociation avec les opérateurs pour interdire aux utilisateurs de passer à travers la publicité. C’est tout simplement inacceptable.

    +

    Je suis un utilisateur λ de l’iPhone. Le seul moyen de filtrer ses appels, de faire des blacklists ou autre c’est de jailbreaker son iPhone. Et je n’en ai aucune envie. Alors si comme moi, vous trouvez ça inacceptable, envoyez un mot à Apple : http://www.apple.com/feedback/iphone.html

    +
    + +
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée +
    -
    - -
    -

    Filtrage d'appel avec l'iPhone

    -
    -
    -
    -
    -

    Il est vraiment incroyable que le filtrage d’appel soit impossible avec un iPhone ! Le seul intérêt que j’y vois, c’est une négociation avec les opérateurs pour interdire aux utilisateurs de passer à travers la publicité. C’est tout simplement inacceptable.

    -

    Je suis un utilisateur λ de l’iPhone. Le seul moyen de filtrer ses appels, de faire des blacklists ou autre c’est de jailbreaker son iPhone. Et je n’en ai aucune envie. Alors si comme moi, vous trouvez ça inacceptable, envoyez un mot à Apple : http://www.apple.com/feedback/iphone.html

    -
    - -
    - - RSS - - - - - - -
    - -
    -
    -
    +

    Comments

    @@ -93,6 +86,7 @@ comments powered by Disqus
    +
    Published on 2009-12-06 diff --git a/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/index.html b/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/index.html index 6f0492d..bc5c1c8 100644 --- a/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/index.html +++ b/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Git ou Bazaar ?

    -
    +
    @@ -140,25 +132,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -176,6 +169,7 @@ comments powered by Disqus
    +
    Published on 2009-12-14 diff --git a/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html b/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html index f75d2f6..41c678b 100644 --- a/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html +++ b/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Changer le shell par défaut sous Mac OS X

    -
    +

    Je viens de trouver le moyen de changer son shell par défaut sous Mac OS X. Cette note est plus pour moi. Mais elle peut aussi servir à quelqu’un d’autre. Il suffit de lancer la commande :

    @@ -61,25 +53,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -97,6 +90,7 @@ comments powered by Disqus
    +
    Published on 2010-01-04 diff --git a/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html b/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html index 4b59b98..89c1681 100644 --- a/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html +++ b/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Fontes adoucies sous Ubuntu Firefox

    -
    +

    Voici comment faire pour ne plus utiliser les fontes Microsoft© sous Linux Ubuntu pour avoir de belles fontes adoucies (anti aliased) qui ne font pas mal aux yeux sous Firefox.

    modifiez le fichier /etc/fonts/local.conf en y incluant le contenu suivant :

    @@ -115,25 +107,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -151,6 +144,7 @@ comments powered by Disqus
    +
    Published on 2010-01-12 diff --git a/Scratch/fr/blog/2010-02-15-All-but-something-regexp/index.html b/Scratch/fr/blog/2010-02-15-All-but-something-regexp/index.html index 2c50776..76124d7 100644 --- a/Scratch/fr/blog/2010-02-15-All-but-something-regexp/index.html +++ b/Scratch/fr/blog/2010-02-15-All-but-something-regexp/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Expression régulière pour tout sauf quelquechose

    -
    +

    Parfois vous ne pouvez simplement pas écrire :

    @@ -89,25 +81,26 @@ Notez que cette méthode n’est pas toujours la meilleure. Par exemple essayons
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -125,6 +118,7 @@ Notez que cette méthode n’est pas toujours la meilleure. Par exemple essayons comments powered by Disqus
    +
    Published on 2010-02-15 diff --git a/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/index.html b/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/index.html index 8361715..6ff7bf4 100644 --- a/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/index.html +++ b/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Tout sauf quelquechose en expression régulière.

    -
    +

    Dans mon précédent article j’ai donné certaines astuces pour matcher ‘tout sauf quelque chose’. De la même manière, un truc pour matcher la chaine de caractère la plus petite possible. Disons que vous voulez matcher la chaine de caractère entre ‘a’ et ‘b’. Par exemple, vous voulez matcher :

    @@ -120,7 +112,7 @@ Cette chaine ne matchera pas. C’est pourquoi si on veut vraiment la matcher co
     

    Oui, c’est un peu compliqué. Mais que se passe t’il lorsque la chaine de caractère que vous voulez matcher est encore plus longue que <li> ?

    Voici un algorithme qui permet de résoudre ce problème aisément. Vous devez réduire ce problème au premier. C’est-à-dire celui avec une seule lettre :

    -

    # transforme un simple caractère choisi aléatoirement # en un identifiant unique # (vous devez vérifier que l’identifier est VRAIMENT unique) # attention l’identifiant unique ne doit pas # contenir le caractère choisi. s/X/was_x/g s/Y/was_y/g

    +

    # transforme un simple caractère choisi aléatoirement # en un identifiant unique # (vous devez vérifier que l’identifier est VRAIMENT unique) # attention l’identifiant unique ne doit pas # contenir le caractère choisi. s/X/wasx_/g s/Y/wasy_/g

    transforme la longue chaine de caractère

    en un seul caractère

    s/ @@ -134,7 +126,7 @@ s/X/
  • /g s/Y/</li>/g

    retour des anciens caractères.

    -s/was_x/X/g s/was_y/Y/g
    +s/wasx_/X/g s/wasy_/Y/g
  • Et ça fonctionne en seulement 9 lignes pour toute chaine de début et de fin. Cette solution fait un peu moins I AM THE GREAT REGEXP M45T3R, URAN00B, mais elle est mieux adaptée à mon avis. De plus, utiliser cette dernière solution prouve que vous maitrisez les expressions régulières. Simplement parce que vous savez qu’il est difficile de résoudre des problèmes de cette forme en utilisant seulement des expressions régulières.

    @@ -143,25 +135,26 @@ s/was_x/X/g s/was_y/Y/g
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -179,6 +172,7 @@ s/was_x/X/g s/was_y/Y/g comments powered by Disqus
    +
    Published on 2010-02-16 diff --git a/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/index.html b/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/index.html index 4c7761e..be661d7 100644 --- a/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/index.html +++ b/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    découper un fichier par mots clés

    -
    +

    Assez bizarrement, je n’ai trouvé aucun outil UNIX pour découper un fichier par mot clé. Alors j’en ai fait un en awk. Je le met ici principalement pour moi, mais ça peut toujours servir à quelqu’un d’autre. Le code suivant découpe un fichier pour chacune de ses ligne contenant le mot UTC.

    @@ -71,25 +63,26 @@ Mon Dec 7 10:32:30 UTC 2009
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -107,6 +100,7 @@ Mon Dec 7 10:32:30 UTC 2009 comments powered by Disqus
    +
    Published on 2010-02-18 diff --git a/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html b/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html index 2a4654b..b5e4088 100644 --- a/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html +++ b/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Quand se passer des expressions régulières ?

    -
    +

    Les expressions régulières sont très utiles. Cependant, elles ne sont pas toujours la meilleure manière d’aborder certain problème autour des chaines de caractères. Et surtout quand les transformations que vous voulez accomplir sont simples.

    Je voulais savoir comment récupérer le plus vite possible l’extension d’un nom de fichier. Il y a trois manière naturelle d’accomplir celà :

    @@ -97,25 +89,26 @@ chomp: 0.820000 0.040000 0.860000 ( 0.947432)
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -133,6 +126,7 @@ chomp: 0.820000 0.040000 0.860000 ( 0.947432) comments powered by Disqus
    +
    Published on 2010-02-23 diff --git a/Scratch/fr/blog/2010-03-22-Git-Tips/index.html b/Scratch/fr/blog/2010-03-22-Git-Tips/index.html index cd99b9f..b1a620e 100644 --- a/Scratch/fr/blog/2010-03-22-Git-Tips/index.html +++ b/Scratch/fr/blog/2010-03-22-Git-Tips/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Astuces Git

    -
    +

    Cloner de github à travers un pare-feu

    La façon standard:

    @@ -86,25 +78,26 @@ $ zsh $ cd project $ for br in (git
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -122,6 +115,7 @@ $ zsh $ cd project $ for br in (gitPlease enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
    +
    Published on 2010-03-22 diff --git a/Scratch/fr/blog/2010-03-23-Encapsulate-git/index.html b/Scratch/fr/blog/2010-03-23-Encapsulate-git/index.html index d40becf..2795236 100644 --- a/Scratch/fr/blog/2010-03-23-Encapsulate-git/index.html +++ b/Scratch/fr/blog/2010-03-23-Encapsulate-git/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Encapsuler git

    -
    +

    Voici une solution pour conserver des branches divergentes avec git. Parce qu’il est facile de merger par erreur, je propose un script qui encapsule le comportement de git pour interdire certains merges dangereux. Mais qui permet aussi de faire des merges en cascades de la racines vers les autres branches.

    Se prémunir contre les erreurs

    @@ -110,25 +102,26 @@ case ARGV[0] when ‘allmerges’ then do_all_merges when ‘merge’ then do_me
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -146,6 +139,7 @@ case ARGV[0] when ‘allmerges’ then do_all_merges when ‘merge’ then do_me comments powered by Disqus
    +
    Published on 2010-03-23 diff --git a/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/index.html b/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/index.html index ebe7122..567f847 100644 --- a/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/index.html +++ b/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Je reviens à la vie !

    -
    +

    Bonjour à tous !

    @@ -76,25 +68,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -112,6 +105,7 @@ comments powered by Disqus
    +
    Published on 2010-05-17 diff --git a/Scratch/fr/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html b/Scratch/fr/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html index 6fdee27..8f8cfbe 100644 --- a/Scratch/fr/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html +++ b/Scratch/fr/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Comment réparer un XML coupé ?

    -
    +

    Sur ma page d’accueil vous pouvez voir la liste des mes derniers articles avec le début de ceux-ci. Pour arriver à faire ça, j’ai besoin de couper le code XHTML de mes pages en plein milieu. Il m’a donc fallu trouver un moyen de les réparer.

    Prenons un exemple :

    @@ -121,25 +113,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -157,6 +150,7 @@ comments powered by Disqus
    +
    Published on 2010-05-19 diff --git a/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html b/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html index e493d29..d0c2c49 100644 --- a/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html +++ b/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Arbres ; Pragmatisme et Formalisme

    -
    +
    @@ -243,25 +235,26 @@ M - V - M - V - tag2 tag1
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -279,6 +272,7 @@ M - V - M - V - tag2 tag1 comments powered by Disqus
    +
    Published on 2010-05-24 diff --git a/Scratch/fr/blog/2010-06-14-multi-language-choices/index.html b/Scratch/fr/blog/2010-06-14-multi-language-choices/index.html index 806cfc7..88424a7 100644 --- a/Scratch/fr/blog/2010-06-14-multi-language-choices/index.html +++ b/Scratch/fr/blog/2010-06-14-multi-language-choices/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    choix liés à l'écriture dans plusieurs langues

    -
    +

    Je traduis la plupart de mes articles pour qu’ils soient disponibles en français et en anglais. La façon que l’on m’a conseillé était d’avoir un fichier par langue. En général ça donne ça.

    @@ -84,25 +76,26 @@ here is an example of english text.
     				
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -120,6 +113,7 @@ here is an example of english text. comments powered by Disqus
    +
    Published on 2010-06-14 diff --git a/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/index.html b/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/index.html index 821c7b6..dc3eacf 100644 --- a/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/index.html +++ b/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Récupérez mon système de blog

    -
    +

    J’ai publié une version light de mon système de blog hier soir. Par light il faut comprendre avec un CSS plus épuré et plus portable (sans les bords ronds). Vous pouvez le récupérer sur github.com.

    Que pouvez-vous attendre de ce système de blog ?

    @@ -119,25 +111,26 @@ multi/blog/2010-06-01-the-title/third_part.md
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -155,6 +148,7 @@ multi/blog/2010-06-01-the-title/third_part.md comments powered by Disqus
    +
    Published on 2010-06-15 diff --git a/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/index.html b/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/index.html index 7e8a69a..5ee6cef 100644 --- a/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/index.html +++ b/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,16 +42,16 @@

    Se cacher de ses statistiques web

    -
    +

    Voici un moyen très simple de ne plus être comptabilisé dans les visites de son propre site. Tout d’abord, vous devriez jeter un coup d’œil sur comment je gère les systèmes de récupération de statistiques. Je centralise tout dans un seul fichier javascript ce qui facilite le travail.

    Cette méthode nécessite l’utilisation de jquery-cookie.

    Avant de comptabiliser les visites, je vérifie que la clé admin n’est pas utilisée dans mes cookies.

    -
        var admin = $.cookie('admin');
    +
        var admin = $.cookie('admin');
         if (! admin) {
             // put your analytics code here
         } else {
    -        console.log("[WARNING] you're HIDDEN to analytics");
    +        console.log("[WARNING] you're HIDDEN to analytics");
         }

    et il suffit de créer deux fichier html. Un pour se cacher :

    <?xml version="1.0" encoding="utf-8"?>
    @@ -72,8 +64,8 @@
             <script type="text/javascript" src="jquery.cookie.js"></script>
             <script>
                 $(document).ready(function(){
    -                $.cookie('admin',1);
    -                $('#info').html('Analytics can no more see you.')
    +                $.cookie('admin',1);
    +                $('#info').html('Analytics can no more see you.')
                 });
             </script>
             <title>Hide to analytics</title>
    @@ -93,8 +85,8 @@
             <script type="text/javascript" src="jquery.cookie.js"></script>
             <script>
                 $(document).ready(function(){
    -                $.cookie('admin',null);
    -                $('#info').html('Analytics can see you.')
    +                $.cookie('admin',null);
    +                $('#info').html('Analytics can see you.')
                 });
             </script>
             <title>Hide to analytics</title>
    @@ -107,25 +99,26 @@
     				
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -143,6 +136,7 @@ comments powered by Disqus
    +
    Published on 2010-06-17 diff --git a/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/index.html b/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/index.html index c8ffb3b..83484c2 100644 --- a/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/index.html +++ b/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/index.html @@ -33,8 +33,84 @@ document.write(''); // +
    +
    + +
    +

    Analyser les clicks sur votre Site

    +
    +
    +
    +
    +

    Voici comment analyser tous les clics que font vos utilisateurs sur votre blog en incluant google analytics de façon asynchrone.

    +

    Dans le html, il faut utiliser jQuery et un fichier que j’ai appelé yga.js :

    +
        <script type="text/javascript" src="jquery.js"></script>
    +    <script type="text/javascript" src="yga.js"></script>
    +

    Voici le contenu du fichier yga.js :

    +
    $(document).ready( function() {
    +    // add an event to all link for google analytics
    +    $('a').click(function () {
    +        // tell analytics to save event
    +        try {
    +            var identifier=$(this).attr('id') ;
    +            var href=$(this).attr('href')
    +            var label="";
    +            if ( typeof( identifier ) != 'undefined' ) {
    +                label=label+'[id]:'+identifier
    +                category='JSLink'
    +            }
    +            if ( typeof( href ) != 'undefined' ) {
    +                label=label+' [href]:'+href
    +                if ( href[0] == '#' ) {
    +                    category='Anchor';
    +                } else {
    +                    category='Link';
    +                }
    +            }
    +            _gaq.push(['_trackEvent', category, 'clicked', label]);
    +            // console.log('[tracked]: ' + category + ' ; clicked ; ' + label );
    +        }
    +        catch (err) {
    +            console.log(err);
    +        }
    +
    +        // pause to allow google script to run
    +        var date = new Date();
    +        var curDate = null;
    +        do {
    +            curDate = new Date();
    +        } while(curDate-date < 300);
    +    });
    +});
    +
    +var _gaq = _gaq || [];
    +_gaq.push(['_setAccount', 'UA-XXXXXXXX-1']);
    +_gaq.push(['_trackPageview']);
    +
    +(function() {
    + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    + })();
    +

    Remplacez le : UA-XXXXXXXX-1 par votre code google analytics. Maintenant l’installation est finie.

    +

    Pour l’utiliser il suffit de se rendre dans google analytics rubrique Content puis Event Tracking comme sur la capture d’écran suivante :

    +

    +

    Joyeuse inspection du comportement de vos utilisateurs.

    +
    + +
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée +
    -
    - -
    -

    Analyser les clicks sur votre Site

    -
    -
    -
    -
    -

    Voici comment analyser tous les clics que font vos utilisateurs sur votre blog en incluant google analytics de façon asynchrone.

    -

    Dans le html, il faut utiliser jQuery et un fichier que j’ai appelé yga.js :

    -
        <script type="text/javascript" src="jquery.js"></script>
    -    <script type="text/javascript" src="yga.js"></script>
    -

    Voici le contenu du fichier yga.js :

    -
    $(document).ready( function() {
    -    // add an event to all link for google analytics
    -    $('a').click(function () {
    -        // tell analytics to save event
    -        try {
    -            var identifier=$(this).attr('id') ;
    -            var href=$(this).attr('href')
    -            var label="";
    -            if ( typeof( identifier ) != 'undefined' ) {
    -                label=label+'[id]:'+identifier
    -                category='JSLink'
    -            }
    -            if ( typeof( href ) != 'undefined' ) {
    -                label=label+' [href]:'+href
    -                if ( href[0] == '#' ) {
    -                    category='Anchor';
    -                } else {
    -                    category='Link';
    -                }
    -            }
    -            _gaq.push(['_trackEvent', category, 'clicked', label]);
    -            // console.log('[tracked]: ' + category + ' ; clicked ; ' + label );
    -        }
    -        catch (err) {
    -            console.log(err);
    -        }
    -
    -        // pause to allow google script to run
    -        var date = new Date();
    -        var curDate = null;
    -        do {
    -            curDate = new Date();
    -        } while(curDate-date < 300);
    -    });
    -});
    -
    -var _gaq = _gaq || [];
    -_gaq.push(['_setAccount', 'UA-XXXXXXXX-1']);
    -_gaq.push(['_trackPageview']);
    -
    -(function() {
    - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    - ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    - })();
    -

    Remplacez le : UA-XXXXXXXX-1 par votre code google analytics. Maintenant l’installation est finie.

    -

    Pour l’utiliser il suffit de se rendre dans google analytics rubrique Content puis Event Tracking comme sur la capture d’écran suivante :

    -

    -

    Joyeuse inspection du comportement de vos utilisateurs.

    -
    - -
    - - RSS - - - - - - -
    - -
    -
    -
    +

    Comments

    @@ -145,6 +138,7 @@ comments powered by Disqus
    +
    Published on 2010-06-17 diff --git a/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/index.html b/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/index.html index bb6a2dd..8d718ef 100644 --- a/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/index.html +++ b/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/index.html @@ -33,8 +33,56 @@ document.write(''); // +
    +
    + +
    +

    Comment faire des popups en jQuery rapidement

    +
    +
    +
    +
    +

    Voici une façon simple et rapide pour faire des popups avec jQuery.

    +
    // --- code popup ---
    +function openPopup() {
    +    $(this).clone(false).appendTo($("#_code"));
    +    $("#_code").show();
    +}
    +
    +function closePopup() {
    +    $("#_code").html("");
    +    $("#_code").hide();
    +}
    +
    +function initCode() {
    +    $(".code").click(openPopup);
    +    $(".code").css({cursor: "pointer"});
    +    $('body').append('<div id="_code"></div>');
    +    $('#_code').css( { 'text-align': "justify", position: "fixed", 
    +                        left:0, top:0, width: "100%", height: "100%", 
    +                        "background-color": "rgba(0, 0, 0, 0.8)", 'z-index':2000, 'padding':'3px'} );
    +    $('#_code').hide();
    +    $('#_code').click(closePopup);
    +}
    +// --- end of code popup section ---
    +

    Que fait ce code ?

    +

    Au chargement de la page je crée un div grand comme toute la page avec un fond légèrement transparent que je cache. Je fais bien attention à son z-index pour qu’il soit devant tout le reste.

    +

    Puis lorsque l’on clique sur un div de class code, je recopie le contenu de celui-ci dans le grand div que je rend visible. Très simple mais très efficace. Pas besoin d’utiliser un plugin jQuery.

    +
    + +
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée +
    -
    - -
    -

    Comment faire des popups en jQuery rapidement

    -
    -
    -
    -
    -

    Voici une façon simple et rapide pour faire des popups avec jQuery.

    -
    // --- code popup ---
    -function openPopup() {
    -    $(this).clone(false).appendTo($("#_code"));
    -    $("#_code").show();
    -}
    -
    -function closePopup() {
    -    $("#_code").html("");
    -    $("#_code").hide();
    -}
    -
    -function initCode() {
    -    $(".code").click(openPopup);
    -    $(".code").css({cursor: "pointer"});
    -    $('body').append('<div id="_code"></div>');
    -    $('#_code').css( { 'text-align': "justify", position: "fixed", 
    -                        left:0, top:0, width: "100%", height: "100%", 
    -                        "background-color": "rgba(0, 0, 0, 0.8)", 'z-index':2000, 'padding':'3px'} );
    -    $('#_code').hide();
    -    $('#_code').click(closePopup);
    -}
    -// --- end of code popup section ---
    -

    Que fait ce code ?

    -

    Au chargement de la page je crée un div grand comme toute la page avec un fond légèrement transparent que je cache. Je fais bien attention à son z-index pour qu’il soit devant tout le reste.

    -

    Puis lorsque l’on clique sur un div de class code, je recopie le contenu de celui-ci dans le grand div que je rend visible. Très simple mais très efficace. Pas besoin d’utiliser un plugin jQuery.

    -
    - -
    - - RSS - - - - - - -
    - -
    -
    -
    +

    Comments

    @@ -117,6 +110,7 @@ comments powered by Disqus
    +
    Published on 2010-06-19 diff --git a/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/index.html b/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/index.html index 71f2dad..1dffe99 100644 --- a/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/index.html +++ b/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Cappuccino ou jQuery ?

    -
    +
    @@ -145,25 +137,26 @@ hash=sha1( masterPassword + leakedTimes + domainName )
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -181,6 +174,7 @@ hash=sha1( masterPassword + leakedTimes + domainName ) comments powered by Disqus
    +
    Published on 2010-07-05 diff --git a/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html b/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html index 295cb67..91a57d5 100644 --- a/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html +++ b/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    N'utilisez pas de gradients avec Chrome

    -
    +

    Beaucoup d’utilisateurs de Reddit m’ont rapporté que mon site était très long à charger et à scroller. Ils pensaient qu’il s’agissait d’un problème dû aux ombres que j’applique sur le texte. J’étais un peu surpris puisque je fais mes tests sur une machine vraiment très lente et je n’avais jamais détecté ces problèmes. En réalité, ce qui ralenti le rendu de ce site est par ordre d’importance :

      @@ -70,25 +62,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -106,6 +99,7 @@ comments powered by Disqus
    +
    Published on 2010-07-07 diff --git a/Scratch/fr/blog/2010-07-09-Indecidabilities/index.html b/Scratch/fr/blog/2010-07-09-Indecidabilities/index.html index 9d2d294..6766d27 100644 --- a/Scratch/fr/blog/2010-07-09-Indecidabilities/index.html +++ b/Scratch/fr/blog/2010-07-09-Indecidabilities/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Indécidabilités (partie 1)

    -
    +

    <% # toremove_ %>

    @@ -146,25 +138,26 @@ Q(x) :
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -182,6 +175,7 @@ Q(x) : comments powered by Disqus
    +
    Published on 2010-08-11 diff --git a/Scratch/fr/blog/2010-07-31-New-style-after-holidays/index.html b/Scratch/fr/blog/2010-07-31-New-style-after-holidays/index.html index dc5c4ff..18d8346 100644 --- a/Scratch/fr/blog/2010-07-31-New-style-after-holidays/index.html +++ b/Scratch/fr/blog/2010-07-31-New-style-after-holidays/index.html @@ -33,8 +33,32 @@ document.write(''); // +
    +
    + +
    +

    Nouveau style après les vacances

    +
    +
    +
    +
    +

    Avant les vacances beaucoup d’utilisateurs se sont plaints de la lenteur de rendu de mon site. Il s’agit notamment de problèmes avec Chrome en particulier. Mais pour éviter tout problème. J’ai complètement modifié le style de mon site web. Il est inspiré du style de l’application iBooks(c) sur iPhone(c).

    +

    Dites moi ce que vous pensez de ce nouveau design.

    +
    + +
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée +
    -
    - -
    -

    Nouveau style après les vacances

    -
    -
    -
    -
    -

    Avant les vacances beaucoup d’utilisateurs se sont plaints de la lenteur de rendu de mon site. Il s’agit notamment de problèmes avec Chrome en particulier. Mais pour éviter tout problème. J’ai complètement modifié le style de mon site web. Il est inspiré du style de l’application iBooks(c) sur iPhone(c).

    -

    Dites moi ce que vous pensez de ce nouveau design.

    -
    - -
    - - RSS - - - - - - -
    - -
    -
    -
    +

    Comments

    @@ -93,6 +86,7 @@ comments powered by Disqus
    +
    Published on 2010-07-31 diff --git a/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/index.html b/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/index.html index 2691981..c4bed58 100644 --- a/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/index.html +++ b/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Maintenant sur Heroku

    -
    +

    Maintenant sur Heroku

    J’ai changé mon hébergeur. Mobileme n’est absolument pas adapté à la diffusion de mon blog. C’est pourquoi je suis passé à Heroku.

    @@ -117,25 +109,26 @@ git push heroku master
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -153,6 +146,7 @@ git push heroku master
    comments powered by Disqus
    +
    Published on 2010-08-23 diff --git a/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html b/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html index e554ef6..20cf5da 100644 --- a/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html +++ b/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Envoyer un mail en ligne de commande avec un fichier attaché

    -
    +

    J’ai dû envoyer un mail en ligne de commande récemment. Quelle ne fût pas ma surprise lorsque je constatais que ce n’était vraiment pas évident. Je n’avais ni pine ni mutt. Seulement mail et mailx.

    Ce qu’on trouve sur internet pour envoyer un mail avec fichier attaché c’est ça :

    @@ -94,38 +86,36 @@ H4sICB6Ke0wAA2Rjcl93aXRob3V0X2tleXdvcmQuY3N2ANSdW5ubOJPH7/e7 </div> <div id="social"> - <span> - <a class="rss" href="http://feeds.feedburner.com/yannespositocomfr">RSS</a> - </span> - <span> - <a href="https://twitter.com/share" class="twitter-share-button" data-via="yogsototh">Tweet</a> - <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> - </span> - <span> - <div class="g-plusone" data-size="medium" data-annotation="inline" data-width="106"></div> - <script type="text/javascript"> - (function() { - var po = document.createElement(" script'); po.type="text/javascript" ; po.async="true;" po.src="https://apis.google.com/js/plusone.js" ; var s="document.getElementsByTagName('script')[0];" s.parentNode.insertBefore(po, s); })(); < script> - -
    -
    -
    -

    Comments

    -
    - + var disqus_shortname = " yannesposito'; required: replace example with your forum shortname * * * DON'T EDIT BELOW THIS LINE * * * (function() { var dsq="document.createElement('script');" dsq.type="text/javascript" ; dsq.async="true;" dsq.src="http://" + disqus_shortname + '.disqus.com embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })(); < script> comments powered by Disqus
    +
    Published on 2010-08-31 diff --git a/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html b/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html index 8606644..f5a2046 100644 --- a/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html +++ b/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Utilisation de git pour calculer les mtimes

    -
    +

    Vous pouvez remarquer qu’à la fin de chaque page je donne une date de dernière modification. Précédemment cette date était calculée en utilisant la date du fichier. Mais il arrive fréquemment que je fasse un touch d’un fichier pour engendrer tout le site de nouveau. Donc la date n’est pas nécessairement la vraie de modification du contenue.

    J’utilise git pour versionner mon site web. Et cet outil me permet de récupérer la dernière date de vraie modification d’un fichier. Voici comment je m’y prend avec nanoc :

    @@ -73,25 +65,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -109,6 +102,7 @@ comments powered by Disqus
    +
    Published on 2010-09-02 diff --git a/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html b/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html index ca4a525..446c0ff 100644 --- a/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html +++ b/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    base64 et sha1 sur iPhone

    -
    +

    Allons directement à l’essentiel : voici deux fonctions à intégrer à votre application iPhone pour afficher l’encodage en base64 ou en hexadecimal du hash sha1 d’un string en Objective-C pour iPhone.

    Pour l’usage c’est très simple, copiez le code dans la classe de votre choix. Puis :

    @@ -105,25 +97,26 @@ NSString *hex_hash = [self hex_sha1:@"some NSString to be sha1'ed"];
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -141,6 +134,7 @@ NSString *hex_hash = [self hex_sha1:@"some NSString to be sha1'ed"];Please enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
    +
    Published on 2010-09-02 diff --git a/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/index.html b/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/index.html index 4141e0f..0c7280a 100644 --- a/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/index.html +++ b/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Contraintes du design de ce blog

    -
    +

    Vous avez pu constater que j’ai modifié le design de mon blog. Maintenant il doit être beaucoup plus léger qu’avant. Je n’utilise plus de CSS3 et beaucoup moins de javascript. Bien entendu, même avant, mes pages étaient parfaitement lisibles sans javascript. Mais, je me suis aperçu que les systèmes de CSS3 sont loin d’être au point. J’utilisait des gradient en CSS3, ainsi que des ombres sous le texte. Ça avait un rendu très sympa. Sauf… Ce n’était pas compatible ie6, sous Chrome le rendu était d’une lenteur incroyable. J’ai donc décidé de faire un site à minima. Je voulais qu’il soit joli et le plus simple possible pour assurer sa compatibilité. Les règles que je me suis fixées sont donc:

      @@ -62,25 +54,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -98,6 +91,7 @@ comments powered by Disqus
    +
    Published on 2010-10-06 diff --git a/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html b/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html index 32e8596..d224ed1 100644 --- a/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html +++ b/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Sécurisez vos emails

    -
    +

    Title image

    @@ -79,25 +71,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -115,6 +108,7 @@ comments powered by Disqus
    +
    Published on 2010-10-10 diff --git a/Scratch/fr/blog/2010-10-14-Fun-with-wav/index.html b/Scratch/fr/blog/2010-10-14-Fun-with-wav/index.html index 8d3501b..95e2245 100644 --- a/Scratch/fr/blog/2010-10-14-Fun-with-wav/index.html +++ b/Scratch/fr/blog/2010-10-14-Fun-with-wav/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    S'amuser avec un .wav

    -
    +
    @@ -305,25 +297,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -341,6 +334,7 @@ comments powered by Disqus
    +
    Published on 2010-10-14 diff --git a/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html b/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html index eab82a9..9a4df01 100644 --- a/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html +++ b/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Des macros LaTeX pour markdown

    -
    +
    @@ -113,25 +105,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -149,6 +142,7 @@ comments powered by Disqus
    +
    Published on 2010-10-26 diff --git a/Scratch/fr/blog/2011-01-03-Happy-New-Year/index.html b/Scratch/fr/blog/2011-01-03-Happy-New-Year/index.html index 1cb1a07..4eafc76 100644 --- a/Scratch/fr/blog/2011-01-03-Happy-New-Year/index.html +++ b/Scratch/fr/blog/2011-01-03-Happy-New-Year/index.html @@ -32,16 +32,8 @@ document.write(''); // +
    -
    -
    @@ -49,7 +41,7 @@

    Bonne et heureuse année

    -
    +

    Bonne et heureuse année !

    J’étais très occupé ces derniers mois. Maintenant il me semble que je vais pouvoir faire revivre ce blog.

    @@ -59,25 +51,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -95,6 +88,7 @@ comments powered by Disqus
    +
    Published on 2011-01-01 diff --git a/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html b/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html index f86d938..7da47ef 100644 --- a/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html +++ b/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Pourquoi je n'utiliserai pas CoffeeScript (malheureusement)

    -
    +

    Title image

    @@ -132,25 +124,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -168,6 +161,7 @@ comments powered by Disqus
    +
    Published on 2011-01-03 diff --git a/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/index.html b/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/index.html index 7deef5d..29bc383 100644 --- a/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/index.html +++ b/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/index.html @@ -32,8 +32,32 @@ document.write(''); // +
    +
    + +
    +

    Hébergement github

    +
    +
    +
    +
    +

    Title image

    +

    J’héberge mon site sur github à partir d’aujourd’hui.

    +
    + +
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée +
    -
    - -
    -

    Hébergement github

    -
    -
    -
    -
    -

    Title image

    -

    J’héberge mon site sur github à partir d’aujourd’hui.

    -
    - -
    - - RSS - - - - - - -
    - -
    -
    -
    +

    Comments

    @@ -92,6 +85,7 @@ comments powered by Disqus
    +
    Published on 2011-04-20 diff --git a/Scratch/fr/blog/A-more-convenient-diff/index.html b/Scratch/fr/blog/A-more-convenient-diff/index.html index f76f7ce..68c4c1c 100644 --- a/Scratch/fr/blog/A-more-convenient-diff/index.html +++ b/Scratch/fr/blog/A-more-convenient-diff/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Un diff plus pratique

    -
    +

    diff est un utilitaire très pratique, mais il n’est pas facile à lire pour nous, les Hommes.

    C’est pourquoi, lorsque vous utilisez git, il vous montre un formatage plus agréable avec des couleurs.

    @@ -80,25 +72,26 @@ diff -u $* | colorize_diff
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -116,6 +109,7 @@ diff -u $* | colorize_diff comments powered by Disqus
    +
    Published on 2011-08-17 diff --git a/Scratch/fr/blog/Category-Theory-Presentation/index.html b/Scratch/fr/blog/Category-Theory-Presentation/index.html index 81c3cc1..9d4b1a3 100644 --- a/Scratch/fr/blog/Category-Theory-Presentation/index.html +++ b/Scratch/fr/blog/Category-Theory-Presentation/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Category Theory Presentation

    -
    +
    Cateogry of Hask's endofunctors @@ -1018,25 +1010,26 @@ depth = cata phi where
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -1054,6 +1047,7 @@ depth = cata phi where comments powered by Disqus
    +
    Published on 2012-12-12 diff --git a/Scratch/fr/blog/Haskell-Mandelbrot/index.html b/Scratch/fr/blog/Haskell-Mandelbrot/index.html index 9b46d3f..672eaf2 100644 --- a/Scratch/fr/blog/Haskell-Mandelbrot/index.html +++ b/Scratch/fr/blog/Haskell-Mandelbrot/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,14 +42,14 @@

    Mandelbrot avec haskell

    -
    +

    Voici le code “obfusqué” :

    -
    a=27;b=79;c=C(-2.0,-1.0);d=C(1.0,1.0);e=C(-2.501,-1.003)
    +
    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)
    +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 z 0=0;f c z n=if(r(abs(z))>2)then n else f c ((z*z)+c) (n-1)
    +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)
    @@ -96,18 +88,18 @@ $$$$$$$$$$$$$$$$$$$$$$$$$$&&&&&&&&&&WWWW

    Here is the more readable version. I believe with this far more readable version, no more explanation is needed.

    nbvert = 30
     nbhor = 79
    -zoomfactor = 1.01
    -init_bottom_left = C (-2.0,-2.0)
    -init_top_right   = C (3.0,2.0)
    -interrest        = C (-1.713,-0.000)
    +zoomfactor = 1.01
    +init_bottom_left = C (-2.0,-2.0)
    +init_top_right   = C (3.0,2.0)
    +interrest        = C (-1.713,-0.000)
     
     newtype Complex = C (Float,Float) deriving (Show,Eq)
     instance Num Complex where
    -    fromInteger n     = C (fromIntegral n,0.0)
    +    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)
    +    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
    @@ -119,7 +111,7 @@ cabs = real.abs
     
     f :: Complex -> Complex -> Int -> Int
     f c z 0 = 0
    -f c z n = if (cabs z > 2) then n else f c ((z*z)+c) (n-1) 
    +f c z n = if (cabs z > 2) then n else f c ((z*z)+c) (n-1) 
     
     bmandel bottomleft topright = map (\z -> (f (C z) (C(0,0)) 32, (fst z > right - hstep/2 ))) [(x,y) | y <- [bottom,(bottom + vstep)..top], x<-[left,(left + hstep)..right]]
         where
    @@ -152,29 +144,30 @@ main = do
         putStrLn $ infinitemandel 0
         where
             window n = zoom init_bottom_left init_top_right interrest (zoomfactor**n) 
    -        infinitemandel n = mandel (window n) ++ "\x1b[H\x1b[25A" ++ infinitemandel (n+1)
    + infinitemandel n = mandel (window n) ++ "\x1b[H\x1b[25A" ++ infinitemandel (n+1)
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -192,6 +185,7 @@ main = do comments powered by Disqus
    +
    Published on 2011-07-10 diff --git a/Scratch/fr/blog/Haskell-OpenGL-Mandelbrot/index.html b/Scratch/fr/blog/Haskell-OpenGL-Mandelbrot/index.html index 1cf50d0..bd9ac9b 100644 --- a/Scratch/fr/blog/Haskell-OpenGL-Mandelbrot/index.html +++ b/Scratch/fr/blog/Haskell-OpenGL-Mandelbrot/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Un example progressif avec Haskell

    -
    +

    The B in Benoît B. Mandelbrot stand for Benoît B. Mandelbrot

    @@ -98,9 +90,9 @@ Another detail of the Mandelbulb

    We can consider two parts. The first being mostly some boilerplate2. And the second part more focused on OpenGL and content.

    Let’s play the song of our people

    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef

    For efficiency reason3, I will not use the default Haskell Complex data type.

    @@ -110,11 +102,11 @@ Another detail of the Mandelbulb
    instance Num Complex where
    -    fromInteger n = C (fromIntegral n,0.0)
    +    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)
    + abs (C (x,y)) = C (sqrt (x*x + y*y),0.0) + signum (C (x,y)) = C (signum x , 0.0)

    We declare some useful functions for manipulating complex numbers:

    @@ -201,16 +193,16 @@ allPoints = [ (x/width,ycolorFromValue n = let t :: Int -> GLfloat - t i = 0.5 + 0.5*cos( fromIntegral i / 10 ) + t i = 0.5 + 0.5*cos( fromIntegral i / 10 ) in - Color3 (t n) (t (n+5)) (t (n+10)) + Color3 (t n) (t (n+5)) (t (n+10))

    And now the mandel function. Given two coordinates in pixels, it returns some integer value:

    mandel x y = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
       in
           f (complex r i) 0 64
    @@ -226,7 +218,7 @@ allPoints = [ (x/width,y0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1) + else f c ((z*z)+c) (n-1)

    Well, if you download this file (look at the bottom of this section), compile it and run it this is the result:

    @@ -242,20 +234,20 @@ f c z n = if (magnitude z
    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef
     -- Use UNPACK data because it is faster
     -- The ! is for strict instead of lazy
     data Complex = C  {-# UNPACK #-} !Float 
                       {-# UNPACK #-} !Float 
                    deriving (Show,Eq)
     instance Num Complex where
    -    fromInteger n = C (fromIntegral n) 0.0
    +    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
    +    abs (C x y)     = C (sqrt (x*x + y*y)) 0.0
    +    signum (C x y)  = C (signum x) 0.0
     complex :: Float -> Float -> Complex
     complex x y = C x y
     
    @@ -282,7 +274,7 @@ main = do
       mainLoop
     display = do
        -- set the background color (dark solarized theme)
    -  clearColor $= Color4 0 0.1686 0.2117 1
    +  clearColor $= Color4 0 0.1686 0.2117 1
       clear [ColorBuffer] -- make the window black
       loadIdentity -- reset any transformation
       preservingMatrix drawMandelbrot
    @@ -347,8 +339,8 @@ positivePoints = do
     maxZeroIndex func minval maxval 0 = (minval+maxval)/2
     maxZeroIndex func minval maxval n = 
       if (func medpoint) /= 0 
    -       then maxZeroIndex func minval medpoint (n-1)
    -       else maxZeroIndex func medpoint maxval (n-1)
    +       then maxZeroIndex func minval medpoint (n-1)
    +       else maxZeroIndex func medpoint maxval (n-1)
       where medpoint = (minval+maxval)/2
    @@ -360,15 +352,15 @@ maxZeroIndex func minval maxval n =
    colorFromValue n =
       let 
           t :: Int -> GLfloat
    -      t i = 0.5 + 0.5*cos( fromIntegral i / 10 )
    +      t i = 0.5 + 0.5*cos( fromIntegral i / 10 )
       in
    -    Color3 (t n) (t (n+5)) (t (n+10))
    + Color3 (t n) (t (n+5)) (t (n+10))
    mandel x y = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
       in
           f (complex r i) 0 64
    @@ -378,7 +370,7 @@ maxZeroIndex func minval maxval n = f c z 0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1) + else f c ((z*z)+c) (n-1)
    @@ -406,9 +398,9 @@ f c z n = if (magnitude z
    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef
     type ColoredPoint = (GLfloat,GLfloat,GLfloat,Color3 GLfloat)
    @@ -476,7 +468,7 @@ main = do -- Some state variables (I know it feels BAD) angle <- newIORef ((35,0)::(GLfloat,GLfloat)) zoom <- newIORef (2::GLfloat) - campos <- newIORef ((0.7,0)::(GLfloat,GLfloat)) + campos <- newIORef ((0.7,0)::(GLfloat,GLfloat)) -- Function to call each frame idleCallback $= Just idle -- Function to call when keyboard or mouse is used @@ -516,18 +508,18 @@ mapSnd f (x,y) = ( x,f y) z $= 1 -- zoom p $= (0,0) -- camera position -- use of hjkl to rotate - kact a _ _ (Char 'h') Down = modVar a (mapFst (+0.5)) - kact a _ _ (Char 'l') Down = modVar a (mapFst (+(-0.5))) - kact a _ _ (Char 'j') Down = modVar a (mapSnd (+0.5)) - kact a _ _ (Char 'k') Down = modVar a (mapSnd (+(-0.5))) + kact a _ _ (Char 'h') Down = modVar a (mapFst (+0.5)) + kact a _ _ (Char 'l') Down = modVar a (mapFst (+(-0.5))) + kact a _ _ (Char 'j') Down = modVar a (mapSnd (+0.5)) + kact a _ _ (Char 'k') Down = modVar a (mapSnd (+(-0.5))) -- use o and i to zoom - kact _ z _ (Char 'o') Down = modVar z (*1.1) - kact _ z _ (Char 'i') Down = modVar z (*0.9) + kact _ z _ (Char 'o') Down = modVar z (*1.1) + kact _ z _ (Char 'i') Down = modVar z (*0.9) -- use sdfe to move the camera - kact _ _ p (Char 's') Down = modVar p (mapFst (+0.1)) - kact _ _ p (Char 'f') Down = modVar p (mapFst (+(-0.1))) - kact _ _ p (Char 'd') Down = modVar p (mapSnd (+0.1)) - kact _ _ p (Char 'e') Down = modVar p (mapSnd (+(-0.1))) + kact _ _ p (Char 's') Down = modVar p (mapFst (+0.1)) + kact _ _ p (Char 'f') Down = modVar p (mapFst (+(-0.1))) + kact _ _ p (Char 'd') Down = modVar p (mapSnd (+0.1)) + kact _ _ p (Char 'e') Down = modVar p (mapSnd (+(-0.1))) -- any other keys does nothing kact _ _ _ _ _ = return ()
    @@ -536,7 +528,7 @@ mapSnd f (x,y) = ( x,f y)
    display angle zoom position = do
        -- set the background color (dark solarized theme)
    -  clearColor $= Color4 0 0.1686 0.2117 1
    +  clearColor $= Color4 0 0.1686 0.2117 1
       clear [ColorBuffer,DepthBuffer]
       -- Transformation to change the view
       loadIdentity -- reset any transformation
    @@ -548,8 +540,8 @@ mapSnd f (x,y) = (  x,f y)
    scale z z z -- rotate (xangle,yangle) <- get angle - rotate xangle $ Vector3 1.0 0.0 (0.0::GLfloat) - rotate yangle $ Vector3 0.0 1.0 (0.0::GLfloat) + rotate xangle $ Vector3 1.0 0.0 (0.0::GLfloat) + rotate yangle $ Vector3 0.0 1.0 (0.0::GLfloat) -- Now that all transformation were made -- We create the object(s) @@ -598,17 +590,17 @@ depthPoints = do depthOf x' y' = maxZeroIndex (mandel x' y') 0 deep logdeep logdeep = floor ((log deep) / log 2) z1 = depthOf x y - z2 = depthOf (x+1) y - z3 = depthOf (x+1) (y+1) - z4 = depthOf x (y+1) - c1 = mandel x y (z1+1) - c2 = mandel (x+1) y (z2+1) - c3 = mandel (x+1) (y+1) (z3+1) - c4 = mandel x (y+1) (z4+1) + z2 = depthOf (x+1) y + z3 = depthOf (x+1) (y+1) + z4 = depthOf x (y+1) + c1 = mandel x y (z1+1) + c2 = mandel (x+1) y (z2+1) + c3 = mandel (x+1) (y+1) (z3+1) + c4 = mandel x (y+1) (z4+1) p1 = ( x /width, y /height, z1/deep, colorFromValue c1) - p2 = ((x+1)/width, y /height, z2/deep, colorFromValue c2) - p3 = ((x+1)/width,(y+1)/height, z3/deep, colorFromValue c3) - p4 = ( x /width,(y+1)/height, z4/deep, colorFromValue c4) + p2 = ((x+1)/width, y /height, z2/deep, colorFromValue c2) + p3 = ((x+1)/width,(y+1)/height, z3/deep, colorFromValue c3) + p4 = ( x /width,(y+1)/height, z4/deep, colorFromValue c4) if (and $ map (>=57) [c1,c2,c3,c4]) then [] else [p1,p2,p3,p1,p3,p4] @@ -619,13 +611,13 @@ depthPoints = do x <- [-width..width] y <- [-height..height] let - neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] + neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] depthOf (u,v) = maxZeroIndex (mandel u v) 0 deep logdeep logdeep = floor ((log deep) / log 2) -- zs are 3D points with found depth zs = map (\(u,v) -> (u,v,depthOf (u,v))) neighbors -- ts are 3D pixels + mandel value - ts = map (\(u,v,w) -> (u,v,w,mandel u v (w+1))) zs + ts = map (\(u,v,w) -> (u,v,w,mandel u v (w+1))) zs -- ps are 3D opengl points + color value ps = map (\(u,v,w,c') -> (u/width,v/height,w/deep,colorFromValue c')) ts @@ -643,7 +635,7 @@ depthPoints = do allPoints = planPoints ++ map inverseDepth planPoints where planPoints = depthPoints - inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c) + inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c)

    The rest of the program is very close to the preceding one.

    @@ -663,8 +655,8 @@ allPoints = planPoints ++ 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2
    @@ -673,9 +665,9 @@ maxZeroIndex func minval maxval n =
    colorFromValue n =
       let 
           t :: Int -> GLfloat
    -      t i = 0.7 + 0.3*cos( fromIntegral i / 10 )
    +      t i = 0.7 + 0.3*cos( fromIntegral i / 10 )
       in
    -    Color3 (t n) (t (n+5)) (t (n+10))
    + Color3 (t n) (t (n+5)) (t (n+10))

    We only changed from Complex to ExtComplex of the main f function.

    @@ -684,7 +676,7 @@ maxZeroIndex func minval maxval n = f c z 0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1) + else f c ((z*z)+c) (n-1)
    @@ -692,9 +684,9 @@ f c z n = if (magnitude z We simply add a new dimension to the mandel function and change the type signature of f from Complex to ExtComplex.

    mandel x y z = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    -      s = 2.0 * z / deep
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
    +      s = 2.0 * z / deep
       in
           f (extcomplex r i s) 0 64
    @@ -712,8 +704,8 @@ f c z n = if (magnitude z ExtComplex, the extended complexes
    -
    import YBoiler -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YBoiler -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths

    The yMainLoop takes two arguments: the title of the window and a function from time to triangles

    @@ -737,7 +729,7 @@ allPoints = planPoints ++ where planPoints = depthPoints ++ map inverseHeight depthPoints inverseHeight (x,y,z,c) = (x,-y,z,c) - inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c) + inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c)
    @@ -746,12 +738,12 @@ depthPoints = do x <- [-width..width] y <- [0..height] let - neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] + neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] depthOf (u,v) = maxZeroIndex (ymandel u v) 0 deep 7 -- zs are 3D points with found depth zs = map (\(u,v) -> (u,v,depthOf (u,v))) neighbors -- ts are 3D pixels + mandel value - ts = map (\(u,v,w) -> (u,v,w,ymandel u v (w+1))) zs + ts = map (\(u,v,w) -> (u,v,w,ymandel u v (w+1))) zs -- ps are 3D opengl points + color value ps = map (\(u,v,w,c') -> (u/width,v/height,w/deep,colorFromValue c')) ts @@ -772,16 +764,16 @@ depthPoints = do maxZeroIndex func minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 colorFromValue n = let t :: Int -> GLfloat - t i = 0.7 + 0.3*cos( fromIntegral i / 10 ) + t i = 0.7 + 0.3*cos( fromIntegral i / 10 ) in - ((t n),(t (n+5)),(t (n+10))) + ((t n),(t (n+5)),(t (n+10))) ymandel x y z = mandel (2*x/width) (2*y/height) (2*z/deep) 64
    @@ -815,8 +807,8 @@ ymandel x y z = mandel (2

    Here is a real working code, I’ve hidden most display functions. The YGL, is a kind of framework to display 3D functions. But it can easily be extended to many kind of representation.

    -
    import YGL -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YGL -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths

    We first set the mapping between user input and actions. The type of each couple should be of the form (user input, f) where (in a first time) f:World -> World. It means, the user input will transform the world state.

    @@ -830,16 +822,16 @@ inputActionMap = inputMapFromList [ ,(Press 'l' , rotate ydir (-5)) ,(Press 'o' , rotate zdir 5) ,(Press 'u' , rotate zdir (-5)) - ,(Press 'f' , translate xdir 0.1) - ,(Press 's' , translate xdir (-0.1)) - ,(Press 'e' , translate ydir 0.1) - ,(Press 'd' , translate ydir (-0.1)) - ,(Press 'z' , translate zdir 0.1) - ,(Press 'r' , translate zdir (-0.1)) - ,(Press '+' , zoom 1.1) - ,(Press '-' , zoom (1/1.1)) - ,(Press 'h' , resize 1.2) - ,(Press 'g' , resize (1/1.2)) + ,(Press 'f' , translate xdir 0.1) + ,(Press 's' , translate xdir (-0.1)) + ,(Press 'e' , translate ydir 0.1) + ,(Press 'd' , translate ydir (-0.1)) + ,(Press 'z' , translate zdir 0.1) + ,(Press 'r' , translate zdir (-0.1)) + ,(Press '+' , zoom 1.1) + ,(Press '-' , zoom (1/1.1)) + ,(Press 'h' , resize 1.2) + ,(Press 'g' , resize (1/1.2)) ]
    @@ -932,11 +924,11 @@ main = yMainLoop inputActionMap idleAction initialWorld< initialWorld = World { angle = makePoint3D (-30,-30,0) , position = makePoint3D (0,0,0) - , scale = 0.8 + , scale = 0.8 , shape = shapeFunc , box = Box3D { minPoint = makePoint3D (-2,-2,-2) , maxPoint = makePoint3D (2,2,2) - , resolution = 0.16 } + , resolution = 0.16 } , told = 0 }
    @@ -949,8 +941,8 @@ idleAction tnew world = world { , told = tnew } where - anglePerSec = 5.0 - delta = anglePerSec * elapsed / 1000.0 + anglePerSec = 5.0 + delta = anglePerSec * elapsed / 1000.0 elapsed = fromIntegral (tnew - (told world))
    @@ -962,7 +954,7 @@ shapeFunc res x y = let z = maxZeroIndex (ymandel x y) 0 1 20 in - if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | + if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | val <- [res], xeps <- [-val,val], yeps<-[-val,val]] then Nothing else Just (z,colorFromValue ((ymandel x y z) * 64)) @@ -974,9 +966,9 @@ shapeFunc res x y = colorFromValue n = let t :: Point -> Scalar - t i = 0.7 + 0.3*cos( i / 10 ) + t i = 0.7 + 0.3*cos( i / 10 ) in - makeColor (t n) (t (n+5)) (t (n+10)) + makeColor (t n) (t (n+5)) (t (n+10))

    The rest is similar to the preceding sections.

    @@ -994,8 +986,8 @@ colorFromValue n = maxZeroIndex _ minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 ymandel :: Point -> Point -> Point -> Point @@ -1022,8 +1014,8 @@ ymandel x y z = fromIntegral (ma
    -
    import YGL -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YGL -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths
     
     -- Centralize all user input interaction
     inputActionMap :: InputMap World
    @@ -1035,16 +1027,16 @@ inputActionMap = inputMapFromList [
         ,(Press 'l' , rotate ydir (-5))
         ,(Press 'o' , rotate zdir 5)
         ,(Press 'u' , rotate zdir (-5))
    -    ,(Press 'f' , translate xdir 0.1)
    -    ,(Press 's' , translate xdir (-0.1))
    -    ,(Press 'e' , translate ydir 0.1)
    -    ,(Press 'd' , translate ydir (-0.1))
    -    ,(Press 'z' , translate zdir 0.1)
    -    ,(Press 'r' , translate zdir (-0.1))
    -    ,(Press '+' , zoom 1.1)
    -    ,(Press '-' , zoom (1/1.1))
    -    ,(Press 'h' , resize 2.0)
    -    ,(Press 'g' , resize (1/2.0))
    +    ,(Press 'f' , translate xdir 0.1)
    +    ,(Press 's' , translate xdir (-0.1))
    +    ,(Press 'e' , translate ydir 0.1)
    +    ,(Press 'd' , translate ydir (-0.1))
    +    ,(Press 'z' , translate zdir 0.1)
    +    ,(Press 'r' , translate zdir (-0.1))
    +    ,(Press '+' , zoom 1.1)
    +    ,(Press '-' , zoom (1/1.1))
    +    ,(Press 'h' , resize 2.0)
    +    ,(Press 'g' , resize (1/2.0))
         ]
    @@ -1092,7 +1084,7 @@ rotate dir angleValue world = switchRotation :: World -> World switchRotation world = world { - anglePerSec = if anglePerSec world > 0 then 0 else 5.0 } + anglePerSec = if anglePerSec world > 0 then 0 else 5.0 } translate :: Point3D -> Scalar -> World -> World translate dir len world = @@ -1119,12 +1111,12 @@ main = yMainLoop inputActionMap idleAction initialWorld< initialWorld :: World initialWorld = World { angle = makePoint3D (30,30,0) - , anglePerSec = 5.0 + , anglePerSec = 5.0 , position = makePoint3D (0,0,0) - , scale = 1.0 + , scale = 1.0 , box = Box3D { minPoint = makePoint3D (0-eps, 0-eps, 0-eps) , maxPoint = makePoint3D (0+eps, 0+eps, 0+eps) - , resolution = 0.02 } + , resolution = 0.02 } , told = 0 -- We declare cache directly this time , cache = objectFunctionFromWorld initialWorld @@ -1168,7 +1160,7 @@ idleAction tnew world = , told = tnew } where - delta = anglePerSec world * elapsed / 1000.0 + delta = anglePerSec world * elapsed / 1000.0 elapsed = fromIntegral (tnew - (told world)) shapeFunc :: Scalar -> Function3D @@ -1176,7 +1168,7 @@ shapeFunc res x y = let z = maxZeroIndex (ymandel x y) 0 1 20 in - if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | + if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | val <- [res], xeps <- [-val,val], yeps<-[-val,val]] then Nothing else Just (z,colorFromValue 0) @@ -1185,9 +1177,9 @@ shapeFunc res x y = colorFromValue n = let t :: Point -> Scalar - t i = 0.0 + 0.5*cos( i /10 ) + t i = 0.0 + 0.5*cos( i /10 ) in - makeColor (t n) (t (n+5)) (t (n+10)) + makeColor (t n) (t (n+5)) (t (n+10)) -- given f min max nbtest, -- considering @@ -1202,8 +1194,8 @@ colorFromValue n = maxZeroIndex _ minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if func medpoint /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 ymandel :: Point -> Point -> Point -> Point @@ -1237,25 +1229,26 @@ ymandel x y z = fromIntegral (ma
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -1273,6 +1266,7 @@ ymandel x y z = fromIntegral (ma comments powered by Disqus
    +
    Published on 2012-06-15 diff --git a/Scratch/fr/blog/Haskell-the-Hard-Way/index.html b/Scratch/fr/blog/Haskell-the-Hard-Way/index.html index 2527b2f..a2cd4b2 100644 --- a/Scratch/fr/blog/Haskell-the-Hard-Way/index.html +++ b/Scratch/fr/blog/Haskell-the-Hard-Way/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Haskell comme un vrai!

    -
    +

    Magritte pleasure principle

    @@ -259,7 +251,7 @@ Function declaration return x*x + y*y; }

    In Javascript:

    -
    function f(x,y) {
    +
    function f(x,y) {
         return x*x + y*y;
     }

    in Python:

    @@ -299,7 +291,7 @@ main = print (f f :: Int -> Int -> Int f x y = x*x + y*y -main = print (f 2.3 4.2)
    +main = print (f 2.3 4.2)

    You get this error:

    21_very_basic.lhs:6:23:
    @@ -317,7 +309,7 @@ main = print (f 
     
    f x y = x*x + y*y
     
    -main = print (f 2.3 4.2)
    +main = print (f 2.3 4.2)

    It works! Great, we don’t have to declare a new function for every single type. For example, in C, you’ll have to declare a function for int, for float, for long, for double, etc…

    But, what type should we declare? To discover the type Haskell has found for us, just launch ghci:

    @@ -364,7 +356,7 @@ g y ⇔ 3*3 + y*y
    f :: Num a => a -> a -> a
     f x y = x*x + y*y
     
    -main = print (f 3 2.4)
    +main = print (f 3 2.4)

    It works, because, 3 is a valid representation both for Fractional numbers like Float and for Integer. As 2.4 is a Fractional number, 3 is then interpreted as being also a Fractional number.

    01_basic/10_Introduction/23_very_basic.lhs

    @@ -378,7 +370,7 @@ f x y = x*x +x :: Int x = 3 y :: Float -y = 2.4 +y = 2.4 main = print (f x y) -- won't work because type x ≠ type y

    The compiler complains. The two parameters must have the same type.

    @@ -567,9 +559,9 @@ Functional style

    example: [1,2,3,4,5] ⇒ 2 + 4 ⇒ 6

    To show differences between the functional and imperative approach, I’ll start by providing an imperative solution (in Javascript):

    -
    function evenSum(list) {
    +
    function evenSum(list) {
         var result = 0;
    -    for (var i=0; i< list.length ; i++) {
    +    for (var i=0; i< list.length ; i++) {
             if (list[i] % 2 ==0) {
                 result += list[i];
             }
    @@ -810,7 +802,7 @@ myfunc list = foldl bar initialVa
     
    -- Version 6
     -- foldl' isn't accessible by default
     -- we need to import it from the module Data.List
    -import Data.List
    +import Data.List
     evenSum l = foldl' mysum 0 (filter even l)
       where mysum acc value = acc + value

    Version we can simplify by using directly a lambda notation. This way we don’t have to create the temporary name mysum.

    @@ -818,7 +810,7 @@ evenSum l = foldl' mysum 0 (-- Version 7 -- Generally it is considered a good practice -- to import only the necessary function(s) -import Data.List (foldl') +import Data.List (foldl') evenSum l = foldl' (\x y -> x+y) 0 (filter even l)

    And of course, we note that

    @@ -835,7 +827,7 @@ evenSum l = foldl' (\x y -> x

    02_Hard_Part/16_Functions.lhs

    Finally

    -- Version 8
    -import Data.List (foldl')
    +import Data.List (foldl')
     evenSum :: Integral a => [a] -> a
     evenSum l = foldl' (+) 0 (filter even l)

    foldl' isn’t the easiest function to intuit. If you are not used to it, you should study it a bit.

    @@ -855,13 +847,13 @@ evenSum l = foldl' (+) (f . g . h) x ⇔ f ( g (h x))

    We can take advantage of this operator to η-reduce our function:

    -- Version 9
    -import Data.List (foldl')
    +import Data.List (foldl')
     evenSum :: Integral a => [a] -> a
     evenSum = (foldl' (+) 0) . (filter even)

    Also, we could rename some parts to make it clearer:

    -- Version 10 
    -import Data.List (foldl')
    +import Data.List (foldl')
     sum' :: (Num a) => [a] -> a
     sum' = foldl' (+) 0
     evenSum :: Integral a => [a] -> a
    @@ -1013,9 +1005,9 @@ main = putStrLn And many accessors are made for you. Furthermore you can use another order when setting values.

    Example:

    data Complex = Num a => Complex { real :: a, img :: a}
    -c = Complex 1.0 2.0
    +c = Complex 1.0 2.0
     z = Complex { real = 3, img = 4 }
    -real c  1.0
    +real c  1.0
     img z  4

    02_Hard_Part/22_Types.lhs


    @@ -1059,7 +1051,7 @@ Trees

    Magritte, l

    We’ll just give another standard example: binary trees.

    -
    import Data.List
    +
    import Data.List
     
     data BinTree a = Empty
                      | Node a (BinTree a) (BinTree a)
    @@ -1264,7 +1256,7 @@ numbers = 0:map
     
     take' n [] = []
     take' 0 l = []
    -take' n (x:xs) = x:take' (n-1) xs
    +take' n (x:xs) = x:take' (n-1) xs
     
     main = print $ take' 10 numbers
    @@ -1282,8 +1274,8 @@ main = print $<

    This code is mostly the same as the previous one.

    -
    import Debug.Trace (trace)
    -import Data.List
    +
    import Debug.Trace (trace)
    +import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -1340,8 +1332,8 @@ main = print $< treeTakeDepth _ Empty = Empty treeTakeDepth 0 _ = Empty treeTakeDepth n (Node x left right) = let - nl = treeTakeDepth (n-1) left - nr = treeTakeDepth (n-1) right + nl = treeTakeDepth (n-1) left + nr = treeTakeDepth (n-1) right in Node x nl nr
    @@ -1367,8 +1359,8 @@ treeTakeDepth n (Node x left right) =
    iTree = Node 0 (dec iTree) (inc iTree)
             where
    -           dec (Node x l r) = Node (x-1) (dec l) (dec r) 
    -           inc (Node x l r) = Node (x+1) (inc l) (inc r) 
    + dec (Node x l r) = Node (x-1) (dec l) (dec r) + inc (Node x l r) = Node (x+1) (inc l) (inc r)

    Another way to create this tree is to use a higher order function. This function should be similar to map, but should work on BinTree instead of list. Here is such a function:

    @@ -1383,8 +1375,8 @@ treeMap f (Node x left right) =

    Our definition is now:

    infTreeTwo :: BinTree Int
    -infTreeTwo = Node 0 (treeMap (\x -> x-1) infTreeTwo) 
    -                    (treeMap (\x -> x+1) infTreeTwo) 
    +infTreeTwo = Node 0 (treeMap (\x -> x-1) infTreeTwo) + (treeMap (\x -> x+1) infTreeTwo)

    Look at the result for

    main = print $ treeTakeDepth 4 infTreeTwo
    @@ -1501,7 +1493,7 @@ main = do

    Argh! An evil error message and a crash! The first evolution will be to answer with a more friendly message.

    In order to do this, we must detect that something went wrong. Here is one way to do this. Use the type Maybe. It is a very common type in Haskell.

    -
    import Data.Maybe
    +
    import Data.Maybe

    What is this thing? Maybe is a type which takes one parameter. Its definition is:

    data Maybe a = Nothing | Just a
    @@ -1544,7 +1536,7 @@ main = do

    Our next evolution will be to prompt the user again and again until she enters a valid answer.

    We keep the first part:

    -
    import Data.Maybe
    +
    import Data.Maybe
     
     maybeRead :: Read a => String -> Maybe a
     maybeRead s = case reads s of
    @@ -1807,7 +1799,7 @@ main = do
       print $ sum list

    Is translated into:

    -
    import Data.Maybe
    +
    import Data.Maybe
     
     maybeRead :: Read a => String -> Maybe a
     maybeRead s = case reads s of
    @@ -1980,7 +1972,7 @@ The list monad
     

    Golconde de Magritte

    The list monad helps us to simulate non deterministic computations. Here we go:

    -
    import Control.Monad (guard)
    +
    import Control.Monad (guard)
     
     allCases = [1..10]
     
    @@ -2036,7 +2028,7 @@ More on Infinite Tree
     
     

    This code is mostly the same as the one in the tree section.

    -
    import Data.List
    +
    import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -2097,8 +2089,8 @@ treeFromList (x:xs) = treeTakeDepth _ Empty = Empty
     treeTakeDepth 0 _     = Empty
     treeTakeDepth n (Node x left right) = let
    -          nl = treeTakeDepth (n-1) left
    -          nr = treeTakeDepth (n-1) right
    +          nl = treeTakeDepth (n-1) left
    +          nr = treeTakeDepth (n-1) right
               in
                   Node x nl nr
    @@ -2148,8 +2140,8 @@ treeTakeDepth 4 (treeFromList shuffle)

    This code is mostly the same as the preceding one.

    -
    import Debug.Trace (trace)
    -import Data.List
    +
    import Debug.Trace (trace)
    +import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -2196,8 +2188,8 @@ treeTakeDepth 4 (treeFromList shuffle) treeTakeDepth _ Empty = Empty treeTakeDepth 0 _ = Empty treeTakeDepth n (Node x left right) = let - nl = treeTakeDepth (n-1) left - nr = treeTakeDepth (n-1) right + nl = treeTakeDepth (n-1) left + nr = treeTakeDepth (n-1) right in Node x nl nr
    @@ -2241,7 +2233,7 @@ safefilter f l = safefilter' f l nbTry safefilter' f (x:xs) n = if f x then x : safefilter' f xs nbTry - else safefilter' f xs (n-1)
    + else safefilter' f xs (n-1)

    Now run the program and be happy:

    @@ -2292,25 +2284,26 @@ treeFromList' (x:xs) n =
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -2328,6 +2321,7 @@ treeFromList' (x:xs) n = Please enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
    +
    Published on 2012-02-08 diff --git a/Scratch/fr/blog/Higher-order-function-in-zsh/index.html b/Scratch/fr/blog/Higher-order-function-in-zsh/index.html index e89d21f..e3637eb 100644 --- a/Scratch/fr/blog/Higher-order-function-in-zsh/index.html +++ b/Scratch/fr/blog/Higher-order-function-in-zsh/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Fonctions d'ordre supérieur en zsh

    -
    +

    Title image

    @@ -107,11 +99,11 @@ done
  • Le :t signfie “tail” ; si toto=/path/to/file.ext alors ${toto:t}=file.ext.
  • Après

    -
    gif_to_png() { convert $1 ${1:r}.png && \rm -f $1 }
    +
    gif_to_png() { convert $1 ${1:r}.png && \rm -f $1 }
     
    -handle_resources() { map gif_to_png $1/resources/*.gif(.N) }
    +handle_resources() { map gif_to_png $1/resources/*.gif(.N) }
     
    -map handle_resources /path/to/projects/*(/N)
    +map handle_resources /path/to/projects/*(/N)

    Plus de bloc ! Oui, c’est un poil plus difficile à lire pour les non initiés. Mais c’est à la fois plus concis et plus robuste.

    Et encore ce code ne possède pas de test. Recommençons sur le même principe.

    Trouver les fichiers des projets qui ne contiennent pas de s dans leur nom qui ont le même nom que leur projet.

    @@ -205,25 +197,26 @@ function filter {
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -241,6 +234,7 @@ function filter { comments powered by Disqus
    +
    Published on 2011-09-28 diff --git a/Scratch/fr/blog/Learn-Vim-Progressively/index.html b/Scratch/fr/blog/Learn-Vim-Progressively/index.html index 77f9402..180101e 100644 --- a/Scratch/fr/blog/Learn-Vim-Progressively/index.html +++ b/Scratch/fr/blog/Learn-Vim-Progressively/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Apprenez Vim Progressivement

    -
    +

    Über leet use vim!

    @@ -309,25 +301,26 @@ $(document).ready(function() {
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -345,6 +338,7 @@ $(document).ready(function() { comments powered by Disqus
    +
    Published on 2011-08-25 diff --git a/Scratch/fr/blog/Password-Management/index.html b/Scratch/fr/blog/Password-Management/index.html index f5940f1..04e5d1d 100644 --- a/Scratch/fr/blog/Password-Management/index.html +++ b/Scratch/fr/blog/Password-Management/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Password Management

    -
    +

    Title image

    @@ -113,25 +105,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -149,6 +142,7 @@ comments powered by Disqus
    +
    Published on 2011-05-18 diff --git a/Scratch/fr/blog/SVG-and-m4-fractals/index.html b/Scratch/fr/blog/SVG-and-m4-fractals/index.html index e0a96f0..f34cb96 100644 --- a/Scratch/fr/blog/SVG-and-m4-fractals/index.html +++ b/Scratch/fr/blog/SVG-and-m4-fractals/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Accroître le pouvoir des languages déficients.

    -
    +

    Yesod logo made in SVG and m4

    @@ -174,25 +166,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -210,6 +203,7 @@ comments powered by Disqus
    +
    Published on 2011-10-20 diff --git a/Scratch/fr/blog/Social-link-the-right-way/index.html b/Scratch/fr/blog/Social-link-the-right-way/index.html new file mode 100644 index 0000000..120ce48 --- /dev/null +++ b/Scratch/fr/blog/Social-link-the-right-way/index.html @@ -0,0 +1,285 @@ + + + + + + YBlog - Être correct avec les boutons share + + + + + + + + + + + + + +
    + + +
    +

    Être correct avec les boutons share

    +
    +
    +
    +
    +

    Main image

    +
    + + +

    tlpl: Les boutons des réseaux sociaux traquent vos utilisateurs, ont un design incohérent avec celui de votre site, utilisent des ressources, ralentissent le rendu de vos pages.

    +

    Faite les choses bien. Utilisez des liens statiques.

    +

    Si vous n’avez pas envie de lire, copiez et collez simplement le code suivant dans votre html :

    +
    <script>
    +var url=document.location;
    +document.write(
    +  '<'+'a href="https://twitter.com/home?status='+url+'" '
    +    +'target="_blank">Tweet this<'+'/a> - '
    +
    ++ '<'+'a href="http://www.facebook.com/sharer/sharer.php?u='+url+'" '
    +    +'target="_blank">Like this<'+'/a> - '
    +
    ++ '<'+'a href="https://plus.google.com/share?url='+url+'" '
    +    +'target="_blank">Share on G+<'+'/a>');
    +</script>
    +
    + +

    The problem

    +

    Ever been on a website and want to tweet about it? Fortunately, the website might have a button to help you. But do you really know what this button do?

    +

    The “Like”, “Tweet” and “+1” buttons will call a javascript. It will get access to your cookies. It helps the provider of the button to know who you are.

    +

    In plain English, the “+1” button will inform Google you are visiting the website, even if you don’t click on “+1”. The same is true for the “like” button for facebook and the “tweet this” button for twitter.

    +

    The problem is not only a privacy issue. In fact (sadly imho) this isn’t an issue for most people. These button consume computer ressources. Far more than a simple link. It thus slow down a bit the computer and consume energy. These button could also slow down the rendering of your web page.

    +

    Another aspect is their design. Their look and feel is mostly imposed by the provider.

    +

    The most problematic aspect in my opinion is to use a third party js on your website. What if tomorrow twitter update their tweet button? If the upgrade broke something for only a minority of people, they won’t fix it. This could occur anytime without any notification. They just have to add a document.write in their js you call asynchronously and BAM! Your website is just an empty blank page. And as you call many external ressources, it can be very difficult to find the origin of the problem.

    +

    Using social network buttons:

    +
      +
    • Pros: +
        +
      • help user share your website,
      • +
      • can provide a popularity indicator to your users.
      • +
    • +
    • Cons: +
        +
      • you help tracking your users,
      • +
      • generally doesn’t follow the design of your website,
      • +
      • use more computer ressources,
      • +
      • slow down your website,
      • +
      • executing third party js can break things silently.
      • +
    • +
    +

    Solutions

    +

    I will provide you two solutions with the following properties:

    +
      +
    • Pros: +
        +
      • help user share your website,
      • +
      • doesn’t follow your user,
      • +
      • use almost no computer ressource,
      • +
      • doesn’t slow down your website,
      • +
      • doesn’t execute any third party js on your website.
      • +
    • +
    • Cons: +
        +
      • doesn’t provide any popularity information.
      • +
    • +
    +

    Solution 1 (no js):

    +
    <a href="https://twitter.com/home?status=$url$"
    +    target="_blank">Tweet this</a>
    +
    +<a href="http://www.facebook.com/sharer/sharer.php?u=$url$"
    +    target="_blank">Like this</a>
    +
    +<a href="https://plus.google.com/share?url=$url$"
    +    target="_blank">Share on G+</a>
    +

    But you have to replace $url$ by the current url.

    +

    Solution 2 (Just copy/paste):

    +

    If you don’t want to write the url yourself, you could use some minimal js:

    +
    <script>
    +var url=document.location;
    +document.write(
    +  '<'+'a href="https://twitter.com/home?status='+url+'" '
    +    +'target="_blank">Tweet this<'+'/a> - '
    +
    ++ '<'+'a href="http://www.facebook.com/sharer/sharer.php?u='+url+'" '
    +    +'target="_blank">Like this<'+'/a> - '
    +
    ++ '<'+'a href="https://plus.google.com/share?url='+url+'" '
    +    +'target="_blank">Share on G+<'+'/a>');
    +</script>
    +

    Here is the result:

    +
    + +
    + +

    Good looking solutions

    +

    If you don’t want just text but nice icons. You have many choices:

    +
      +
    • Use images <img src="..."/> in the links.
    • +
    • Use icon fonts
    • +
    +

    As the first solution is pretty straightforward, I’ll explain the second one.

    +
      +
    1. Download the icon font here
    2. +
    3. put the font file(s) at some place (here ‘fonts/social_font.ttf’ relatively to your css file)
    4. +
    5. Add this to your css
    6. +
    +
    @font-face
    +  font-family: 'social'
    +  src: url('fonts/social_font.ttf') format('truetype')
    +  font-weight: normal
    +  font-style: normal
    +.social
    +  font-family: social
    +

    Now add this to your html:

    +

    Solution 1 (without js):

    +
    <a href="https://twitter.com/home?status=$url$"
    +    target="_blank"
    +    class="social">&#116;</a>
    +·
    +<a href="http://www.facebook.com/sharer/sharer.php?u=$url$"
    +   target="_blank"
    +   class="social">&#0096;</a>
    +·
    +<a href="https://plus.google.com/share?url=$url$"
    +    target="_blank"
    +    class="social">&#0103;</a>
    +

    Solution 2 (just copy/paste):

    +
    <script>
    +var url=document.location;
    +document.write(
    +    '<a href="https://twitter.com/home?status='+url+'"'
    +        + ' target="_blank"'
    +        + ' class="social">&#116;<'+'/a>'
    +    + ' · '
    +    + '<' + 'a href="http://www.facebook.com/sharer/sharer.php?u='+url+'"'
    +       + ' target="_blank"'
    +       + ' class="social">&#0096;<'+'/a>'
    +    + ' · '
    +    + '<a href="https://plus.google.com/share?url='+url+'"'
    +        + ' target="_blank"'
    +        + ' class="social">&#0103;<'+'/a>');
    +</script>
    +

    Here is the result:

    +
    + +
    + +

    Conclusion

    +
      +
    1. You get your design back,
    2. +
    3. You stop to help tracking people,
    4. +
    5. You use less computer ressources and more generally power ressources which is good for the planet,
    6. +
    7. Your web pages will load faster.
    8. +
    +

    ps: On my personal website I continue to use Google analytics. Therefore, Google (and only Google, not facebook nor twitter) can track you here. But I might change this in the future.

    +
    + +
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée +
    + + +
    +

    Comments

    +
    + + + comments powered by Disqus +
    + +
    +
    + Published on 2013-03-14 +
    + +
    + Yann Esposito© +
    +
    + Done with + Vim + & + Hakyll +
    +
    +
    + +
    + + + + + + + + diff --git a/Scratch/fr/blog/Typography-and-the-Web/index.html b/Scratch/fr/blog/Typography-and-the-Web/index.html index d2b171d..338e27b 100644 --- a/Scratch/fr/blog/Typography-and-the-Web/index.html +++ b/Scratch/fr/blog/Typography-and-the-Web/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    La typography et le Web

    -
    +

    @@ -111,25 +103,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -147,6 +140,7 @@ comments powered by Disqus
    +
    Published on 2012-02-02 diff --git a/Scratch/fr/blog/Yesod-excellent-ideas/index.html b/Scratch/fr/blog/Yesod-excellent-ideas/index.html index cf7923c..ef00a15 100644 --- a/Scratch/fr/blog/Yesod-excellent-ideas/index.html +++ b/Scratch/fr/blog/Yesod-excellent-ideas/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Les idées de yesod

    -
    +

    Title image

    @@ -65,7 +57,7 @@ SQL injection by a mom

    SQL injection by a mom

    Lorsque vous créez une application web, beaucoup de temps est passé à s’occuper de chaînes de caractères. Des chaînes de caractère pour les URL, le HTML, le Javascript, les CSS, les requêtes SQL, etc… Pour éviter des utilisation malicieuses vous devez protéger chaque chaîne de caractère entre chaque étape. Par exemple supposons que vous entriez comme nom :

    -
    Newton<script>alert("An apple fall")</script>
    +
    Newton<script>alert("An apple fall")</script>

    Sans une protection correcte, le message “An apple fall” sera affiché à chaque fois que quelqu’un essayera d’accéder au nom de cet utilisateur. Les “types saufs” sont le tonyglandil du web. A chaque chaine de caractère, on lui associe un “type”. A quoi sert cette chaîne de caractère ? Est-ce une URL ? Du javascript ? De l’HTML ? Entre chaque passage d’une représentation à une autre, un transformation is faite par défaut.

    Yesod fait de son mieux pour typer les objets manipulés et ainsi il fera ce qu’il faut pour ne pas mettre du script dans une URL par exemple.

    Go to the other page ~~~~~~

    @@ -127,25 +119,26 @@ toWidget hamletFile "buttonTemplate.hamlet"
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -163,6 +156,7 @@ toWidget hamletFile "buttonTemplate.hamlet"Please enable JavaScript to view the comments powered by Disqus. comments powered by Disqus
    +
    Published on 2011-10-04 diff --git a/Scratch/fr/blog/Yesod-tutorial-for-newbies/index.html b/Scratch/fr/blog/Yesod-tutorial-for-newbies/index.html index 84212d5..7b7d794 100644 --- a/Scratch/fr/blog/Yesod-tutorial-for-newbies/index.html +++ b/Scratch/fr/blog/Yesod-tutorial-for-newbies/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Site en Haskell

    -
    +

    Neo Flying at warp speed

    @@ -143,7 +135,7 @@ static/tmp
  • config/models
  • Obviously:

    -

    config/routes | is where you’ll configure the map %url → Code. |
    Handler/ | contains the files that will contain the code called when a %url is accessed. |
    templates/ | contains html, js and css templates. |
    config/models | is where you’ll configure the persistent objects (database tables). |

    +

    config/routes | is where you’ll configure the map url → Code. |
    Handler/ | contains the files that will contain the code called when a url is accessed. |
    templates/ | contains html, js and css templates. |
    config/models | is where you’ll configure the persistent objects (database tables). |

    During this tutorial we’ll modify other files as well, but we won’t explore them in detail.

    Also note, shell commands are executed in the root directory of your project instead specified otherwise.

    We are now ready to start!

    @@ -153,7 +145,7 @@ static/tmp

    Goal:

    Make a server that when accessed /echo/[some text] should return a web page containing “some text” inside an h1 bloc.

    -

    In a first time, we must declare the %url of the form /echo/... are meaningful. Let’s take a look at the file config/routes:

    +

    In a first time, we must declare the url of the form /echo/... are meaningful. Let’s take a look at the file config/routes:

     /static StaticR Static getStatic
     /auth   AuthR   Auth   getAuth
    @@ -169,7 +161,7 @@ static/tmp
     /echo/#String EchoR GET
     
    -

    This line contains three elements: the %url pattern, a handler name, an %http method. I am not particularly fan of the big R notation but this is the standard convention.

    +

    This line contains three elements: the url pattern, a handler name, an %http method. I am not particularly fan of the big R notation but this is the standard convention.

    If you save config/routes, you should see your terminal in which you launched yesod devel activate and certainly displaying an error message.

     Application.hs:31:1: Not in scope: `getEchoR'
    @@ -186,12 +178,12 @@ getEchoR theText = do
     

    TADA! It works!

    Bulletproof?

    Neo stops a myriad of bullets

    -

    Even this extremely minimal web application has some impressive properties. For exemple, imagine an attacker entering this %url:

    +

    Even this extremely minimal web application has some impressive properties. For exemple, imagine an attacker entering this url:

    [http://localhost:3000/echo/<a>I'm <script>alert("Bad!");](http://localhost:3000/echo/I’m

    " %>

    The special characters are protected for us. A malicious user could not hide some bad script inside.

    -

    This behavior is a direct consequence of type safety. The %url string is put inside a %url type. Then the interesting part in the %url is put inside a String type. To pass from %url type to String type some transformation are made. For example, replace all “%20” by space characters. Then to show the String inside an html document, the string is put inside an html type. Some transformations occurs like replace “<” by “&lt;”. Thanks to yesod, this tedious job is done for us.

    +

    This behavior is a direct consequence of type safety. The url string is put inside a url type. Then the interesting part in the url is put inside a String type. To pass from url type to String type some transformation are made. For example, replace all “%20” by space characters. Then to show the String inside an html document, the string is put inside an html type. Some transformations occurs like replace “<” by “&lt;”. Thanks to yesod, this tedious job is done for us.

    "http://localhost:3000/echo/some%20text<a>" :: URL
                         ↓
                   "some text<a>"                 :: String
    @@ -236,7 +228,7 @@ a:visited { col
     

    Generally you don’t want to have all your code inside a unique file. This is why we will separate our handlers. In a first time create a new file Handler/Echo.hs containing:

    module Handler.Echo where
     
    -import Import
    +import Import
     
     getEchoR :: String -> Handler RepHtml
     getEchoR theText = do
    @@ -249,7 +241,7 @@ getEchoR theText = do
     

    We must also declare this new Handler module inside Application.hs. Just after the “import Handler.Home”, add:

    -
    import Handler.Echo
    +
    import Handler.Echo

    This is it.

    ps: I am sure not so far in the future we could simply write yesod add-handler Echo to declare it and create a new handler file.

    Data.Text

    @@ -264,7 +256,7 @@ getEchoR theText = do

    And do the same in Handler/Echo.hs:

    module Handler.Echo where
     
    -import Import
    +import Import
     
     getEchoR :: Text -> Handler RepHtml
     getEchoR theText = do
    @@ -290,8 +282,8 @@ getEchoR theText = do
     

    This time the path /mirror will accept GET and POST requests. Add the corresponding new Handler file:

    module Handler.Mirror where
     
    -import Import
    -import qualified Data.Text as T
    +import Import
    +import qualified Data.Text as T
     
     getMirrorR :: Handler RepHtml
     getMirrorR = do
    @@ -349,11 +341,11 @@ Article
         )
     where
     
    -import Import
    -import Data.Monoid
    +import Import
    +import Data.Monoid
     
     -- to use Html into forms
    -import Yesod.Form.Nic (YesodNic, nicHtmlField)
    +import Yesod.Form.Nic (YesodNic, nicHtmlField)
     instance YesodNic App

    Remark: it is a best practice to add the YesodNic instance inside Foundation.hs. I put this definition here to make things easier but you should see a warning about this orphan instance. To put the include inside Foundation.hs is left as an exercice to the reader.

    Hint: Do not forget to put YesodNic and nicHtmlField inside the exported objects of the module.

    @@ -428,7 +420,7 @@ getArticleR articleId = do
    <p>A last try to <em>cross script</em> 
        and <em>SQL injection</em></p>
     <p>Here is the first try: 
    -   <script>alert("You loose");</script></p>
    +   <script>alert("You loose");</script></p>
     <p> And Here is the last </p>
     "); DROP TABLE ARTICLE;;

    Conclusion

    @@ -458,25 +450,26 @@ getArticleR articleId = do
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -494,6 +487,7 @@ getArticleR articleId = do comments powered by Disqus
    +
    Published on 2012-01-15 diff --git a/Scratch/fr/blog/feed/feed.xml b/Scratch/fr/blog/feed/feed.xml index cfe47b7..0e18d1c 100644 --- a/Scratch/fr/blog/feed/feed.xml +++ b/Scratch/fr/blog/feed/feed.xml @@ -8,8 +8,176 @@ Yann Esposito yann.esposito@gmail.com - 2012-12-12T00:00:00Z + 2013-03-14T00:00:00Z + Être correct avec les boutons share + + http://yannesposito.com/Scratch/fr/blog/Social-link-the-right-way/index.html + 2013-03-14T00:00:00Z + 2013-03-14T00:00:00Z + Main image

    +
    + + +

    tlpl: Les boutons des réseaux sociaux traquent vos utilisateurs, ont un design incohérent avec celui de votre site, utilisent des ressources, ralentissent le rendu de vos pages.

    +

    Faite les choses bien. Utilisez des liens statiques.

    +
    + +

    The problem

    +

    Ever been on a website and want to tweet about it? Fortunately, the website might have a button to help you. But do you really know what this button do?

    +

    The “Like”, “Tweet” and “+1” buttons will call a javascript. It will get access to your cookies. It helps the provider of the button to know who you are.

    +

    In plain English, the “+1” button will inform Google you are visiting the website, even if you don’t click on “+1”. The same is true for the “like” button for facebook and the “tweet this” button for twitter.

    +

    The problem is not only a privacy issue. In fact (sadly imho) this isn’t an issue for most people. These button consume computer ressources. Far more than a simple link. It thus slow down a bit the computer and consume energy. These button could also slow down the rendering of your web page.

    +

    Another aspect is their design. Their look and feel is mostly imposed by the provider.

    +

    The most problematic aspect in my opinion is to use a third party js on your website. What if tomorrow twitter update their tweet button? If the upgrade broke something for only a minority of people, they won’t fix it. This could occur anytime without any notification. They just have to add a document.write in their js you call asynchronously and BAM! Your website is just an empty blank page. And as you call many external ressources, it can be very difficult to find the origin of the problem.

    +

    Using social network buttons:

    +
      +
    • Pros: +
        +
      • help user share your website,
      • +
      • can provide a popularity indicator to your users.
      • +
    • +
    • Cons: +
        +
      • you help tracking your users,
      • +
      • generally doesn’t follow the design of your website,
      • +
      • use more computer ressources,
      • +
      • slow down your website,
      • +
      • executing third party js can break things silently.
      • +
    • +
    +

    Solutions

    +

    I will provide you two solutions with the following properties:

    +
      +
    • Pros: +
        +
      • help user share your website,
      • +
      • doesn’t follow your user,
      • +
      • use almost no computer ressource,
      • +
      • doesn’t slow down your website,
      • +
      • doesn’t execute any third party js on your website.
      • +
    • +
    • Cons: +
        +
      • doesn’t provide any popularity information.
      • +
    • +
    +

    Solution 1 (no js):

    +
    <a href="https://twitter.com/home?status=$url$"
    +    target="_blank">Tweet this</a>
    +
    +<a href="http://www.facebook.com/sharer/sharer.php?u=$url$"
    +    target="_blank">Like this</a>
    +
    +<a href="https://plus.google.com/share?url=$url$"
    +    target="_blank">+1 this</a>
    +

    But you have to replace $url$ by the current url.

    +

    Solution 2 (Just copy/paste):

    +

    If you don’t want to write the url yourself, you could use some minimal js:

    +
    <script>
    +var url=document.location;
    +document.write(
    +  '<'+'a href="https://twitter.com/home?status='+url+'" '
    +    +'target="_blank">Tweet this<'+'/a> - '
    +
    ++ '<'+'a href="http://www.facebook.com/sharer/sharer.php?u='+url+'" '
    +    +'target="_blank">Like this<'+'/a> - '
    +
    ++ '<'+'a href="https://plus.google.com/share?url='+url+'" '
    +    +'target="_blank">+1 this<'+'/a>');
    +</script>
    +

    Here is the result:

    +
    + +
    + +

    Good looking solutions

    +

    If you don’t want just text but nice icons. You have many choices:

    +
      +
    • Use images <img src="..."/> in the links.
    • +
    • Use icon fonts
    • +
    +

    As the first solution is pretty straightforward, I’ll explain the second one.

    +
      +
    1. Download the icon font here
    2. +
    3. put the font file(s) at some place (here ‘fonts/social_font.ttf’ relatively to your css file)
    4. +
    5. Add this to your css
    6. +
    +
    @font-face
    +  font-family: 'social'
    +  src: url('fonts/social_font.ttf') format('truetype')
    +  font-weight: normal
    +  font-style: normal
    +.social
    +  font-family: social
    +

    Now add this to your html:

    +

    Solution 1 (without js):

    +
    <a href="https://twitter.com/home?status=$url$"
    +    target="_blank"
    +    class="social">&#116;</a>
    +·
    +<a href="http://www.facebook.com/sharer/sharer.php?u=$url$"
    +   target="_blank"
    +   class="social">&#0096;</a>
    +·
    +<a href="https://plus.google.com/share?url=$url$"
    +    target="_blank"
    +    class="social">&#0103;</a>
    +

    Solution 2 (just copy/paste):

    +
    <script>
    +var url=document.location;
    +document.write(
    +    '<a href="https://twitter.com/home?status='+url+'"'
    +        + ' target="_blank"'
    +        + ' class="social">&#116;<'+'/a>'
    +    + ' · '
    +    + '<' + 'a href="http://www.facebook.com/sharer/sharer.php?u='+url+'"'
    +       + ' target="_blank"'
    +       + ' class="social">&#0096;<'+'/a>'
    +    + ' · '
    +    + '<a href="https://plus.google.com/share?url='+url+'"'
    +        + ' target="_blank"'
    +        + ' class="social">&#0103;<'+'/a>');
    +</script>
    +

    Here is the result:

    +
    + +
    + +

    Conclusion

    +
      +
    1. You get your design back,
    2. +
    3. You stop to help tracking people,
    4. +
    5. You use less computer ressources and more generally power ressources which is good for the planet,
    6. +
    7. Your web pages will load faster.
    8. +
    +

    ps: On my personal website I continue to use Google analytics. Therefore, Google (and only Google, not facebook nor twitter) can track you here. But I might change this in the future.

    ]]>
    +
    + Category Theory Presentation http://yannesposito.com/Scratch/fr/blog/Category-Theory-Presentation/index.html @@ -1035,9 +1203,9 @@ Another detail of the Mandelbulb

    We can consider two parts. The first being mostly some boilerplate2. And the second part more focused on OpenGL and content.

    Let’s play the song of our people

    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef

    For efficiency reason3, I will not use the default Haskell Complex data type.

    @@ -1047,11 +1215,11 @@ Another detail of the Mandelbulb
    instance Num Complex where
    -    fromInteger n = C (fromIntegral n,0.0)
    +    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)
    + abs (C (x,y)) = C (sqrt (x*x + y*y),0.0) + signum (C (x,y)) = C (signum x , 0.0)

    We declare some useful functions for manipulating complex numbers:

    @@ -1138,16 +1306,16 @@ allPoints = [ (x/width,ycolorFromValue n = let t :: Int -> GLfloat - t i = 0.5 + 0.5*cos( fromIntegral i / 10 ) + t i = 0.5 + 0.5*cos( fromIntegral i / 10 ) in - Color3 (t n) (t (n+5)) (t (n+10)) + Color3 (t n) (t (n+5)) (t (n+10))

    And now the mandel function. Given two coordinates in pixels, it returns some integer value:

    mandel x y = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
       in
           f (complex r i) 0 64
    @@ -1163,7 +1331,7 @@ allPoints = [ (x/width,y0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1)
    + else f c ((z*z)+c) (n-1)

    Well, if you download this file (look at the bottom of this section), compile it and run it this is the result:

    @@ -1179,20 +1347,20 @@ f c z n = if (magnitude z
    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef
     -- Use UNPACK data because it is faster
     -- The ! is for strict instead of lazy
     data Complex = C  {-# UNPACK #-} !Float 
                       {-# UNPACK #-} !Float 
                    deriving (Show,Eq)
     instance Num Complex where
    -    fromInteger n = C (fromIntegral n) 0.0
    +    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
    +    abs (C x y)     = C (sqrt (x*x + y*y)) 0.0
    +    signum (C x y)  = C (signum x) 0.0
     complex :: Float -> Float -> Complex
     complex x y = C x y
     
    @@ -1219,7 +1387,7 @@ main = do
       mainLoop
     display = do
        -- set the background color (dark solarized theme)
    -  clearColor $= Color4 0 0.1686 0.2117 1
    +  clearColor $= Color4 0 0.1686 0.2117 1
       clear [ColorBuffer] -- make the window black
       loadIdentity -- reset any transformation
       preservingMatrix drawMandelbrot
    @@ -1284,8 +1452,8 @@ positivePoints = do
     maxZeroIndex func minval maxval 0 = (minval+maxval)/2
     maxZeroIndex func minval maxval n = 
       if (func medpoint) /= 0 
    -       then maxZeroIndex func minval medpoint (n-1)
    -       else maxZeroIndex func medpoint maxval (n-1)
    +       then maxZeroIndex func minval medpoint (n-1)
    +       else maxZeroIndex func medpoint maxval (n-1)
       where medpoint = (minval+maxval)/2
    @@ -1297,15 +1465,15 @@ maxZeroIndex func minval maxval n =
    colorFromValue n =
       let 
           t :: Int -> GLfloat
    -      t i = 0.5 + 0.5*cos( fromIntegral i / 10 )
    +      t i = 0.5 + 0.5*cos( fromIntegral i / 10 )
       in
    -    Color3 (t n) (t (n+5)) (t (n+10))
    + Color3 (t n) (t (n+5)) (t (n+10))
    mandel x y = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
       in
           f (complex r i) 0 64
    @@ -1315,7 +1483,7 @@ maxZeroIndex func minval maxval n = f c z 0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1) + else f c ((z*z)+c) (n-1)
    @@ -1345,9 +1513,9 @@ f c z n = if (magnitude z
    -
    import Graphics.Rendering.OpenGL
    -import Graphics.UI.GLUT
    -import Data.IORef
    +
    import Graphics.Rendering.OpenGL
    +import Graphics.UI.GLUT
    +import Data.IORef
     type ColoredPoint = (GLfloat,GLfloat,GLfloat,Color3 GLfloat)
    @@ -1415,7 +1583,7 @@ main = do -- Some state variables (I know it feels BAD) angle <- newIORef ((35,0)::(GLfloat,GLfloat)) zoom <- newIORef (2::GLfloat) - campos <- newIORef ((0.7,0)::(GLfloat,GLfloat)) + campos <- newIORef ((0.7,0)::(GLfloat,GLfloat)) -- Function to call each frame idleCallback $= Just idle -- Function to call when keyboard or mouse is used @@ -1455,18 +1623,18 @@ mapSnd f (x,y) = ( x,f y) z $= 1 -- zoom p $= (0,0) -- camera position -- use of hjkl to rotate - kact a _ _ (Char 'h') Down = modVar a (mapFst (+0.5)) - kact a _ _ (Char 'l') Down = modVar a (mapFst (+(-0.5))) - kact a _ _ (Char 'j') Down = modVar a (mapSnd (+0.5)) - kact a _ _ (Char 'k') Down = modVar a (mapSnd (+(-0.5))) + kact a _ _ (Char 'h') Down = modVar a (mapFst (+0.5)) + kact a _ _ (Char 'l') Down = modVar a (mapFst (+(-0.5))) + kact a _ _ (Char 'j') Down = modVar a (mapSnd (+0.5)) + kact a _ _ (Char 'k') Down = modVar a (mapSnd (+(-0.5))) -- use o and i to zoom - kact _ z _ (Char 'o') Down = modVar z (*1.1) - kact _ z _ (Char 'i') Down = modVar z (*0.9) + kact _ z _ (Char 'o') Down = modVar z (*1.1) + kact _ z _ (Char 'i') Down = modVar z (*0.9) -- use sdfe to move the camera - kact _ _ p (Char 's') Down = modVar p (mapFst (+0.1)) - kact _ _ p (Char 'f') Down = modVar p (mapFst (+(-0.1))) - kact _ _ p (Char 'd') Down = modVar p (mapSnd (+0.1)) - kact _ _ p (Char 'e') Down = modVar p (mapSnd (+(-0.1))) + kact _ _ p (Char 's') Down = modVar p (mapFst (+0.1)) + kact _ _ p (Char 'f') Down = modVar p (mapFst (+(-0.1))) + kact _ _ p (Char 'd') Down = modVar p (mapSnd (+0.1)) + kact _ _ p (Char 'e') Down = modVar p (mapSnd (+(-0.1))) -- any other keys does nothing kact _ _ _ _ _ = return ()
    @@ -1475,7 +1643,7 @@ mapSnd f (x,y) = ( x,f y)
    display angle zoom position = do
        -- set the background color (dark solarized theme)
    -  clearColor $= Color4 0 0.1686 0.2117 1
    +  clearColor $= Color4 0 0.1686 0.2117 1
       clear [ColorBuffer,DepthBuffer]
       -- Transformation to change the view
       loadIdentity -- reset any transformation
    @@ -1487,8 +1655,8 @@ mapSnd f (x,y) = (  x,f y)
    scale z z z -- rotate (xangle,yangle) <- get angle - rotate xangle $ Vector3 1.0 0.0 (0.0::GLfloat) - rotate yangle $ Vector3 0.0 1.0 (0.0::GLfloat) + rotate xangle $ Vector3 1.0 0.0 (0.0::GLfloat) + rotate yangle $ Vector3 0.0 1.0 (0.0::GLfloat) -- Now that all transformation were made -- We create the object(s) @@ -1537,17 +1705,17 @@ depthPoints = do depthOf x' y' = maxZeroIndex (mandel x' y') 0 deep logdeep logdeep = floor ((log deep) / log 2) z1 = depthOf x y - z2 = depthOf (x+1) y - z3 = depthOf (x+1) (y+1) - z4 = depthOf x (y+1) - c1 = mandel x y (z1+1) - c2 = mandel (x+1) y (z2+1) - c3 = mandel (x+1) (y+1) (z3+1) - c4 = mandel x (y+1) (z4+1) + z2 = depthOf (x+1) y + z3 = depthOf (x+1) (y+1) + z4 = depthOf x (y+1) + c1 = mandel x y (z1+1) + c2 = mandel (x+1) y (z2+1) + c3 = mandel (x+1) (y+1) (z3+1) + c4 = mandel x (y+1) (z4+1) p1 = ( x /width, y /height, z1/deep, colorFromValue c1) - p2 = ((x+1)/width, y /height, z2/deep, colorFromValue c2) - p3 = ((x+1)/width,(y+1)/height, z3/deep, colorFromValue c3) - p4 = ( x /width,(y+1)/height, z4/deep, colorFromValue c4) + p2 = ((x+1)/width, y /height, z2/deep, colorFromValue c2) + p3 = ((x+1)/width,(y+1)/height, z3/deep, colorFromValue c3) + p4 = ( x /width,(y+1)/height, z4/deep, colorFromValue c4) if (and $ map (>=57) [c1,c2,c3,c4]) then [] else [p1,p2,p3,p1,p3,p4] @@ -1558,13 +1726,13 @@ depthPoints = do x <- [-width..width] y <- [-height..height] let - neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] + neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] depthOf (u,v) = maxZeroIndex (mandel u v) 0 deep logdeep logdeep = floor ((log deep) / log 2) -- zs are 3D points with found depth zs = map (\(u,v) -> (u,v,depthOf (u,v))) neighbors -- ts are 3D pixels + mandel value - ts = map (\(u,v,w) -> (u,v,w,mandel u v (w+1))) zs + ts = map (\(u,v,w) -> (u,v,w,mandel u v (w+1))) zs -- ps are 3D opengl points + color value ps = map (\(u,v,w,c') -> (u/width,v/height,w/deep,colorFromValue c')) ts @@ -1582,7 +1750,7 @@ depthPoints = do allPoints = planPoints ++ map inverseDepth planPoints where planPoints = depthPoints - inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c) + inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c)

    The rest of the program is very close to the preceding one.

    @@ -1602,8 +1770,8 @@ allPoints = planPoints ++ 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2
    @@ -1612,9 +1780,9 @@ maxZeroIndex func minval maxval n =
    colorFromValue n =
       let 
           t :: Int -> GLfloat
    -      t i = 0.7 + 0.3*cos( fromIntegral i / 10 )
    +      t i = 0.7 + 0.3*cos( fromIntegral i / 10 )
       in
    -    Color3 (t n) (t (n+5)) (t (n+10))
    + Color3 (t n) (t (n+5)) (t (n+10))

    We only changed from Complex to ExtComplex of the main f function.

    @@ -1623,7 +1791,7 @@ maxZeroIndex func minval maxval n = f c z 0 = 0 f c z n = if (magnitude z > 2 ) then n - else f c ((z*z)+c) (n-1) + else f c ((z*z)+c) (n-1)
    @@ -1631,9 +1799,9 @@ f c z n = if (magnitude z We simply add a new dimension to the mandel function and change the type signature of f from Complex to ExtComplex.

    mandel x y z = 
    -  let r = 2.0 * x / width
    -      i = 2.0 * y / height
    -      s = 2.0 * z / deep
    +  let r = 2.0 * x / width
    +      i = 2.0 * y / height
    +      s = 2.0 * z / deep
       in
           f (extcomplex r i s) 0 64
    @@ -1651,8 +1819,8 @@ f c z n = if (magnitude z ExtComplex, the extended complexes
    -
    import YBoiler -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YBoiler -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths

    The yMainLoop takes two arguments: the title of the window and a function from time to triangles

    @@ -1676,7 +1844,7 @@ allPoints = planPoints ++ where planPoints = depthPoints ++ map inverseHeight depthPoints inverseHeight (x,y,z,c) = (x,-y,z,c) - inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c) + inverseDepth (x,y,z,c) = (x,y,-z+1/deep,c)
    @@ -1685,12 +1853,12 @@ depthPoints = do x <- [-width..width] y <- [0..height] let - neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] + neighbors = [(x,y),(x+1,y),(x+1,y+1),(x,y+1)] depthOf (u,v) = maxZeroIndex (ymandel u v) 0 deep 7 -- zs are 3D points with found depth zs = map (\(u,v) -> (u,v,depthOf (u,v))) neighbors -- ts are 3D pixels + mandel value - ts = map (\(u,v,w) -> (u,v,w,ymandel u v (w+1))) zs + ts = map (\(u,v,w) -> (u,v,w,ymandel u v (w+1))) zs -- ps are 3D opengl points + color value ps = map (\(u,v,w,c') -> (u/width,v/height,w/deep,colorFromValue c')) ts @@ -1711,16 +1879,16 @@ depthPoints = do maxZeroIndex func minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 colorFromValue n = let t :: Int -> GLfloat - t i = 0.7 + 0.3*cos( fromIntegral i / 10 ) + t i = 0.7 + 0.3*cos( fromIntegral i / 10 ) in - ((t n),(t (n+5)),(t (n+10))) + ((t n),(t (n+5)),(t (n+10))) ymandel x y z = mandel (2*x/width) (2*y/height) (2*z/deep) 64
    @@ -1754,8 +1922,8 @@ ymandel x y z = mandel (2

    Here is a real working code, I’ve hidden most display functions. The YGL, is a kind of framework to display 3D functions. But it can easily be extended to many kind of representation.

    -
    import YGL -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YGL -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths

    We first set the mapping between user input and actions. The type of each couple should be of the form (user input, f) where (in a first time) f:World -> World. It means, the user input will transform the world state.

    @@ -1769,16 +1937,16 @@ inputActionMap = inputMapFromList [ ,(Press 'l' , rotate ydir (-5)) ,(Press 'o' , rotate zdir 5) ,(Press 'u' , rotate zdir (-5)) - ,(Press 'f' , translate xdir 0.1) - ,(Press 's' , translate xdir (-0.1)) - ,(Press 'e' , translate ydir 0.1) - ,(Press 'd' , translate ydir (-0.1)) - ,(Press 'z' , translate zdir 0.1) - ,(Press 'r' , translate zdir (-0.1)) - ,(Press '+' , zoom 1.1) - ,(Press '-' , zoom (1/1.1)) - ,(Press 'h' , resize 1.2) - ,(Press 'g' , resize (1/1.2)) + ,(Press 'f' , translate xdir 0.1) + ,(Press 's' , translate xdir (-0.1)) + ,(Press 'e' , translate ydir 0.1) + ,(Press 'd' , translate ydir (-0.1)) + ,(Press 'z' , translate zdir 0.1) + ,(Press 'r' , translate zdir (-0.1)) + ,(Press '+' , zoom 1.1) + ,(Press '-' , zoom (1/1.1)) + ,(Press 'h' , resize 1.2) + ,(Press 'g' , resize (1/1.2)) ]
    @@ -1871,11 +2039,11 @@ main = yMainLoop inputActionMap idleAction initialWorld< initialWorld = World { angle = makePoint3D (-30,-30,0) , position = makePoint3D (0,0,0) - , scale = 0.8 + , scale = 0.8 , shape = shapeFunc , box = Box3D { minPoint = makePoint3D (-2,-2,-2) , maxPoint = makePoint3D (2,2,2) - , resolution = 0.16 } + , resolution = 0.16 } , told = 0 }
    @@ -1888,8 +2056,8 @@ idleAction tnew world = world { , told = tnew } where - anglePerSec = 5.0 - delta = anglePerSec * elapsed / 1000.0 + anglePerSec = 5.0 + delta = anglePerSec * elapsed / 1000.0 elapsed = fromIntegral (tnew - (told world))
    @@ -1901,7 +2069,7 @@ shapeFunc res x y = let z = maxZeroIndex (ymandel x y) 0 1 20 in - if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | + if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | val <- [res], xeps <- [-val,val], yeps<-[-val,val]] then Nothing else Just (z,colorFromValue ((ymandel x y z) * 64)) @@ -1913,9 +2081,9 @@ shapeFunc res x y = colorFromValue n = let t :: Point -> Scalar - t i = 0.7 + 0.3*cos( i / 10 ) + t i = 0.7 + 0.3*cos( i / 10 ) in - makeColor (t n) (t (n+5)) (t (n+10)) + makeColor (t n) (t (n+5)) (t (n+10))

    The rest is similar to the preceding sections.

    @@ -1933,8 +2101,8 @@ colorFromValue n = maxZeroIndex _ minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if (func medpoint) /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 ymandel :: Point -> Point -> Point -> Point @@ -1961,8 +2129,8 @@ ymandel x y z = fromIntegral (ma
    -
    import YGL -- Most the OpenGL Boilerplate
    -import Mandel -- The 3D Mandelbrot maths
    +
    import YGL -- Most the OpenGL Boilerplate
    +import Mandel -- The 3D Mandelbrot maths
     
     -- Centralize all user input interaction
     inputActionMap :: InputMap World
    @@ -1974,16 +2142,16 @@ inputActionMap = inputMapFromList [
         ,(Press 'l' , rotate ydir (-5))
         ,(Press 'o' , rotate zdir 5)
         ,(Press 'u' , rotate zdir (-5))
    -    ,(Press 'f' , translate xdir 0.1)
    -    ,(Press 's' , translate xdir (-0.1))
    -    ,(Press 'e' , translate ydir 0.1)
    -    ,(Press 'd' , translate ydir (-0.1))
    -    ,(Press 'z' , translate zdir 0.1)
    -    ,(Press 'r' , translate zdir (-0.1))
    -    ,(Press '+' , zoom 1.1)
    -    ,(Press '-' , zoom (1/1.1))
    -    ,(Press 'h' , resize 2.0)
    -    ,(Press 'g' , resize (1/2.0))
    +    ,(Press 'f' , translate xdir 0.1)
    +    ,(Press 's' , translate xdir (-0.1))
    +    ,(Press 'e' , translate ydir 0.1)
    +    ,(Press 'd' , translate ydir (-0.1))
    +    ,(Press 'z' , translate zdir 0.1)
    +    ,(Press 'r' , translate zdir (-0.1))
    +    ,(Press '+' , zoom 1.1)
    +    ,(Press '-' , zoom (1/1.1))
    +    ,(Press 'h' , resize 2.0)
    +    ,(Press 'g' , resize (1/2.0))
         ]
    @@ -2031,7 +2199,7 @@ rotate dir angleValue world = switchRotation :: World -> World switchRotation world = world { - anglePerSec = if anglePerSec world > 0 then 0 else 5.0 } + anglePerSec = if anglePerSec world > 0 then 0 else 5.0 } translate :: Point3D -> Scalar -> World -> World translate dir len world = @@ -2058,12 +2226,12 @@ main = yMainLoop inputActionMap idleAction initialWorld< initialWorld :: World initialWorld = World { angle = makePoint3D (30,30,0) - , anglePerSec = 5.0 + , anglePerSec = 5.0 , position = makePoint3D (0,0,0) - , scale = 1.0 + , scale = 1.0 , box = Box3D { minPoint = makePoint3D (0-eps, 0-eps, 0-eps) , maxPoint = makePoint3D (0+eps, 0+eps, 0+eps) - , resolution = 0.02 } + , resolution = 0.02 } , told = 0 -- We declare cache directly this time , cache = objectFunctionFromWorld initialWorld @@ -2107,7 +2275,7 @@ idleAction tnew world = , told = tnew } where - delta = anglePerSec world * elapsed / 1000.0 + delta = anglePerSec world * elapsed / 1000.0 elapsed = fromIntegral (tnew - (told world)) shapeFunc :: Scalar -> Function3D @@ -2115,7 +2283,7 @@ shapeFunc res x y = let z = maxZeroIndex (ymandel x y) 0 1 20 in - if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | + if and [ maxZeroIndex (ymandel (x+xeps) (y+yeps)) 0 1 20 < 0.000001 | val <- [res], xeps <- [-val,val], yeps<-[-val,val]] then Nothing else Just (z,colorFromValue 0) @@ -2124,9 +2292,9 @@ shapeFunc res x y = colorFromValue n = let t :: Point -> Scalar - t i = 0.0 + 0.5*cos( i /10 ) + t i = 0.0 + 0.5*cos( i /10 ) in - makeColor (t n) (t (n+5)) (t (n+10)) + makeColor (t n) (t (n+5)) (t (n+10)) -- given f min max nbtest, -- considering @@ -2141,8 +2309,8 @@ colorFromValue n = maxZeroIndex _ minval maxval 0 = (minval+maxval)/2 maxZeroIndex func minval maxval n = if func medpoint /= 0 - then maxZeroIndex func minval medpoint (n-1) - else maxZeroIndex func medpoint maxval (n-1) + then maxZeroIndex func minval medpoint (n-1) + else maxZeroIndex func medpoint maxval (n-1) where medpoint = (minval+maxval)/2 ymandel :: Point -> Point -> Point -> Point @@ -2387,7 +2555,7 @@ Function declaration return x*x + y*y; }

    In Javascript:

    -
    function f(x,y) {
    +
    function f(x,y) {
         return x*x + y*y;
     }

    in Python:

    @@ -2427,7 +2595,7 @@ main = print (f f :: Int -> Int -> Int f x y = x*x + y*y -main = print (f 2.3 4.2)
    +main = print (f 2.3 4.2)

    You get this error:

    21_very_basic.lhs:6:23:
    @@ -2445,7 +2613,7 @@ main = print (f 
     
    f x y = x*x + y*y
     
    -main = print (f 2.3 4.2)
    +main = print (f 2.3 4.2)

    It works! Great, we don’t have to declare a new function for every single type. For example, in C, you’ll have to declare a function for int, for float, for long, for double, etc…

    But, what type should we declare? To discover the type Haskell has found for us, just launch ghci:

    @@ -2492,7 +2660,7 @@ g y ⇔ 3*3 + y*y
    f :: Num a => a -> a -> a
     f x y = x*x + y*y
     
    -main = print (f 3 2.4)
    +main = print (f 3 2.4)

    It works, because, 3 is a valid representation both for Fractional numbers like Float and for Integer. As 2.4 is a Fractional number, 3 is then interpreted as being also a Fractional number.

    01_basic/10_Introduction/23_very_basic.lhs

    @@ -2506,7 +2674,7 @@ f x y = x*x +x :: Int x = 3 y :: Float -y = 2.4 +y = 2.4 main = print (f x y) -- won't work because type x ≠ type y

    The compiler complains. The two parameters must have the same type.

    @@ -2695,9 +2863,9 @@ Functional style

    example: [1,2,3,4,5] ⇒ 2 + 4 ⇒ 6

    To show differences between the functional and imperative approach, I’ll start by providing an imperative solution (in Javascript):

    -
    function evenSum(list) {
    +
    function evenSum(list) {
         var result = 0;
    -    for (var i=0; i< list.length ; i++) {
    +    for (var i=0; i< list.length ; i++) {
             if (list[i] % 2 ==0) {
                 result += list[i];
             }
    @@ -2938,7 +3106,7 @@ myfunc list = foldl bar initialVa
     
    -- Version 6
     -- foldl' isn't accessible by default
     -- we need to import it from the module Data.List
    -import Data.List
    +import Data.List
     evenSum l = foldl' mysum 0 (filter even l)
       where mysum acc value = acc + value

    Version we can simplify by using directly a lambda notation. This way we don’t have to create the temporary name mysum.

    @@ -2946,7 +3114,7 @@ evenSum l = foldl' mysum 0 (
    -- Version 7
     -- Generally it is considered a good practice
     -- to import only the necessary function(s)
    -import Data.List (foldl')
    +import Data.List (foldl')
     evenSum l = foldl' (\x y -> x+y) 0 (filter even l)

    And of course, we note that

    @@ -2963,7 +3131,7 @@ evenSum l = foldl' (\x y ->02_Hard_Part/16_Functions.lhs

    Finally

    -- Version 8
    -import Data.List (foldl')
    +import Data.List (foldl')
     evenSum :: Integral a => [a] -> a
     evenSum l = foldl' (+) 0 (filter even l)

    foldl' isn’t the easiest function to intuit. If you are not used to it, you should study it a bit.

    @@ -2983,13 +3151,13 @@ evenSum l = foldl' (+) (f . g . h) x ⇔ f ( g (h x))

    We can take advantage of this operator to η-reduce our function:

    -- Version 9
    -import Data.List (foldl')
    +import Data.List (foldl')
     evenSum :: Integral a => [a] -> a
     evenSum = (foldl' (+) 0) . (filter even)

    Also, we could rename some parts to make it clearer:

    -- Version 10 
    -import Data.List (foldl')
    +import Data.List (foldl')
     sum' :: (Num a) => [a] -> a
     sum' = foldl' (+) 0
     evenSum :: Integral a => [a] -> a
    @@ -3141,9 +3309,9 @@ main = putStrLn And many accessors are made for you. Furthermore you can use another order when setting values.

    Example:

    data Complex = Num a => Complex { real :: a, img :: a}
    -c = Complex 1.0 2.0
    +c = Complex 1.0 2.0
     z = Complex { real = 3, img = 4 }
    -real c  1.0
    +real c  1.0
     img z  4

    02_Hard_Part/22_Types.lhs


    @@ -3187,7 +3355,7 @@ Trees

    Magritte, l

    We’ll just give another standard example: binary trees.

    -
    import Data.List
    +
    import Data.List
     
     data BinTree a = Empty
                      | Node a (BinTree a) (BinTree a)
    @@ -3392,7 +3560,7 @@ numbers = 0:map
     
     take' n [] = []
     take' 0 l = []
    -take' n (x:xs) = x:take' (n-1) xs
    +take' n (x:xs) = x:take' (n-1) xs
     
     main = print $ take' 10 numbers
    @@ -3410,8 +3578,8 @@ main = print $<

    This code is mostly the same as the previous one.

    -
    import Debug.Trace (trace)
    -import Data.List
    +
    import Debug.Trace (trace)
    +import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -3468,8 +3636,8 @@ main = print $< treeTakeDepth _ Empty = Empty treeTakeDepth 0 _ = Empty treeTakeDepth n (Node x left right) = let - nl = treeTakeDepth (n-1) left - nr = treeTakeDepth (n-1) right + nl = treeTakeDepth (n-1) left + nr = treeTakeDepth (n-1) right in Node x nl nr
    @@ -3495,8 +3663,8 @@ treeTakeDepth n (Node x left right) =
    iTree = Node 0 (dec iTree) (inc iTree)
             where
    -           dec (Node x l r) = Node (x-1) (dec l) (dec r) 
    -           inc (Node x l r) = Node (x+1) (inc l) (inc r) 
    + dec (Node x l r) = Node (x-1) (dec l) (dec r) + inc (Node x l r) = Node (x+1) (inc l) (inc r)

    Another way to create this tree is to use a higher order function. This function should be similar to map, but should work on BinTree instead of list. Here is such a function:

    @@ -3511,8 +3679,8 @@ treeMap f (Node x left right) =

    Our definition is now:

    infTreeTwo :: BinTree Int
    -infTreeTwo = Node 0 (treeMap (\x -> x-1) infTreeTwo) 
    -                    (treeMap (\x -> x+1) infTreeTwo) 
    +infTreeTwo = Node 0 (treeMap (\x -> x-1) infTreeTwo) + (treeMap (\x -> x+1) infTreeTwo)

    Look at the result for

    main = print $ treeTakeDepth 4 infTreeTwo
    @@ -3629,7 +3797,7 @@ main = do

    Argh! An evil error message and a crash! The first evolution will be to answer with a more friendly message.

    In order to do this, we must detect that something went wrong. Here is one way to do this. Use the type Maybe. It is a very common type in Haskell.

    -
    import Data.Maybe
    +
    import Data.Maybe

    What is this thing? Maybe is a type which takes one parameter. Its definition is:

    data Maybe a = Nothing | Just a
    @@ -3672,7 +3840,7 @@ main = do

    Our next evolution will be to prompt the user again and again until she enters a valid answer.

    We keep the first part:

    -
    import Data.Maybe
    +
    import Data.Maybe
     
     maybeRead :: Read a => String -> Maybe a
     maybeRead s = case reads s of
    @@ -3935,7 +4103,7 @@ main = do
       print $ sum list

    Is translated into:

    -
    import Data.Maybe
    +
    import Data.Maybe
     
     maybeRead :: Read a => String -> Maybe a
     maybeRead s = case reads s of
    @@ -4108,7 +4276,7 @@ The list monad
     

    Golconde de Magritte

    The list monad helps us to simulate non deterministic computations. Here we go:

    -
    import Control.Monad (guard)
    +
    import Control.Monad (guard)
     
     allCases = [1..10]
     
    @@ -4164,7 +4332,7 @@ More on Infinite Tree
     
     

    This code is mostly the same as the one in the tree section.

    -
    import Data.List
    +
    import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -4225,8 +4393,8 @@ treeFromList (x:xs) = treeTakeDepth _ Empty = Empty
     treeTakeDepth 0 _     = Empty
     treeTakeDepth n (Node x left right) = let
    -          nl = treeTakeDepth (n-1) left
    -          nr = treeTakeDepth (n-1) right
    +          nl = treeTakeDepth (n-1) left
    +          nr = treeTakeDepth (n-1) right
               in
                   Node x nl nr
    @@ -4276,8 +4444,8 @@ treeTakeDepth 4 (treeFromList shuffle)

    This code is mostly the same as the preceding one.

    -
    import Debug.Trace (trace)
    -import Data.List
    +
    import Debug.Trace (trace)
    +import Data.List
     data BinTree a = Empty 
                      | Node a (BinTree a) (BinTree a) 
                       deriving (Eq,Ord)
    @@ -4324,8 +4492,8 @@ treeTakeDepth 4 (treeFromList shuffle) treeTakeDepth _ Empty = Empty treeTakeDepth 0 _ = Empty treeTakeDepth n (Node x left right) = let - nl = treeTakeDepth (n-1) left - nr = treeTakeDepth (n-1) right + nl = treeTakeDepth (n-1) left + nr = treeTakeDepth (n-1) right in Node x nl nr
    @@ -4369,7 +4537,7 @@ safefilter f l = safefilter' f l nbTry safefilter' f (x:xs) n = if f x then x : safefilter' f xs nbTry - else safefilter' f xs (n-1)
    + else safefilter' f xs (n-1)

    Now run the program and be happy:

    @@ -4578,7 +4746,7 @@ static/tmp
  • config/models
  • Obviously:

    -

    config/routes | is where you’ll configure the map %url → Code. |
    Handler/ | contains the files that will contain the code called when a %url is accessed. |
    templates/ | contains html, js and css templates. |
    config/models | is where you’ll configure the persistent objects (database tables). |

    +

    config/routes | is where you’ll configure the map url → Code. |
    Handler/ | contains the files that will contain the code called when a url is accessed. |
    templates/ | contains html, js and css templates. |
    config/models | is where you’ll configure the persistent objects (database tables). |

    During this tutorial we’ll modify other files as well, but we won’t explore them in detail.

    Also note, shell commands are executed in the root directory of your project instead specified otherwise.

    We are now ready to start!

    @@ -4588,7 +4756,7 @@ static/tmp

    Goal:

    Make a server that when accessed /echo/[some text] should return a web page containing “some text” inside an h1 bloc.

    -

    In a first time, we must declare the %url of the form /echo/... are meaningful. Let’s take a look at the file config/routes:

    +

    In a first time, we must declare the url of the form /echo/... are meaningful. Let’s take a look at the file config/routes:

     /static StaticR Static getStatic
     /auth   AuthR   Auth   getAuth
    @@ -4604,7 +4772,7 @@ static/tmp
     /echo/#String EchoR GET
     
    -

    This line contains three elements: the %url pattern, a handler name, an %http method. I am not particularly fan of the big R notation but this is the standard convention.

    +

    This line contains three elements: the url pattern, a handler name, an %http method. I am not particularly fan of the big R notation but this is the standard convention.

    If you save config/routes, you should see your terminal in which you launched yesod devel activate and certainly displaying an error message.

     Application.hs:31:1: Not in scope: `getEchoR'
    @@ -4621,12 +4789,12 @@ getEchoR theText = do
     

    TADA! It works!

    Bulletproof?

    Neo stops a myriad of bullets

    -

    Even this extremely minimal web application has some impressive properties. For exemple, imagine an attacker entering this %url:

    +

    Even this extremely minimal web application has some impressive properties. For exemple, imagine an attacker entering this url:

    [http://localhost:3000/echo/<a>I'm <script>alert("Bad!");](http://localhost:3000/echo/I’m

    " %>

    The special characters are protected for us. A malicious user could not hide some bad script inside.

    -

    This behavior is a direct consequence of type safety. The %url string is put inside a %url type. Then the interesting part in the %url is put inside a String type. To pass from %url type to String type some transformation are made. For example, replace all “%20” by space characters. Then to show the String inside an html document, the string is put inside an html type. Some transformations occurs like replace “<” by “&lt;”. Thanks to yesod, this tedious job is done for us.

    +

    This behavior is a direct consequence of type safety. The url string is put inside a url type. Then the interesting part in the url is put inside a String type. To pass from url type to String type some transformation are made. For example, replace all “%20” by space characters. Then to show the String inside an html document, the string is put inside an html type. Some transformations occurs like replace “<” by “&lt;”. Thanks to yesod, this tedious job is done for us.

    "http://localhost:3000/echo/some%20text<a>" :: URL
                         ↓
                   "some text<a>"                 :: String
    @@ -4671,7 +4839,7 @@ a:visited { col
     

    Generally you don’t want to have all your code inside a unique file. This is why we will separate our handlers. In a first time create a new file Handler/Echo.hs containing:

    module Handler.Echo where
     
    -import Import
    +import Import
     
     getEchoR :: String -> Handler RepHtml
     getEchoR theText = do
    @@ -4684,7 +4852,7 @@ getEchoR theText = do
     

    We must also declare this new Handler module inside Application.hs. Just after the “import Handler.Home”, add:

    -
    import Handler.Echo
    +
    import Handler.Echo

    This is it.

    ps: I am sure not so far in the future we could simply write yesod add-handler Echo to declare it and create a new handler file.

    Data.Text

    @@ -4699,7 +4867,7 @@ getEchoR theText = do

    And do the same in Handler/Echo.hs:

    module Handler.Echo where
     
    -import Import
    +import Import
     
     getEchoR :: Text -> Handler RepHtml
     getEchoR theText = do
    @@ -4725,8 +4893,8 @@ getEchoR theText = do
     

    This time the path /mirror will accept GET and POST requests. Add the corresponding new Handler file:

    module Handler.Mirror where
     
    -import Import
    -import qualified Data.Text as T
    +import Import
    +import qualified Data.Text as T
     
     getMirrorR :: Handler RepHtml
     getMirrorR = do
    @@ -4784,11 +4952,11 @@ Article
         )
     where
     
    -import Import
    -import Data.Monoid
    +import Import
    +import Data.Monoid
     
     -- to use Html into forms
    -import Yesod.Form.Nic (YesodNic, nicHtmlField)
    +import Yesod.Form.Nic (YesodNic, nicHtmlField)
     instance YesodNic App

    Remark: it is a best practice to add the YesodNic instance inside Foundation.hs. I put this definition here to make things easier but you should see a warning about this orphan instance. To put the include inside Foundation.hs is left as an exercice to the reader.

    Hint: Do not forget to put YesodNic and nicHtmlField inside the exported objects of the module.

    @@ -4863,7 +5031,7 @@ getArticleR articleId = do
    <p>A last try to <em>cross script</em> 
        and <em>SQL injection</em></p>
     <p>Here is the first try: 
    -   <script>alert("You loose");</script></p>
    +   <script>alert("You loose");</script></p>
     <p> And Here is the last </p>
     "); DROP TABLE ARTICLE;;

    Conclusion

    @@ -5036,7 +5204,7 @@ getArticleR articleId = do SQL injection by a mom

    SQL injection by a mom

    Lorsque vous créez une application web, beaucoup de temps est passé à s’occuper de chaînes de caractères. Des chaînes de caractère pour les URL, le HTML, le Javascript, les CSS, les requêtes SQL, etc… Pour éviter des utilisation malicieuses vous devez protéger chaque chaîne de caractère entre chaque étape. Par exemple supposons que vous entriez comme nom :

    -
    Newton<script>alert("An apple fall")</script>
    +
    Newton<script>alert("An apple fall")</script>

    Sans une protection correcte, le message “An apple fall” sera affiché à chaque fois que quelqu’un essayera d’accéder au nom de cet utilisateur. Les “types saufs” sont le tonyglandil du web. A chaque chaine de caractère, on lui associe un “type”. A quoi sert cette chaîne de caractère ? Est-ce une URL ? Du javascript ? De l’HTML ? Entre chaque passage d’une représentation à une autre, un transformation is faite par défaut.

    Yesod fait de son mieux pour typer les objets manipulés et ainsi il fera ce qu’il faut pour ne pas mettre du script dans une URL par exemple.

    Go to the other page ~~~~~~

    @@ -5308,11 +5476,11 @@ done
  • Le :t signfie “tail” ; si toto=/path/to/file.ext alors ${toto:t}=file.ext.
  • Après

    -
    gif_to_png() { convert $1 ${1:r}.png && \rm -f $1 }
    +
    gif_to_png() { convert $1 ${1:r}.png && \rm -f $1 }
     
    -handle_resources() { map gif_to_png $1/resources/*.gif(.N) }
    +handle_resources() { map gif_to_png $1/resources/*.gif(.N) }
     
    -map handle_resources /path/to/projects/*(/N)
    +map handle_resources /path/to/projects/*(/N)

    Plus de bloc ! Oui, c’est un poil plus difficile à lire pour les non initiés. Mais c’est à la fois plus concis et plus robuste.

    Et encore ce code ne possède pas de test. Recommençons sur le même principe.

    Trouver les fichiers des projets qui ne contiennent pas de s dans leur nom qui ont le même nom que leur projet.

    @@ -5404,266 +5572,5 @@ function filter { print $result }
    ]]> - - Apprenez Vim Progressivement - - http://yannesposito.com/Scratch/fr/blog/Learn-Vim-Progressively/index.html - 2011-08-25T00:00:00Z - 2011-08-25T00:00:00Z - Über leet use vim!

    -
    - -

    tlpl: Vous désirez apprendre vim (le meilleur editeur de texte connu à ce jour) le plus rapidement possible. Voici mes conseils pour vous aider. Commencez à apprendre le minimum vital, puis apprenez doucement de nouvelles commandes.

    -
    - -

    Vim ou l’éditeur qui vallait 3 milliards :

    -
    -

    Meilleur, plus fort, plus rapide.

    -
    -

    Apprenez vim et ce sera votre dernier éditeur. Aucun éditeur que je connaisse ne le surpasse. Sa prise en mais est difficile, mais payante.

    -

    Je vous conseille de l’apprendre en 4 étapes :

    -
      -
    1. La survie
    2. -
    3. Se sentir à son aise
    4. -
    5. Se sentir meilleur, plus fort et plus rapide
    6. -
    7. Tirer parti des super-pouvoirs de vim
    8. -
    -

    À la fin de ces leçons vous serez transformé.

    -

    Avant de commencer, un message pour vous prévenir. Apprendre vim sera difficile au début. Ça prendra du temps. Vous devrez vous entraîner. Apprendre vim ressemble beaucoup à apprendre un instrument de musique. N’espérez pas être plus efficace avec vim qu’avec un autre éditeur avant au moins trois jours. En fait ça sera certainement plus 2 semaines que 3 jours.

    -

    1er Niveau – Survivre

    -
      -
    1. Installez vim
    2. -
    3. Lancez vim
    4. -
    5. NE TOUCHEZ A RIEN! Lisez
    6. -
    -

    Dans un éditeur normal, il suffit de taper sur une touche du clavier et la lettre s’affiche à l’écran. Pas ici. Vim est en mode Normal. Commençons par placer vim en mode Insert. Tapez sur la touche i.

    -

    Voilà, c’est magique. Vous pouvez tapez comme dans un éditeur standard. Pour repasser en mode Normal tapez sur la touche Echap.

    -

    Maintenant que vous savez passer du mode Normal au mode Insert. Voici les commandes de survie (toutes en mode Normal) :

    -
    -
      -
    • i → Passer en mode insértion. Taper Echap pour repasser en mode Normal.
    • -
    • x → Supprimer le caractère sous le curseur
    • -
    • :wq → Sauvegarder et quitter (:w sauvegarde, :q<enter> quitter)
    • -
    • dd → Supprimer (et copier) la ligne courante
    • -
    • p → Coller
    • -
    -

    Récommandées :

    -
      -
    • hjkl (optionnel) → se déplacer (<-↓↑→). Souvenez vous j ressemble à une flèche vers le bas.
    • -
    • :help <commande> → Affiche l’aide pour <commande>. Vous pouvez aussi écrire :help pour atterir sur l’aide générale.
    • -
    -
    -

    Seulement 5 commandes. Voilà, c’est tout pour un début. Essayez d’éditer vos fichiers comme ça pendant une petite journée. Lorsque ces commandes vous sembleront naturelles, vous pourrez passer à l’étape d’après.

    -

    Mais avant un petit mot sur le mode Normal. Dans un éditeur normal pour copier il faut utiliser une combinaison de touches (Ctrl-c). En fait, lorsque vous appuyez sur la touche Ctrl, c’est un peu comme si toutes les touches du clavier avaient un autre usage. Dans vim, lorsque vous êtes en mode Normal, c’est comme si vous mainteniez Ctrl enfoncé.

    -

    Quelques mots concernant les notations :

    -
      -
    • Au lieu d’écrire Ctrl-λ, j’écrirai <C-λ>.
    • -
    • Les commandes qui commencent par : ont un retour à la ligne implicite à la fin. Par exemple lorsque que j’écris, :q celà signifi qu’il faut taper :, suivi de q, suivi de <Return>.
    • -
    -

    2ème Niveau – Se sentir à son aise

    -

    Vous connaissez les commandes de survie. Passons à des commandes pour être un peu plus à notre aise. Je vous suggère :

    -
      -
    1. Les variantes de l’insertion

      -
      -
        -
      • a → Comme i, mais après la position du curseur.
      • -
      • o → Comme i, mais à la ligne suivante.
      • -
      • O → Comme o mais ajoute la ligne avant.
      • -
      • cw → Remplacer la fin du mot.
      • -
      -
    2. -
    3. Déplacements basiques

      -
      -
        -
      • 0 → Aller à la première colonne.
      • -
      • ^ → Aller au premier caractère de la ligne.
      • -
      • $ → Aller à la fin de la ligne.
      • -
      • g_ → Aller au dernier caractère de la ligne.
      • -
      • /pattern → Rechercher pattern dans le fichier.
      • -
      -
    4. -
    5. Copier/Coller

      -
      -
        -
      • P → Coller avant. Souvenez vous, p colle après la position du curseur.
      • -
      • yy → Copier la ligne courante. C’est plus simple et équivalent à ddP
      • -
      -
    6. -
    7. Annuler/Refaire

      -
      -
        -
      • u → Annuler (undo)
      • -
      • <C-r> → Refaire
      • -
      -
    8. -
    9. Ouvrir/Sauvegarder/Quitter/Changer de fichier (buffer)

      -
      -
        -
      • :e <path/to/file> → Ouvrir.
      • -
      • :w → Sauvegarder.
      • -
      • :saveas <path/to/file> → Sauvegarder sous …
      • -
      • :x, ZZ ou :wq → Sauvegarder et quitter (:x sauvegarde seulement si nécessaire).
      • -
      • :q! → Quitter sans sauvegarder. De même :qa! quitte même si d’autres fichiers (buffers) ont des modifications non sauvegardées.
      • -
      • :bn (resp. :bp) → Affiche le fichier suivant (resp. précédent).
      • -
      -
    10. -
    -

    Prenez le temps de bien intégrer ces commandes. Une fois fait, vous devriez être capable de faire tout ce qu’on peut attendre d’un éditeur de texte classique.

    -

    3ième Niveau – Meilleur. Plus fort. Plus rapide.

    -

    Bravo ! Si vous êtes arrivé jusqu’ici nous allons pouvoir commencer à apprendre les choses vraiment intéressantes. Pour cette section, je vais seulement parler de commandes disponible dans vi et vim. Vim est la contraction de “vi improved”, ou en Français, “vi amélioré”.

    -

    Meilleur

    -

    Voyons comment nous pouvons éviter les répétitions avec vi :

    -
      -
    1. . → Le caractère point répètera la dernière commande. Très utile.
    2. -
    3. N<commande> → répètera la commande N fois.
    4. -
    -

    Quelques exemples, ouvrez un fichier (non vide) avec vim et tapez :

    -
    -
      -
    • 2dd → Supprimera 2 lignes
    • -
    • 3p → copiera 3 fois d’affiler le texte copié
    • -
    • 100idesu [ESC] → écrira “desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu”
    • -
    • . → Juste après la dernière commande réécrira les 100 “desu”.
    • -
    • 3. → Écrira 3 “desu” et non pas 300. Bien vu n’est-ce pas ?
    • -
    -
    -

    Plus fort

    -

    Savoir se déplacer efficacement avec vim est très important. Ne sautez pas cette section.

    -
      -
    1. NG → Aller à la ligne N
    2. -
    3. gg → raccourci pour 1G, retourner au début du fichier
    4. -
    5. G → Aller à la dernière ligne.
    6. -
    7. Déplacement autour des mots:

      -
      -
        -
      1. w → aller au début du mot suivant
      2. -
      3. e → aller à la fin du mot courant
      4. -
      -

      Par défaut les mots sont seulement composés de lettres (et du caractère souligné _). Appelons un MOT un ensemble de lettre séparé par des caractères blancs (espaces, tabulation). Si vous voulez considérer des MOTS alors il suffit d’utiliser les majuscules.

      -
        -
      1. W → aller au début du MOT suivant
      2. -
      3. E → aller à la fin du MOT courant
      4. -
      -

      Word moves example

      -
    8. -
    -

    Passons aux commandes de déplacement les plus efficaces :

    -
    -
      -
    • % : Aller à la parenthèse, accolade, crochet correspondante.
    • -
    • * (resp. #) : Aller à la prochaine (resp. précédente) occurrence du mot sous le curseur
    • -
    -
    -

    Croyez moi, ces trois dernières commandes valent de l’or. Retenez les et vous gagnerez beaucoup de temps.

    -

    Plus rapide

    -

    Vous vous souvenez que j’ai dit que les déplacements étaient très importants en vi. Voilà pourquoi. Une façon de travailler avec vim est de se dire que l’on fait des “phrases”. Le verbe étant la commande et les compléments définissent la zone d’action. De façon générale :

    -

    <position de depart><commande><position d'arrivee>

    -

    Par exemple : 0y$ signifie :

    -
      -
    • 0 → Aller au début de la ligne,
    • -
    • y → copie à partir d’ici,
    • -
    • $ → jusqu’à la fin de cette ligne.
    • -
    -

    On peut donc faire des choses comme ye, copie à partir de la position courante du curseur jusqu’à là fin du mot. Mais aussi: y2/toto copie jusqu’à la seconde prochaine occurrence de “toto”.

    -

    Ce qui est vrai pour y (yank → copier), est aussi vrai pour d (delete → supprimer), v (sélection visuelle), gU (uppercase → majuscule),gu (lowercase → minuscule), etc…

    -

    4ième Niveau – Les super pouvoirs de Vim

    -

    Jusqu’ici vous avez appris les commandes les plus courantes. Mais voici les killer features de vim. Celles que je n’ai retrouvé que dans vim (ou presque).

    -

    Déplacement sur la ligne : 0 ^ $ g_ f F t T , ;

    -
    -
      -
    • 0 → aller à la colonne 0,
    • -
    • ^ → aller au premier caractère de la ligne
    • -
    • $ → aller à la dernière colonne de la ligne
    • -
    • g_ → aller au dernier caractère de la ligne
    • -
    • fa → vous amène à la prochaine occurrence de a sur la ligne courante. , (resp. ;) recherche l’occurrence suivante (resp. précédente).
    • -
    • t, → vous amène juste avant le ,.
    • -
    • 3fa → recherche la 3ième occurrence de a.
    • -
    • F et T → comme f et t mais en arrière. Line moves
    • -
    -
    -

    Un truc pratique : dt" → supprime tout jusqu’au prochain ".

    -

    Selection de zone <action>a<object> ou <action>i<object>

    -

    Ces commandes sont utilisable seulement en mode visuel ou après un “opérateur”. Mais elles sont très puissantes. Leur forme générale est:

    -

    <action>a<objet> et <action>i<objet>

    -

    Où action peut être par exemple d (delete), y (yank), v (select in visual mode), etc… Un objet peut être: w un mot, W un MOT (mot étendu), s une phrase, p un paragraphe. Mais aussi des caractère plus naturels comme ", ', ), }, ].

    -

    Supposons que le curseur soit positionné sur le premier o dans (map (+) ("foo")).

    -
    -
      -
    • vi" → sélectionnera foo.
    • -
    • va" → sélectionnera "foo".
    • -
    • vi) → sélectionnera "foo".
    • -
    • va) → sélectionnera ("foo").
    • -
    • v2i) → sélectionnera map (+) ("foo")
    • -
    • v2a) → sélectionnera (map (+) ("foo"))
    • -
    -
    -

    Text objects selection

    -

    Sélection de blocs rectangulaires : <C-V>.

    -

    Les blocs rectangulaires sont très commodes pour commenter plusieurs lignes de codes. Typiquement: ^<C-V><C-d>I-- [ESC]

    -
      -
    • ^ → aller au premier caractère de la ligne
    • -
    • <C-V> → Commencer la sélection du bloc
    • -
    • <C-d> → se déplacer vers le bas (pourrait être jjj ou % etc…)
    • -
    • I-- [ESC] → écrit -- pour commenter le reste de la ligne.
    • -
    -

    Rectangular blocks

    -

    Remarquez que sous windows, vous devez utiliser <C-q> plutôt que <C-v> si votre “presse papier” n’est pas vide.

    -

    Complétion : <C-n> et <C-p>.

    -

    En mode Insert, commencez à écrire le début d’un mot déjà présent dans l’un des buffers (fichers) ouvert et tapes <C-p>. Magique. Completion

    -

    Macros : qa faire quelque chose q, @a, @@

    -

    qa enregistre tout ce que vous faite et enregistre le tout dans le registre a. Ensuite @a va rejouer la macro enregistrée dans le registre a comme si c’est vous qui tapiez au clavier. @@ est un raccourci pour rejouer la dernière macro exécutée.

    -
    -

    Exemple : Sur une ligne contenant seulement un 1 tapez :

    -
      -
    • qaYp<C-a>q

    • -
    • qa → début de l’enregistrement.
    • -
    • Yp → copier cette ligne.
    • -
    • <C-a> → incrémente le nombre.
    • -
    • q → arrête d’enregistrer.

    • -
    • @a → écrit un 2 sous le 1.
    • -
    • Écrivez 100@@. Cela va créer une liste de nombre croissants jusqu’à 103.

    • -
    -
    -

    Macros

    -

    Sélection visuelle : v,V,<C-v>

    -

    On a déjà vu un exemple avec <C-V>. Mais il y a aussi, v et V. Et une fois la sélection visuelle faite vous pouvez par exemple:

    -
      -
    • J → joindre toutes les lignes pour en faire une seule
    • -
    • < (resp. >) → indenter à gauche (resp. à droite).
    • -
    • = → auto indenter
    • -
    -

    Autoindent

    -

    Ajouter quelque chose à la fin de toutes les lignes sélectionnées visuellement :

    -
      -
    • <C-v>
    • -
    • aller jusqu’à la ligne désirée (jjj ou <C-d> ou /pattern ou % etc…)
    • -
    • $ aller à la fin
    • -
    • A, écrire le texte, Echap.
    • -
    -

    Ajouter à la fin de plusieurs lignes

    -

    Splits : :split et vsplit.

    -

    Je vous conseille de faire un :help split. Celà permet de manipuler plusieurs buffer sur la même fenêtre. Voici les commandes principales :

    -
    -
      -
    • :split → crée un split (:vsplit crée un split vertical)
    • -
    • <C-w><dir> → où dir est l’un de hjkl ou ←↓↑→ permet de changer de split.
    • -
    • <C-w>_ (resp. <C-w>|) → Maximise la taille du split (resp. split vertical)
    • -
    • <C-w>+ (resp. <C-w>-) → Agrandi (resp. diminue) le split
    • -
    -
    -

    Split

    -

    Conclusion

    -

    Voilà, je vous ai donné 90% des commandes que j’utilise tous les jours. N’essayez pas de toutes les apprendre en une journée. Il faut le temps de s’habituer à chaque nouvelle commande. Je vous conseille de ne pas apprendre plus d’une ou deux commandes par jour.

    -

    Apprendre Vim est plus une question d’entraînement que de mémorisation. Heureusement vim est founi avec un très bon tutoriel et une excellente documentation. Lancez vimtutor jusqu’à ce que vous vous sentiez à l’aise avec les commandes basiques. De plus, vous devriez aussi lire en détail la page suivate : :help usr_02.txt.

    -

    Ensuite vous découvrirez !, les folds, les registres, les plugins et tout un tas d’autres choses. Apprenez vim comme vous apprendriez le piano et vous devriez très bien vous en sortir.

    - - -]]>
    - diff --git a/Scratch/fr/blog/index.html b/Scratch/fr/blog/index.html index a82f3f7..20b36f6 100644 --- a/Scratch/fr/blog/index.html +++ b/Scratch/fr/blog/index.html @@ -103,6 +103,9 @@ Learn Haskell Fast and Hard »
    -
    @@ -49,7 +41,7 @@

    Les raisons du MVC

    -
    +

    Why This article and for whom?

    Many website explaining how MVC works. But I can’t found one who explain why.

    @@ -69,25 +61,26 @@
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -105,6 +98,7 @@ comments powered by Disqus
    +
    Published on 2009-07-06 diff --git a/Scratch/fr/blog/programming-language-experience/index.html b/Scratch/fr/blog/programming-language-experience/index.html index 9d8e24e..06c803e 100644 --- a/Scratch/fr/blog/programming-language-experience/index.html +++ b/Scratch/fr/blog/programming-language-experience/index.html @@ -33,16 +33,8 @@ document.write(''); // +
    -
    -
    @@ -50,7 +42,7 @@

    Mon expérience avec les languages de programmation

    -
    +

    Title image

    @@ -199,25 +191,26 @@ X=whatever[C,D]
    - - RSS - - - - - - -
    - -
    -
    + + · + + · + + · + +
    + Ces liens sociaux préservent votre vie privée
    + +

    Comments

    @@ -235,6 +228,7 @@ X=whatever[C,D]
    comments powered by Disqus
    +
    Published on 2011-09-28 diff --git a/Scratch/img/blog/Social-link-the-right-way/main.png b/Scratch/img/blog/Social-link-the-right-way/main.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb5549266107fa25b69cb589042a2825a133354 GIT binary patch literal 2953 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 qWvGzU zXVq&by{R{7nkYitXegpLyzBu1Qe!#`erw@lm6kej9?5Gh!FN4wc6Rjo#TC3z|DyGT z3iwU-x=}p4vG;23LQIge+u!G?^Oip{{{d9c z`eMcPyxZ3r2@|GtN_;j&*{(%qPdHj>KQW%fARNv0mK0NF#4lCcoX$2X!5G@2mFQY$ z5A|55<%mp?5A0*}e5t)eU2@u0R+@}n04~$8zp#B(EVYye9&pYgwwd>6#&BV%ZgK;4 z7o6)xPIZQ4ZpCx+vkmSUiH2Srh@uO-@rA!3wqnjMwE&%*DA@>Oe$29KK*=?#pfzA( z;oQkH#dM3$mtgCkww>*Ch$IrngBM%3M|hkAbe*qRBkVPCri7|rAvy! zNN3-rK6Y4ndnsIQJaaG&dCA4DA!N+U%ktC89O^q|JoT%cmVJg?r2X8Vw^SY;lD_ErcCi?G}HA9>Md5e>6%M$#AS(% z#p#lHCn@{zY}~E$Tb%6HhZ=K_aSS)pbp`!B-Ozc{O&cRq9()0*qC0IrHzYWSPm64N zvN`@v1~nDqfIppW8f2WM}z+rm82Me{|nx z(J`A8U0Lq)eP-e7Ya1HgXW$U1!|IjHcg<*weh4bWni!vnF)mb!7UbF$BP0#)dDSxf zfL(OS-eHHGDVpvWENp56&KA-nnXrvBpdu%4VnGjnb0D7Id{ZZke=`kGb?FkCA+U%q zY8sz>7F%0s_f$SJkE3j>7CSJ_D7|_Qu88rCVFffMB3)0O7QZG>?eFZ|bG=~MJ&y+S zj7!Z!3-mog75TO@EN~A=)<@Q|bV1)zAf)yVftFyy^j*2d4kep)hY}#`@m{5@!;ewz z!dJgf57y+!d`1}Ipx|J_a}GAm?^!RFsgyr43@1FO7IHZXrj7I9<)G)(+K%Wbx|Ub5 z3!yXxP0q=B2%Yf$BvOgAtBld?AFGS&kyQWzeZ{$3jW?bslUL1)ENakO@{#!P}id(#HL~BtALd!R_H%c$)*^-XI0Zzt{eNN6BonXvjbnA zg8ox|H{6gSLP&Zggu-A?tL_HNgb_*gW!b0lCiBFkT57A6r`;g&muu7iT)F8~4izk-;!iR?!!CIxQf_*C?fSZq$> zbgeoF?1@E4orsnmUgIDtDJ#V|&&1#aPYrhrHc@X%1guc(8o@Be7th zbF*C&NkV;_6^XRU8N1-HWT-BIFUU1jOn-}ldlZEiF@8@#2N@p!^A^U~VPqW6F4^koWJ`@A%P<)8t z7XNJ*ijd5Z2ae+%#-~Fwa2Z;nmk;H^h%8;UolvYh7N;!6}$}nnsD;kkh(S|fRA=X#k;`d_o(1P6`f>Q|4eSfFIz>!%WH4*C&|+sNrY5hFU= zqwEt^4G$2oCSHL$bNq{oF{D|QAksQA*3#qRmwm04^I2%*x~wxOqZn9KXE_N7cX*?9W~|G!1Y&ofULIO4^7*_sC|03 zuwPtN;~uPJGJY7lUNs!=D}yrzRUN@*r$7jys`oAPqq)AZ4L8ew$sXoJdDx)7sCE> z{ifj2epT>zfjK=!FbTt)MrdH?Ft2(fJpq>9*wM&_B1wyP<&OKHe*NcPVCX02x z%uVC7fAR`|=Isear`g90WSGn)EmMQOq}7*~oleGSTsiF2jW?Uxt8^XN(M&>pn~43* z`9a}-QplV+4yA4?6uob;AWk*)eCMDxlVq2QAeGN z2R6GglEmNo3&)#RzYBXbn}YiQ0{;Deiu$Y#G}$Du#t=X9MC#?Gm8q`?(fk=t*frs! zLVzs3N{C224_E=d5 z*u@P^?)^8F)hxyKP2AaNJ>c*BYSNQ@J^}6BvPdWBUxJo)G;4JCjW4=$A&=3~ zF)89N)I8$&#U#;76B2D$Z*w_K<|)%3&|JQp8Wj*#()o{3kIrOLt>MYBWLFKf0@27^ zHAOS$Nfzw%lZEYa)Vh%JO5nvzm@CJW*V{dnwAHz-Y0EL{&X@u~33VXDOZRG`BhBCN zE0u;jN^**cA|~b(GN%>{Ev+1#pi%|oI|Veue-YjnO~SP)j%&}{P>2N~IdMK%yj?!# z-D+Nw;@K09NX9;XaUpyluU$8&#q~%O`Aox?7yDvQFW7!vi*9Z%X&MQ9s^+|i;#gc6 zNo`TGxqCci#StzFn0dqSYs3<&oECD#ix&w2&1OmL`OWr>hqkh=tvd&~NkUixK~N>O zo%W;_aJXsVCqhq^(&@nzP4`9Zs>82YYFmR!vm=dQ*b~c*$fU4_ajzlR=s$quBc+V~^>d0o+K=6x zoEjHXH@m48xCHz8Bv6GWD@Co!Oso{`({#-l(zn+haMkPHyxBOXhxBRyy3>u) zC8P~0IWn# zS5~N4y8esHMVNy(ce`4o^@OTH*%d2cGu{lA#bYU`W>nT!6^j4- zPf&q8i{3#OnyOW$%S5_zmwoe>hOj;RW9}&3w86Taxc#3eXtzqf9@|NH2IJ%lMPYsW|3zFj#7O^rgX;mG$O_Pk6xD;xgv&x!b;e1uEnw+l{n2pM3vj8%VyUuE!hBDKc1P;!*vX%1@f|as!3RDDNY98=OfVoSnLvEQO|)@0sZo%YyLd9$wOc zt_XYvjoWj|nNfq4Ju)AR)jF>6sYSnnmtXV(i<+fv+4KKr817uk#aL{E@{MTUyFdo)NZ-tly=X{6ac!G4w7q z7aud)bf3nB)KLOnrS-kcc{Y5DCf@BeR;#7mT5{5*Z|z{~x2|^FUHXmMsJ+A48;^+H zzA=$t=j!%yHU=#mXsp1=KfYNnZIFkVL|53oHhi0<9RkU zJ8*v0f0Qq2b(edP@KKqOB?`wS*^qvFCh&OhxL9oURlv<3j3pfos+SESX9M873CQhC zBa`#?@pC06l0vYAkkL^ZVTeJ8Me z$Q0RVUQe{Uuvt0OP_2o#Sexm9f1qtUWowBn+P-=l(ok{xZx!p&Vm4``D<0V?Lfl&J zsa;iV>oo%*{l?xhJ*M4Tm2BN~hWWDmXLiR6^@kC0yl~(s3E zAm{-H@dLUQ&)_Hgzgn6@gWrkR9&)fANi^|Q)Hl7>@qwcGg90k>z(7dCDcvD;fhQN? zEbS7J5*)m_R^j|b@0@hzWAo3$)UEN;b;Uife@wFtCoL}3Ky1p+mhZHT4@r`m-sXUR zAZHy_iRXtK&=F`ibD84^58E z>wJPu)+Ww9+}Pv~YETST!eM0*?~e58d`y}cD(n)}zX$^*Fh)O7M)f=eIfen55;Jqa`1upjUSaCtSkJYEmx1(&vC^V*u^J!4|q06?if{K&Sqb*dO@2}gu6 zBOS+^s5|Qww&f7Ye{~`w+AAJj^?uHmX+Q#vJ5m?a!wnWO;$EWsmR6sVQ)96 zjm3=ds_XZ2x0T{SkPXJv**I=*dXZ=TP`E={0u*>pRZ+7s$%g*NXt)N1J^gzwXAgJ3 zK>uB3r?`#_8na?57Owc;ke!wwYI_S6;{W z%@D_0i$4};$*#BFYw}zfv`Lnwv$>(pKd~}Het5;}YZf;XCc>^z&3wg8?Dn_6QlBP@lsch}* zog>^}z69g1ECm$9fs2n)?9nB|4+FtGKaPW#1N?l>`MJX|4g9_QWml~KF)XgUC9`x$ zsfj(@Ms*(ZrUwz6b&yohT`|&1LML7u?Xw-%zIJ|JT-Wo*_<42}=C)VtBfj5S=l;IG z9tQRnP@7psWn2{*=m0x?-OiWCD!hXg-l(-UN!9q8j5XWQyOF!&wviI7KQ{J8+}wF~ zMneOE76u9Wd0jRuQ_l)%%DBuP5a_guY)H zuxr1z|Hwu?=*a)!@{f_tU%YXb>YvC$^CEO5f@`E7*N&bGhCS@BoGgfinH><-h#?f_LZ;$#9KD;+H%3)>2M3tKzmq1EXy$@VJ`fI3(Z|iU~00{)$4wK5pxc0I1iAa(wu{=ihT2*g$CF9*IfOP*oG8 zF=ZNfG`duKkO9Lz0mv;gv_W@RIZ?b8=s$oQY%3#G>u&i5i{gsb@l|-kIvA>+V<-D# zK_qL$J>p5ao;u;%Hc8fs(o&#mbQcGLNV8dhgR-z1z}^mN-l<4+uPnHzOzSV!CUd|0 z#Dlk|?jq(4QAnShX1~XIyZN6Gmvn7Q6_c3T&8-8Qb5Dz$ysh4~XByoEH$vnOq|kHO zD4&Ieq_1v_JHOTLth(Jr3qrvW>-1{7xbWT6xo$PNv|Rl^#;OGq)=z(T@fdzW@)=** zjGLZUYlywNC`h)d_{|es|Hsh=QAj2-hdv;|@ILr3V~kBtrH@aQdt#qhT}({HJ>k|s zZUubHTxQERDQ}s(T?cnw@RPm-dB_B}HDpS1WvrEv#Dkco4@q8?Ax`hG(Lq&^dgB%8 zhiwk`KJp9gq}AC!=eTGWp<2w)py?1xVoMjMNGzb?X_x+wr&q_an&PZPzI7(Jxai8~ zx+{e7K)XwYRYqU3*9&+wck|)ssGu%d?raiaQET#j&*H-a5gqG-ysR$#_s^02w3GaR zh^&hb6wGf-r~{!Ed9rCHqfA=fw~tgOpYYw;lO$64ssz>bPpi+|!*3~qn@I{$$5iuO z%_;7v++WrAQqH$S_~@~Obb@(&im?tlZ9kiJD-+%k2ml0IIV{ik z1lNki(;z&RyNgxR;n(dECpf*54*u9^8o9nYwJ5%QZjI@Dk^R}nBlixw_Luauk4oeX zd>Kpe*|v%g3J+A3P_d-o6JExlDWG4}iUXIKRRF_zhr3wj#@fPieH7z9$z!)pZY>bG zz#=F}T;~&mojsN2KW$1EMsVNbpCuaEh!&EtD<^>~XDg*jR`8?ejgc_TTw*>W4xPzSz@o=0_|=8Gc5G`ka+%UPHY_tGkBxb z6!k^%uTfUF{kH^1oA-DrWSj44os=Uj(Ixlk* zi(dT;8Sfp>R4q?pt#TG(_`8n5%v_dshAC%_URP?7GeQaJ;~h&nY#JIjax1_(KCG z9D;gjteflFv>RHkA<+N$PDzaI_C(Fu-8Ps1jd9yQAyvu!pvX!Id-Z%TXtM5HR$h%t z?2xFE0vdOZ!7?3DF4p)wnV%3$&WcTnf?G+xEa};qc9m&$@n|hR@CG3tb3!c44@U?& zQ;NE%#HN_#d?`P3D=vkcwu>GLWZ@+10k#zP2pFs9GPO5!V$Jj-R zF3%Yam0VN=6&yS``|N z`VGd~R%*yeE7BQXjHKmPuS z(>ZHZPha~LclM^*&p^iK32F7b0|Zi=E>+9vn)e^IJ~Nxy9AEb@RPuO$YF9Enzq`3; z3BqiRr^{9q8W<;7w7s$yo|TZ>rn{HqJEAS>4gLN%s85*J=eGRmjC!fcOHEtB|K9?P zSj4~fm54J7$fhdcwxc_14?Hx|!S~*uo2$?dok^S(OXAN=&Ukl|)2(uNAh?V!x5xHt6Ahpp`CPyw((;Q{!<7daW`-OvW4$fh4be9Lx0PZ zN5{O6LBrh}v?IQ6t(!UKNju@>gLMv4|M`c5DYIC}vf4sk)v*}*t*>KO6u1&&xcuQ* z_9F7POoi&4Zql%JnRzRO)nZIQ9U+N z(YXz&IC({X-19M6m6+qT%m$ZZNiqSmyl;b7Co_Pm@nAErc{XXn+FW;fKx+c5N7p=) zbPu%7y%)I=LnnDuTqSCy18*b`9YGAA@sSFqW+-qzw0M;WfzUIbth1Gn%#~lyu`=Cfmb}u7)o}@m1sG%Ps zA^_cJ$0SVIemf|tAlyp=jg?^eq6S&|iVXru9RKYiPLG*yo{y~T&7NRhxgensAr+Vx^}YA}E61h?#rh6rJBTaty@i&>7Z;SKUq46gxQZQ4*E4(##cJ ztohvqHw%>i{kFIElBTbW>v%$1lGTZXlN`DchO}k)#!~uXEDu41$+Y~fgrw^$?EJ_& zZF0%PU|b@}xrZAjl*!-!A#~zdFPXym{kQ-l)~apT=2LR#Z?lEt%c`+KG!1!x;CE4_ zbvAjv*>ujhhm+D+x^;EmJG-n-nNaVRQ>Nuo1go3U9z4sA;DSArGR6If_vW`O99ur! zVZ5vCla>!Y8-}B?vLJdsv3NQ9nJCeRdo%O?;M*1;i5*o~%idaYh@ZzGgSyqzk=9>v&40AqfYg7|7u7_h5%8H4RoGOdiAo4Y+^*?n2( z0<2J`Il-&i9Id#EwQOeIjmhkZgDkI;eoxuotmNKeh&)Z=6v6Rk&XiS%qR7pgw_n+t?t4>` zymh+=40;8NE?8Vwrm#Ayc`KxHe(6d1JLG9#^4`Jh+mRcNZ>vJ$zG^@vJwClrSK-yz zOfcG1m7wGJXX~9kb!xo730(W-)&5bJdH4!m=0${x^~H7A-!vc@^^t$}(t0Qt@Rpr$ z&#DwpC=f-b*gMDHeOPjjTYmSn9kQAcjfwI9c3U%AYP`X@a;8mefwClxG zY%gS^M#6XQ{~$gwsQ!L@7n+%c1%u`0DCIBPWv4|wI6hpVTg^SR%#iMnCM)WEfMG`U z-_?jYOjb72`kZ2I4pUb7YSU{po*+9-NAE%4eZ*U04@S9hvlu{OP#<4fx+Gs$Y=UU> z@Je5C+2l=gAXtNVKRs0=OfMTrt51PS((sQ|2l%!&M=7;Ipz|));yyJP`WCadgS|9x z)Tl>~@SnKEkLbW4wT+23VKk?l#J^Kn0 zY{Z8Ud@}k!koyI-;~ZIiVZ{OFxGT5?Q?1J%plG4#-Rw8672Dxwnfu=puqwR(#PqS% z8dyKO3|%|ozL5r-*q)ht4aL%=DzSw-iCm^p=`tmy8cV!`8jNhs#>P3WTX=RIKQK?{ za#kr-Z1m20C2ZzfwRNBq$ht#~X}EuX0#CwiKCz{|p@O27K(&5bZp$ERDvz1Ntb^M?2IptH{OukHopE z>#GE7KY7Qz)#^D=GcR(0qLBtlxyiG zS+9^!lfG2lc%TIg0c&N+o_OX|y%JO9%@a9T^^nl>Wl)h5UZt-iel`!2r=31b-Qf9B z$ylwz!b|$@=j+k93cWyLfyw077nQ=i%HqogDsFBQFW3cR+HjK+D`V%}{T*LvSi-!% z*yWlNo45|3_0%#R^4_I|-|AZ;<(O zV)L%Tq(hZ)7<8&K3KXt4jZ;PbVdVv>W+9JWrB6ogfUnU1G@o!u#1;+mlsvlbHC72) z`q?Hd0KQ&r06ekylE&|PI+DC^sFB zh>i~SIsc-0XbFIUcOVk#J!~zVS_ZOL#^!e~eImfur&i96N_jj|h&AC&T0Yg*w=X5w zFP1u_FF0B*!@NH^|9ZrPc6D-{H4|$+v-s_=6dJfr|9~*f-KIQQtLOgpWg6w*Wo}FxEgJqPHO=RQ?oqFjVXb(461_1C?OQ*pxUyFrPl@G{# z{X49zy9MR4WWg_r9NkV&Ah(3M5tX~Oc1!nl(}NHxcImdxw5Lig2M&+1LN6AkH!yQ&}v;a+mTY#Cex%4dJDT(noE zxYQB`a`;cS+qqdGI$?r9s2`bd@N&N0TIdz4lKNE9kNw{=s_fZXbKJsyt&k@dR>|4P znJxUQ*T7>tx7G(8sI>)_Cej8vM-nP-Laca;nxm7PGz(JC$!4jHFLTGV1~b=$3c;DU zgHGb@iMAcAqSk2+2WA)5H~n5>Q}{Fcz$k&}_^gxDglyPFUqO@s=GJAdzv6L+i`&*( z7b^xWvvc7;la6_`dfp6O%UpcC6pHzV33mI^o0g+)rb0wNA-nrWnU8#y5#Gk(uD<5P zm9c6Q%?b^HN>|)XwcB6;*R`snoGAp@za*+?TPakuq3g!<@ta!Tg&Wz;OW5$Sa1gx5 z;v_%5t%xR=0^OGuJG?OT2>kc=QD~S z&LM)Fkfv2`QN5x7Q${kS<>hMsgQVyBP~M51XsvmtVK4gT%(=R&MC?ObdLdxn^N5v) z+ZZ{ZrAl+aNm8EL^|&r;z+ONv8Jl&l*=l)Ir%5Rcz7UX|GsYi$V$L6)`AD=M%=Mqj z*Pr7CTo60+b_gKA1%sV&TtW#$r8Rq_Yt$E577zJzPZ z{t>w3g-zGUgeW=aeB-5axj@VI_JU0P7l6xlba`8C@5LDF5KuwvaBG2@r-oKleIJJ# z>1ptB=CnV#LjSaF?Ngd7!cNAa39CuMI6x5j40jL7Z`EYBhf@LT!2^E$ylM_6Fm2|< z=UyGWBqIge0)?I`hcNv6DzH*D|A3_=Z*Adj0Dz5l#FH0Hhxow)hjA<$R=TF9GM8khk*V{DS z&jbtEBZXn(SfkFaH!6s>)pk(ieihY1sNqF5`v5m;lCi>hgj@8NjZ#AcRpXAm^r3N5 z4Fd)mOn#M*oZU8|99HU5X*%dwm0hgOA17y$a1W5-c;A$QHqTROA1=D8x4Q0bR`dAe z@wHa@osCrIe;%r^t2IN;i{e$vOwi@f1Sizx?UFTMN|1%G+4Tl#w1xJv?`OA1t^XCb zEv(w@{c6~`)r9Q7X zlH>Nr?EsU{-U~!tCcd-iX9Qbx#ma1~7rT44hhti{n=Z1iNqeF9N9AZ=GTdcj=R63% zBm~35soqC1p_aI0yuLj)e`k@aFQVZz20|O^x&1>aVm9_B=&Bb3DB{aRejBuHi3kLt zlRFOC629Hp6n!pFdvtnpZCVgRdrx&u`7k@MKHY}qfSn*GLfGfAtX)!&-jGuje!rJ` zGNvzhq5DQP`9r@E&0p>l<{U zre@}I0gyNsts{m0^CPCk*ztHx;t|O%x-)sq^H#A}*b^H-dK>U!4B$^3CBS?X?=Pir zR^0PK$TvYTtu{GQDe-^D{K27L0J2EZp>Zq6wcYb<=ViJDn_9em#q$NosmQG(C!Mru z>|>&F8GLpoaN+IlGj-SlQAIK=3jOTvH7KhWWA3{nqEhow0EyGLXlFhFi~88Fvb~CB(L^Pl$&Z5v6LhmD8*|Z@7#A@w!b-$22=!E7LA@t#f<}` z$QG`hnXC_l_2I+O zV&54QHfuaBX-59Uur`S#BMH$R|IE}MKN$e`LtgInz)?Y%v(?AN4hT=TdNL921VXaRoi!x}+|D*KO>*k9tCD!S#bl06s8eJ&h5Y>kHSJ5`o4h9w z15l!CMU&>jm1w+)^K~5IPZxLpm)Vn9^Vz{slJ26B<|vonKI2CvDaVO`lRc& z?t+||U`bwQ*fMmE@@)zBOrPy@97RZzr`&T{IQ&edfkmH;(k^l`${XnzVgESAo$QyK z4OmWt8E$niY+nY&ohI2Hc8iaDFtKubMmD893gTZXW)38TiSI-|J|9?uhn+8fh->P2 zYB6lIr5*I=lalmY40bwZgcx8k8g%t-_e53GXcBtDEUptcHJYe#<#;~XHvJj~N=5G{ z?UKCxcWqGLaIvvdtyMNW4^MPaiII?C+cs?@}5v-!3 zBavv;BhJ+Sc4qoo&2)n(e7zx<3vLh%5x>Tf?cZLcy}7QbbKyBVJeCYgPTUM$f*OKH z7o$^!M2$UnhU7sykuZj)_KN{4fWk@8RTIW>V@XgDU6y_0qx4mQ2ijLoQ#+83U$tsb zXTL@%uyt1>Kq^5M_2j6~IE+dyE>&iB1{i0GT$OLKEoY@6%Xref;5l2e2-Uc=aREW# z6!?d}N2yhwiT}tsw&0s#|LyrKxt8leURxWVoi$d7!)VeDT;*9wVtBUtIvETT}^8|pU+yoV!jN`zHFUEu|`-jEH<7d&1M=vch z_&Jfu&dN$(?X@^~&xqTGVvUN@0fdHH+6$`@Aq40um~d!#iP5o6MYiXLs%9APKb~T% zwY(<7;pduANs!eQli_xZ^R2{+o2^+b)EBggGlRh@f!!a*%hm{Pp}jmItIc3rbs0hF zQ(DEy6n7~;6|$b2X}AxodA?>?uw#9bD|D6U`JjYNJJmRWo`&=u(N+qxpcxl ze4d+Ndo;&1mP$Ll;jV7}_Ha3z(#@;T>#56!*fDu^@V!SN6Wj87jP+Sxfp%=po4vZ$ z#}%*zXG41z^rAfVYKp@CrzG@F$AQVDmeGY}u0h%WBTK+y5sM*7ueNCpK|5x!cOa?; zJ3ao=*`?1e4%ywz3Zj|*P@2W;&9rUqC`X99Xqi0XBlS;(96A5{86ipIFW*^5V|G+5 z#Ve| z-iQ$9_i;0`kvkt|vje%9hOtoPUr&n%Rz6R|o1F%t1mn?nn>P~;`!n4%EYZ__6rD?J zIkX2dA@YI8QEgYurI=Ok)(w3q-Qbo^pz^yPDjSB1bnnT{DPKE|m~#ihfP58R(o;jd zN+F|tjE_G4N*A?}{SH?gU4)GKgJXMjdf}eGit(Qa?dXdxadg#DsdaT=?X$s>IE}8@ zGUqDz$(6zUlzvP7ow^!dX@CMQ;A~00C$Ls9G1>Qe_VBdQ?C2U!)}k7-?Y>{O&}zTK zBt~spfp>OKr;=>fD^#Hm@yx-Wv{Ow@R`NOgHG3pWxl~I`m603Th`|TihtcUI+96{O zJ1`68A1B*tc|#3EA?Fj^%F;`)>Z}B)n_5WgDV!*C$Flz>T~vyNy`q(<_s=5L4v*)) zMnx(EK_07Kz;sS}=$CYhTVJ@f;M9rl(Niu#R` zvGIjgZ}MYg#_GsmfZr#|wx4Ij&MD_odHw^{zV7@s1X86G!$bs6WQu-9yDVxrsAD7U zzDIR^*uQhOoGJaF4|9_dxXD>7I@h7jn#-Phu%e_8_0H@GWD z2AAX*|Bc%_Arrq|46PIdW9LUor61YdQ*eKJVpIxm!7Sg#fL z`KEj%?%wvoIp#tzGk_gxgZRHbV}DAdO@tMC@yMkjTMP zi68y)6dMcE$LVEvB{uY1(>~2l*9Y20(YZ~4w0opmTYVJLQHIg}1)w1)mr?HvMIV^--B|nL zWc!2xY)W~B)U5uHc-Mx~OJ!_g(7Lz1%U5l9;((keWEA1S?u=8b#bA@!pn8sFHG577dg7^qKKopM)+RLxS88&&kJIcxDsFcpIz16 z(w&)c;lXkpOx3S_FKOiPO*57tO#s)&^U33@_e7vnXkSK5n|wfR7vXm6m1hVIwJN#) zDV-eol(uA0M?!pI69!O5&eCR8+84xjZOey?6*r%gHl)+u{Qnl9opAntWqKetp6v!z zBeg+=8TV+`o|>1ag7w$;ATw?WytUFN)ip}`(yWc)_Uh~1uovf{2VYpO@P0J+f2<_h z@brN@3S%TOOUcEG#@e12whDO2Mhc8JLEo=nQ<;uWMcsUwtG{oBKStOSWh!yd!5VZy z;Cw8g5-T?{l?xI;%)OWmB|9BE1IS}(Lu4rW|Il!je@!^v+owZf3MwEmloCNHY1qI3 z>5oN73?vm0q-z@pf(TNhYal8pDV-Y)qecj$H+po99^3u>J-GjY^Xxj;dB0xQb$;>9 zWZBJSxqD|LC)SfNsrbV>#Dz*6ih&D?d3#Xus6uroC>Hr)`o^T#Yxj9uy)w{Xi;nsz zqLjc=P`e77TjRPi>9%lmCeH3I6W3RxJpAKO?=NV&5KndMFV{X1bFDHBALs8Ky#@rG zep+Y75>IX;R=L+yc3)F$Q?ubnkq12aZ%`Po3(JG zbKgC12IN;gPEztQx7R`(t%s zQ{D~zLdF^X_Xv+=M%cFypBNBEy0zo=_hMQ>MN5EyjDCMAZCbdFz2UQztWPuGaT1a@J}9; zm<5c+BdF36wIPsmHux3oHTpWqfU~@?>DWjtiEltsbiy$E1w&UzrAhJz-awp4Kny8p5m6~;K~@*e22H`0ljvP{99af6cp zcF)UP35GJ;?8d0X4&T4YCcbzYBn%MKvkq3L?t~Gk21<`dk8Mir}?fH5Rl&AZvgJnyKc6Rd5{82y!U2X4ph&+4*!d*YPOhAycM7QRc`EgL*8!y$h&1fzv(dR zGs_Q~!hw&yk*3=1az|m`!1XJ#M6d;tiT4|YbRjfF$64I+_TY-c z-~Vi#L{>@#uH5uG>Av1wRcXNOxx?q zR?E!JmxSV`ofTmJ0hIzkUjUaSUy@@Ar}McdrW9ui);gwkv*-_c{x=HtW1vk2%53j5 z7lVwDS%5i_s@gax4q$fucErZpyFq6Q*HDukB7vnvA>5CGe#x}BaaflaKA@LZO+E?~ zQKD?_grzmxjo%#Q{{f$(ha$q1d-Z?WY2=&4|Azu{^g+qGQ61<0R*&o^&-}R9(%q1)4wN9VLK!aF*5WJqWk6O_jxe*5Ct%f(X?Gh@Z*k4s9iZT0L9=9-JvxjY?$xio2^suH6xt`Dlk|aQH ze7u@pr)|g8#hd816>SOGJm9BR`;%p;#$(YA_uXK(}govDU^VEq)dHTxy3FQ z)-q=t!V%?KlL`f{Zs-SK#mx@do(Yx&jW;-q(`3?T%_;IdH+$5$j1oO^I_w+#bn)55 z&&BgD0W)IbPf5GP^rkMnux*}Fx6b7_Gs5_BhaZZhf6h{(%)8E25y!`=leq(@cSY)c z*dAT?aBeQ3haGWb`P6#yY`;%>zK4LsZ+T;#HRE>j0-1yOfEi_4Z>JZ8%wVR+^WV*<8Ym)3Q6^t=uZ7ouG6 zSAne{>>9U#FQ{$n0KgNu!J^i*XICwg7- zL$~v{@+>XG*4Oz$w?XtAkjJ>TdYRv?-L}y3#9aFhkKn4BW3Cn9<}M z=H@Zn84xvwrySSSxLa}=;f`y>t~ILM8cvd#Y1Ndj%AXRMn&!cQfGMw1lL1T0y(^F1 zPTlsbpN=6+e1|*+cX~WlP+4Gf5x$51{*zwb_z1h8|sZ_Mvjz7bWn{?-0{=Fg!oXI$Cy&^~Yxl_wN-Vt}kc{!<#_$CR$|9a4Qs{9Iq&THh@13fK?aF7E#k9|g4q8yxZ2E-^wQg7Y8KUf32 z*>NDo)L8wwtJjpa!fOb_$d7_pH&Ip!yjNy+7M(YVsO6W#2p{pOG8fUBy z`h@L~ce0K=wCJhDd0Bat3ck#`@diJK;K_Y$i~wa?bHJEY38+OX5}-P~n3(aFp|y0} zL~0P0SIjpAQO$|7Gf!2jUdJ_d)m0o4eK<2!Z`4GwqvOQ){ueC1&v zr3dT=#{j6ONa`h?s%e=oQ`br#&#$(|<4I7CGu2tJ1{IM*0-=3kVz7suk5N}`u1vaK zod=`xu1_#+kPEY)Mu9zW%TZuJd@Ysu!1x#WJUzLOcI9p5-hK#2uzcQ(s&w_arf%xF zrY6W;ZiSue`dV`xbXAyY6#kVs(*et3oLSynx>mz7hYx4zNlQBASUC7&O_)TIctCQzPQ?fCInBaE6a``1g3V4jQ?F^zeIjK zE!DKk%Jzh@o-k!&o(;|0j;%ri{IriAy*&$Tu*@|!b<^Qgl# z&`qyhFWDo}?nnC%s%QZJbW?8MFI)arcU=?^qqrPgk3B})RuM->R_*JLyU;D%U z)Yw{ltv9oc;6b~?ESTxNIr zKNa*X%BzVelWTH_`JSU@-u5=x|GrJ;U29zW{qm(0TA=Uc5%$T=NEBcjjLVB z+M$nRztXP||wLeT(zC>GphK2LnbDM!m~-s;OR!6VAK-20c8%bf9+#1L-|KL#&- zz-HX0YubI$H^Kj+2)=CoX&&sT5n0=n04Ks48H zLgK6idtx6HO1mUkwD9FrUIgVpyBRKnUEB=Z)jHK-*$l=eLO$Nl+PH0gM4@jy>VMB5 zfu0(4*koSmou&~^Xjg@~dU>fwH3`>zCH4L7{Dsm!n@TU^2tdGx^i!F3{@NsslH%xTTT_y~zB{@5u?@)=xSK|FUUz$Kq`|yG_#RIRL5o zISz81wcT^LpswS(8&9nWKJd95qmnOo4-sm{K#H)-{_tChTCR95+^W~In2JK3ha;*l#oVt&Qn-4zfk*p7JQ88k<)2`2MgskhZsVDWGbNkJVmkx46% z((4Nb677{YAn5NYk^tTFCqTRyMo||Go}eVR9HtBwcE&w%%PT}E%Vga>P8B<6dUP<- zA>5nxYrjUJVf)7Fmbd)w%#}{r%K`}|Zgak@#LX!Z`4Ybs1Hoh(WnLW-xj^ZCzNn%a zIpuEKJvD&?6J`gI$txF&W_;8(DfaaMrKa>>ShC-w%gG+ha=5rTs5Vr)c`xt8gIPoV z!{{O(Zu`l@-szz#Z$g7DxQ^aTH549kf3BBsRVu2(jf|pQycdT*=ymT`(yDwuNl_o# zBH;z#0m66Kb%P(}*k^Y@xsFQ`?H$r14EM{BaEbkt}D9A*puqx48xzO+?Z!-4Ae;v1sf@+mfp_D;=sFAIY$;4kr1*BSsQb z#%BssSX4Y!SSYDzQs~MiT720C{})AZL2^n#_QleL%21(5RO2?}U<0mzv$W9-=M=2y z%o-r&gahuGgPZs7=@G*YIv#iM2%JBAwlM-TFQBKMTTG=01RXo>c>>FlxS%0|`m9b7 zlrS0Ohfen z+I^ABE+JC)0lYCOi~o)~?n9pNd~n^@s~;MPf-Av5N2USp$}KQ#>hw)&;o#Z#8)fH#)-wuj|1XUMLVm(+>Hcz#@C*H zc-rMh-mi=DbNL5Cx|lJ=pS~&-R24XzsIqpHHLmlg>JGtOgy|xeRNZs{vB^@H7QZ1? z8D<7v`<4{U%kvQj!mD?}v`_L@UcC%zMN);dAbUoiu)mkTdkg8%`soB#LW_We5$R#k ztmQie8IN>iTNSm@IjBB%>YGV`4uaziFLzUIwpvOIpyPlI+$fI#evYDdJAk zbs9Xw0n>Y^px90NBCj

    Z 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

    X)0esS{hA@`HR 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

    >iheV#s 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 literal 0 HcmV?d00001 diff --git a/YPassword/index.html b/YPassword/index.html new file mode 100644 index 0000000..033f94b --- /dev/null +++ b/YPassword/index.html @@ -0,0 +1,28 @@ + + + Redirect to the right page. + + + + +

    You should be redirected to http://ypassword.espozito.com

    + + diff --git a/index.html b/index.html index 881cd3e..6d81b93 100644 --- a/index.html +++ b/index.html @@ -41,14 +41,14 @@ - + + Social link the right way » +
    + Category Theory Presentation »
    Haskell Progressive Example » -
    - - Learn Haskell Fast and Hard »
    @@ -64,14 +64,14 @@ - + + Être correct avec les boutons share » +
    + Category Theory Presentation »
    Un example progressif avec Haskell » -
    - - Haskell comme un vrai! »