diff --git a/content/html/en/latest.md b/content/html/en/latest.md new file mode 100644 index 000000000..8cb8ef2ef --- /dev/null +++ b/content/html/en/latest.md @@ -0,0 +1,4 @@ +--- +layout: latest +isHidden: true +--- diff --git a/content/html/fr/latest.md b/content/html/fr/latest.md new file mode 100644 index 000000000..8cb8ef2ef --- /dev/null +++ b/content/html/fr/latest.md @@ -0,0 +1,4 @@ +--- +layout: latest +isHidden: true +--- diff --git a/layouts/latest.html b/layouts/latest.html new file mode 100644 index 000000000..cd8130f1d --- /dev/null +++ b/layouts/latest.html @@ -0,0 +1,20 @@ +----- +----- +<% language, languages, blog, article = setItemConf %> +<% +last_article = @items.select do |a| + a.reps[0].path =~ /\/#{language}\// && a[:kind] == 'article' +end.sort { |x,y| y[:created_at] <=> x[:created_at] }[0] +targetUrl = last_article.path +%> + + + Redirect to the right page. + + + + +

You should be redirected to

+
<%= targetUrl %>
+ + diff --git a/multi/latest.md b/multi/latest.md new file mode 100644 index 000000000..8cb8ef2ef --- /dev/null +++ b/multi/latest.md @@ -0,0 +1,4 @@ +--- +layout: latest +isHidden: true +--- diff --git a/output/Scratch/assets/css/main.css b/output/Scratch/assets/css/main.css index dcfbcfbbd..04f1546d6 100644 --- a/output/Scratch/assets/css/main.css +++ b/output/Scratch/assets/css/main.css @@ -1 +1 @@ -table.description tr td{border:1px solid#eee}.assombris20{background-color:#eee}body{color:#333;background-color:#fafafa}a:hover{text-shadow:0 0 2px#faa}a,a:link,a:visited,a:active,a:hover{text-decoration:none;outline:none}a,a:link,a:visited,a:active{color:#333}a:hover{color:#a53}hr{color:#eee;border-top:1px solid#eee;border-bottom:none;border-left:none;border-right:none}ul{list-style:square}ol,ul{padding-left:0}ol li,ul li{margin:.5em 0}ol li ul,ol li ol,ul li ol,ul li ul{margin:.5em 1.5em;list-style:circle}body,h1,h2,h3,h4,#entete,.tag{font-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;line-height:1.4em}.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:#333;color:#fafafa;box-shadow:0 0 1em black inset;border-radius:3px;padding:1em;line-height:1.2em;font-size:.9em}p{margin-bottom:1.2em}blockquote{font-style:italic;padding:.5em 1em;color:#555;background-color:#f2f2f2;border:1px solid#ccc}blockquote a:hover{color:#a53}blockquote strong,blockquote b,blockquote i,blockquote em{font-weight:400;font-style:normal;color:#333}abbr,acronym{font-variant:small-caps;text-decoration:none;border-bottom-width:0}#titre{letter-spacing:-0.06em;border-bottom:4px double#ccc;border-top:4px double#ccc}#liens .active,#sousliens{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}#liens .active a,#sousliens a{color:#666}#liens .active a:hover,#sousliens a:hover{color:#a53}#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:#fb9}#liens .active hr,#sousliens hr{color:#666;border-top:1px solid#666}#liens .active strong,#liens .active b,#liens .active i,#liens .active em,#sousliens strong,#sousliens b,#sousliens i,#sousliens em{color:#333}#liens a{border:1px solid#eee;background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc 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#555 inset}#liens .active{text-shadow:0 0 2px rgba(0,0,0,0.5);background-color:#f7f7f7;border:1px solid #e9e9e9;box-shadow:0 0 3px #c7c7c7 inset;border-radius:3px;border-top:none}#lastmod{font-size:.8em}.nojsbutton{font-size:2.5em}#clickcomment,#choixlang > a,#choixrss > a,.return > a{display:block;width:25%;cursor:pointer;margin:1em 0;padding:1em;font-size:16px;line-height:1.4em;border-radius:5px;border:2px solid #fafafa;color:#ccc}#clickcomment:hover,#choixlang > a:hover,#choixrss > a:hover,.return > a:hover{color:#e25f2f;text-shadow:0 0 2px#faa;background:#ececec;box-shadow:0 -1px 8px#ccc inset}#clickcomment:active,#choixlang > a:active,#choixrss > a:active,.return > a:active{color:#e25f2f;text-shadow:0 0 2px#faa;background:#eee;box-shadow:0 -1px 8px#aaa inset}.return > a,#choixrss > a{float:right}#choix .return > a,#choix #choixrss > a{margin-top:0}.small{font-size:.8em}.sc{font-variant:small-caps}.impact,.darkimpact{font-size:2em;margin:0 auto 1em auto;line-height:1.3em}h1 > .date{font-size:.6em;color:#333}.date{font-size:.8em;color:#fafafa;border:1px solid#333;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:#333;background-color:#fafafa;float:left;width:1.7em}.date .month{float:right;width:2.3em;background-color:#333;color:#fafafa}.date .year{line-height:3ex;clear:both;color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee;border-radius:0}.date .year a{color:#666}.date .year a:hover{color:#a53}.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:#fb9}.date .year hr{color:#666;border-top:1px solid#666}.date .year strong,.date .year b,.date .year i,.date .year em{color:#333}body{text-align:center;font-size:16px}body > #entete{position:absolute;left:0;top:.5em;width:100%;min-width:50em;z-index:8000;padding-bottom:1em;margin-bottom:3em}#titre h2{width:80%;margin-left:auto;margin-right:auto;text-align:center;color:#ccc}#titre{text-align:center;width:100%}#titre h1,#titre h2{padding-left:1em;padding-right:1em}#bottom{clear:right;margin-right:0;padding:1.5em;line-height:1.5em;color:#ccc;margin-top:2em;text-align:center}#bottom a{color:#ccc}#bottom a:hover{color:#a53}#sousliens{padding:1em 0;line-height:2em}#sousliens ul{list-style:none;margin-left:4em}ul.horizontal li{display:inline;font-size:.9em}ul.horizontal{margin-top:0;margin-bottom:0}#entete{padding-top:.1em;border-top:1px solid#ccc;border-bottom:1px solid#ccc}#liens{width:100%;padding:0;clear:both;margin-top:.5em}#liens ul{width:100%;clear:both;padding:0;margin:0}#liens ul li{display:inline-block;height:4em;margin-left:.2em;margin-right:.2em;width:23%}#liens ul li a,#liens ul li span{width:100%;display:block;line-height:4em}.clear{clear:both}#content{line-height:4em;margin-left:auto;margin-right:auto;margin-top:0;position:relative;clear:both;width:52em}.encadre,.black,.red,.intro,.resume,.shadow{padding:2em;margin-top:2em;margin-bottom:2em}.encadre,.black,.red,.shadow{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}.encadre a,.black a,.red a,.shadow a{color:#666}.encadre a:hover,.black a:hover,.red a:hover,.shadow a:hover{color:#a53}.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,.red a:hover strong,.red a:hover b,.red a:hover i,.red a:hover em,.red a:hover .nicer,.shadow a:hover strong,.shadow a:hover b,.shadow a:hover i,.shadow a:hover em,.shadow a:hover .nicer{color:#fb9}.encadre hr,.black hr,.red hr,.shadow hr{color:#666;border-top:1px solid#666}.encadre strong,.encadre b,.encadre i,.encadre em,.black strong,.black b,.black i,.black em,.red strong,.red b,.red i,.red em,.shadow strong,.shadow b,.shadow i,.shadow em{color:#333}.intro,.resume{font-size:.9em;font-style:italic;padding:.5em 1em;color:#555}.intro a:hover,.resume a:hover{color:#a53}.intro strong,.intro b,.intro i,.intro em,.resume strong,.resume b,.resume i,.resume em{font-weight:400;font-style:normal;color:#333}#afterheader > h1{width:100%;padding-top:1.5em;text-align:left}#afterheader{padding-left:0;padding-right:0}#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-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;font-size:1.25em;line-height:1.6em;text-align:justify;text-align:left;padding:3em 3em;margin:0;clear:both}.corps img{max-width:30em;border:1px solid#ccc;background-color:#fafafa;padding:.5em;box-shadow:0 10px 15px#ccc;border-radius:3px}.corps a:hover img{background-color:#b42}img.clean{border:none}#address{clear:both}.definitionCell{width:5em;vertical-align:top;font-weight:700;text-align:center}.valueCell{text-align:right}.smallblock{float:left;width:50%;font-size:1em;font-weight:700}.largeblock{float:right;width:70%;font-size:1em}#blackpage,#nojsredirect{top:0;left:0;width:100%;height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:fixed;text-align:center}#blackpage{color:#666;padding-top:10em;background-color:#eee;z-index:9000;cursor:wait}#blackpage img{background:none;border:none}#blackpage a{cursor:pointer}#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}.file{font-size:.8em;text-align:right;padding-right:1em;margin-right:.1;margin-bottom:0}.flush{clear:both}table.description{border-spacing:5px;border-collapse:separate;margin-right:auto;margin-left:auto}table.description tr td{padding-left:.5em;padding-right:.5em;padding-top:.5ex;padding-bottom:.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.left{float:left;max-width:30%;margin-top:.6em;margin-right:2em}img.inside{display:inline;vertical-align:middle}pre{overflow-x:auto;overflow-y:hidden}.withfile pre{margin-top:0;overflow:hidden}.navigationprev,.navigationnext{padding:0;margin-left:.2em;margin-right:.2em;margin-bottom:0;margin-top:3em;width:45%}.navigation .navigationprev,.navigation .navigationnext{width:30%;margin-top:0}.navigation{height:4em;border-bottom:#ccc solid 1px}.presarticleleft,.presarticleright{font-size:1em}.navigationprev{float:left;text-align:left}.navigationnext{float:right;text-align:right}.impact,.darkimpact{text-align:left;width:66%;padding-left:.25em;padding-right:.25em}table.impact{text-align:left}table.impact tr td{padding-left:.25em;padding-right:.25em}#liens{font-size:1.2em}#iemessage{font-size:1.2em}.tag{display:inline;cursor:pointer;margin-left:.5em;margin-right:.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:#888;font-style:italic;font-size:.8em}#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 .1em}.corps .return a{color:#eee;padding:.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:#eee;padding:.1em;line-height:1.5em;font-size:1.5em;height:1.5em;font-size:2em;width:1.5em;display:block}a.return:hover{color:#888}.corps .return a:hover{color:#a53}.footnotes{font-size:.8em}.footnotes ol{color:#ccc;font-weight:700}.footnotes ol p{color:#333;font-weight:400}.fontnotes ol{margin-left:0}.typeset img{display:inline;border:none;margin:0;padding:0}strong,b,i,em{font-weight:400;color:#888}strong a,b a,i a,em a{color:#333}strong a:hover,b a:hover,i a:hover,em a:hover{color:#a53}.corps p strong,.corps p b,.corps p i,.corps p em{color:#555}a:hover strong,a:hover b,a:hover i,a:hover em{color:#e25f2f}a:hover .nicer{color:#fb9}.nicer{color:#ccc;font-family:"Lucida Grande",Tahoma}.block{width:31%;text-align:left;line-height:1em;margin-left:1%;margin-right:1%;font-size:.8em}.block a{color:#333}.block a:hover{color:#a53}.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:#555}.corps p a:hover,.corps ul a:hover{color:#a53}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:.8em;background:#eee;box-shadow:0 0 6px#ccc;border-radius:3px;line-height:2.5em;padding:2em;text-align:justify}.pala{font-family:Palatino}.article .corps a:after{content:"†";vertical-align:super;font-size:.66em;color:#888}.article .corps .footnotes a:after,.article .corps sup a:after{content:""}.article .corps sup a{font-weight:700;background:#ccc;padding:0 .3em;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;color:#fafafa}.article .corps sup a:hover{background:#a53}ul#markdown-toc{font-variant:small-caps;list-style:none;padding-left:1.5em}ul#markdown-toc ul{padding-left:1.5em}ul#markdown-toc a:after{content:""}table{border:1px solid#ccc}table tr td{padding:2px .5em}table tr:nth-child(odd){background-color:#f2f2f2}table tr:nth-child(even){background-color:#fafafa}p code{background:#f2f2f2;border:solid 1px#ccc;padding:2px}ul.sameline{list-style:none}ul.sameline li{float:left;margin-left:.5em}.resumearticle{background-color:#f2f2f2;border-radius:7px;box-shadow:0 0 5px #c7c7c7 inset,0 0 5px white;margin:1em 0;padding:1em} \ No newline at end of file +@charset "UTF-8";table.description tr td{border:1px solid#eee}.assombris20{background-color:#eee}body{color:#333;background-color:#fafafa}a:hover{text-shadow:0 0 2px#faa}a,a:link,a:visited,a:active,a:hover{text-decoration:none;outline:none}a,a:link,a:visited,a:active{color:#333}a:hover{color:#a53}hr{color:#eee;border-top:1px solid#eee;border-bottom:none;border-left:none;border-right:none}ul{list-style:square}ol,ul{padding-left:0}ol li,ul li{margin:.5em 0}ol li ul,ol li ol,ul li ol,ul li ul{margin:.5em 1.5em;list-style:circle}body,h1,h2,h3,h4,#entete,.tag{font-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;line-height:1.4em}.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:#333;color:#fafafa;box-shadow:0 0 1em black inset;border-radius:3px;padding:1em;line-height:1.2em;font-size:.9em}p{margin-bottom:1.2em}blockquote{font-style:italic;padding:.5em 1em;color:#555;background-color:#f2f2f2;border:1px solid#ccc}blockquote a:hover{color:#a53}blockquote strong,blockquote b,blockquote i,blockquote em{font-weight:400;font-style:normal;color:#333}abbr,acronym{font-variant:small-caps;text-decoration:none;border-bottom-width:0}#titre{letter-spacing:-0.06em;border-bottom:4px double#ccc;border-top:4px double#ccc}#liens .active,#sousliens{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}#liens .active a,#sousliens a{color:#666}#liens .active a:hover,#sousliens a:hover{color:#a53}#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:#fb9}#liens .active hr,#sousliens hr{color:#666;border-top:1px solid#666}#liens .active strong,#liens .active b,#liens .active i,#liens .active em,#sousliens strong,#sousliens b,#sousliens i,#sousliens em{color:#333}#liens a{border:1px solid#eee;background:rgba(0,0,0,0.05);box-shadow:0 0 2px white,0 0 3px#ccc 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#555 inset}#liens .active{text-shadow:0 0 2px rgba(0,0,0,0.5);background-color:#f7f7f7;border:1px solid #e9e9e9;box-shadow:0 0 3px #c7c7c7 inset;border-radius:3px;border-top:none}#lastmod{font-size:.8em}.nojsbutton{font-size:2.5em}#clickcomment,#choixlang > a,#choixrss > a,.return > a{display:block;width:25%;cursor:pointer;margin:1em 0;padding:1em;font-size:16px;line-height:1.4em;border-radius:5px;border:2px solid #fafafa;color:#ccc}#clickcomment:hover,#choixlang > a:hover,#choixrss > a:hover,.return > a:hover{color:#e25f2f;text-shadow:0 0 2px#faa;background:#ececec;box-shadow:0 -1px 8px#ccc inset}#clickcomment:active,#choixlang > a:active,#choixrss > a:active,.return > a:active{color:#e25f2f;text-shadow:0 0 2px#faa;background:#eee;box-shadow:0 -1px 8px#aaa inset}.return > a,#choixrss > a{float:right}#choix .return > a,#choix #choixrss > a{margin-top:0}.small{font-size:.8em}.sc{font-variant:small-caps}.impact,.darkimpact{font-size:2em;margin:0 auto 1em auto;line-height:1.3em}h1 > .date{font-size:.6em;color:#333}.date{font-size:.8em;color:#fafafa;border:1px solid#333;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:#333;background-color:#fafafa;float:left;width:1.7em}.date .month{float:right;width:2.3em;background-color:#333;color:#fafafa}.date .year{line-height:3ex;clear:both;color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee;border-radius:0}.date .year a{color:#666}.date .year a:hover{color:#a53}.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:#fb9}.date .year hr{color:#666;border-top:1px solid#666}.date .year strong,.date .year b,.date .year i,.date .year em{color:#333}body{text-align:center;font-size:16px}body > #entete{position:absolute;left:0;top:.5em;width:100%;min-width:50em;z-index:8000;padding-bottom:1em;margin-bottom:3em}#titre h2{width:80%;margin-left:auto;margin-right:auto;text-align:center;color:#ccc}#titre{text-align:center;width:100%}#titre h1,#titre h2{padding-left:1em;padding-right:1em}#bottom{clear:right;margin-right:0;padding:1.5em;line-height:1.5em;color:#ccc;margin-top:2em;text-align:center}#bottom a{color:#ccc}#bottom a:hover{color:#a53}#sousliens{padding:1em 0;line-height:2em}#sousliens ul{list-style:none;margin-left:4em}ul.horizontal li{display:inline;font-size:.9em}ul.horizontal{margin-top:0;margin-bottom:0}#entete{padding-top:.1em;border-top:1px solid#ccc;border-bottom:1px solid#ccc}#liens{width:100%;padding:0;clear:both;margin-top:.5em}#liens ul{width:100%;clear:both;padding:0;margin:0}#liens ul li{display:inline-block;height:4em;margin-left:.2em;margin-right:.2em;width:23%}#liens ul li a,#liens ul li span{width:100%;display:block;line-height:4em}.clear{clear:both}#content{line-height:4em;margin-left:auto;margin-right:auto;margin-top:0;position:relative;clear:both;width:52em}.encadre,.black,.red,.intro,.resume,.shadow{padding:2em;margin-top:2em;margin-bottom:2em}.encadre,.black,.red,.shadow{color:#333;border:#ccc solid 1px;border-radius:5px;box-shadow:0 0 2px#ccc inset;background-color:#eee}.encadre a,.black a,.red a,.shadow a{color:#666}.encadre a:hover,.black a:hover,.red a:hover,.shadow a:hover{color:#a53}.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,.red a:hover strong,.red a:hover b,.red a:hover i,.red a:hover em,.red a:hover .nicer,.shadow a:hover strong,.shadow a:hover b,.shadow a:hover i,.shadow a:hover em,.shadow a:hover .nicer{color:#fb9}.encadre hr,.black hr,.red hr,.shadow hr{color:#666;border-top:1px solid#666}.encadre strong,.encadre b,.encadre i,.encadre em,.black strong,.black b,.black i,.black em,.red strong,.red b,.red i,.red em,.shadow strong,.shadow b,.shadow i,.shadow em{color:#333}.intro,.resume{font-size:.9em;font-style:italic;padding:.5em 1em;color:#555}.intro a:hover,.resume a:hover{color:#a53}.intro strong,.intro b,.intro i,.intro em,.resume strong,.resume b,.resume i,.resume em{font-weight:400;font-style:normal;color:#333}#afterheader > h1{width:100%;padding-top:1.5em;text-align:left}#afterheader{padding-left:0;padding-right:0}#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-family:Georgia,Palatino,"Century Schoolbook L","Times New Roman",Times,serif;font-size:1.25em;line-height:1.6em;text-align:justify;text-align:left;padding:3em 3em;margin:0;clear:both}.corps img{max-width:30em;border:1px solid#ccc;background-color:#fafafa;padding:.5em;box-shadow:0 10px 15px#ccc;border-radius:3px}.corps a:hover img{background-color:#b42}img.clean{border:none}#address{clear:both}.definitionCell{width:5em;vertical-align:top;font-weight:700;text-align:center}.valueCell{text-align:right}.smallblock{float:left;width:50%;font-size:1em;font-weight:700}.largeblock{float:right;width:70%;font-size:1em}#blackpage,#nojsredirect{top:0;left:0;width:100%;height:100%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;position:fixed;text-align:center}#blackpage{color:#666;padding-top:10em;background-color:#eee;z-index:9000;cursor:wait}#blackpage img{background:none;border:none}#blackpage a{cursor:pointer}#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}.file{font-size:.8em;text-align:right;padding-right:1em;margin-right:.1;margin-bottom:0}.flush{clear:both}table.description{border-spacing:5px;border-collapse:separate;margin-right:auto;margin-left:auto}table.description tr td{padding-left:.5em;padding-right:.5em;padding-top:.5ex;padding-bottom:.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.left{float:left;max-width:30%;margin-top:.6em;margin-right:2em}img.inside{display:inline;vertical-align:middle}pre{overflow-x:auto;overflow-y:hidden}.withfile pre{margin-top:0;overflow:hidden}.navigationprev,.navigationnext{padding:0;margin-left:.2em;margin-right:.2em;margin-bottom:0;margin-top:3em;width:45%}.navigation .navigationprev,.navigation .navigationnext{width:30%;margin-top:0}.navigation{height:4em;border-bottom:#ccc solid 1px}.presarticleleft,.presarticleright{font-size:1em}.navigationprev{float:left;text-align:left}.navigationnext{float:right;text-align:right}.impact,.darkimpact{text-align:left;width:66%;padding-left:.25em;padding-right:.25em}table.impact{text-align:left}table.impact tr td{padding-left:.25em;padding-right:.25em}#liens{font-size:1.2em}#iemessage{font-size:1.2em}.tag{display:inline;cursor:pointer;margin-left:.5em;margin-right:.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:#888;font-style:italic;font-size:.8em}#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 .1em}.corps .return a{color:#eee;padding:.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:#eee;padding:.1em;line-height:1.5em;font-size:1.5em;height:1.5em;font-size:2em;width:1.5em;display:block}a.return:hover{color:#888}.corps .return a:hover{color:#a53}.footnotes{font-size:.8em}.footnotes ol{color:#ccc;font-weight:700}.footnotes ol p{color:#333;font-weight:400}.fontnotes ol{margin-left:0}.typeset img{display:inline;border:none;margin:0;padding:0}strong,b,i,em{font-weight:400;color:#888}strong a,b a,i a,em a{color:#333}strong a:hover,b a:hover,i a:hover,em a:hover{color:#a53}.corps p strong,.corps p b,.corps p i,.corps p em{color:#555}a:hover strong,a:hover b,a:hover i,a:hover em{color:#e25f2f}a:hover .nicer{color:#fb9}.nicer{color:#ccc;font-family:"Lucida Grande",Tahoma}.block{width:31%;text-align:left;line-height:1em;margin-left:1%;margin-right:1%;font-size:.8em}.block a{color:#333}.block a:hover{color:#a53}.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:#555}.corps p a:hover,.corps ul a:hover{color:#a53}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:.8em;background:#eee;box-shadow:0 0 6px#ccc;border-radius:3px;line-height:2.5em;padding:2em;text-align:justify}.pala{font-family:Palatino}.article .corps a:after{content:"†";vertical-align:super;font-size:.66em;color:#888}.article .corps .footnotes a:after,.article .corps sup a:after{content:""}.article .corps sup a{font-weight:700;background:#ccc;padding:0 .3em;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;color:#fafafa}.article .corps sup a:hover{background:#a53}ul#markdown-toc{font-variant:small-caps;list-style:none;padding-left:1.5em}ul#markdown-toc ul{padding-left:1.5em}ul#markdown-toc a:after{content:""}table{border:1px solid#ccc}table tr td{padding:2px .5em}table tr:nth-child(odd){background-color:#f2f2f2}table tr:nth-child(even){background-color:#fafafa}p code{background:#f2f2f2;border:solid 1px#ccc;padding:2px}ul.sameline{list-style:none}ul.sameline li{float:left;margin-left:.5em}.resumearticle{background-color:#f2f2f2;border-radius:7px;box-shadow:0 0 5px #c7c7c7 inset,0 0 5px white;margin:1em 0;padding:1em} \ No newline at end of file diff --git a/output/Scratch/en/about/contact/index.html b/output/Scratch/en/about/contact/index.html index 697431aaf..c559afef3 100644 --- a/output/Scratch/en/about/contact/index.html +++ b/output/Scratch/en/about/contact/index.html @@ -60,7 +60,7 @@

Avatar

-

yann.esposito@gmail.com
+

yann.esposito@gmail.com
Follow me on twitter
My preferred bookmarks pinboard
Open Source github
diff --git a/output/Scratch/en/about/index.html b/output/Scratch/en/about/index.html index 100705a7a..70d10c86a 100644 --- a/output/Scratch/en/about/index.html +++ b/output/Scratch/en/about/index.html @@ -104,7 +104,7 @@

  • Computer Security: I designed a secure web protocol (similar to TOR), a method to securely remember strong passwords (programmed a dashboard widget and a shell script to use this method).
  • -

    But before all, I love to learn. For example, I learned many programming languages: C, C++, Objective-C, Python, Java, Perl, awk, bash, zsh, LaTeX, Metapost, camL… And I’ve got the same passion about computer science research, computer security, philosophy and many other things.

    +

    But before all, I love to learn. For example, I learned many programming languages: C, C++, Objective-C, Python, Java, Perl, awk, bash, zsh, LaTeX, Metapost, camL… And I’ve got the same passion about computer science research, computer security, philosophy and many other things.

    @@ -118,7 +118,7 @@

    Then I had a post Ph. D. Degree position in the Hubert Curien Laboratory at St-Etienne. My mission consisted to develop a scientific application (SEDiL). This application should be used by biologist and should have a simple and nice user interface.

    -

    Today I work for AirFrance© via Astek. This job need many differents skills, CMS and Web technologies, Perl, JSP, meta-programming…

    +

    Today I work for AirFrance© via Astek. This job need many differents skills, CMS and Web technologies, Perl, JSP, meta-programming…

    diff --git a/output/Scratch/en/blog/01_nanoc/index.html b/output/Scratch/en/blog/01_nanoc/index.html index 0f37a1274..414147433 100644 --- a/output/Scratch/en/blog/01_nanoc/index.html +++ b/output/Scratch/en/blog/01_nanoc/index.html @@ -59,11 +59,11 @@ But a Framework to generate static web pages.

    You have to program yourself webpages, the code -to generate the menu…

    +to generate the menu…

    I added feature to make my website multilingual for example

    -

    You’ll can find many informations on the +

    You’ll can find many informations on the official nanoc website.

    diff --git a/output/Scratch/en/blog/02_ackgrep/index.html b/output/Scratch/en/blog/02_ackgrep/index.html index b82d3aab0..0c62da131 100644 --- a/output/Scratch/en/blog/02_ackgrep/index.html +++ b/output/Scratch/en/blog/02_ackgrep/index.html @@ -54,11 +54,11 @@

    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.

    +

    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.

    Go on http://betterthangrep.com to download it.

    -

    Sincerely, I don’t understand ack don’t become a common command on all UNIX systems. I can no more live without. For me it is as essential as which or find.

    +

    Sincerely, I don’t understand ack don’t become a common command on all UNIX systems. I can no more live without. For me it is as essential as which or find.

    @@ -79,7 +79,7 @@ grep 'pattern
    -

    Movie’s keys

    +

    Movie’s keys

    @@ -64,32 +64,32 @@
    -

    In a first, it is clear for me, it is not a fantastic movie. If you follow this line, you’ll face many problem explaining some scenes.

    +

    In a first, it is clear for me, it is not a fantastic movie. If you follow this line, you’ll face many problem explaining some scenes.

    -

    My hypothesis is the movie describe the Fred’s representation of reality. +

    My hypothesis is the movie describe the Fred’s representation of reality. Each of his tries to escape reality will fail.

    -

    Fred had commited an horrible act, a murder, and try to repair his memory to accepts it. He’ll then create alternative realities.

    +

    Fred had commited an horrible act, a murder, and try to repair his memory to accepts it. He’ll then create alternative realities.

    • In a first time he kills his wife (Renee) because he believes she cheated at him.
    • -
    • In the second part, he’s weaker and will be manipulated by the blond equivalent of Renee to kill Dick Laurent.
    • +
    • In the second part, he’s weaker and will be manipulated by the blond equivalent of Renee to kill Dick Laurent.
    • In a third part, he kills Dick Laurent

    Why this interpretation can be valid?

    -

    Because of the dialog at the begining of the movie. Cops ask Fred if he’s own a video camera:

    +

    Because of the dialog at the begining of the movie. Cops ask Fred if he’s own a video camera:

    -

    “Do you own a video camera?”
    -“No, Fred hates them.”
    -“I like to remember things my own way.”
    -“What do you mean by that?”
    -“How I remember them, not necessarily the way they happened.”

    +

    “Do you own a video camera?”
    +“No, Fred hates them.”
    +“I like to remember things my own way.”
    +“What do you mean by that?”
    +“How I remember them, not necessarily the way they happened.”

    -

    Then, what we see is not reality but the Fred’s perception. Fred is the God of the reality we see. This is why some God/Devil interpretation of the movie works not so bad.

    +

    Then, what we see is not reality but the Fred’s perception. Fred is the God of the reality we see. This is why some God/Devil interpretation of the movie works not so bad.

    diff --git a/output/Scratch/en/blog/03_losthighway/03_losthighway_2/index.html b/output/Scratch/en/blog/03_losthighway/03_losthighway_2/index.html index 450f1fec3..f31772157 100644 --- a/output/Scratch/en/blog/03_losthighway/03_losthighway_2/index.html +++ b/output/Scratch/en/blog/03_losthighway/03_losthighway_2/index.html @@ -60,15 +60,15 @@

    l'homme mystérieux

    -

    Who’s this mysterious man? He tells Fred it’s him who invited him in his house. He’s present at the party and in the house of Fred in the same time. Eyes wide open, looking everything Fred’s doing?

    +

    Who’s this mysterious man? He tells Fred it’s him who invited him in his house. He’s present at the party and in the house of Fred in the same time. Eyes wide open, looking everything Fred’s doing?

    -

    It’s a key of the movie. In my humble opinion, I believe it represents the bad part of Fred. Certainly jalousy. If I was catholic, I’ll said he’s Satan. He observe, film but don’t act. He helps Fred to kill Dick Laurent. +

    It’s a key of the movie. In my humble opinion, I believe it represents the bad part of Fred. Certainly jalousy. If I was catholic, I’ll said he’s Satan. He observe, film but don’t act. He helps Fred to kill Dick Laurent. Fred had let him enter and cannot let him go. As Iago of Shakespeare is imprisonned by its own jalousy. The Mysterious Man help Fred doing the acts of violence. It also force Fred to remember the reality.

    -

    When he makes love to his wife (Renee), he sees the face of the Mysterious Man instead of his wife’s face. In reality, it’s the same person for Fred. It should be her who’s the origin of his interior badness.

    +

    When he makes love to his wife (Renee), he sees the face of the Mysterious Man instead of his wife’s face. In reality, it’s the same person for Fred. It should be her who’s the origin of his interior badness.

    diff --git a/output/Scratch/en/blog/03_losthighway/03_losthighway_3/index.html b/output/Scratch/en/blog/03_losthighway/03_losthighway_3/index.html index 6ccd0d2e6..c831546b6 100644 --- a/output/Scratch/en/blog/03_losthighway/03_losthighway_3/index.html +++ b/output/Scratch/en/blog/03_losthighway/03_losthighway_3/index.html @@ -56,9 +56,9 @@
    -

    Who’s at the origin of the video tapes?

    +

    Who’s at the origin of the video tapes?

    -

    Certainly it’s the mysterious man (Fred himself) who makes them. +

    Certainly it’s the mysterious man (Fred himself) who makes them. Their reason should be:

      diff --git a/output/Scratch/en/blog/03_losthighway/03_losthighway_4/index.html b/output/Scratch/en/blog/03_losthighway/03_losthighway_4/index.html index 8146182c8..6f13b461e 100644 --- a/output/Scratch/en/blog/03_losthighway/03_losthighway_4/index.html +++ b/output/Scratch/en/blog/03_losthighway/03_losthighway_4/index.html @@ -71,7 +71,7 @@

      which one then?

      The second hypothesis seems better. We can make much more interpretation with it. It explain in most part the strange phone call from Dick Laurent to Pete. -But the first hypothesis remain coherent. And, we should probably make an in depth explanantion using the first hypothesis. And I’m not sure it would be better.

      +But the first hypothesis remain coherent. And, we should probably make an in depth explanantion using the first hypothesis. And I’m not sure it would be better.

      One of the strength of this movie is to understand there is many other coherent hypothesis. It is an expression of the Rashomon effect. Many different persons could describe in a coherent manner what they saw. But each description contradicts the others.

      @@ -85,9 +85,9 @@ But the first hypothesis remain coherent. And, we should probably make an in dep

      There is much to tell about this movie. But I believe I put all essential keys here. It is a proof this movie is not a random one.

      -

      I believe it is essential to remember the “test of Rorschach effet” when watching this movie.

      +

      I believe it is essential to remember the “test of Rorschach effet” when watching this movie.

      -

      I’d like to know or opinion ; is my interpration wrong?

      +

      I’d like to know or opinion ; is my interpration wrong?

    diff --git a/output/Scratch/en/blog/03_losthighway/index.html b/output/Scratch/en/blog/03_losthighway/index.html index 7207bd22b..54cd53ea0 100644 --- a/output/Scratch/en/blog/03_losthighway/index.html +++ b/output/Scratch/en/blog/03_losthighway/index.html @@ -72,10 +72,10 @@ Here some of explanations of Lost Highway I found on the Internet:

    • Fred make a pact with the devil incarnated by the Mysterious Man,
    • Mysterious Man is a video camera,
    • -
    • Just the first part of the story is real. The rest is in the Fred’s imagination,
    • +
    • Just the first part of the story is real. The rest is in the Fred’s imagination,
    -

    and I don’t speak about many point of view found in forums.

    +

    and I don’t speak about many point of view found in forums.

    I finished to find two good site talking about this movie. But none of them still totally convinced me:

    @@ -84,7 +84,7 @@ Here some of explanations of Lost Highway I found on the Internet:

  • the second which state almost the same interpretation about the movie and explain with even more details is on jasonweb
  • -

    Nonetheless, this movie must be watched knowing you’ll cannot resolve the solution. At his best you’ll can suggest an interpretation close to the one of David Lynch.

    +

    Nonetheless, this movie must be watched knowing you’ll cannot resolve the solution. At his best you’ll can suggest an interpretation close to the one of David Lynch.

    I believe I had found a coherent interpretation which allow to follow the movie without being totally lost. I believed it can give the keys necessary to make its own idea of the movie.

    @@ -92,16 +92,16 @@ Here some of explanations of Lost Highway I found on the Internet:

    test de Rorschach

    -

    Like the protagonist, everybody see what he want to see in this movie. It is an invitation to think. Watch this movie is a little like watch a Rorschach’s test. What do we see in it? Everybody put its own personnality in the interpretation of the movie.

    +

    Like the protagonist, everybody see what he want to see in this movie. It is an invitation to think. Watch this movie is a little like watch a Rorschach’s test. What do we see in it? Everybody put its own personnality in the interpretation of the movie.

      -
    • If you are mystic, you’ll see in the mysterious man a devil,
    • -
    • If you are more psychanalytics, you’ll see an inconscient part of the protagonist…
    • +
    • If you are mystic, you’ll see in the mysterious man a devil,
    • +
    • If you are more psychanalytics, you’ll see an inconscient part of the protagonist…
    -

    Generally, we stay in this movie and we fail explaining everything. There is almost always a point that don’t fit within the interpretation of the movie. This is why trying to find a unique good interpretation of this movie is a mistake.

    +

    Generally, we stay in this movie and we fail explaining everything. There is almost always a point that don’t fit within the interpretation of the movie. This is why trying to find a unique good interpretation of this movie is a mistake.

    -

    Interprétation ≠ Explanation

    +

    Interprétation ≠ Explanation

    I give an interpretation and not an explanation. Just to tell my vision of the movie should be very different from yours. There is certainly many coherent explanations.

    diff --git a/output/Scratch/en/blog/04_drm/index.html b/output/Scratch/en/blog/04_drm/index.html index 812eda4af..f6b27e01d 100644 --- a/output/Scratch/en/blog/04_drm/index.html +++ b/output/Scratch/en/blog/04_drm/index.html @@ -66,7 +66,7 @@

    WTF?

    -

    Result, my wife would never buy any TV show on iTunes. She don’t like DVD because it is not as easy to buy and to use than to simply download episodes.

    +

    Result, my wife would never buy any TV show on iTunes. She don’t like DVD because it is not as easy to buy and to use than to simply download episodes.

    @@ -74,8 +74,8 @@ Therefore far less money for you EVIL Copyrighter!!!!!
    -

    My wife won’t see these episodes.
    -This is a ‘LOSE-LOSE’ cooperation.

    +

    My wife won’t see these episodes.
    +This is a ‘LOSE-LOSE’ cooperation.

    diff --git a/output/Scratch/en/blog/06_How_I_use_git/index.html b/output/Scratch/en/blog/06_How_I_use_git/index.html index 5c667e43b..42752dc6d 100644 --- a/output/Scratch/en/blog/06_How_I_use_git/index.html +++ b/output/Scratch/en/blog/06_How_I_use_git/index.html @@ -58,7 +58,7 @@

    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.

    +Unfortunately I didn’t find clearly what I needed on the official Git documentation.

    In two words, if you want to use an SVN workflow with Git (and all its advantages) here is how to proceed.

    @@ -70,7 +70,7 @@ Unfortunately I didn’t find clearly what I needed on the official Git docu

    Initialisation

    -

    Suppose I’ve got a directory on my local computer containing a project I want to manage via Git. Here what to do:

    +

    Suppose I’ve got a directory on my local computer containing a project I want to manage via Git. Here what to do:

    diff --git a/output/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html b/output/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html
    index 536234a1e..6474cfb3b 100644
    --- a/output/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html
    +++ b/output/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html
    @@ -56,15 +56,15 @@
                     

    How to recompile your screensaver to be Snow Leopard© compatible

    -

    I upgraded to Mac OS X 10.6 Snow Leopard©, 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. +

    I upgraded to Mac OS X 10.6 Snow Leopard©, 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 ).

    I discovered the good parameters for compilation.

    XCode configuration

    -

    For now I didn’t compiled it to work also on Tiger and Leopard. I don’t know XCode enought to know how to make the Garbage collector to be disabled on 32 bits version and enabled on 64 bits version.

    +

    For now I didn’t compiled it to work also on Tiger and Leopard. I don’t know XCode enought to know how to make the Garbage collector to be disabled on 32 bits version and enabled on 64 bits version.

    It was a bit difficult to discover these informations. Hope this post helped someone.

    diff --git a/output/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html b/output/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html index 3eca6d070..3474415ba 100644 --- a/output/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html +++ b/output/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html @@ -72,7 +72,7 @@ ssh -p 443 -D 9050 username@host

    Ssh and Snow Leopard©

    -

    Here I don’t want to talk about how great socks proxy via ssh tunneling is but how to configure my local server.

    +

    Here I don’t want to talk about how great socks proxy via ssh tunneling is but how to configure my local server.

    I have Mac with Snow Leopard© at home and it is far from enough to modify the /etc/sshd.config file. The system use launchd to launch starting daemons.

    diff --git a/output/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html b/output/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html index 57cc7965b..c15fa7801 100644 --- a/output/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html +++ b/output/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html @@ -83,13 +83,13 @@

    The idea are:

      -
    • synchronize to a temporary folder then swap the name therefore the website isn’t accessible only during the swap time. It takes only the time of two rename.
    • +
    • synchronize to a temporary folder then swap the name therefore the website isn’t accessible only during the swap time. It takes only the time of two rename.
    • reiterate all operations until they work (for example, renaming).

    For now I use rsync which in fact is no more efficient than a simple cp with WebDav. And I should use a method to keep track of elements who have changed. before the publication.

    -

    In fact when I’m on a Mac, I use Transmit which is very cool and far more efficient than the Finder to synchronize files. After the synchronization, I swap the directories.

    +

    In fact when I’m on a Mac, I use Transmit which is very cool and far more efficient than the Finder to synchronize files. After the synchronization, I swap the directories.

    My script take a -s option in order to make only the swap option. It also take a -a in order to put the new index.html which should point to the new homepage (not the iWeb one).

    diff --git a/output/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html b/output/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html index 4f48b128c..c82d4d7ba 100644 --- a/output/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html +++ b/output/Scratch/en/blog/11_Load_Disqus_Asynchronously/index.html @@ -58,7 +58,7 @@

    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.

    -

    Remark I didn’t have any comment on my blog when I switched. Therefore my lack of influence was a good thing :-).

    +

    Remark I didn’t have any comment on my blog when I switched. Therefore my lack of influence was a good thing :-).

    @@ -72,7 +72,7 @@

    I also know there is a jQuery plugin to make just that. Unfortunately I had some issue with CSS.

    -

    Now let’s begin.

    +

    Now let’s begin.

    @@ -85,7 +85,7 @@

    Why should I want to load the disqus javascript asynchronously?

    @@ -97,7 +97,7 @@

    How?

    -

    I give a solution with jQuery, but I’m certain it will work with many other js library.

    +

    I give a solution with jQuery, but I’m certain it will work with many other js library.

    Javascript

    @@ -127,7 +127,7 @@

    But with this option you still need to provide a CSS. This is why you have to copy the css code from the embed.js file and rewrite it in a CSS file. You can download the CSS I obtained.


    -

    Now it’s done. I believe all should be fine but I just finished the manip for my own site only 1 hour ago. Therefore there should be some error, tell me if it is the case.

    +

    Now it’s done. I believe all should be fine but I just finished the manip for my own site only 1 hour ago. Therefore there should be some error, tell me if it is the case.

    diff --git a/output/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html b/output/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html index 9527ebf8c..6cd3a90f6 100644 --- a/output/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html +++ b/output/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html @@ -56,7 +56,7 @@

    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.

    +

    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.

    Furthermore, it was not trivial to make comment to be shared between multiple version of the same page (each page has three differents representations, one for each language and one more for the multi-language version).

    @@ -64,7 +64,7 @@

    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:

    +

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

    @@ -87,8 +87,8 @@
     

    To conclude, main advantages (for me) of Intense Debate over Disqus:

      -
    • Load Asynchronously ; don’t block my website
    • -
    • Add for free buttons like “share to any” and load them asynchronously.
    • +
    • Load Asynchronously ; don’t block my website
    • +
    • Add for free buttons like “share to any” and load them asynchronously.

    Voilà.

    diff --git a/output/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html b/output/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html index 9f27b6fa9..86e980743 100644 --- a/output/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html +++ b/output/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/index.html @@ -59,7 +59,7 @@ All my site is static and pages are generated with -

    This is why I’ll give only a Ruby Generator, not a full javascript generator. +

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

    Here is what you should obtain:

    @@ -79,7 +79,7 @@ But you can easily translate from Ruby to Javascript.

    $('.tag.selected').removeClass('selected'); $('#tag_'+id).addClass('selected'); } -

    alternate reality

    -

    You can download the complete file to put in your ‘lib’ directory.

    +

    You can download the complete file to put in your ‘lib’ directory.

    Of course to be nice you need the associated CSS

    @@ -2430,7 +2430,7 @@ of the maximal size.

    -

    That’s all folks.

    +

    That’s all folks.

    diff --git a/output/Scratch/en/blog/2009-09-replace-all-except-some-part/index.html b/output/Scratch/en/blog/2009-09-replace-all-except-some-part/index.html index 39d36c608..182635d76 100644 --- a/output/Scratch/en/blog/2009-09-replace-all-except-some-part/index.html +++ b/output/Scratch/en/blog/2009-09-replace-all-except-some-part/index.html @@ -56,7 +56,7 @@

    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

    +

    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

    diff --git a/output/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html b/output/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html
    index bb7441416..5f9b8bb67 100644
    --- a/output/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html
    +++ b/output/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html
    @@ -58,22 +58,22 @@
     
     

    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.

    -

    Even with this script I also have some problem. Mostly due to ‘webdav’ issues. For example, renaming a folder work really badly (on Linux at least). I use webdavfs. For example:

    +

    Even with this script I also have some problem. Mostly due to ‘webdav’ issues. For example, renaming a folder work really badly (on Linux at least). I use webdavfs. For example:

     mv folder folder2
     
    -

    It returns OK and I’ve got:

    +

    It returns OK and I’ve got:

     $ ls 
     folder folder2
     
    -

    Booh….

    +

    Booh….

    -

    In order to handle most webdav issues I use a framework in zsh. It handle almost all except the correct renaming of folder. Working on it… Anyway here is the code I use.

    +

    In order to handle most webdav issues I use a framework in zsh. It handle almost all except the correct renaming of folder. Working on it… Anyway here is the code I use.

    @@ -314,7 +314,7 @@ print -- "Dest = 

    This is my way to replace rsync with filesystem not handling it. -Hope it is usefull. I’ll be happy to hear a way to handle the webdav rename folder problem. This is really annoying.

    +Hope it is usefull. I’ll be happy to hear a way to handle the webdav rename folder problem. This is really annoying.

    diff --git a/output/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/index.html b/output/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/index.html index bab8817bd..56556d9bb 100644 --- a/output/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/index.html +++ b/output/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/index.html @@ -87,7 +87,7 @@
    -

    That’s it.

    +

    That’s it.

    diff --git a/output/Scratch/en/blog/2009-10-Focus-vs-Minimalism/index.html b/output/Scratch/en/blog/2009-10-Focus-vs-Minimalism/index.html index 73c39306c..de091e64c 100644 --- a/output/Scratch/en/blog/2009-10-Focus-vs-Minimalism/index.html +++ b/output/Scratch/en/blog/2009-10-Focus-vs-Minimalism/index.html @@ -54,9 +54,9 @@
    -

    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.

    +

    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.

    +

    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.

    diff --git a/output/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/index.html b/output/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/index.html index fd96701fa..243611f0b 100644 --- a/output/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/index.html +++ b/output/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/index.html @@ -79,7 +79,7 @@
    -

    I first tried to integrate queryLoader, but it didn’t fill my needs.

    +

    I first tried to integrate queryLoader, but it didn’t fill my needs.

    The plugin add a black div to hide all the content. But as the script had to be launched at the end of the source code my website show for a small time.

    diff --git a/output/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html b/output/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html index c742264a8..b17d9ae17 100644 --- a/output/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html +++ b/output/Scratch/en/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html @@ -135,7 +135,7 @@ -

    Simple and lightweight. No timer (almost), no memory leak, no Date…

    +

    Simple and lightweight. No timer (almost), no memory leak, no Date…

    diff --git a/output/Scratch/en/blog/2009-10-launch-daemon-from-command-line/index.html b/output/Scratch/en/blog/2009-10-launch-daemon-from-command-line/index.html index 49a379f85..22007e1de 100644 --- a/output/Scratch/en/blog/2009-10-launch-daemon-from-command-line/index.html +++ b/output/Scratch/en/blog/2009-10-launch-daemon-from-command-line/index.html @@ -54,7 +54,7 @@
    -

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

    +

    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:

    diff --git a/output/Scratch/en/blog/2009-10-untaught-git-usage/index.html b/output/Scratch/en/blog/2009-10-untaught-git-usage/index.html index 091c5c2ec..77251606a 100644 --- a/output/Scratch/en/blog/2009-10-untaught-git-usage/index.html +++ b/output/Scratch/en/blog/2009-10-untaught-git-usage/index.html @@ -54,9 +54,9 @@
    -

    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.

    +

    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.

    +

    “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.

    @@ -72,7 +72,7 @@

    I must say I was completely convinced. And the more you learn about DCVS the more you see good reason to use them.

    -

    I then needed a versioning system for my team. As they were not used to open source versioning system except those heavy, with a GUI and with and administrator

    +

    I then needed a versioning system for my team. As they were not used to open source versioning system except those heavy, with a GUI and with and administrator

    After some web searches, I founded three main choices:

    @@ -82,7 +82,7 @@
  • Mercurial
  • -

    After trying each other I chosen Bazaar. It has the simplest User Interface*. My choice was done.

    +

    After trying each other I chosen Bazaar. It has the simplest User Interface*. My choice was done.

    From Bazaar to Git

    @@ -91,21 +91,21 @@

    After some times, reading on many blogs, I realize Git is far more popular and by influent people.

    I then decide to use Git in particular to version this current website. -But after trying it, I found it difficult and couter intuitive (I’ll speak a work about it later).

    +But after trying it, I found it difficult and couter intuitive (I’ll speak a work about it later).

    After calling for some help, when I say Bazaar is much simpler to learn, some people answer me that Git:

    -

    SO-MUCH-EASY my 12 year old daughter uses it to version its school documents. She has no difficulties at all, creating branches, blah, blah, blah…

    +

    SO-MUCH-EASY my 12 year old daughter uses it to version its school documents. She has no difficulties at all, creating branches, blah, blah, blah…

    If a 12 years old girl has no problem with Git and I (with my Computer Science Ph.D.) have difficulties to uses it like I want, it is frustrating and humiliating. But what makes Git natural for some people and confusing for me?

    -

    I finally understood why reading a document I didn’t read before. It was the untaught part of the conception. The part every developer found so natural it is not necessary to say a word about it. But it was not natural for me.

    +

    I finally understood why reading a document I didn’t read before. It was the untaught part of the conception. The part every developer found so natural it is not necessary to say a word about it. But it was not natural for me.

    -

    - I speak about ClearCase©. I know there exists command line tools. But it was not the way my team used it.

    +

    - I speak about ClearCase©. I know there exists command line tools. But it was not the way my team used it.

    -

    * - I never really given its chance to Mercurial. The terminology they chosen was too far from the svn one. And I was used to it.

    +

    * - I never really given its chance to Mercurial. The terminology they chosen was too far from the svn one. And I was used to it.

    @@ -113,7 +113,7 @@ But after trying it, I found it difficult and couter intuitive (I’ll speak
    -

    When you see explanation about branches and DCVS we imagine each branch is totally uncorrelated to each other, except when merging. Everything is magic. This is the “Parallel World” explanation. This way of seeing is explained more in depth in the real good article about branches on betterexplained.

    +

    When you see explanation about branches and DCVS we imagine each branch is totally uncorrelated to each other, except when merging. Everything is magic. This is the “Parallel World” explanation. This way of seeing is explained more in depth in the real good article about branches on betterexplained.

    Git was designed to manage the Linux Kernel. Git was designed using the concept of Patch instead of Parallel Worlds.

    @@ -124,11 +124,11 @@ But after trying it, I found it difficult and couter intuitive (I’ll speak
  • While Git seem base on the Patch model which will implie the creation of Parallel Worlds.
  • -

    I will not argument about which is the best. Just tell my vision of DCVS come from the Parallel World vision and Git was designed the other way.

    +

    I will not argument about which is the best. Just tell my vision of DCVS come from the Parallel World vision and Git was designed the other way.

    From Theory to Real Life Usage

    -

    I believe I understood conceptual mechanism under Git. But I had some difficulties with real usage. The worst point, the one I didn’t get before long was because I didn’t get really well the notion of Cheap Branching.

    +

    I believe I understood conceptual mechanism under Git. But I had some difficulties with real usage. The worst point, the one I didn’t get before long was because I didn’t get really well the notion of Cheap Branching.

    What is a Cheap Branch? If like me you come from Bazaar, it is a totally new notion. It is in fact the ability to create a branches all of them using the same directory.

    @@ -136,10 +136,10 @@ But after trying it, I found it difficult and couter intuitive (I’ll speak

    In theory, Cheap Branches are exactly like Bazaar branches. The word used is Branch and not Cheap Branch. But there is a slight difference between them. A slight difference between a Cloned Branch and a Cheap Branch.

    -

    A “Standard branch” is what is theoretically a kind of new Parallel World. +

    A “Standard branch” is what is theoretically a kind of new Parallel World. But Cheap branch was designed to be future Patch for the main branch of the directory/Cloned branch.

    -

    Of course, I know anybody can state you can totally use Cheap branches as Cloned branches. But they weren’t designed for that. On daily usage, it is a bit uneasy to use it like this.

    +

    Of course, I know anybody can state you can totally use Cheap branches as Cloned branches. But they weren’t designed for that. On daily usage, it is a bit uneasy to use it like this.

    Here how Git cheap branches should be used (for more details see Git for Designers):

    @@ -148,11 +148,11 @@ But Cheap branch was designed to be future Patch for the main
  • creation of a Cheap branch containing differences which have to be patched somewhere in the future into The Great Repository
  • -

    Here’s how you should not use Git:

    +

    Here’s how you should not use Git:

    • Get or creation of a repository
    • -
    • Create a cheap branch which will never push it’s modification to the main repository.
    • +
    • Create a cheap branch which will never push it’s modification to the main repository.

    This simple minor difference of point of view confused me a lot.

    @@ -232,15 +232,15 @@ With Bazaar it is:

      -
    • — Try to find the good keyword for this operation
    • -
    • — Wrong! Try again!
    • -
    • — False, it is not yet right!
    • +
    • — Try to find the good keyword for this operation
    • +
    • — Wrong! Try again!
    • +
    • — False, it is not yet right!
    -

    That were the Git bad side. But It has many advantages. Once you’ve understood the cheap branching paradigm. All became clearer for me after. Even if there is also some difficulties with the edit of the .git/config files (not user friendly at all).

    +

    That were the Git bad side. But It has many advantages. Once you’ve understood the cheap branching paradigm. All became clearer for me after. Even if there is also some difficulties with the edit of the .git/config files (not user friendly at all).

    -

    I must precise that I worked a lot with multi-modal logic and particularly about “Temporal Logics” (linear or not). This is why I was more inclined to see things this way. “Ah ! Just to remember my firsts love with computer science !”

    +

    I must precise that I worked a lot with multi-modal logic and particularly about “Temporal Logics” (linear or not). This is why I was more inclined to see things this way. “Ah ! Just to remember my firsts love with computer science !”

    @@ -257,15 +257,15 @@ Such as working on a fix on a totally isolated branches.

    Is Git better than Bazaar?

    -

    Speaking about features I’ll tell Git is the best. -But Git was too much in my way. Is was exactly what I didn’t want for my first DCVS.

    +

    Speaking about features I’ll tell Git is the best. +But Git was too much in my way. Is was exactly what I didn’t want for my first DCVS.

    -

    I shouldn’t have had those difficulties about understanding cheap branching which must be a patch. In reality, Git make a difference between the Tree and the Branch. Which is obviously not the case for Bazaar. Conceptually, bazaar is simpler to understand.

    +

    I shouldn’t have had those difficulties about understanding cheap branching which must be a patch. In reality, Git make a difference between the Tree and the Branch. Which is obviously not the case for Bazaar. Conceptually, bazaar is simpler to understand.

    Finally

    In conclusion, I use Git more often than Bazaar and I must say, that I have some preferences for Git. However, Git lack hardly clear commands name like revert. -For now I don’t made alias to correct that. But may be one day I should do that.

    +For now I don’t made alias to correct that. But may be one day I should do that.

    diff --git a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/index.html b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/index.html index 2d58728ad..6bf3f41df 100644 --- a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/index.html +++ b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/index.html @@ -70,20 +70,20 @@
    -

    Git is a DCVS, which means a Decentralized Concurrent Versions System. Let’s analyze each part of this long term:

    +

    Git is a DCVS, which means a Decentralized Concurrent Versions System. Let’s analyze each part of this long term:

    Versions System

    Firstly, versions system manage files. When somebody work with files without a versions system, the following happens frequently:

    -

    When you modify a somehow critical file you don’t want to loose. You copy naturally this file with another name. For example:

    +

    When you modify a somehow critical file you don’t want to loose. You copy naturally this file with another name. For example:

    $ cp fichier_important.c fichier_important.c.bak
     

    In consequence of what, the new file, play the role of backup. If you break everything, you can always return in the last state by overwriting your modifications. -Of course, this method is not very professional and is a bit limited. If you make many modifications, you’ll end with many files with strange names like:

    +Of course, this method is not very professional and is a bit limited. If you make many modifications, you’ll end with many files with strange names like:

    @@ -97,7 +97,7 @@ old.fichier_important.c
     
    -

    If you want to make it works correctly, you’ll have to use naming convention. Files take many place even if you modify most of time only some lines.

    +

    If you want to make it works correctly, you’ll have to use naming convention. Files take many place even if you modify most of time only some lines.

    Fortunately, versions system are here to help.

    @@ -105,13 +105,13 @@ old.fichier_important.c

    Once upon a time versions were managed for each file separately. I think about CVS. Then it naturally appears projects are a coherent set of files. Recover each file separately was a tedious work. This is why versions number passed from files to the entire project.

    -

    It is therefore possible to say, “I want to get back three days earlier”.

    +

    It is therefore possible to say, “I want to get back three days earlier”.

    -

    What gives versions system? (I didn’t mention everything at all)

    +

    What gives versions system? (I didn’t mention everything at all)

    • automatic backups: back in time,
    • @@ -128,7 +128,7 @@ old.fichier_important.c

      Version Systems are already useful to manage its own projects. They help to organize and resolve partially backup problems. I say partially because you have to backup your repository on a decent file system. But versions system are really interesting is on projects done by many people.

      -

      Let’s begin by an example, a two person project ; Alex and Beatrice. On a file containing a Lovecraft’s gods list:

      +

      Let’s begin by an example, a two person project ; Alex and Beatrice. On a file containing a Lovecraft’s gods list:

      @@ -187,7 +187,7 @@ Yogsototh
       
      • get without any problem others modifications,
      • send without any problem its own modifications to others,
      • -
      • manage conflicts. I didn’t speak about it, but sometimes a conflict can occur (when two different people modify the same line on a file for example). SVC help to resolve such problem. More on that later,
      • +
      • manage conflicts. I didn’t speak about it, but sometimes a conflict can occur (when two different people modify the same line on a file for example). SVC help to resolve such problem. More on that later,
      • help to know who done what and when.
      @@ -199,7 +199,7 @@ Yogsototh

      This word became popular only recently about CVS. And it mainly means two things:

      -

      First, until really recently (SVN), you’ll have to be connected to the distant server to get informations about a project. Like get the history. New decentralized systems work with a local REPOSITORY (directory containing backups and many informations linked to the versions system functionalities). Hence, one can view the history of a project without the need of being connected.

      +

      First, until really recently (SVN), you’ll have to be connected to the distant server to get informations about a project. Like get the history. New decentralized systems work with a local REPOSITORY (directory containing backups and many informations linked to the versions system functionalities). Hence, one can view the history of a project without the need of being connected.

      All instances of a project can live independently.

      @@ -212,7 +212,7 @@ Yogsototh

      Typical example:

      -

      I develop my project. I’m ameliorating something. An urgent bug is reported.

      +

      I develop my project. I’m ameliorating something. An urgent bug is reported.

      With a DCVS I can easily, get back to the version with the bug. Fix it. Send the fix. Get back to my feature work. And even, use the fix for the new version with my new feature.

      @@ -237,7 +237,7 @@ Yogsototh

      To resume

      -

      Let’s resume what we can easily do with DCVS:

      +

      Let’s resume what we can easily do with DCVS:

      Versions Systems

      @@ -263,7 +263,7 @@ Yogsototh
    • Easily manipulate branches
    -

    Now let’s see how to obtain all these things easily with Git.

    +

    Now let’s see how to obtain all these things easily with Git.

    diff --git a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/index.html b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/index.html index 1276be951..a78b3c7a9 100644 --- a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/index.html +++ b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/index.html @@ -84,7 +84,7 @@

    Conflicts management

    -

    Conflicts can arise when you change the same line of code on the same file from another branch you’re merging. It can seems a bit intimidating, but with Git this kind of thing is really simple to handle.

    +

    Conflicts can arise when you change the same line of code on the same file from another branch you’re merging. It can seems a bit intimidating, but with Git this kind of thing is really simple to handle.

    example

    @@ -158,8 +158,8 @@ git commit -a -m "conflict -

    Now you’re ready to use Git. -Git provide many other functionnalities. Now we’ll see some Git usages older CVS couldn’t handle.

    +

    Now you’re ready to use Git. +Git provide many other functionnalities. Now we’ll see some Git usages older CVS couldn’t handle.

    diff --git a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/index.html b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/index.html index 7d4c15654..1f0b9c81c 100644 --- a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/index.html +++ b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/index.html @@ -70,9 +70,9 @@

    All was done to code and decide how to organize your versions after. In other VCS it is not as natural as in Git.

    -

    With Git you can depend of many different sources. Then, there is not necessarily a ‘master’ repository where everybody puts its modifications.

    +

    With Git you can depend of many different sources. Then, there is not necessarily a ‘master’ repository where everybody puts its modifications.

    -

    What changes the most with Git when you come from SVN, it’s the idea of a centralized project on one server. With Git many people could work on the same project but not necessarily on the same repository as main reference. One can easily fix a bug and send a patch to many different versions of a project.

    +

    What changes the most with Git when you come from SVN, it’s the idea of a centralized project on one server. With Git many people could work on the same project but not necessarily on the same repository as main reference. One can easily fix a bug and send a patch to many different versions of a project.

    diff --git a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html index e8230cfb6..aa6e563f4 100644 --- a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html +++ b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html @@ -127,7 +127,7 @@ $ cd ~/Projets $ git clone git://main.server/path/to/file -

    If there is no git server but you’ve got an ssh access. Just replace the git://host by ssh://user@host. In order not to type your password each time, use:

    +

    If there is no git server but you’ve got an ssh access. Just replace the git://host by ssh://user@host. In order not to type your password each time, use:

     $ ssh-keygen -t rsa
    @@ -151,7 +151,7 @@ me@main.server$ rm id_rsa.pub
     me@main.server$ logout
     
    -

    Now you don’t need to write your password to access the main.server.

    +

    Now you don’t need to write your password to access the main.server.

    Creating a new project

    @@ -164,7 +164,7 @@ $ git add . $ git commit -m "Initial commit" -

    Let do a small remark. If you don’t want to version every file. Typically intermediate compilation file, swap files… Then you need to exclude them. Just before launching the git add . command. You need to create a .gitignore file in the root directory of your project. This file will contain all exclude pattern. For example:

    +

    Let do a small remark. If you don’t want to version every file. Typically intermediate compilation file, swap files… Then you need to exclude them. Just before launching the git add . command. You need to create a .gitignore file in the root directory of your project. This file will contain all exclude pattern. For example:

     *.o
    diff --git a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html
    index b34e6a7b8..febab8250 100644
    --- a/output/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html
    +++ b/output/Scratch/en/blog/2009-11-12-Git-for-n00b/index.html
    @@ -62,7 +62,7 @@
     
    -

    A detailed tutorial of Git for people knowing very few about versions systems. You’ll understand utility of such program and how we use modern version control system. I try to stay as pragmatic as possible.

    +

    A detailed tutorial of Git for people knowing very few about versions systems. You’ll understand utility of such program and how we use modern version control system. I try to stay as pragmatic as possible.

    @@ -110,7 +110,7 @@ git commit -a -m "Fix bug git push
    -

    This article is written for people knowing very few about versionning systems. It is also written for those who had didn’t followed progress since CVS or subversion (SVN). This is why, in a first time I’ll explain quickly which are the goal of such systems. Secondly, I’ll explain how to install and configure Git. Then, I give the command for each feature a DCVS must have.

    +

    This article is written for people knowing very few about versionning systems. It is also written for those who had didn’t followed progress since CVS or subversion (SVN). This is why, in a first time I’ll explain quickly which are the goal of such systems. Secondly, I’ll explain how to install and configure Git. Then, I give the command for each feature a DCVS must have.

    diff --git a/output/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html b/output/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html index 486210497..0b5477768 100644 --- a/output/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html +++ b/output/Scratch/en/blog/2009-12-06-iphone-call-filter/index.html @@ -56,7 +56,7 @@

    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

    +

    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

    diff --git a/output/Scratch/en/blog/2009-12-14-Git-vs--Bzr/index.html b/output/Scratch/en/blog/2009-12-14-Git-vs--Bzr/index.html index 8683f452e..9df8a5ed0 100644 --- a/output/Scratch/en/blog/2009-12-14-Git-vs--Bzr/index.html +++ b/output/Scratch/en/blog/2009-12-14-Git-vs--Bzr/index.html @@ -62,7 +62,7 @@
    -

    Why even if I believe git has many bad point I believe it is the best DCVS around to work with. This is why I first tell why I prefer Bazaar over Git. Secondly I’ll talk about the only advantage of git against Bazaar which lead me to prefer it.

    +

    Why even if I believe git has many bad point I believe it is the best DCVS around to work with. This is why I first tell why I prefer Bazaar over Git. Secondly I’ll talk about the only advantage of git against Bazaar which lead me to prefer it.

    @@ -74,7 +74,7 @@

    There is two way of perceive version control system. Either you think in term of branches (see the really good article on betterexplained) or think in term of patches. Another way to say that, is weather you concentrate on vertices or on transitions of the graph of possible states of your project.

    -

    This is the second approach who was behind git and this is the first behind Bazaar. git was created by Linus Torvald in order to close some gap in the version system used to develop the Linux kernel. And patches is a term which is more present than ‘state’ in the development community.

    +

    This is the second approach who was behind git and this is the first behind Bazaar. git was created by Linus Torvald in order to close some gap in the version system used to develop the Linux kernel. And patches is a term which is more present than ‘state’ in the development community.

    I first was convinced by Bazaar. Why? Argument in favor of Bazaar were: user friendly, terminology close to the subversion one. And I tried a bit the two, and it was clearly more natural for me to use Bazaar. But after seeing so many people using git I decided to give it a serious try.

    @@ -102,11 +102,11 @@ git checkout pipo git checkout ./pipo -

    Yes, hum…

    +

    Yes, hum…

    It works, but it is clearly not really user friendly. Furthermore, checkout had a complete different signification in older CSV like cvs et svn. checkout was used to get a distant project locally.

    -

    Bazaar terminology is far more natural, because there is no command to change the current branch as there is only one branch per directory. Changing a branch in Bazaar is changing the current directory. I also believe it is the biggest problem of Bazaar, I’ll tell you why. And to undo things in Bazaar:

    +

    Bazaar terminology is far more natural, because there is no command to change the current branch as there is only one branch per directory. Changing a branch in Bazaar is changing the current directory. I also believe it is the biggest problem of Bazaar, I’ll tell you why. And to undo things in Bazaar:

     bzr revert pipo
    @@ -159,7 +159,7 @@ git commit -m "reverted 3
     
     

    The rule is simple: NEVER use the git reset command on a version somebody else could have fetched

    -

    It was said. Discover the best method took me some time. I’d made many different tries. The safer and best way of reverting back your tree is to use this method. If you want to make it automatic just had the following alias in your ~/.gitconfig. Of course this alias will work only on environment having zsh installed. Which is the cas for most UNIX (Ubuntu, Mac OS X…).

    +

    It was said. Discover the best method took me some time. I’d made many different tries. The safer and best way of reverting back your tree is to use this method. If you want to make it automatic just had the following alias in your ~/.gitconfig. Of course this alias will work only on environment having zsh installed. Which is the cas for most UNIX (Ubuntu, Mac OS X…).

    @@ -170,7 +170,7 @@ git commit -m "reverted 3
     
     

    What make git by far the best DCVS today

    -

    After talking about the negatives points of git, now it’s time to speak about the very positive feature that make git the best DCVS in my humble opinion.

    +

    After talking about the negatives points of git, now it’s time to speak about the very positive feature that make git the best DCVS in my humble opinion.

    Cheap branching

    diff --git a/output/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html b/output/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html index 1deece8e6..6a5bc1fb3 100644 --- a/output/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html +++ b/output/Scratch/en/blog/2010-02-15-All-but-something-regexp/index.html @@ -66,7 +66,7 @@ But, there exists a major problem: the complementary of a regular language might not be regular. Then, for some expression it is absolutely impossible to negate a regular expression.

    -

    But sometimes with some simple regular expression it should be possible. Say you want to match everything containing the some word say bull but don’t want to match bullshit. Here is a nice way to do that:

    +

    But sometimes with some simple regular expression it should be possible. Say you want to match everything containing the some word say bull but don’t want to match bullshit. Here is a nice way to do that:

     # match all string containing 'bull' (bullshit comprised)
    @@ -122,7 +122,7 @@ There certainly exists many other methods. But the important lesson is
     it is not straightforward to exclude something of a regular expression.


    -

    +

    It can be proved that any regular set minus a finite set is also regular.

    diff --git a/output/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html b/output/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html index d6c4d3327..dc2f51842 100644 --- a/output/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html +++ b/output/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/index.html @@ -54,7 +54,7 @@
    -

    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:

    +

    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:

     a.....a......b..b..a....a....b...
    @@ -75,7 +75,7 @@ a.....a......b..b..a....
     
     

    The next natural way, is to change the greediness. But it is not enough as you will match from the first a to the first b. -Then a simple constatation is that our matching string shouldn’t contain any a nor b. Which lead to the last elegant solution.

    +Then a simple constatation is that our matching string shouldn’t contain any a nor b. Which lead to the last elegant solution.

     /a[^ab]*b/
    @@ -105,7 +105,7 @@ For example:

    <li>...<li</li>
    -

    That string should not match. This is why if we really want to match it correctly we need to add:

    +

    That string should not match. This is why if we really want to match it correctly we need to add:

     <li>([^<]|<[^l]|<l[^i]|<li[^>])*(|<|<l|<li)</li>
     
    @@ -142,7 +142,7 @@ For example:

    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.


    -

    I know I used an HTML syntax example, but in my real life usage, I needed to match between en: and ::. And sometimes the string could finish with e::.

    +

    I know I used an HTML syntax example, but in my real life usage, I needed to match between en: and ::. And sometimes the string could finish with e::.

    diff --git a/output/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html b/output/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html index a41e77c8c..386eed944 100644 --- a/output/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html +++ b/output/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/index.html @@ -54,7 +54,7 @@
    -

    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. +

    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.

    diff --git a/output/Scratch/en/blog/2010-03-22-Git-Tips/index.html b/output/Scratch/en/blog/2010-03-22-Git-Tips/index.html
    index ca017a431..f9d1e576b 100644
    --- a/output/Scratch/en/blog/2010-03-22-Git-Tips/index.html
    +++ b/output/Scratch/en/blog/2010-03-22-Git-Tips/index.html
    @@ -72,7 +72,7 @@ git clone git+ssh://git@github.com:443/yogsototh/project.git
     
     

    git clone can only fetch the master branch.

    -

    If you don’t have much branches, you can simply use clone your project and then use the following command:

    +

    If you don’t have much branches, you can simply use clone your project and then use the following command:

     git branch --track local_branch remote_branch
    diff --git a/output/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html b/output/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html
    index b8c3bce0f..4e27a1fe9 100644
    --- a/output/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html
    +++ b/output/Scratch/en/blog/2010-03-23-Encapsulate-git/index.html
    @@ -128,7 +128,7 @@ git co clientB && git merge client
         :dev => [ :master ],
         :client => [ :clientA, :clientB ] }
     
    -def get_current_branch()
    +def get_current_branch()
         (`git branch --no-color | awk '$1 == "*" {print $2}'`).chop.intern
     end
     
    diff --git a/output/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html b/output/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html
    index bc4f5f05b..136737ad6 100644
    --- a/output/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html
    +++ b/output/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/index.html
    @@ -60,14 +60,14 @@
       

    The more you wait to do something, the more difficult it is to start doing it.

    -

    I had to write another post for this blog. I had added many article idea in my todolist. But, I made many other things, and I’ve always said (until now), I’ll do this later. What changed my mind is the haunt of this simple remark about how to be productive in programming. +

    I had to write another post for this blog. I had added many article idea in my todolist. But, I made many other things, and I’ve always said (until now), I’ll do this later. What changed my mind is the haunt of this simple remark about how to be productive in programming. > Stop write TODO in your code and make it now!
    -> You’ll be surprised by the results.

    +> You’ll be surprised by the results.

    In short: > Just do it! ou Juste fait le comme auraient dit les nuls.

    -

    Finally I’ll certainly write blog post more often for a short period of time.

    +

    Finally I’ll certainly write blog post more often for a short period of time.

    What did I do?

    @@ -77,7 +77,7 @@

    I also have a real life. I enjoyed some vacancies with my family.

    -

    I work with Luc on a simple ruby REST/JSON/API oriented framework. It works fairly well, with really few bug until now. We planify to make a simple todolist tutorial. May be in two to three blog posts. This framework is not public for now. It will certainly be after we’ll create some simple web service with it and made a nice website for it.

    +

    I work with Luc on a simple ruby REST/JSON/API oriented framework. It works fairly well, with really few bug until now. We planify to make a simple todolist tutorial. May be in two to three blog posts. This framework is not public for now. It will certainly be after we’ll create some simple web service with it and made a nice website for it.

    Then what I plan to do from now:

    @@ -89,7 +89,7 @@
  • provide the sources of this website on github
  • -

    There is some random in some of these achivement mostly because they don’t depend totally on me.

    +

    There is some random in some of these achivement mostly because they don’t depend totally on me.

    diff --git a/output/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html b/output/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html index fee760a78..380bbd4fa 100644 --- a/output/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html +++ b/output/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html @@ -86,7 +86,7 @@

    Argh! In the middle of an <img> tag.

    -

    In fact, it is not as difficult as it should sound first. The secret is, you don’t need to keep the complete tree structure to repair it, but only the list of not closed parents.

    +

    In fact, it is not as difficult as it should sound first. The secret is, you don’t need to keep the complete tree structure to repair it, but only the list of not closed parents.

    Given with our example, when we are after the first paragraph. we only have to close the div for class corps and the XML is repaired. Of course, when you cut inside a tag, you sould go back, as if you where just before it. Delete this tag and all is ok.

    @@ -159,7 +159,7 @@ for each tag in the stack, pop it, and write:
    -

    I don’t know if the code can help you, but the raisonning should definitively be known.

    +

    I don’t know if the code can help you, but the raisonning should definitively be known.

    diff --git a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png index a39289809..152c6c1d2 100644 Binary files a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png and b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png differ diff --git a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png index ae8c96b84..4b2d67e93 100644 Binary files a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png and b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png differ diff --git a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html index aaedeb786..a6704324f 100644 --- a/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html +++ b/output/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html @@ -71,7 +71,7 @@
  • Used a pen and a sheet of paper
  • Made some math.
  • Crushed the problem in 10 minutes
  • -
  • Conclusion: The pragmatism shouldn’t mean “never use theory”.
  • +
  • Conclusion: The pragmatism shouldn’t mean “never use theory”.
  • @@ -86,10 +86,10 @@ I entered in the infernal: try & repair loop. Each step was like:

    -

    – Just this thing to repair and that should be done.
    - – OK, now that should just work.
    - – Yeah!!!
    - – Oops! I forgotten that…
    +

    – Just this thing to repair and that should be done.
    + – OK, now that should just work.
    + – Yeah!!!
    + – Oops! I forgotten that…
    repeat until death

    @@ -173,7 +173,7 @@ I had to face a problem of the same kind at my job. The problem was simple to th

    You can try if you want. If you attack the problem directly opening an editor, I assure you, it will certainly be not so simple. -I can tell that, because it’s what I’ve done. And I must say I lost almost a complete day at work trying to resolve this. There was also, many small problems around that make me lose more than two days for this problem.

    +I can tell that, because it’s what I’ve done. And I must say I lost almost a complete day at work trying to resolve this. There was also, many small problems around that make me lose more than two days for this problem.

    Why after two days did I was unable to resolve this problem which seems so simple?

    @@ -194,14 +194,14 @@ I thought about how to resolve the problem but with the eyes of a pragmatic

    That should be a simple perl search and replace program.
    -Let’s begin to write code

    +Let’s begin to write code

    This is the second sentence that was plainly wrong. I started in the wrong direction. And the workflow did not work from this entry point.

    Think

    -

    After some times, I just stopped to work. Tell myself “it is enough, now, I must finish it!”. +

    After some times, I just stopped to work. Tell myself “it is enough, now, I must finish it!”. I took a sheet of paper, a pen and began to draw some trees.

    I began by make by removing most of the verbosity. @@ -307,7 +307,7 @@ M - V - M - V - tag2 tag1

    can be done using the following one state deterministic tree transducer:

    -

    C → ε
    +

    C → ε
    E → M
    R → V

    @@ -338,10 +338,10 @@ M - V - M - V - tag2 tag1
    1. -

      Hopefully I am in the 10% who had given a bug free implementation.

      +

      Hopefully I am in the 10% who had given a bug free implementation.

    2. -

      I did a program which generate automatically the weight in a matrix of each edit distance from data.

      +

      I did a program which generate automatically the weight in a matrix of each edit distance from data.

    diff --git a/output/Scratch/en/blog/2010-06-14-multi-language-choices/index.html b/output/Scratch/en/blog/2010-06-14-multi-language-choices/index.html index b505f908b..9716439b3 100644 --- a/output/Scratch/en/blog/2010-06-14-multi-language-choices/index.html +++ b/output/Scratch/en/blog/2010-06-14-multi-language-choices/index.html @@ -73,7 +73,7 @@ here is an example of english text.

    This way of handling translations force you to write completely an article in one language, copy it, and translate it.

    -

    However, most of time, there are common parts like images, source code, etc… +

    However, most of time, there are common parts like images, source code, etc… When I want to correct some mistake on these parts, I have to make twice the work. With sometimes adding another mistake in only one language.

    This is why I preferred to handle it differently. @@ -89,7 +89,7 @@ Finally my files looks like:

    [image](url)
    -

    As I edit my files with vim, it is really easy to add fr: or en: at some line’s beginning using the useful C-v. +

    As I edit my files with vim, it is really easy to add fr: or en: at some line’s beginning using the useful C-v. However nanoc was conceived to be used for one language only. Or to be used with the first method. I tried to adapt nanoc to my usage. But after a while, I found it easier to pre-filter the nanoc work by a simple script. My script transform my file into two new files. And all work like a charm.

    You can get my blog code source (without most of articles) at github.com/yogsototh/Scratch.

    diff --git a/output/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html b/output/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html index 45eacf58b..ca219514a 100644 --- a/output/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html +++ b/output/Scratch/en/blog/2010-06-15-Get-my-blog-engine/index.html @@ -66,7 +66,7 @@ You can get it on github.comintenseDebate comments integration (asynchronous) ;
  • Portable with and without javascript, XHTML Strict 1.0 / CSS3,
  • Write in markdown format (no HTML editing needed),
  • -
  • Typographic ameliorations (no ‘:’ starting a line in French for example),
  • +
  • Typographic ameliorations (no ‘:’ starting a line in French for example),
  • Graphviz graph generation integration.
  • @@ -104,9 +104,9 @@ $ ./task/recompile

    Multi-language

    All files in multi are processed and copied in the content directory. -For each file in multi, each line starting by ‘fr: ’ are copied (without the fr: into the content/html/fr/ tree, but not into the content/html/en tree. File not starting by fr: or en: are copied in each destinations.

    +For each file in multi, each line starting by ‘fr: ’ are copied (without the fr: into the content/html/fr/ tree, but not into the content/html/en tree. File not starting by fr: or en: are copied in each destinations.

    -

    If you want to add another language, you’ll have to modify tasks/config, and config.yaml, create a content/html/xx where xx is the language code.

    +

    If you want to add another language, you’ll have to modify tasks/config, and config.yaml, create a content/html/xx where xx is the language code.

    Edition & Rendering

    @@ -120,7 +120,7 @@ For each file in multi, each line starting by ‘fr: ’ ar

    Typography

    -

    In French all ‘:’, ‘;’, ‘!’ and ‘?’ are preceded automatically by &nbsp. This enable not to have a line starting by a single special character.

    +

    In French all ‘:’, ‘;’, ‘!’ and ‘?’ are preceded automatically by &nbsp. This enable not to have a line starting by a single special character.

    You can use small caps using <sc> tags.

    diff --git a/output/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html b/output/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html index f776f23a8..a1c86c060 100644 --- a/output/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html +++ b/output/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/index.html @@ -119,7 +119,7 @@ _gaq.push([
    -

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

    +

    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:

    diff --git a/output/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html b/output/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html index 4adb3771a..ff53e9896 100644 --- a/output/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html +++ b/output/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/index.html @@ -64,7 +64,7 @@
  • Tried to make YPassword in jQuery and with Cappuccino.
  • Cappuccino nice in desktop browser but 1.4MB, not compatible with iPhone.
  • jQuery not as nice as the Cappuccino version but 106KB. iPhone compatible.
  • -
  • I’ll give a try to Dashcode 3.
  • +
  • I’ll give a try to Dashcode 3.
  • @@ -97,7 +97,7 @@ I then made a second version with the Cappuccino
    -

    If you don’t mind about what does my widget and just want to know how the two frameworkcompare, you should go +

    If you don’t mind about what does my widget and just want to know how the two frameworkcompare, you should go directly to the next part.

    @@ -137,7 +137,7 @@ hash=sha1( masterPasswo
  • maximal length,
  • must not contain a special character,
  • must contain a special character,
  • -
  • etc…
  • +
  • etc…
  • And if you want to change your password the leak number is here for that. @@ -153,14 +153,14 @@ All informations such as user name, maximal length can be stored in a public fil

    Cappuccino

    -

    First, I’d like to say Cappuccino applications look simply awesome. +

    First, I’d like to say Cappuccino applications look simply awesome. It is like having a Cocoa application in your web browser. And this is great.

    I also must admit I enjoyed making my application with Cappuccino. It is like programming for an iPhone application. If you are a bit familiar with Cocoa, you feel at home. -If you don’t know anything about Cocoa, I suggest you to look at it. +If you don’t know anything about Cocoa, I suggest you to look at it. This is a really great framework to make User Interface. I am not a specialist, but I have done some MFC, java Swing1 and WXWindows User Interfaces (some years ago). And I must say, Cocoa is far better than those.

    @@ -177,45 +177,45 @@ But there was also some drawbacks

  • I could have done the User Interface using Interface Builder.
  • -

    Some things I didn’t like:

    +

    Some things I didn’t like:

    • I made some time to understand how to handle the onChange on the text fields.
    • Documentation lacked a bit of organisation.
    • -
    • It doesn’t work on iPhone.
    • +
    • It doesn’t work on iPhone.
    • It weighted 11MB to deploy.
    • It weight 1.3MB to load.
    -

    I didn’t use bindings because I believe they are not ready by now.

    +

    I didn’t use bindings because I believe they are not ready by now.

    jQuery

    -

    The jQuery version of YPassword is not as finished as the Cappuccino one. Because, there is no slider directly with jQuery. I’d have to use jQueryUI. And I believe, using it will make the application weight far more than the today 106KB.

    +

    The jQuery version of YPassword is not as finished as the Cappuccino one. Because, there is no slider directly with jQuery. I’d have to use jQueryUI. And I believe, using it will make the application weight far more than the today 106KB.

    -

    To make this version I simply copied my widget source code and adapted it. It was straightforward. But jQuery is not an application oriented framework. It is more a “dark side javascript animation framework”2.

    +

    To make this version I simply copied my widget source code and adapted it. It was straightforward. But jQuery is not an application oriented framework. It is more a “dark side javascript animation framework”2.

    -

    I don’t have too much to say about the jQuery version. But this was way more low level programming than Cappuccino.

    +

    I don’t have too much to say about the jQuery version. But this was way more low level programming than Cappuccino.

    My conclusion

    -

    If you want to make an iPhone compatible web application just don’t use Cappuccino yet. +

    If you want to make an iPhone compatible web application just don’t use Cappuccino yet. If you want to make simple application like mine, I also believe, Cappuccino is a bit too much.

    If you want to make a complex web oriented application, Cappuccino is a great choice. But you may have some difficulties to begin programming with it.

    -

    Finally, to terminate my web version of my widget, I’ll give a try to Dashcode 3. +

    Finally, to terminate my web version of my widget, I’ll give a try to Dashcode 3. It seems to be a good alternative to create web widgets. -I don’t know if Dashcode 3 is portable on non webkit browser. +I don’t know if Dashcode 3 is portable on non webkit browser. But if it is, it could be the end of projects like Cappuccino and Sproutcore.


    1. -

      If you are interested you can take a look at SEDiL. I am proud of the tree drawing view made from scratch.

      +

      If you are interested you can take a look at SEDiL. I am proud of the tree drawing view made from scratch.

    2. -

      I don’t want to feel like a troll I use jQuery to make some dark side animation on this blog. But the javascript on my blog is not needed except for commenting.

      +

      I don’t want to feel like a troll I use jQuery to make some dark side animation on this blog. But the javascript on my blog is not needed except for commenting.

    diff --git a/output/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html b/output/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html index 9c38c3917..3204aadd0 100644 --- a/output/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html +++ b/output/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html @@ -55,7 +55,7 @@

    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. +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:

      @@ -69,7 +69,7 @@ I was a bit surprised, because I make some test into a really slow virt

      Safari and Chrome use webkit, when you access my website with javascript enabled, an additionnal browser specific CSS is loaded. Until now I switched only between: IE, Mozilla and Webkit. Now I added one more special case for Chrome. Now I continue to use gradient for Safari but no more on Chrome.

      -

      I didn’t tried to verify the efficiency of all new CSS 3 features. But I advise you not to use -webkit-gradient on Chrome. At least when the host is a Linux.

      +

      I didn’t tried to verify the efficiency of all new CSS 3 features. But I advise you not to use -webkit-gradient on Chrome. At least when the host is a Linux.

      Box Shadows

      @@ -77,7 +77,7 @@ I was a bit surprised, because I make some test into a really slow virt

      Text Shadows

      -

      Many tell me to use text-shadows sparingly. But I believe it was not the real reason of the slow down. This is why I’ll get them back.

      +

      Many tell me to use text-shadows sparingly. But I believe it was not the real reason of the slow down. This is why I’ll get them back.

      Conclusion

      diff --git a/output/Scratch/en/blog/2010-07-09-Indecidabilities/index.html b/output/Scratch/en/blog/2010-07-09-Indecidabilities/index.html index b76e3bc81..9fd20c335 100644 --- a/output/Scratch/en/blog/2010-07-09-Indecidabilities/index.html +++ b/output/Scratch/en/blog/2010-07-09-Indecidabilities/index.html @@ -85,10 +85,10 @@

      If a demiurge made our world, he certainly had a great sense of humor. After this read, you should be convinced. -I’ll pretend to be him. -I’ll create a simplified world. +I’ll pretend to be him. +I’ll create a simplified world. A world that obey to simple mathematical rules. -And I’ll tell you about one of the curse on this world: the undecidability. +And I’ll tell you about one of the curse on this world: the undecidability. The inability to know if we had find the truth. The inability to predict many things that should be natural. Here begin the story.

      @@ -102,9 +102,9 @@ Here begin the story.

      In the beginning there was only void. Then a blog post beginning to be written. I breath profoundly to feel the weight of the act I will accomplish. -A last tense moment and… I create the Universe. +A last tense moment and… I create the Universe. An incredible Universe which will exists only the time of this read. -I’m the demiurge of this universe and you are its observer.

      +I’m the demiurge of this universe and you are its observer.

      I construct this world using only simples rules. I decide that real rules of this world will be the one we believe are true for our world. @@ -113,7 +113,7 @@ For their world, everything we believe today is true for them. Their world is then probably simpler than our. Particularly, we can describe this world with axioms and mathematic rules. It is not so sure for our Universe. -But we’ll talk about that later.

      +But we’ll talk about that later.

      Lets the work begin. I create an Earth. @@ -123,14 +123,14 @@ In particular they try to understand their world. They believe that if they know the rules of their world they will be able to predict the consequences of most of their acts. They are so naive. If only they knew. -But I’m here to help them.

      +But I’m here to help them.

      I am a God who likes jokes. The first joke I make to Ys is to make their sense imperfect. Furthermore it is not possible to make perfect precise measure in my world. I let Ys ameliorate their technology but there is a theoretical limit to the best precision they can reach.

      -

      I’d like to precise that these people believe their world is flat. +

      I’d like to precise that these people believe their world is flat. Some believe it is possible to find the rules of their Universe. Now, let the game begins.

      @@ -157,14 +157,14 @@ The proof is based on rules and axioms. How to be certain these rules and axioms are right in their world? They will try to measure again and again the sum of the angles of triangles. The measure will never fail. -But they’ll never be certain the rules and axioms are right. +But they’ll never be certain the rules and axioms are right. Because then only way to verify all axioms depends of observation. And as a facetious god, I forbid perfect measure in observation.

      Of course, they prey, they call me to help. -And as any respectful god, I don’t answer. -Ah ah ah! I’ve always loved to make these kind of thing. -Let’s act as if I don’t exists. +And as any respectful god, I don’t answer. +Ah ah ah! I’ve always loved to make these kind of thing. +Let’s act as if I don’t exists. What a good joke!

      They feel sad. But they have some hope:

      @@ -180,7 +180,7 @@ What a good joke!

      no name

      Unfortunately, the three bodies problem will crush this hope. -Using Newton’s Universal Law of gravitation with two bodies, we can predict with precision what will be their position and speed in the future. +Using Newton’s Universal Law of gravitation with two bodies, we can predict with precision what will be their position and speed in the future. Until there all seems OK. But now, add another body. All errors will grow. @@ -198,13 +198,13 @@ Errors will grow at a point that any prediction will be unusable.

      no name

      -

      Consider some GPS coordinates on a point around the cost of the “Bretagne” in France. +

      Consider some GPS coordinates on a point around the cost of the “Bretagne” in France. The coordinates are 3 feet precise. Is the point in the water or on Earth?

      For some coordinates it is not possible to know. Even if we are authorize to move a bit to dodge the borders. -Because there are some zone in which all point could be a “border” for any size of the zone.

      +Because there are some zone in which all point could be a “border” for any size of the zone.

      We can even imagine some mathematical structure where all points are at the border[^2]. [^2]: The set R\Q has this property.

      @@ -215,7 +215,7 @@ Because there are some zone in which all point could be a “border” f

      Until there all problem were undecidable because of measure errors. May be in a controlled world without any error we should be able to predict anything.
      -I’m sorry to say no. +I’m sorry to say no. Even in a self-contained mathematical world it can be possible to create object with an unpredictable behaviour.

      It is the halting problem.

      @@ -231,8 +231,8 @@ More precisely:

      Hypothesis: there exists a program P such that:

        -
      • P(x,y) return “stop” in a finite amount of time if x(y)1 will stop running.
      • -
      • P(x,y) return “loop” in a finite amount of time if x(y) will never stop running.
      • +
      • P(x,y) return “stop” in a finite amount of time if x(y)1 will stop running.
      • +
      • P(x,y) return “loop” in a finite amount of time if x(y) will never stop running.

      Remark: Any program can be represented as a string. Therefore, a program can be used as the input of another program. @@ -241,15 +241,15 @@ It is authorized to write P(x,x).

      Let Q be the following program using the return value of P. <pre class="twilight"> Q(x) : - if P(x,x)=”stop” then I enter in an infinite loop - if P(x,x)=”loop” then I stop + if P(x,x)=”stop” then I enter in an infinite loop + if P(x,x)=”loop” then I stop </pre>

      Now, what is the value of P(Q,Q)?

        -
      • if P(Q,Q) returns “stop” that imply by construction of Q that P(Q,Q) returns “loop”.
      • -
      • if P(Q,Q) returns “loop” that means by construction of Q that P(Q,Q) return “stop”.
      • +
      • if P(Q,Q) returns “stop” that imply by construction of Q that P(Q,Q) returns “loop”.
      • +
      • if P(Q,Q) returns “loop” that means by construction of Q that P(Q,Q) return “stop”.

      Therefore there is a contradiction the only way to handle is by the non existence of the program P.

      @@ -257,7 +257,7 @@ Q(x) :

      I am the demiurge of this imaginary world. And I cannot know the future of this world. -Therefore, creative power isn’t equivalent to omnipotence.

      +Therefore, creative power isn’t equivalent to omnipotence.

    @@ -267,11 +267,11 @@ Therefore, creative power isn’t equivalent to omnipotence.

    After all this, it becomes difficult to know what we can believe. But it would be another error to throw away all our knowledge. -In a future next part, I’ll explain what we can hope and what attitude we should have once we’ve realized most of truth are unaccessible.

    +In a future next part, I’ll explain what we can hope and what attitude we should have once we’ve realized most of truth are unaccessible.


    1. -

      Meaning x taking y as input.

      +

      Meaning x taking y as input.

    diff --git a/output/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html b/output/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html index 5466658d4..91ea7ff81 100644 --- a/output/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html +++ b/output/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/index.html @@ -135,12 +135,12 @@ heroku create git push heroku master
    -

    Now I’ll should be able to redirect properly to my own 404 page for example. +

    Now I’ll should be able to redirect properly to my own 404 page for example. I hope it is helpful.


    1. -

      I was inspired by this article.

      +

      I was inspired by this article.

    diff --git a/output/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html b/output/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html index 11cc0aae9..ff166039c 100644 --- a/output/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html +++ b/output/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html @@ -55,8 +55,8 @@

    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. +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

    @@ -67,7 +67,7 @@ uuencode fic.jpg fic.jpg | mail -s @@ -118,7 +118,7 @@ H4sICB6Ke0wAA2Rjcl93aXRob3V0X2tleXdvcmQuY3N2ANSdW5ubOJPH7/e7 ... -

    And to obtain the “encoded” file in base64 I used:

    +

    And to obtain the “encoded” file in base64 I used:

    uuencode -m fic.jpg fic.jpg diff --git a/output/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html b/output/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html index 1836764c5..e17e6e255 100644 --- a/output/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html +++ b/output/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html @@ -57,7 +57,7 @@

    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.

    +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. diff --git a/output/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html b/output/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html index 19d6ae195..5efc8aa7c 100644 --- a/output/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html +++ b/output/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html @@ -60,7 +60,7 @@ here are two functions to add to your code to have base64 and To use it, simply copy the code in your class and use as this:

    -#import <CommonCrypto/CommonDigest.h>
    +#import <CommonCrypto/CommonDigest.h>
     ...
     NSString *b64_hash = [self b64_sha1:@"some NSString to be sha1'ed"];
     ...
    @@ -72,46 +72,46 @@ here are two functions to add to your code to have base64 and 
     
    -- (unsigned char *)sha1:(NSString *)baseString result:(unsigned char *)result {
    -    char *c_baseString=(char *)[baseString UTF8String];
    -    CC_SHA1(c_baseString, strlen(c_baseString), result);
    -    return result;
    +- (unsigned char *)sha1:(NSString *)baseString result:(unsigned char *)result {
    +    char *c_baseString=(char *)[baseString UTF8String];
    +    CC_SHA1(c_baseString, strlen(c_baseString), result);
    +    return result;
     }
     
    -- (NSString *)base64:(unsigned char *)result {
    -    NSString *password=[[NSString alloc] init];
    -    static const unsigned char cb64[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    -    for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i+=3) {
    -        password=[password stringByAppendingFormat:@"%c%c%c%c",
    -            cb64[(result[i] &0xFC)>>2],
    -            cb64[((result[i] & 0x03) << 4)
    -                | ((result[i + 1] & 0xF0) >> 4)],
    -            cb64[((result[i + 1] & 0x0F) << 2)
    -                | ((result[i + 2] & 0xC0) >> 6)],
    -            cb64[result[i+2]&0x3F]
    +- (NSString *)base64:(unsigned char *)result {
    +    NSString *password=[[NSString alloc] init];
    +    static const unsigned char cb64[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    +    for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i+=3) {
    +        password=[password stringByAppendingFormat:@"%c%c%c%c",
    +            cb64[(result[i] &0xFC)>>2],
    +            cb64[((result[i] & 0x03) << 4)
    +                | ((result[i + 1] & 0xF0) >> 4)],
    +            cb64[((result[i + 1] & 0x0F) << 2)
    +                | ((result[i + 2] & 0xC0) >> 6)],
    +            cb64[result[i+2]&0x3F]
                     ];            
         }
    -    return password;
    +    return password;
     }
     
    -- (NSString *)hexadecimalRepresentation:(unsigned char *)result {
    -    NSString *password=[[NSString alloc] init];
    -    for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
    -        password=[password stringByAppendingFormat:@"%02x", result[i]];
    +- (NSString *)hexadecimalRepresentation:(unsigned char *)result {
    +    NSString *password=[[NSString alloc] init];
    +    for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
    +        password=[password stringByAppendingFormat:@"%02x", result[i]];
         }
    -    return password;
    +    return password;
     }
     
    -- (NSString *)b64_sha1:(NSString *)inputString {
    -    unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
    -    [self sha1:inputString result:result];
    -    return [self base64:result];
    +- (NSString *)b64_sha1:(NSString *)inputString {
    +    unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
    +    [self sha1:inputString result:result];
    +    return [self base64:result];
     }
     
    -- (NSString *)hex_sha1:(NSString *)inputString {
    -    unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
    -    [self sha1:inputString result:result];
    -    return [self hexadecimalRepresentation:result];
    +- (NSString *)hex_sha1:(NSString *)inputString {
    +    unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
    +    [self sha1:inputString result:result];
    +    return [self hexadecimalRepresentation:result];
     }
     
    diff --git a/output/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html b/output/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html index d20fd95d8..75d575753 100644 --- a/output/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html +++ b/output/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/index.html @@ -64,7 +64,7 @@ But the major problem came from, font-shadow and gradients. Then my new design obey to the following rules:

      -
    • no CSS element begining by ‘-moz’ or ‘-webkit’, etc…,
    • +
    • no CSS element begining by ‘-moz’ or ‘-webkit’, etc…,
    • no text shadow,
    • clean (I mean delete) most javascript.
    diff --git a/output/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html b/output/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html index 87837855e..3b419ebed 100644 --- a/output/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html +++ b/output/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html @@ -75,10 +75,10 @@
    -

    I’ve (re)discovered how to become S/MIME compliant. +

    I’ve (re)discovered how to become S/MIME compliant. I am now suprised how easy it was. Some years ago it was far more difficult. -Now I’m able to sign and encrypt my emails.

    +Now I’m able to sign and encrypt my emails.

    Why is it important?

    diff --git a/output/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html b/output/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html index cffb5284e..d09f1421e 100644 --- a/output/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html +++ b/output/Scratch/en/blog/2010-10-14-Fun-with-wav/index.html @@ -60,7 +60,7 @@

    tl;dr: Played to process a wav file. C was easier and cleaner than Ruby.

    -

    edit: I wanted this program to work only on one specific machine (a x86 on a 32 bit Ubuntu). Therefore I didn’t had any portability consideration. This is only a hack.

    +

    edit: I wanted this program to work only on one specific machine (a x86 on a 32 bit Ubuntu). Therefore I didn’t had any portability consideration. This is only a hack.

    @@ -69,7 +69,7 @@

    I had to compute the sum of the absolute values of data of a .wav file. For efficiency (and fun) reasons, I had chosen C language.

    -

    I didn’t programmed in C for a long time. +

    I didn’t programmed in C for a long time. From my memory it was a pain to read and write to files. But in the end I was really impressed by the code I get. It was really clean. @@ -81,27 +81,27 @@ The header is then a block of packed bytes.

    • The 4th first bytes must contains RIFF in ASCII,
    • -
    • the following 4th Bytes is an 32 bits integer giving the size of the file minus 8, etc…
    • +
    • the following 4th Bytes is an 32 bits integer giving the size of the file minus 8, etc…

    Surprisingly, I believe that reading this kind of file is easier in C than in most higher level language. Proof: I only have to search on the web the complete header format and write it in a struct.

    -struct wavfile
    +struct wavfile
     {
    -    char        id[4];          // should always contain "RIFF"
    -    int     totallength;    // total file length minus 8
    -    char        wavefmt[8];     // should be "WAVEfmt "
    -    int     format;         // 16 for PCM format
    -    short     pcm;            // 1 for PCM format
    -    short     channels;       // channels
    -    int     frequency;      // sampling frequency
    -    int     bytes_per_second;
    -    short     bytes_by_capture;
    -    short     bits_per_sample;
    -    char        data[4];        // should always contain "data"
    -    int     bytes_in_data;
    +    char        id[4];          // should always contain "RIFF"
    +    int     totallength;    // total file length minus 8
    +    char        wavefmt[8];     // should be "WAVEfmt "
    +    int     format;         // 16 for PCM format
    +    short     pcm;            // 1 for PCM format
    +    short     channels;       // channels
    +    int     frequency;      // sampling frequency
    +    int     bytes_per_second;
    +    short     bytes_by_capture;
    +    short     bits_per_sample;
    +    char        data[4];        // should always contain "data"
    +    int     bytes_in_data;
     };
     
    @@ -109,7 +109,7 @@ Proof: I only have to search on the web the complete header format and write it But in C I simply written:

    -fread(&header,sizeof(header),1,wav)
    +fread(&header,sizeof(header),1,wav)
     

    Only one step to fill my data structure. Magic!

    @@ -118,9 +118,9 @@ But in C I simply written:

    In C, to read a sequence of 2 Bytes numbers I only had to write:

    -short value=0;
    -while( fread(&value,sizeof(value),1,wav) ) {
    -    // do something with value
    +short value=0;
    +while( fread(&value,sizeof(value),1,wav) ) {
    +    // do something with value
     }
     
    @@ -128,63 +128,63 @@ In C, to read a sequence of 2 Bytes numbers I only had to write:

    -#include <stdio.h>
    -#include <stdlib.h>
    -#include <stdint.h>
    +#include <stdio.h>
    +#include <stdlib.h>
    +#include <stdint.h>
     
    -struct wavfile
    +struct wavfile
     {
    -    char        id[4];          // should always contain "RIFF"
    -    int     totallength;    // total file length minus 8
    -    char        wavefmt[8];     // should be "WAVEfmt "
    -    int     format;         // 16 for PCM format
    -    short     pcm;            // 1 for PCM format
    -    short     channels;       // channels
    -    int     frequency;      // sampling frequency
    -    int     bytes_per_second;
    -    short     bytes_by_capture;
    -    short     bits_per_sample;
    -    char        data[4];        // should always contain "data"
    -    int     bytes_in_data;
    +    char        id[4];          // should always contain "RIFF"
    +    int     totallength;    // total file length minus 8
    +    char        wavefmt[8];     // should be "WAVEfmt "
    +    int     format;         // 16 for PCM format
    +    short     pcm;            // 1 for PCM format
    +    short     channels;       // channels
    +    int     frequency;      // sampling frequency
    +    int     bytes_per_second;
    +    short     bytes_by_capture;
    +    short     bits_per_sample;
    +    char        data[4];        // should always contain "data"
    +    int     bytes_in_data;
     };
     
    -int main(int argc, char *argv[]) {
    -    char *filename=argv[1];
    -    FILE *wav = fopen(filename,"rb");
    -    struct wavfile header;
    +int main(int argc, char *argv[]) {
    +    char *filename=argv[1];
    +    FILE *wav = fopen(filename,"rb");
    +    struct wavfile header;
     
    -    if ( wav == NULL ) {
    -        fprintf(stderr,"Can't open input file %s", filename);
    -        exit(1);
    +    if ( wav == NULL ) {
    +        fprintf(stderr,"Can't open input file %s", filename);
    +        exit(1);
         }
     
     
    -    // read header
    -    if ( fread(&header,sizeof(header),1,wav) < 1 )
    +    // read header
    +    if ( fread(&header,sizeof(header),1,wav) < 1 )
         {
    -        fprintf(stderr,"Can't read file header\n");
    -        exit(1);
    +        fprintf(stderr,"Can't read file header\n");
    +        exit(1);
         }
    -    if (    header.id[0] != 'R'
    -         || header.id[1] != 'I' 
    -         || header.id[2] != 'F' 
    -         || header.id[3] != 'F' ) { 
    -        fprintf(stderr,"ERROR: Not wav format\n"); 
    -        exit(1); 
    +    if (    header.id[0] != 'R'
    +         || header.id[1] != 'I' 
    +         || header.id[2] != 'F' 
    +         || header.id[3] != 'F' ) { 
    +        fprintf(stderr,"ERROR: Not wav format\n"); 
    +        exit(1); 
         }
     
    -    fprintf(stderr,"wav format\n");
    +    fprintf(stderr,"wav format\n");
     
    -    // read data
    -    long sum=0;
    -    short value=0;
    -    while( fread(&value,sizeof(value),1,wav) ) {
    -        // fprintf(stderr,"%d\n", value);
    -        if (value<0) { value=-value; }
    +    // read data
    +    long sum=0;
    +    short value=0;
    +    while( fread(&value,sizeof(value),1,wav) ) {
    +        // fprintf(stderr,"%d\n", value);
    +        if (value<0) { value=-value; }
             sum += value;
         }
    -    printf("%ld\n",sum);
    -    exit(0);
    +    printf("%ld\n",sum);
    +    exit(0);
     }
     
    @@ -213,7 +213,7 @@ __attribute__((__packed__))

    Therefore this implementation should for big and little endian architecture. However, it must be compiled with gcc. -The new code make more tests but still don’t use mmap. +The new code make more tests but still don’t use mmap. Here it is:

    @@ -222,111 +222,111 @@ Here it is:

    -#include <stdio.h>
    -#include <stdlib.h>
    -#include <string.h> // for memcmp
    -#include <stdint.h> // for int16_t and int32_t
    +#include <stdio.h>
    +#include <stdlib.h>
    +#include <string.h> // for memcmp
    +#include <stdint.h> // for int16_t and int32_t
     
    -struct wavfile
    +struct wavfile
     {
    -    char    id[4];          // should always contain "RIFF"
    -    int32_t totallength;    // total file length minus 8
    -    char    wavefmt[8];     // should be "WAVEfmt "
    -    int32_t format;         // 16 for PCM format
    -    int16_t pcm;            // 1 for PCM format
    -    int16_t channels;       // channels
    -    int32_t frequency;      // sampling frequency
    -    int32_t bytes_per_second;
    -    int16_t bytes_by_capture;
    -    int16_t bits_per_sample;
    -    char    data[4];        // should always contain "data"
    -    int32_t bytes_in_data;
    +    char    id[4];          // should always contain "RIFF"
    +    int32_t totallength;    // total file length minus 8
    +    char    wavefmt[8];     // should be "WAVEfmt "
    +    int32_t format;         // 16 for PCM format
    +    int16_t pcm;            // 1 for PCM format
    +    int16_t channels;       // channels
    +    int32_t frequency;      // sampling frequency
    +    int32_t bytes_per_second;
    +    int16_t bytes_by_capture;
    +    int16_t bits_per_sample;
    +    char    data[4];        // should always contain "data"
    +    int32_t bytes_in_data;
     } __attribute__((__packed__));
     
    -int is_big_endian(void) {
    -    union {
    -        uint32_t i;
    -        char c[4];
    -    } bint = {0x01000000};
    -    return bint.c[0]==1;
    +int is_big_endian(void) {
    +    union {
    +        uint32_t i;
    +        char c[4];
    +    } bint = {0x01000000};
    +    return bint.c[0]==1;
     }
     
    -int main(int argc, char *argv[]) {
    -    char *filename=argv[1];
    -    FILE *wav = fopen(filename,"rb");
    -    struct wavfile header;
    +int main(int argc, char *argv[]) {
    +    char *filename=argv[1];
    +    FILE *wav = fopen(filename,"rb");
    +    struct wavfile header;
     
    -    if ( wav == NULL ) {
    -        fprintf(stderr,"Can't open input file %s\n", filename);
    -        exit(1);
    +    if ( wav == NULL ) {
    +        fprintf(stderr,"Can't open input file %s\n", filename);
    +        exit(1);
         }
     
     
    -    // read header
    -    if ( fread(&header,sizeof(header),1,wav) < 1 ) {
    -        fprintf(stderr,"Can't read input file header %s\n", filename);
    -        exit(1);
    +    // read header
    +    if ( fread(&header,sizeof(header),1,wav) < 1 ) {
    +        fprintf(stderr,"Can't read input file header %s\n", filename);
    +        exit(1);
         }
     
    -    // if wav file isn't the same endianness than the current environment
    -    // we quit
    -    if ( is_big_endian() ) {
    -        if (   memcmp( header.id,"RIFX", 4) != 0 ) {
    -            fprintf(stderr,"ERROR: %s is not a big endian wav file\n", filename); 
    -            exit(1);
    +    // if wav file isn't the same endianness than the current environment
    +    // we quit
    +    if ( is_big_endian() ) {
    +        if (   memcmp( header.id,"RIFX", 4) != 0 ) {
    +            fprintf(stderr,"ERROR: %s is not a big endian wav file\n", filename); 
    +            exit(1);
             }
    -    } else {
    -        if (   memcmp( header.id,"RIFF", 4) != 0 ) {
    -            fprintf(stderr,"ERROR: %s is not a little endian wav file\n", filename); 
    -            exit(1);
    +    } else {
    +        if (   memcmp( header.id,"RIFF", 4) != 0 ) {
    +            fprintf(stderr,"ERROR: %s is not a little endian wav file\n", filename); 
    +            exit(1);
             }
         }
     
    -    if (   memcmp( header.wavefmt, "WAVEfmt ", 8) != 0 
    -        || memcmp( header.data, "data", 4) != 0 
    +    if (   memcmp( header.wavefmt, "WAVEfmt ", 8) != 0 
    +        || memcmp( header.data, "data", 4) != 0 
                 ) {
    -        fprintf(stderr,"ERROR: Not wav format\n"); 
    -        exit(1); 
    +        fprintf(stderr,"ERROR: Not wav format\n"); 
    +        exit(1); 
         }
    -    if (header.format != 16) {
    -        fprintf(stderr,"\nERROR: not 16 bit wav format.");
    -        exit(1);
    +    if (header.format != 16) {
    +        fprintf(stderr,"\nERROR: not 16 bit wav format.");
    +        exit(1);
         }
    -    fprintf(stderr,"format: %d bits", header.format);
    -    if (header.format == 16) {
    -        fprintf(stderr,", PCM");
    -    } else {
    -        fprintf(stderr,", not PCM (%d)", header.format);
    +    fprintf(stderr,"format: %d bits", header.format);
    +    if (header.format == 16) {
    +        fprintf(stderr,", PCM");
    +    } else {
    +        fprintf(stderr,", not PCM (%d)", header.format);
         }
    -    if (header.pcm == 1) {
    -        fprintf(stderr, " uncompressed" );
    -    } else {
    -        fprintf(stderr, " compressed" );
    +    if (header.pcm == 1) {
    +        fprintf(stderr, " uncompressed" );
    +    } else {
    +        fprintf(stderr, " compressed" );
         }
    -    fprintf(stderr,", channel %d", header.pcm);
    -    fprintf(stderr,", freq %d", header.frequency );
    -    fprintf(stderr,", %d bytes per sec", header.bytes_per_second );
    -    fprintf(stderr,", %d bytes by capture", header.bytes_by_capture );
    -    fprintf(stderr,", %d bits per sample", header.bytes_by_capture );
    -    fprintf(stderr,"\n" );
    +    fprintf(stderr,", channel %d", header.pcm);
    +    fprintf(stderr,", freq %d", header.frequency );
    +    fprintf(stderr,", %d bytes per sec", header.bytes_per_second );
    +    fprintf(stderr,", %d bytes by capture", header.bytes_by_capture );
    +    fprintf(stderr,", %d bits per sample", header.bytes_by_capture );
    +    fprintf(stderr,"\n" );
     
    -    if ( memcmp( header.data, "data", 4) != 0 ) { 
    -        fprintf(stderr,"ERROR: Prrroblem?\n"); 
    -        exit(1); 
    +    if ( memcmp( header.data, "data", 4) != 0 ) { 
    +        fprintf(stderr,"ERROR: Prrroblem?\n"); 
    +        exit(1); 
         }
    -    fprintf(stderr,"wav format\n");
    +    fprintf(stderr,"wav format\n");
     
    -    // read data
    -    long long sum=0;
    -    int16_t value;
    -    int i=0;
    -    fprintf(stderr,"---\n", value);
    -    while( fread(&value,sizeof(value),1,wav) ) {
    -        if (value<0) { value=-value; }
    +    // read data
    +    long long sum=0;
    +    int16_t value;
    +    int i=0;
    +    fprintf(stderr,"---\n", value);
    +    while( fread(&value,sizeof(value),1,wav) ) {
    +        if (value<0) { value=-value; }
             sum += value;
         }
    -    printf("%lld\n",sum);
    -    exit(0);
    +    printf("%lld\n",sum);
    +    exit(0);
     }
     
    diff --git a/output/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html b/output/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html index 8f6bc3997..abefbf881 100644 --- a/output/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html +++ b/output/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html @@ -58,7 +58,7 @@
    -

    tl;dr: I made a simple macro system for my blog. Now I juste have to write %latex and it show as LaTeX.

    +

    tl;dr: I made a simple macro system for my blog. Now I juste have to write %latex and it show as LaTeX.

    @@ -78,8 +78,8 @@ In the header of my files I simply write:

    In the body it will replace every occurrence of:

      -
    • %test by This is a macro test,
    • -
    • and %latex by LaTeX.
    • +
    • %test by This is a macro test,
    • +
    • and %latex by LaTeX.

    The source code is really simple. diff --git a/output/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html b/output/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html index e0bd4b344..cdf08ede0 100644 --- a/output/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html +++ b/output/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html @@ -62,7 +62,7 @@

    Update: I might change my mind now. Why? I just discovered a js2coffee converter. Furthermore Denis Knauf told me about a CoffeeScript.eval function. -And as Denis said: “it is time to use Coffeescript as a javascript with Ruby-like syntax not a Ruby-like programming language”.

    +And as Denis said: “it is time to use Coffeescript as a javascript with Ruby-like syntax not a Ruby-like programming language”.

    @@ -85,30 +85,30 @@ Recently I used a lot of javascript. After trying Cappuccino, looking at backbone.js & javascriptMVC, -I’ve finally decided to make my own minimal javascript MVC framework.1

    +I’ve finally decided to make my own minimal javascript MVC framework.1

    I had to fight the horrible syntax of javascript. It was like experiencing a back-in-time travel:

    • Verbose Java-like syntax,
    • Strange and insanely Verbose Object Oriented Programming,
    • -
    • No easy way to refer to current instance of a class (this doesn’t work really well),
    • -
    • etc…
    • +
    • No easy way to refer to current instance of a class (this doesn’t work really well),
    • +
    • etc…

    It was so annoying at a point, I had thinked about creating my own CoffeeScript.

    -

    I’d finished a first draft of my MVC javascript framework. +

    I’d finished a first draft of my MVC javascript framework. Just after I learned about the existence of CoffeeScript, I immediately created a new git branch to try it.

    Here is my experience:

      -
    1. I had to install node.js and use npm just to use CoffeeScript. It wasn’t a big deal but it wasn’t as straightfoward as I expected either.
    2. +
    3. I had to install node.js and use npm just to use CoffeeScript. It wasn’t a big deal but it wasn’t as straightfoward as I expected either.
    4. Existing javascript file are not coffee compatible. I had to translate them by hand. There were no script to help me in this process. - Thanks to vim, it wasn’t too hard to translate 90% of the javascript using some regexp. + Thanks to vim, it wasn’t too hard to translate 90% of the javascript using some regexp. The --watch option of coffee was also really helpful to help in the translation. But I had to write my own shell script in order to follow an entire directory tree.
    5. An unexpected event. I made some meta-programming in javascript using eval. But in order to work, the string in the eval must be written in pure javascript not in coffee. It was like writing in two different languages. Really not so good.
    6. @@ -141,7 +141,7 @@ Just after I learned about the existence of CoffeeScript, I immediately created

      The last two point were definitively really problematic for me.

      -

      But even if I’ll have to work alone, I certainly won’t use CoffeeScript either. +

      But even if I’ll have to work alone, I certainly won’t use CoffeeScript either. CoffeeScript is a third party and any of their update can break my code. I experienced this kind of situation many times, and it is very annoying. Far more than coding with a bad syntax.

      @@ -185,10 +185,10 @@ But I believe it would be a really hard task just to simulate the access of curr
      1. -

        I know it may not be the best nor productive decision, but I’d like to start from scratch and understand how things works under the hood.

        +

        I know it may not be the best nor productive decision, but I’d like to start from scratch and understand how things works under the hood.

      2. -

        I know there is rb2js, but it doesn’t handle the problem I talk about.

        +

        I know there is rb2js, but it doesn’t handle the problem I talk about.

      diff --git a/output/Scratch/en/blog/Haskell-Mandelbrot/index.html b/output/Scratch/en/blog/Haskell-Mandelbrot/index.html index c1cf9ce28..6e4c9cf92 100644 --- a/output/Scratch/en/blog/Haskell-Mandelbrot/index.html +++ b/output/Scratch/en/blog/Haskell-Mandelbrot/index.html @@ -69,7 +69,7 @@ main = putStrLn $ im 0 where -

      To launch it, you’ll need to have haskell installed and to run:

      +

      To launch it, you’ll need to have haskell installed and to run:

      ghc --make animandel.hs && animandel
       
      diff --git a/output/Scratch/en/blog/Higher-order-function-in-zsh/index.html b/output/Scratch/en/blog/Higher-order-function-in-zsh/index.html index e0fc9376a..ac2161e79 100644 --- a/output/Scratch/en/blog/Higher-order-function-in-zsh/index.html +++ b/output/Scratch/en/blog/Higher-order-function-in-zsh/index.html @@ -71,7 +71,7 @@ Simply because, the more I programmed with zsh the more I tended to work using f

      The minimal to have better code are the functions map, filter and fold.

      -

      Let’s compare. +

      Let’s compare. First a program which convert all gif to png in many different directories of different projects.

      Before ⇒

      @@ -90,8 +90,8 @@ First a program which convert all gif to png in many different directories of di
        -
      • The (/N) means to select only directory and not to crash if there isn’t any.
      • -
      • The (.N) means to select only files and not to crash if there isn’t any.
      • +
      • The (/N) means to select only directory and not to crash if there isn’t any.
      • +
      • The (.N) means to select only files and not to crash if there isn’t any.
      • The :t means tail; if toto=/path/to/file.ext then ${toto:t}=file.ext.
      @@ -106,7 +106,7 @@ 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. +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.

      @@ -146,7 +146,7 @@ map verify_file_name $( filter

      Also, the first verstion is a bit easier to read. But the second one is clearly far superior in architecture. -I don’t want to argue why here. +I don’t want to argue why here. Just believe me that the functional programming approach is superior.

      Actually I lack the lambda operator. diff --git a/output/Scratch/en/blog/Learn-Vim-Progressively/index.html b/output/Scratch/en/blog/Learn-Vim-Progressively/index.html index dae67ce58..613f8fac9 100644 --- a/output/Scratch/en/blog/Learn-Vim-Progressively/index.html +++ b/output/Scratch/en/blog/Learn-Vim-Progressively/index.html @@ -73,7 +73,7 @@

      Learn vim and it will be your last text editor. -There isn’t any better text editor I know. +There isn’t any better text editor I know. Hard to learn, but incredible to use.

      I suggest you to learn it in 4 steps:

      @@ -85,16 +85,16 @@ Hard to learn, but incredible to use.

    7. Use vim superpowers
    -

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

    +

    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 music instrument. -Don’t expect to be more efficient with vim than with another editor in less than 3 days. +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

    +

    1st Level – Survive

    1. Install vim
    2. @@ -105,7 +105,7 @@ In fact it will certainly take 2 weeks instead of 3 days.

      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 get in Insert mode. +Let’s get in Insert mode. Type on the letter i.

      You should feel a bit better. @@ -127,7 +127,7 @@ And now, the list of command you can use in Normal mode to survive:

      Recommended:

        -
      • hjkl (highly recommended but not mandatory) → basic cursor move (←↓↑→). Hint: j look like a down arrow.
      • +
      • hjkl (highly recommended but not mandatory) → basic cursor move (←↓↑→). Hint: j look like a down arrow.
      • :help <command> → Show help about <command>, you can start using :help without anything else.
      @@ -143,14 +143,14 @@ With vim in Normal mode, it is a bit like if your Ctrl key is alway

      A last word about notations:

        -
      • instead of writing Ctrl-λ, I’ll write <C-λ>.
      • +
      • instead of writing Ctrl-λ, I’ll write <C-λ>.
      • command staring by : will must end by <enter>. For example, when I write :q it means :q<enter>.
      -

      2nd Level – Feel comfortable

      +

      2nd Level – Feel comfortable

      You know the commands required for survival. -It’s time to learn a few more commands. +It’s time to learn a few more commands. I suggest:

        @@ -217,17 +217,17 @@ I suggest:

        Take the time to integrate all of these command. Once done, you should be able to do every thing you are able to do on other editors. -But until now, it is a bit awkward. But follow me to the next level and you’ll see why.

        +But until now, it is a bit awkward. But follow me to the next level and you’ll see why.

        -

        3rd Level – Better. Stronger. Faster.

        +

        3rd Level – Better. Stronger. Faster.

        Congratulation reaching this far! We can start the interesting stuff. -At level 3, we’ll only talk about command which are compatible with the old vi.

        +At level 3, we’ll only talk about command which are compatible with the old vi.

        Better

        -

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

        +

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

        1. . → (dot) will repeat the last command,
        2. @@ -240,16 +240,16 @@ At level 3, we’ll only talk about command which are compatible with the ol
          • 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).
          • +
          • 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.

          +Don’t skip this section.

          1. NG → Go to line N
          2. @@ -265,7 +265,7 @@ Don’t skip this section.

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

            @@ -278,7 +278,7 @@ If you want to consider WORDS, then just use uppercases:

          -

          Now let’s talk about very efficient moves:

          +

          Now let’s talk about very efficient moves:

            @@ -306,12 +306,12 @@ Most commands can be used using the following general format:

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

          +is also true for d (delete), v (visual select), gU (uppercase), gu (lowercase), etc…

          -

          4th Level – Vim Superpowers

          +

          4th Level – Vim Superpowers

          With all preceding commands you should be comfortable to use vim. But now, here are the killer features. @@ -368,7 +368,7 @@ Typically: 0<C-v><C-d>I-- [ESC]

          • ^ → go to start of the line
          • <C-v> → Start block selection
          • -
          • <C-d> → move down (could also be jjj or %, etc…)
          • +
          • <C-d> → move down (could also be jjj or %, etc…)
          • I-- [ESC] → write -- to comment each line
          @@ -378,7 +378,7 @@ Typically: 0<C-v><C-d>I-- [ESC]

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

          -

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

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

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

          @@ -429,7 +429,7 @@ Once the selection made, you can:

          • <C-v>
          • -
          • go to desired line (jjj or <C-d> or /pattern or % etc…)
          • +
          • go to desired line (jjj or <C-d> or /pattern or % etc…)
          • $ go to the end of line
          • A, write text, ESC.
          @@ -443,7 +443,7 @@ Once the selection made, you can:

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

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

          +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 an excellent documentation. @@ -463,7 +463,7 @@ Run vimtutor until you are familiar with most basic commands. Also, you should read carefully this page: :help usr_02.txt.

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

          +Learn vim like you’d learn piano and all should be fine.

          alternate reality

            +

            alternate reality

            • 4 diff --git a/output/Scratch/en/blog/mvc/index.html b/output/Scratch/en/blog/mvc/index.html index 689b9e46c..81eee3ba4 100644 --- a/output/Scratch/en/blog/mvc/index.html +++ b/output/Scratch/en/blog/mvc/index.html @@ -54,17 +54,17 @@

              Why This article and for whom?

              -

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

              +

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

              -

              I have difficulties to obey some principle don’t know why I should use it. And something better than the:

              +

              I have difficulties to obey some principle don’t know why I should use it. And something better than the:

              -

              “Smarter people than you decided you have to do so”

              +

              “Smarter people than you decided you have to do so”

              This article is for people who like me want to understand the real motivation of using an MVC architecture and which advantage it gives you.

              -

              Let’s start making a project from scratch pretending we don’t know anything about the MVC architecture. Then let see how we’ll naturally derive to an MVC architecture.

              +

              Let’s start making a project from scratch pretending we don’t know anything about the MVC architecture. Then let see how we’ll naturally derive to an MVC architecture.

              → Next

              diff --git a/output/Scratch/en/blog/programming-language-experience/index.html b/output/Scratch/en/blog/programming-language-experience/index.html index 692d2de5d..b9fecc99d 100644 --- a/output/Scratch/en/blog/programming-language-experience/index.html +++ b/output/Scratch/en/blog/programming-language-experience/index.html @@ -99,10 +99,10 @@ Most lines were like:

              Dragon fractal I was about 10 when I played with logo to draw on the computer.

              -

              I remember the Bach’s music while the program loaded.

              +

              I remember the Bach’s music while the program loaded.

              At that time we had to load the program into the memory using tapes. -This one was a rare one. It didn’t made an awfull ‘Krrrkrr cssssss krrr’ noise.

              +This one was a rare one. It didn’t made an awfull ‘Krrrkrr cssssss krrr’ noise.

              Some years after, I used it to learn programming to my college student. It was really good as a first language. @@ -150,7 +150,7 @@ In the end I prefer C.

              Pointer representation from Dancing links

              -

              The pointer’s language.

              +

              The pointer’s language.

              Le programming language.

              @@ -161,12 +161,12 @@ If you want to have good quality code, knowing C is almost mandatory.

              This language is close to machine language. So much, there is (mostly) a linear relation between the size of your code and the size of the compiled one.

              -

              In short, each time you write a C instruction there won’t be anything strange that will occurs, like starting a long algorithm behind the scene.

              +

              In short, each time you write a C instruction there won’t be anything strange that will occurs, like starting a long algorithm behind the scene.

              It is very close to the machine while keeping sufficient abstractions to be fun.

              I made a lot of program with it. -From sort algorithms to AI ones (SAT3), system, network prgramming, etc… +From sort algorithms to AI ones (SAT3), system, network prgramming, etc… It is a very useful language that will help you understand how things works on your computer. Most modern computer language hide a lot of informations on what occurs. This is not the case with C.

              @@ -175,7 +175,7 @@ This is not the case with C.

              The super-clean one.

              -

              I liked ADA. I must confess I didn’t used it a lot. +

              I liked ADA. I must confess I didn’t used it a lot. May be one day I will try it again. I was impressed by asynchronous programming with it. What you need to know is this old language had certainly inspired most new object oriented languages.

              @@ -184,12 +184,12 @@ What you need to know is this old language had certainly inspired most new objec

              Until here I just described imperative languages without any object notion.

              -

              More clearly, the language didn’t helped you to structure your program.

              +

              More clearly, the language didn’t helped you to structure your program.

              In order to limit the number of bugs, particularly for huge programs, we started to think about how to organize computer programs. In the end, from the imperatives language culture, it produced the Object Oriented programming (OOP). -Beware, the Object Oriented programming isn’t a miracle. Proof? How many bug-free software do you use? -Furthermore, OOP doesn’t fit all problems. +Beware, the Object Oriented programming isn’t a miracle. Proof? How many bug-free software do you use? +Furthermore, OOP doesn’t fit all problems. But to make a bank application, an application which help to manage stock, clients or text archives. I mean an information system, the OOP is not so bad.

              @@ -213,7 +213,7 @@ But in reality, T have to be only char or char16. Then I had to reduce my alphabet to 216 letters. Except for some application, the alphabet must be far larger than that.

              -

              To conclude, I’d say, C++ is very good if you work alone or with a fixed subset of its features.

              +

              To conclude, I’d say, C++ is very good if you work alone or with a fixed subset of its features.

              Eiffel

              @@ -221,7 +221,7 @@ Except for some application, the alphabet must be far larger than that.

              Yes, it is a really nice language. Full object in mind. Far cleaner than C++. -But it isn’t so popular. +But it isn’t so popular. Behind C++ there is a large community to help new users and to write libraries. Furthermore, I preferred working with C++. At that time I programmed a lot with C and like its syntax.

              @@ -233,10 +233,10 @@ At that time I programmed a lot with C and like its syntax.

              The first time I heard about Java it was le Grail!

              Perfect portability, your program will work on all platform. -There was incrusted inside the language architecture concepts to help limit mistakes, and force you to use good programming habits. But…

              +There was incrusted inside the language architecture concepts to help limit mistakes, and force you to use good programming habits. But…

              But It is extremely verbose. -And limitations are quite boring if you know what you’re doing.

              +And limitations are quite boring if you know what you’re doing.

              For example, there is no multiple inheritance. Generally it is a coherent choice when there are a way to compensate. @@ -252,23 +252,23 @@ And I add to make a bunch of copy/paste inside all my subclasses! Copy/paste are exactly what should be avoided the most by object oriented languages.

              Another thing: threads. -I was forced to make my own thread management system to avoid locks and notifications between threads (wait the end of this thread, …). +I was forced to make my own thread management system to avoid locks and notifications between threads (wait the end of this thread, …). At that time I used Java 1.5. This problem should have been solved with Java 1.6. I wish it is the case, but lacking such an essential feature for a language was very bad.

              In the same idea, it was very long to wait for the foreach loops.

              -

              After my experience, I don’t recommend Java. +

              After my experience, I don’t recommend Java. Portability does not worth this price.

              GUI protability means mediocre experience on all platforms. -Any system it might be (wxWidget, QT, etc…).

              +Any system it might be (wxWidget, QT, etc…).

              -

              The Java ideology is “closed”. But it resolve a big problem. +

              The Java ideology is “closed”. But it resolve a big problem. It helps medium to low quality developper to work in team without the ability to make too much harm to the product. A good programmer will be able to make very interresting things with it thought. -Please note I didn’t say Java programmer are bad programmer.

              +Please note I didn’t say Java programmer are bad programmer.

              Objective-C

              @@ -277,7 +277,7 @@ Please note I didn’t say Java programmer are bad programmer.

              The language I learned and used only to make application on Apple© platform. I learned Objective-C just after Python. It was hard to do it. -At first I didn’t liked the syntax and many other details. +At first I didn’t liked the syntax and many other details. But it is this kind of language you like more and more you use it. In fact, Objective-C is a simple language, but associated with the Cocoa framework it is a really good tool. Cocoa is very different to other framework I used before. @@ -288,7 +288,7 @@ It might seems like small details on paper, but once you start using it, it make

              Even if Objective-C is a relatively low level language. Its dynamic typing ability make it very good for GUI programming. I recommand to continue working with this language. -In the end you’ll certainely find it better than expected.

              +In the end you’ll certainely find it better than expected.

              Modern Scripting Languages

              @@ -298,7 +298,7 @@ In the end you’ll certainely find it better than expected.

              This small script language that we used all to make our website in the time of animated gifs.

              -

              Nice but no more. Apparently there were a lot of progress since PHP5. Maybe one day I’ll use it again. But behind it, this language has a “script kiddies only” reputation. +

              Nice but no more. Apparently there were a lot of progress since PHP5. Maybe one day I’ll use it again. But behind it, this language has a “script kiddies only” reputation. Also long history of easy to make security holes.

              In reality PHP is just behind C for the abstraction level. @@ -306,7 +306,7 @@ Therefore it has a lot of organisation problems and make it easier to create bug For web applications it is a real problem.

              PHP remains for me the SQL injection language. -I make a bit of PHP not so long ago, and it was a pain to protect my application to SQL injection. Yep, I didn’t found any standard library to make this, but I didn’t searched a lot.

              +I make a bit of PHP not so long ago, and it was a pain to protect my application to SQL injection. Yep, I didn’t found any standard library to make this, but I didn’t searched a lot.

              Python

              @@ -314,20 +314,20 @@ I make a bit of PHP not so long ago, and it was a pain to protect my application

              Revelation!

              -

              When you were used to work with compiled languages (C++, Java) and you start learning Python, it’s like a punch in the face. +

              When you were used to work with compiled languages (C++, Java) and you start learning Python, it’s like a punch in the face. Programming like it always should have been. -Everything is natural, it’s magic. +Everything is natural, it’s magic. Yes, as good as this. But something so good must have some drawback.

              And yes, like all interpreted languages, Python is slow. Beware, no just a bit slow like 2 or 3 times slower than C. (like Java for example). No, really slow, about 10 to 20 times slower than C. -Argh… Note it is completely usable for many things.

              +Argh… Note it is completely usable for many things.

              Awk

              -

              If you have to “filter” some files and the filter is not too complicated awk is the ideal language to do this. +

              If you have to “filter” some files and the filter is not too complicated awk is the ideal language to do this. For example, if you want to know which words in a text file are most used. I used it to modify hundred of XML files in an easier manner than XSLT.

              @@ -401,10 +401,10 @@ Generally it takes me no more than some hours to some days to learn a new progra Concerning haskell, this is very different. To master haskell you need to understand very hard concepts. Monads and Arrows are some of them. -I didn’t understand them before I read some scientific paper. +I didn’t understand them before I read some scientific paper. Many week will be necessary to master it perfectly (if someone does). -Also the community is very friendly and nice. There is no “LOL! URAN00B! RTFM!” -And no concession has been made to make this language more popular (I’m looking at you C++, Java and Javascript). +Also the community is very friendly and nice. There is no “LOL! URAN00B! RTFM!” +And no concession has been made to make this language more popular (I’m looking at you C++, Java and Javascript). This langage remain pure (I know there are two meaning).

              Unpopular Languages

              diff --git a/output/Scratch/en/error/401-authorization_required/index.html b/output/Scratch/en/error/401-authorization_required/index.html index b48930062..211cb6d5f 100644 --- a/output/Scratch/en/error/401-authorization_required/index.html +++ b/output/Scratch/en/error/401-authorization_required/index.html @@ -55,7 +55,7 @@
              -

              If you don’t have the password or believe it is an error you can mail me at .

              +

              If you don’t have the password or believe it is an error you can mail me at .

              diff --git a/output/Scratch/en/error/404-not_found/index.html b/output/Scratch/en/error/404-not_found/index.html index ac830b4e2..11bf0b924 100644 --- a/output/Scratch/en/error/404-not_found/index.html +++ b/output/Scratch/en/error/404-not_found/index.html @@ -29,8 +29,8 @@
              -

              The page you’re looking at doesn’t exists on the server. -If you have followed an internal link, you can tell me by mail and I’ll fix it as soon as possible.

              +

              The page you’re looking at doesn’t exists on the server. +If you have followed an internal link, you can tell me by mail and I’ll fix it as soon as possible.

              @@ -38,7 +38,7 @@ If you have followed an internal link, you can tell me by mail and I’ll f
              -

              La page que vous recherchez n’est pas présente sur le site. +

              La page que vous recherchez n’est pas présente sur le site. Si vous avez suivi un lien vous pouvez me prévenir par mail et je réparerai ça dès que possible.

              diff --git a/output/Scratch/en/index.html b/output/Scratch/en/index.html index bde6d9c76..aabcb91da 100644 --- a/output/Scratch/en/index.html +++ b/output/Scratch/en/index.html @@ -103,7 +103,7 @@ Copyright ©, Yann Esposito
              - Modified: 01/19/2012 + Modified: 01/20/2012
              Entirely done with diff --git a/output/Scratch/en/blog/latest/index.html b/output/Scratch/en/latest/index.html similarity index 85% rename from output/Scratch/en/blog/latest/index.html rename to output/Scratch/en/latest/index.html index 3ba81e11d..0768c73f8 100644 --- a/output/Scratch/en/blog/latest/index.html +++ b/output/Scratch/en/latest/index.html @@ -1,11 +1,13 @@ + + Redirect to the right page. - +

              You should be redirected to

              - + - + \ No newline at end of file diff --git a/output/Scratch/en/rss/index.html b/output/Scratch/en/rss/index.html index 44e11b2e7..dc82eaa98 100644 --- a/output/Scratch/en/rss/index.html +++ b/output/Scratch/en/rss/index.html @@ -72,7 +72,7 @@

              My explanation

              -

              It is an easy way to aggregate all the update made on websites you like in a single place. You’ll never have to surf many website to see if there is news on a website.

              +

              It is an easy way to aggregate all the update made on websites you like in a single place. You’ll never have to surf many website to see if there is news on a website.

              choose an aggregator

              @@ -85,11 +85,11 @@ It is great for content you never want to forgot some article. It is not really

              Subscribe to some website news

              -

              Once you have chosen your aggregator, you only have to subscribe to websites you like. Do do this, you only have to click on the RSS icon in the top bar of your navigator. Or generally a nice icon is shown into the page you’re reading.

              +

              Once you have chosen your aggregator, you only have to subscribe to websites you like. Do do this, you only have to click on the RSS icon in the top bar of your navigator. Or generally a nice icon is shown into the page you’re reading.

              Get the news

              -

              Now, you’ll only have to use your RSS client. And you’ll see all news on all subscribed websites. There is no more need to surf many websites. All news which interest you are in the same place.

              +

              Now, you’ll only have to use your RSS client. And you’ll see all news on all subscribed websites. There is no more need to surf many websites. All news which interest you are in the same place.

              diff --git a/output/Scratch/en/softwares/yaquabubbles/index.html b/output/Scratch/en/softwares/yaquabubbles/index.html index c09128f92..0781547aa 100644 --- a/output/Scratch/en/softwares/yaquabubbles/index.html +++ b/output/Scratch/en/softwares/yaquabubbles/index.html @@ -65,7 +65,7 @@

              YAquaBubbles is a QuartzComposer Screensaver. It was one of my first try but the result was nice.

              -

              YAquaBubbles.dmg

              +

              YAquaBubbles.dmg

              diff --git a/output/Scratch/en/softwares/yclock/index.html b/output/Scratch/en/softwares/yclock/index.html index 9e35706a5..57ba568ac 100644 --- a/output/Scratch/en/softwares/yclock/index.html +++ b/output/Scratch/en/softwares/yclock/index.html @@ -62,7 +62,7 @@ It has three themes: white, black and red. It is based on a QuartzComposition and with some little Objective-C code to handle gently the frame per second.

              -

              YClock.dmg

              +

              YClock.dmg

              diff --git a/output/Scratch/en/softwares/ypassword/index.html b/output/Scratch/en/softwares/ypassword/index.html index ebb0b9139..dff9246e1 100644 --- a/output/Scratch/en/softwares/ypassword/index.html +++ b/output/Scratch/en/softwares/ypassword/index.html @@ -70,7 +70,7 @@
            • A command line tool.
            -

            I’ll soon release an iPhone application.

            +

            I’ll soon release an iPhone application.

            diff --git a/output/Scratch/en/validation/index.html b/output/Scratch/en/validation/index.html index ebcbd8e90..1b185d518 100644 --- a/output/Scratch/en/validation/index.html +++ b/output/Scratch/en/validation/index.html @@ -64,9 +64,9 @@

            Using these properties broke my validation but work really well in the two most recent and main browsers -(Safari 4 and Firefox 3.5 at the time I’m writing these lines). -If you don’t use these browser the page is -correctly displayed but not with all the ‘eyecandy’ effects.

            +(Safari 4 and Firefox 3.5 at the time I’m writing these lines). +If you don’t use these browser the page is +correctly displayed but not with all the ‘eyecandy’ effects.

            I believed in the benefits of CSS validation, this is why there is alway the diff --git a/output/Scratch/fr/about/contact/index.html b/output/Scratch/fr/about/contact/index.html index 0fe40db8d..1dc50b4e9 100644 --- a/output/Scratch/fr/about/contact/index.html +++ b/output/Scratch/fr/about/contact/index.html @@ -60,9 +60,9 @@

            Avatar

            -

            yann.esposito@gmail.com
            +

            yann.esposito@gmail.com
            Suivez moi sur twitter
            - Mes “bookmarks” pinboard
            + Mes “bookmarks” pinboard
            Open Source github
            stackoverflow

            diff --git a/output/Scratch/fr/about/index.html b/output/Scratch/fr/about/index.html index 45d681d17..012cb5c6d 100644 --- a/output/Scratch/fr/about/index.html +++ b/output/Scratch/fr/about/index.html @@ -69,7 +69,7 @@
            -

            Livres que j’aime :

            +

            Livres que j’aime :

            • Goëdel, Escher & Bach [Hofstadter]
            • @@ -77,7 +77,7 @@
            • Baudolino [Eco]
            -

            Films que j’aime :

            +

            Films que j’aime :

          @@ -115,11 +115,11 @@

          Ma petite histoire

          -

          J’ai eu mon doctorat en Informatique en décembre 2004 au LIF (Marseille). Pendant les trois années de ma formation j’ai non seulement fait de la recherche en informatique mais j’ai aussi enseigné à des étudiants de l’Université. J’ai aussi développé un programme informatique dont le but était de vérifier expérimentalement mes résultats théoriques.

          +

          J’ai eu mon doctorat en Informatique en décembre 2004 au LIF (Marseille). Pendant les trois années de ma formation j’ai non seulement fait de la recherche en informatique mais j’ai aussi enseigné à des étudiants de l’Université. J’ai aussi développé un programme informatique dont le but était de vérifier expérimentalement mes résultats théoriques.

          -

          J’ai ensuite fait un Post Doctorat au Laboratoire Hubert Curient de Saint-Etienne. Ma mission consistait à développer une application scientifique (SEDiL). Cette application visait comme public des biologistes et devait avoir une interface utilisateur agréable à utiliser.

          +

          J’ai ensuite fait un Post Doctorat au Laboratoire Hubert Curient de Saint-Etienne. Ma mission consistait à développer une application scientifique (SEDiL). Cette application visait comme public des biologistes et devait avoir une interface utilisateur agréable à utiliser.

          -

          Ajourd’hui je travaille pour AirFrance© via Astek. Ce travail est très diversifié. Il demande la connaissance des technologies Web, CMS mais aussi de la programmation en Perl, JSP, meta-programmation…

          +

          Ajourd’hui je travaille pour AirFrance© via Astek. Ce travail est très diversifié. Il demande la connaissance des technologies Web, CMS mais aussi de la programmation en Perl, JSP, meta-programmation…

          diff --git a/output/Scratch/fr/about/technical_details/index.html b/output/Scratch/fr/about/technical_details/index.html index af0bc427b..217f1e6a6 100644 --- a/output/Scratch/fr/about/technical_details/index.html +++ b/output/Scratch/fr/about/technical_details/index.html @@ -76,8 +76,8 @@ comme

          Les commentaires de blog sont gérés par -disqus intense debate. Ainsi je n’ai besoin pour héberger mons site que -d’un serveur de pages statiques. Ce qui a de nombreux avantages. +disqus intense debate. Ainsi je n’ai besoin pour héberger mons site que +d’un serveur de pages statiques. Ce qui a de nombreux avantages. Principalement concernant la charge et la sécurité du serveur.

          @@ -89,7 +89,7 @@ et que j'ai conçu ce site quasiment ex nihilo.

          Si au contraire vous voulez connaitre tous les détails je vous suggère -d’aller lire mon article concernant nanoc.

          +d’aller lire mon article concernant nanoc.

          diff --git a/output/Scratch/fr/blog/01_nanoc/index.html b/output/Scratch/fr/blog/01_nanoc/index.html index 858cbeee7..e760b978b 100644 --- a/output/Scratch/fr/blog/01_nanoc/index.html +++ b/output/Scratch/fr/blog/01_nanoc/index.html @@ -52,18 +52,18 @@
          -

          Qu’est-ce que nanoc ?

          +

          Qu’est-ce que nanoc ?

          -

          Il ne s’agit pas exactement d’un +

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

          +mais plutôt d’un système de gestion de pages statiques.

          Il faut programmer sois-même les pages web, -le code pour engendrer les menus…

          +le code pour engendrer les menus…

          -

          J’ai programmé des filtres pour rendre ce site multilangue par exemple

          +

          J’ai programmé des filtres pour rendre ce site multilangue par exemple

          -

          Vous pourrez trouver beaucoup d’informations sur +

          Vous pourrez trouver beaucoup d’informations sur le site officiel de nanoc.

          diff --git a/output/Scratch/fr/blog/02_ackgrep/index.html b/output/Scratch/fr/blog/02_ackgrep/index.html index b64ef0dbd..453371bb7 100644 --- a/output/Scratch/fr/blog/02_ackgrep/index.html +++ b/output/Scratch/fr/blog/02_ackgrep/index.html @@ -54,11 +54,11 @@

          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.

          +

          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.

          -

          Il suffit d’aller sur http://betterthangrep.com pour le télécharger.

          +

          Il suffit d’aller sur http://betterthangrep.com pour le télécharger.

          -

          Sincèrement, je ne comprend pas qu’ack ne soit pas une commande implémentée par défaut sur les systèmes UNIX. Je ne peux vraiment plus m’en passer, il m’est devenu aussi essentiel qu’un which ou un find.

          +

          Sincèrement, je ne comprend pas qu’ack ne soit pas une commande implémentée par défaut sur les systèmes UNIX. Je ne peux vraiment plus m’en passer, il m’est devenu aussi essentiel qu’un which ou un find.

          @@ -76,11 +76,11 @@ grep 'pattern
          @@ -103,7 +103,7 @@ zargs -- $listeFic -

          Pour mon utilisation personnelle et celle de mon équipe -c’est suffisant. J’espère que ça pourra vous aider.

          +c’est suffisant. J’espère que ça pourra vous aider.

          diff --git a/output/Scratch/fr/blog/03_losthighway/03_losthighway_1/index.html b/output/Scratch/fr/blog/03_losthighway/03_losthighway_1/index.html index 966aa9d6b..b905d0e6d 100644 --- a/output/Scratch/fr/blog/03_losthighway/03_losthighway_1/index.html +++ b/output/Scratch/fr/blog/03_losthighway/03_losthighway_1/index.html @@ -66,42 +66,42 @@
          -

          Tout d’abord, il est clair que comprendre le film comme simplement un film fantastique ne fonctionne pas. En suivant ce point d’entrée on en fini pas de se heurter à des détails incompréhensibles.

          +

          Tout d’abord, il est clair que comprendre le film comme simplement un film fantastique ne fonctionne pas. En suivant ce point d’entrée on en fini pas de se heurter à des détails incompréhensibles.

          -

          Mon hypothèse de départ c’est que le film dépeint la représentation de la réalité que s’en fait Fred. -Chaque fois qu’il essaye d’échapper à la réalité, celle-ci finira par le rattraper.

          +

          Mon hypothèse de départ c’est que le film dépeint la représentation de la réalité que s’en fait Fred. +Chaque fois qu’il essaye d’échapper à la réalité, celle-ci finira par le rattraper.

          -

          Fred a commis un acte horrible, un meurtre, et essaye de réparer sa mémoire pour accepter son acte. Il va alors s’inventer des réalitées alternatives.

          +

          Fred a commis un acte horrible, un meurtre, et essaye de réparer sa mémoire pour accepter son acte. Il va alors s’inventer des réalitées alternatives.

            -
          • Dans un premier temps il tue sa femme (Renée) parce qu’elle le trompe.
          • +
          • Dans un premier temps il tue sa femme (Renée) parce qu’elle le trompe.
          • Dans la deuxième partie, il est plus faible. La version blonde de Renée va le manipuler pour tuer Dick Laurent.
          • Dans la troisième partie il tue Dick Laurent

          Quelle est la validité de ce choix ?

          -

          Cet interprétation me semble valide à cause du dialogue au début du film avec les policier qui demande au protagoniste s’il a une caméra :

          +

          Cet interprétation me semble valide à cause du dialogue au début du film avec les policier qui demande au protagoniste s’il a une caméra :

          -

          “Do you own a video camera?”
          -“No, Fred hates them.”
          -“I like to remember things my own way.”
          -“What do you mean by that?”
          -“How I remember them, not necessarily the way they happened.”

          +

          “Do you own a video camera?”
          +“No, Fred hates them.”
          +“I like to remember things my own way.”
          +“What do you mean by that?”
          +“How I remember them, not necessarily the way they happened.”

          -

          Ce que l’on peut traduire approximativement par :

          +

          Ce que l’on peut traduire approximativement par :

          -

          – Avez-vous une caméra ?
          -– Non, Fred les détestes.
          -– J’aime me rappeler les choses à ma façon.
          -– Qu’entendez-vous par là ?
          -– Je me rapelle des choses pas nécessairement comme elles se sont passées.

          +

          – Avez-vous une caméra ?
          +– Non, Fred les détestes.
          +– J’aime me rappeler les choses à ma façon.
          +– Qu’entendez-vous par là ?
          +– Je me rapelle des choses pas nécessairement comme elles se sont passées.

          -

          Ainsi, ce que l’on voit n’est pas la réalité, mais la réalité telle que le conçoit Fred. Il est donc le Dieu de cette réalité. Ainsi les interprétations mystiques faisant intervenir le Diable ont une certaine validité.

          +

          Ainsi, ce que l’on voit n’est pas la réalité, mais la réalité telle que le conçoit Fred. Il est donc le Dieu de cette réalité. Ainsi les interprétations mystiques faisant intervenir le Diable ont une certaine validité.

          diff --git a/output/Scratch/fr/blog/03_losthighway/03_losthighway_2/index.html b/output/Scratch/fr/blog/03_losthighway/03_losthighway_2/index.html index 3db48cb46..e23eb0a2b 100644 --- a/output/Scratch/fr/blog/03_losthighway/03_losthighway_2/index.html +++ b/output/Scratch/fr/blog/03_losthighway/03_losthighway_2/index.html @@ -58,25 +58,25 @@
          -

          Qui est l’homme mystérieux ?

          +

          Qui est l’homme mystérieux ?

          l'homme mystérieux

          Qui est donc ce personnage étrange et inquiétant ? -Un être capable d’ubiquité qui dit être invité par Fred dans sa maison ? +Un être capable d’ubiquité qui dit être invité par Fred dans sa maison ? Sans sourcils, le visage blême, les yeux écarquillés fixant sans relâche les faits et gestes de Fred.

          -

          C’est certainement une des clés du film. +

          C’est certainement une des clés du film. À mon avis, il représente la partie mauvaise de Fred. -Certainement la jalousie. Si j’étais Catholique je dirai Satan, le tentateur. -Il n’agit jamais, mais ne fait qu’observer et filmer. -Par contre c’est lui qui donne les armes à Fred pour tuer Dick Laurent. -Fred l’a laissé entrer chez lui et il ne peut plus s’en débarrasser. +Certainement la jalousie. Si j’étais Catholique je dirai Satan, le tentateur. +Il n’agit jamais, mais ne fait qu’observer et filmer. +Par contre c’est lui qui donne les armes à Fred pour tuer Dick Laurent. +Fred l’a laissé entrer chez lui et il ne peut plus s’en débarrasser. Un peu comme le Iago de Shakespeare est enfermé dans sa jalousie. -Le personnage mystérieux prend toute l’importance, il le ronge de l’intérieur. -Il aide Fred à accomplir les actes de violences et aussi l’oblige à se souvenir de la réalité.

          +Le personnage mystérieux prend toute l’importance, il le ronge de l’intérieur. +Il aide Fred à accomplir les actes de violences et aussi l’oblige à se souvenir de la réalité.

          -

          Quand il fait l’amour à Renée il voit le visage de l’homme mystérieux à la place du visage de sa femme. En réalité, il s’agit de la même personne d’après Fred. Ce serait donc elle qui est la source de son mal intérieur.

          +

          Quand il fait l’amour à Renée il voit le visage de l’homme mystérieux à la place du visage de sa femme. En réalité, il s’agit de la même personne d’après Fred. Ce serait donc elle qui est la source de son mal intérieur.

          diff --git a/output/Scratch/fr/blog/03_losthighway/03_losthighway_3/index.html b/output/Scratch/fr/blog/03_losthighway/03_losthighway_3/index.html index 15627b19f..9d617ba54 100644 --- a/output/Scratch/fr/blog/03_losthighway/03_losthighway_3/index.html +++ b/output/Scratch/fr/blog/03_losthighway/03_losthighway_3/index.html @@ -60,11 +60,11 @@

          Qui filme et dépose les cassettes ?

          -

          C’est certainement l’homme mystérieux (ou Fred lui-même) qui est à l’origine de ces cassettes. +

          C’est certainement l’homme mystérieux (ou Fred lui-même) qui est à l’origine de ces cassettes. Le rôle des cassettes est double :

            -
          • Rappeler à Fred la réalité. D’après Fred les cassettes video correspondent à la réalité. Il a beau essayer de se cacher la réalité, les cassettes finissent par aller jusqu’au bout et il se voit en train de tuer Renée.
          • +
          • Rappeler à Fred la réalité. D’après Fred les cassettes video correspondent à la réalité. Il a beau essayer de se cacher la réalité, les cassettes finissent par aller jusqu’au bout et il se voit en train de tuer Renée.
          • La cassette peut aussi faire référence aux cassettes de films pornographique dans laquelle Renée a peut-être tournée dans la réalité ?
          diff --git a/output/Scratch/fr/blog/03_losthighway/03_losthighway_4/index.html b/output/Scratch/fr/blog/03_losthighway/03_losthighway_4/index.html index 6c5c323a8..3bbca0862 100644 --- a/output/Scratch/fr/blog/03_losthighway/03_losthighway_4/index.html +++ b/output/Scratch/fr/blog/03_losthighway/03_losthighway_4/index.html @@ -58,27 +58,27 @@
          -

          Que s’est-il vraiment passé ?

          +

          Que s’est-il vraiment passé ?

          -

          Ici, tout n’est pas donné, on garde une assez grande liberté. Mais on a des indices.

          +

          Ici, tout n’est pas donné, on garde une assez grande liberté. Mais on a des indices.

          Hypothese n°1

          -

          Je dirais que le protagoniste est un garagiste qui est tombé amoureux d’une actrice porno. Il l’a certainement vu la première fois accompagnant le fameux Dick Laurent. Voyant qu’il ne peut pas l’avoir pour lui, fou de jalousie il tue Dick Laurent dans un motel où celui-ci à couché avec Renée.

          +

          Je dirais que le protagoniste est un garagiste qui est tombé amoureux d’une actrice porno. Il l’a certainement vu la première fois accompagnant le fameux Dick Laurent. Voyant qu’il ne peut pas l’avoir pour lui, fou de jalousie il tue Dick Laurent dans un motel où celui-ci à couché avec Renée.

          -

          On a la liberté de décider s’il a vraiment tué la femme ou pas. -Dans ma première vision du film, j’avais envie de dire qu’il ne la tue pas. Mais qu’une fois le meurtre commis, il va chez elle, sonne pour lui annoncer la mort de Dick Laurent. Il a alors juste le temps de s’enfuir, la police à ses trousses.

          +

          On a la liberté de décider s’il a vraiment tué la femme ou pas. +Dans ma première vision du film, j’avais envie de dire qu’il ne la tue pas. Mais qu’une fois le meurtre commis, il va chez elle, sonne pour lui annoncer la mort de Dick Laurent. Il a alors juste le temps de s’enfuir, la police à ses trousses.

          Hypothese n°2

          -

          La première partie resemble à la réalité. Il a vraiment tué sa femme. Il se fait arrété et condamné (certainement à mort). Par contre on ne sait pas s’il est aussi allé tuer Andy.

          +

          La première partie resemble à la réalité. Il a vraiment tué sa femme. Il se fait arrété et condamné (certainement à mort). Par contre on ne sait pas s’il est aussi allé tuer Andy.

          -

          alors c’est laquelle ?

          +

          alors c’est laquelle ?

          La seconde hypothèse me semble plus vraisemblable, car il y a plus de recoupements possibles. -La première me semble aussi cohérente. C’est cette première hypothèse que j’avais émise lors de mon premier visionnage du film.

          +La première me semble aussi cohérente. C’est cette première hypothèse que j’avais émise lors de mon premier visionnage du film.

          -

          Ce qui montre la force de ce film c’est de se dire qu’il y a de nombreuses autres hypothèses qui pourraient aussi bien fonctionner. C’est le fameux effet Rashomon. Plusieurs personnes peuvent décrire de façon cohérentes ce qu’elles ont vu, mais toutes les descriptions sont incohérentes entres-elles.

          +

          Ce qui montre la force de ce film c’est de se dire qu’il y a de nombreuses autres hypothèses qui pourraient aussi bien fonctionner. C’est le fameux effet Rashomon. Plusieurs personnes peuvent décrire de façon cohérentes ce qu’elles ont vu, mais toutes les descriptions sont incohérentes entres-elles.

          @@ -88,11 +88,11 @@ La première me semble aussi cohérente. C’est cette première hypothèse

          Conclusion

          -

          Il y aurait encore beaucoup à dire sur l’analyse de ce film. Mais il me semble que j’ai rassemblé l’essentiel des clés pour sa compréhension.

          +

          Il y aurait encore beaucoup à dire sur l’analyse de ce film. Mais il me semble que j’ai rassemblé l’essentiel des clés pour sa compréhension.

          -

          Il me semble qu’avoir à l’esprit l’effet “test de Rorschach” est essentiel lors de la visualisation de ce film.

          +

          Il me semble qu’avoir à l’esprit l’effet “test de Rorschach” est essentiel lors de la visualisation de ce film.

          -

          J’aimerai avoir votre opinion ; mon interprétation tient-elle la route ?

          +

          J’aimerai avoir votre opinion ; mon interprétation tient-elle la route ?

          diff --git a/output/Scratch/fr/blog/03_losthighway/index.html b/output/Scratch/fr/blog/03_losthighway/index.html index ee7b13a19..5599c3a5e 100644 --- a/output/Scratch/fr/blog/03_losthighway/index.html +++ b/output/Scratch/fr/blog/03_losthighway/index.html @@ -69,24 +69,24 @@ Je donne cependant quelques clés que j'ai découverte qui aident à suivre le f Ces clés devraient vous aider à vous faire votre propre idée du film...
          -

          La première fois que j’ai vu Lost Highway je me suis senti un peu perdu. -J’en ai alors cherché le sens. Voilà ce que j’ai pu trouver sur Internet :

          +

          La première fois que j’ai vu Lost Highway je me suis senti un peu perdu. +J’en ai alors cherché le sens. Voilà ce que j’ai pu trouver sur Internet :

            -
          • Fred passe un pacte avec le diable incarné par l’homme en noir ;
          • -
          • l’homme mystérieux est une (la) caméra ;
          • -
          • seule la première histoire est vrai, la suite étant l’imagination de Fred ;
          • +
          • Fred passe un pacte avec le diable incarné par l’homme en noir ;
          • +
          • l’homme mystérieux est une (la) caméra ;
          • +
          • seule la première histoire est vrai, la suite étant l’imagination de Fred ;

          sans compter les multiples avis trouvés sur les forums. Tout cela ne me paraissait pas convaincant. -J’ai alors réussi à trouver deux articles (en anglais) qui proposent de bien meilleures interprétations. Mais aucun des deux ne m’a complètement convaincu :

          +J’ai alors réussi à trouver deux articles (en anglais) qui proposent de bien meilleures interprétations. Mais aucun des deux ne m’a complètement convaincu :

          • le permier est sur mediacircus,
          • le second qui développe presque la même interprétation que la première est vraiment très détaillé sur jasonweb.
          -

          Il faut garder à l’esprit qu’il n’existe pas une seule interprétation possible et cohérente du film. Seul David Lynch pourrait donner l’explication complète du film.

          +

          Il faut garder à l’esprit qu’il n’existe pas une seule interprétation possible et cohérente du film. Seul David Lynch pourrait donner l’explication complète du film.

          Je donne quelques clés aidant à suivre le film sans être complètement perdu. Ces clés devraient vous aider à vous faire votre propre idée du film.

          @@ -94,21 +94,21 @@ Ces clés devraient vous aider à vous faire votre propre idée du film.

          Le test de Rorschach

          test de Rorschach -À l’instar du protagoniste chacun voit dans ce film ce qu’il a envie d’y voir. Nous pouvons nous y perdre simplement parce que nous pouvons nous perdre dans notre propre esprit. C’est une invitation à la réflexion. Regarder ce film c’est un peu comme passer un test de Rorschach. Qu’y voit-on ? Chacun y met un peu de sa propre personnalité dans l’explication du film.

          +À l’instar du protagoniste chacun voit dans ce film ce qu’il a envie d’y voir. Nous pouvons nous y perdre simplement parce que nous pouvons nous perdre dans notre propre esprit. C’est une invitation à la réflexion. Regarder ce film c’est un peu comme passer un test de Rorschach. Qu’y voit-on ? Chacun y met un peu de sa propre personnalité dans l’explication du film.

            -
          • Si vous êtes un mystique, vous verrez dans l’homme mystérieux un démon
          • -
          • si vous êtes plus psychanalytique vous y verrez une partie inconsciente du protagoniste…
          • +
          • Si vous êtes un mystique, vous verrez dans l’homme mystérieux un démon
          • +
          • si vous êtes plus psychanalytique vous y verrez une partie inconsciente du protagoniste…
          -

          En général en essayant d’expliquer ce film, on se perd un peu dans notre pensée. Et souvent on échoue à tout expliquer. Il y a toujours un point qui rend la construction incohérente avec le film. C’est pourquoi rechercher une explication unique est un entreprise vaine.

          +

          En général en essayant d’expliquer ce film, on se perd un peu dans notre pensée. Et souvent on échoue à tout expliquer. Il y a toujours un point qui rend la construction incohérente avec le film. C’est pourquoi rechercher une explication unique est un entreprise vaine.

          -

          Interprétation ≠ Explication

          +

          Interprétation ≠ Explication

          Je donne une interprétation et non pas une explication. Ma vision des choses, me semble cohérente. Cependant il est très probable que mon adhésion au film soit très différente de la votre. -Il y a certainement beaucoup d’autres explications qui restent cohérentes.

          +Il y a certainement beaucoup d’autres explications qui restent cohérentes.

          -

          J’écris cet article, parce que j’ai l’impression d’en avoir trouver une qui marche pour plus de 97% du film (peut-être 100%, mais j’en doute, il faudrait que je le revois encore une fois).

          +

          J’écris cet article, parce que j’ai l’impression d’en avoir trouver une qui marche pour plus de 97% du film (peut-être 100%, mais j’en doute, il faudrait que je le revois encore une fois).

          diff --git a/output/Scratch/fr/blog/04_drm/index.html b/output/Scratch/fr/blog/04_drm/index.html index 1026ea46e..2f6572b9f 100644 --- a/output/Scratch/fr/blog/04_drm/index.html +++ b/output/Scratch/fr/blog/04_drm/index.html @@ -60,13 +60,13 @@

          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 !

          +

          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 !

          WTF?

          -

          Résultat des courses, ma femme n’achetera plus de séries sur iTunes tant qu’elles resteront protégées par DRM, qu’elle ne pourront pas être gravées sur DVD (pour être regardées sur la télé). Et comme elle est bien moins prompte à acheter des DVD que simplement cliquer sur un bouton.

          +

          Résultat des courses, ma femme n’achetera plus de séries sur iTunes tant qu’elles resteront protégées par DRM, qu’elle ne pourront pas être gravées sur DVD (pour être regardées sur la télé). Et comme elle est bien moins prompte à acheter des DVD que simplement cliquer sur un bouton.

          @@ -75,7 +75,7 @@ Ca fera nettement moins d'argent pour vous les ayant-droits&nbs

          Et ma femme ne pourra pas voir ces épisodes.
          -C’est ce qu’on appelle une cooperation ‘LOSE-LOSE’.

          +C’est ce qu’on appelle une cooperation ‘LOSE-LOSE’.

          diff --git a/output/Scratch/fr/blog/05_git_create_remote_branch/index.html b/output/Scratch/fr/blog/05_git_create_remote_branch/index.html index 8e1a58847..93e9eb417 100644 --- a/output/Scratch/fr/blog/05_git_create_remote_branch/index.html +++ b/output/Scratch/fr/blog/05_git_create_remote_branch/index.html @@ -56,10 +56,10 @@

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

          +

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

          -

          Voici le script que j’utilise pour accomplir cette tâche :

          +

          Voici le script que j’utilise pour accomplir cette tâche :

          @@ -81,7 +81,7 @@ git config branch.${branch<
          -

          Bien sûr, je suppose qu’origin est déjà configurée.

          +

          Bien sûr, je suppose qu’origin est déjà configurée.

          diff --git a/output/Scratch/fr/blog/06_How_I_use_git/index.html b/output/Scratch/fr/blog/06_How_I_use_git/index.html index a0c26a9c8..845e08ddd 100644 --- a/output/Scratch/fr/blog/06_How_I_use_git/index.html +++ b/output/Scratch/fr/blog/06_How_I_use_git/index.html @@ -60,17 +60,17 @@
          -

          Màj : Actuellement j’utilise github avec des repository privés. Je paye une somme très raisonnable pour ce service. Si vous voulez être complètement autonome, je vous conseille d’utiliser gitolite sur votre propre serveur accessible sur le web.

          +

          Màj : Actuellement j’utilise github avec des repository privés. Je paye une somme très raisonnable pour ce service. Si vous voulez être complètement autonome, je vous conseille d’utiliser gitolite sur votre propre serveur accessible sur le web.

          -

          J’utilise Git pour gérer mes projets personnels. -J’ai un repository centralisé et tous mes ordinateurs se synchronisent avec lui. -Cependant, dans la documentation officielle, je n’ai pas trouvé clairement ce que je souhaitais.

          +

          J’utilise Git pour gérer mes projets personnels. +J’ai un repository centralisé et tous mes ordinateurs se synchronisent avec lui. +Cependant, dans la documentation officielle, je n’ai pas trouvé clairement ce que je souhaitais.

          -

          En d’autres termes, si vous souhaitez utiliser le type de workflow que SVN proposait avec Git (et ses avantages), voici comment procéder.

          +

          En d’autres termes, si vous souhaitez utiliser le type de workflow que SVN proposait avec Git (et ses avantages), voici comment procéder.

          @@ -80,7 +80,7 @@ Cependant, dans la documentation officielle, je n’ai pas trouvé clairemen

          Initialisation

          -

          Disons que j’ai déjà un projet et que je veuille en créer un nouveau.

          +

          Disons que j’ai déjà un projet et que je veuille en créer un nouveau.

          @@ -119,7 +119,7 @@ Màj: La meilleure solution est d'installer 
          @@ -141,11 +141,11 @@ Je vous conseille de faire la même opération sur l'ordinateur qui à servi à
           
          -

          L’utilisation courante

          +

          L’utilisation courante

          Pour résumer vous avez maintenant un repository sur Internet et un ou plusieurs ordinateurs lui sont associés. Maintenant il faut que tout soit toujours synchronisé.

          -

          Avant de commencer à travailler, la première chose à faire est de récupérer les modification à partir d’Internet vers votre poste local :

          +

          Avant de commencer à travailler, la première chose à faire est de récupérer les modification à partir d’Internet vers votre poste local :

          @@ -190,17 +190,17 @@ git push
           
           

          Synchronisation des branches

          -

          Bien, maintenant que tout semble bon, il faut encore s’occuper de quelques petites choses (sinon, SVN suffirait). -Git est complètement orienté sur la décentralisation et la création de nouvelles branches sur le même poste. Synchroniser des branches sur plusieurs serveurs différent n’est pas une opération naturelle.

          +

          Bien, maintenant que tout semble bon, il faut encore s’occuper de quelques petites choses (sinon, SVN suffirait). +Git est complètement orienté sur la décentralisation et la création de nouvelles branches sur le même poste. Synchroniser des branches sur plusieurs serveurs différent n’est pas une opération naturelle.

          -

          C’est pourquoi j’ai créé deux simples scripts pour automatiser cette opération. Un script pour créer un branche localement et en ligne. Un autre script pour récupérer les branches en lignes qui ne sont pas présente localement.

          +

          C’est pourquoi j’ai créé deux simples scripts pour automatiser cette opération. Un script pour créer un branche localement et en ligne. Un autre script pour récupérer les branches en lignes qui ne sont pas présente localement.

          Ainsi, lorsque je veux créer une nouvelle branche (localement et ligne) ; je lance le script :

          git-create-new-branch branch_name
           
          -

          et quand je suis sur un autre ordinateur et que je veux récupérer les branches crées sur un autre poste, j’exécute :

          +

          et quand je suis sur un autre ordinateur et que je veux récupérer les branches crées sur un autre poste, j’exécute :

          git-get-remote-branches
           
          diff --git a/output/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html b/output/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html index d5436cce9..ae04a277c 100644 --- a/output/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html +++ b/output/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/index.html @@ -54,18 +54,18 @@
          -

          Comment recompiler un économiseur d’écran sous Snow Leopard©

          +

          Comment recompiler un économiseur d’écran sous Snow Leopard©

          -

          Mon économiseur d’écran ne fonctionnait plus sous Mac OS X 10.6 Snow Leopard©. Après un peu de recherche sous google, le problème semblait pouvoir être réglé avec une recompilation. +

          Mon économiseur d’écran ne fonctionnait plus sous Mac OS X 10.6 Snow Leopard©. 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.

          +j’ai découvert les bons paramètres.

          XCode configuration

          -

          Pour l’instant je ne l’ai pas compilé pour être compatible Tiger et Leopard. Je ne connais pas assez bien XCode pour savoir comment désactiver le garbage collector sur la version 32 bits et l’activer sur la version 64 bits.

          +

          Pour l’instant je ne l’ai pas compilé pour être compatible Tiger et Leopard. Je ne connais pas assez bien XCode pour savoir comment désactiver le garbage collector sur la version 32 bits et l’activer sur la version 64 bits.

          -

          Il a été assez difficile de découvrir toutes ces informations. J’espère que cet article aura pu aider quelqu’un.

          +

          Il a été assez difficile de découvrir toutes ces informations. J’espère que cet article aura pu aider quelqu’un.

          diff --git a/output/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html b/output/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html index 47a6eb7aa..517a27945 100644 --- a/output/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html +++ b/output/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/index.html @@ -56,7 +56,7 @@

          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.

          +

          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.

          Ensuite de mon portable ou de mon ordinateur local, je dois simplement lancé la merveilleuse commande :

          @@ -68,16 +68,16 @@ ssh -p 443 -D 9050 username@host

          et un proxy socks écoute sur le port 9050. Ce proxy socks transférera toutes les requêtes locales via le tunnel ssh. Ainsi je peux surfer en local comme si je naviguais depuis mon ordinateur à la maison. Je peux écrire mon numéro de carte bleu sans avoir peur que le wifi local soit sniffé. Je dois simplement configurer mon navigateur web pour utiliser le proxy socks sur localhost écoutant le port 9050.

          -

          J’ai eu cette information à partir de cet article.

          +

          J’ai eu cette information à partir de cet article.

          Ssh et Snow Leopard©

          -

          J’ai un Mac avec Snow Leopard© à la maison. -Il ne suffit pas de modifier le fichier /etc/sshd.config pour changer le port d’écoute d’sshd. +

          J’ai un Mac avec Snow Leopard© à la maison. +Il ne suffit pas de modifier le fichier /etc/sshd.config pour changer le port d’écoute d’sshd. Le système utilise launchd pour lancer les démons.

          -

          J’ai posé cette question sur Apple Discussions dans ce fil de discussion. -Merci à tous ceux qui m’ont aidé. Et la solution est :

          +

          J’ai posé cette question sur Apple Discussions dans ce fil de discussion. +Merci à tous ceux qui m’ont aidé. Et la solution est :

          Créer un fichier /Library/LaunchDaemons/ssh-443.plist contenant :

          @@ -122,14 +122,14 @@ Merci à tous ceux qui m’ont aidé. Et la solution est :

          -

          C’est une copie de /System/Library/LaunchDaemons/ssh.plist avec quelques modifications :

          +

          C’est une copie de /System/Library/LaunchDaemons/ssh.plist avec quelques modifications :

          • le SockServiceName est devenu https au lieu de ssh
          • -
          • le Label est passé de com.openssh.sshd à quelque chose qui n’existait pas comme local.sshd
          • +
          • le Label est passé de com.openssh.sshd à quelque chose qui n’existait pas comme local.sshd
          -

          Encore une fois j’espère que ça a pu être utile.

          +

          Encore une fois j’espère que ça a pu être utile.

          diff --git a/output/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/index.html b/output/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/index.html index 1ed68a04f..5f983021f 100644 --- a/output/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/index.html +++ b/output/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/index.html @@ -54,13 +54,13 @@
          -

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

          +

          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.

          +

          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.

          -

          C’est pourquoi j’utilise maintenant google analytics. Le problème reste entier pour les navigateurs sans javascript.

          +

          C’est pourquoi j’utilise maintenant google analytics. Le problème reste entier pour les navigateurs sans javascript.

          -

          Donc pour l’instant

          +

          Donc pour l’instant

          Théorème :
          diff --git a/output/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html b/output/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html index 4d9454416..6b66fede9 100644 --- a/output/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html +++ b/output/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/index.html @@ -60,8 +60,8 @@

          mise à jour du 28/10/2009

          -

          J’ai mis à jour mon script avec une version incrémentale bien plus pratique. -En plus depuis l’écriture de cet article Apple© semble avoir nettement amélioré la vitesse de ses serveurs en Europe.

          +

          J’ai mis à jour mon script avec une version incrémentale bien plus pratique. +En plus depuis l’écriture de cet article Apple© semble avoir nettement amélioré la vitesse de ses serveurs en Europe.

          @@ -71,30 +71,30 @@ En plus depuis l’écriture de cet article Apple© sembl

          WebDav terror

          -

          En France l’iDisk d’Apple© est très lent. La vitesse d’upload me rapelle l’époque des modem 56k, c’est dire. La plupart du temps les opérations telles que lister le contenu d’un répertoire prennent au moins 30 secondes (pour 15 éléments). Renommer un répertoire échoue presque systématiquement.

          +

          En France l’iDisk d’Apple© est très lent. La vitesse d’upload me rapelle l’époque des modem 56k, c’est dire. La plupart du temps les opérations telles que lister le contenu d’un répertoire prennent au moins 30 secondes (pour 15 éléments). Renommer un répertoire échoue presque systématiquement.

          -

          Apple© utilise des serveurs WebDav pour héberger les fichiers. Le protocole fonctionne sur le port 80 (comme http). Je me suis rendu compte qu’utiliser WebDav via https fontionne bien mieux (2 à 3 fois plus rapide avec moins d’erreurs). Mais, ça reste quand même très lent et insuffisant.

          +

          Apple© utilise des serveurs WebDav pour héberger les fichiers. Le protocole fonctionne sur le port 80 (comme http). Je me suis rendu compte qu’utiliser WebDav via https fontionne bien mieux (2 à 3 fois plus rapide avec moins d’erreurs). Mais, ça reste quand même très lent et insuffisant.

          -

          J’uploade mes fichiers à partir de mon Mac et de temps en temps à partir d’un PC sous Ubuntu (iDisk monté avec webdavfs).

          +

          J’uploade mes fichiers à partir de mon Mac et de temps en temps à partir d’un PC sous Ubuntu (iDisk monté avec webdavfs).

          Synchroniser de façon sûre

          -

          Voici le script que j’utilise pour synchroniser mon site web (non créé avec iWeb©) avec le maximum de sécurité. Chaque opération est répétée jusqu’à ce qu’elle fonctionne.

          +

          Voici le script que j’utilise pour synchroniser mon site web (non créé avec iWeb©) avec le maximum de sécurité. Chaque opération est répétée jusqu’à ce qu’elle fonctionne.

          Les idées sont :

            -
          • Synchroniser vers un répertoire temporaire sur le serveur distant, puis “swapper” les noms des répertoires. Ainsi le site ne reste indisponible que le temps du “swap” du nom des deux répertoires.
          • -
          • Réitérer toutes les opérations jusqu’à ce qu’elle aient réussi (par exemple pour le renommage)
          • +
          • Synchroniser vers un répertoire temporaire sur le serveur distant, puis “swapper” les noms des répertoires. Ainsi le site ne reste indisponible que le temps du “swap” du nom des deux répertoires.
          • +
          • Réitérer toutes les opérations jusqu’à ce qu’elle aient réussi (par exemple pour le renommage)
          -

          Jusqu’ici j’utilise rsync qui n’est en fait pas plus efficace qu’une simple copie cp avec WebDav. Je devrais utiliser une méthode pour mémoriser les changements entre chaque publication.

          +

          Jusqu’ici j’utilise rsync qui n’est en fait pas plus efficace qu’une simple copie cp avec WebDav. Je devrais utiliser une méthode pour mémoriser les changements entre chaque publication.

          -

          En réalité quand je suis sur mon Mac j’utilise Transmit qui est vraiment très bien et surtout beaucoup plus efficace que le finder pour synchroniser des fichiers. Ensuite, je ne fait que le “swap” des répertoires.

          +

          En réalité quand je suis sur mon Mac j’utilise Transmit qui est vraiment très bien et surtout beaucoup plus efficace que le finder pour synchroniser des fichiers. Ensuite, je ne fait que le “swap” des répertoires.

          -

          Mon script prend un paramètre -s pour ne faire que le “swap”. Il prend aussi une option -a pour envoyer le fichier index.html qui va rediriger vers ma nouvelle page principale (iWeb© à la fâcheuse habitude de le remplacer).

          +

          Mon script prend un paramètre -s pour ne faire que le “swap”. Il prend aussi une option -a pour envoyer le fichier index.html qui va rediriger vers ma nouvelle page principale (iWeb© à la fâcheuse habitude de le remplacer).

          -

          Pour utiliser le script vous devriez remplacer la valeur de la variable mobileMeUser par votre nom d’utilisateur mobileMe©.

          +

          Pour utiliser le script vous devriez remplacer la valeur de la variable mobileMeUser par votre nom d’utilisateur mobileMe©.

          diff --git a/output/Scratch/fr/blog/11_Load_Disqus_Asynchronously/index.html b/output/Scratch/fr/blog/11_Load_Disqus_Asynchronously/index.html index 8d099df43..4b69fdd09 100644 --- a/output/Scratch/fr/blog/11_Load_Disqus_Asynchronously/index.html +++ b/output/Scratch/fr/blog/11_Load_Disqus_Asynchronously/index.html @@ -58,7 +58,7 @@

          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.

          -

          Remark I didn’t have any comment on my blog when I switched. Therefore my lack of influence was a good thing :-).

          +

          Remark I didn’t have any comment on my blog when I switched. Therefore my lack of influence was a good thing :-).

          @@ -72,7 +72,7 @@

          I also know there is a jQuery plugin to make just that. Unfortunately I had some issue with CSS.

          -

          Now let’s begin.

          +

          Now let’s begin.

          @@ -85,7 +85,7 @@

          Why should I want to load the disqus javascript asynchronously?

            -
          • Efficiency: I don’t want my page to wait the complete execution of disqus script to load.
          • +
          • Efficiency: I don’t want my page to wait the complete execution of disqus script to load.
          • More independance: when disqus is down, my page is blocked!
          @@ -97,7 +97,7 @@

          How?

          -

          I give a solution with jQuery, but I’m certain it will work with many other js library.

          +

          I give a solution with jQuery, but I’m certain it will work with many other js library.

          Javascript

          @@ -127,7 +127,7 @@

          But with this option you still need to provide a CSS. This is why you have to copy the css code from the embed.js file and rewrite it in a CSS file. You can download the CSS I obtained.


          -

          Now it’s done. I believe all should be fine but I just finished the manip for my own site only 1 hour ago. Therefore there should be some error, tell me if it is the case.

          +

          Now it’s done. I believe all should be fine but I just finished the manip for my own site only 1 hour ago. Therefore there should be some error, tell me if it is the case.

          diff --git a/output/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html b/output/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html index 17289d074..4293c5b5e 100644 --- a/output/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html +++ b/output/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/index.html @@ -56,14 +56,14 @@

          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.

          +

          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.

          -

          De plus il n’a pas été trivial de faire en sorte que les commentaires soient commun à plusieurs pages différentes (chaque page à trois représentations différentes, une par language plus une version multi-langue).

          +

          De plus il n’a pas été trivial de faire en sorte que les commentaires soient commun à plusieurs pages différentes (chaque page à trois représentations différentes, une par language plus une version multi-langue).

          -

          Je dois reconnaître que je suis un peu triste de quitter Disqus parce que pour chacun de mes problèmes giannii m’a aidé du mieux qu’il a pu. Cependant les problèmes que j’ai eu étaient inhérents à des choix de conceptions plus que de simples petits problèmes techniques.

          +

          Je dois reconnaître que je suis un peu triste de quitter Disqus parce que pour chacun de mes problèmes giannii m’a aidé du mieux qu’il a pu. Cependant les problèmes que j’ai eu étaient inhérents à des choix de conceptions plus que de simples petits problèmes techniques.

          -

          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.

          +

          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 :

          @@ -85,11 +85,11 @@ C’est pourquoi j’ai essayer de l’inclure de manière asynchron

          And the Winner is: Intense Debate

          -

          Pour conclure les avantages majeurs (pour moi) d’Intense Debate par rapport à Disqus:

          +

          Pour conclure les avantages majeurs (pour moi) d’Intense Debate par rapport à Disqus:

          • Se charge de façon asynchrone ; ne bloque pas mon site web
          • -
          • Permet d’ajouter sans rien de plus des boutons comme “share to any” et les charge eux aussi de façon asynchrone.
          • +
          • Permet d’ajouter sans rien de plus des boutons comme “share to any” et les charge eux aussi de façon asynchrone.

          Voilà.

          diff --git a/output/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/index.html b/output/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/index.html index c957b457f..b51199fb1 100644 --- a/output/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/index.html +++ b/output/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/index.html @@ -58,7 +58,7 @@ 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. +

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

          Here is what you should obtain:

          @@ -78,7 +78,7 @@ But you can easily translate from Ruby to Javascript.

          $('.tag.selected').removeClass('selected'); $('#tag_'+id).addClass('selected'); } -

          analyser

          -

          You can download the complete file to put in your ‘lib’ directory. Beware, it is a nanoc 2 version, you’ll have to make some small changes like replace @pages by @items to be nanoc3 compatible.

          +

          You can download the complete file to put in your ‘lib’ directory. Beware, it is a nanoc 2 version, you’ll have to make some small changes like replace @pages by @items to be nanoc3 compatible.

          Of course to be nice you need the associated CSS

          @@ -2411,7 +2411,7 @@ of the maximal size.

          -

          That’s all folks.

          +

          That’s all folks.

          diff --git a/output/Scratch/fr/blog/2009-09-replace-all-except-some-part/index.html b/output/Scratch/fr/blog/2009-09-replace-all-except-some-part/index.html index 920028c99..30c822886 100644 --- a/output/Scratch/fr/blog/2009-09-replace-all-except-some-part/index.html +++ b/output/Scratch/fr/blog/2009-09-replace-all-except-some-part/index.html @@ -56,7 +56,7 @@

          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

          +

          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

          diff --git a/output/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html b/output/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html
          index 58842c0f4..66e81f9c1 100644
          --- a/output/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html
          +++ b/output/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/index.html
          @@ -54,11 +54,11 @@
                       
          -

          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.

          +

          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.

          +

          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.

          -

          Cependant même avec ce script j’ai encore des problèmes. Dû à webdav. En particulier le renommage de répertoire. Par exemple :

          +

          Cependant même avec ce script j’ai encore des problèmes. Dû à webdav. En particulier le renommage de répertoire. Par exemple :

           mv folder folder2
          @@ -71,9 +71,9 @@ $ ls
           folder folder2
           
          -

          Bouuhh…

          +

          Bouuhh…

          -

          Pour résoudre ce type de problèmes j’utilise un framework en zsh. Il résout presque tous les problèmes liés à webdav à l’exception du renommage de répertoire.

          +

          Pour résoudre ce type de problèmes j’utilise un framework en zsh. Il résout presque tous les problèmes liés à webdav à l’exception du renommage de répertoire.

          @@ -188,7 +188,7 @@ function trymv {
           
          -

          Et voici le code qui me permet de synchroniser mon site web. Il y a une partie un peu incompréhensible. C’est pour enlever les mail réencodés par le filtre bluecloth qui est une implémentation de markdown. Mes mails, sont encodés à chaque fois de façon différente à chaque réengendrement de page html. C’est pourquoi je les enlève pour ne pas les uploadés inutilement à chaque fois.

          +

          Et voici le code qui me permet de synchroniser mon site web. Il y a une partie un peu incompréhensible. C’est pour enlever les mail réencodés par le filtre bluecloth qui est une implémentation de markdown. Mes mails, sont encodés à chaque fois de façon différente à chaque réengendrement de page html. C’est pourquoi je les enlève pour ne pas les uploadés inutilement à chaque fois.

          @@ -316,7 +316,7 @@ print -- "Dest = 
           
          -

          C’est ma façon de remplacer rsync avec des filesystem qui ne permettent pas de l’utiliser. J’espère que ça pourra vous être utile. Je serai heureux de savoir si quelqu’un à une idée sur comment gérer le problème de renommage de répertoire avec webdav.

          +

          C’est ma façon de remplacer rsync avec des filesystem qui ne permettent pas de l’utiliser. J’espère que ça pourra vous être utile. Je serai heureux de savoir si quelqu’un à une idée sur comment gérer le problème de renommage de répertoire avec webdav.

          diff --git a/output/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/index.html b/output/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/index.html index b1e86ec1c..41d32de8e 100644 --- a/output/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/index.html +++ b/output/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/index.html @@ -54,7 +54,7 @@
          -

          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.

          +

          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.

           $(document).ready( function() {
          diff --git a/output/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/index.html b/output/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/index.html
          index cb78937ea..b66ea7e65 100644
          --- a/output/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/index.html
          +++ b/output/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/index.html
          @@ -58,10 +58,10 @@
                       
          -

          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.

          +

          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.

          +

          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.

          @@ -73,7 +73,7 @@ Pour l’instant je le cache partout.

          Pour ceux qui souhaitent connaître les détails techniques derrière le menu apparaissant/disparaissant, voici le code utilisant jQuery.

          -

          L’HTML :

          +

          L’HTML :

          diff --git a/output/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/index.html b/output/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/index.html
          index 7d4eec109..f34861fef 100644
          --- a/output/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/index.html
          +++ b/output/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/index.html
          @@ -79,15 +79,15 @@
               
           
          -

          J’ai d’abord essayé d’intégrer queryLoader, mais il ne comblait pas mes besoins.

          +

          J’ai d’abord essayé d’intégrer queryLoader, mais il ne comblait pas mes besoins.

          -

          Ce plugin ajoutait un ‘div’ noir pour cacher le contenu du site. Cependant, comme le script doit être lancé à la fin du code source. Pendant un petit moment, on peut voir mon site en train de se mettre à jour.

          +

          Ce plugin ajoutait un ‘div’ noir pour cacher le contenu du site. Cependant, comme le script doit être lancé à la fin du code source. Pendant un petit moment, on peut voir mon site en train de se mettre à jour.

          -

          Pour cacher ce petit ‘artefact’, voici comment je m’y suis pris.

          +

          Pour cacher ce petit ‘artefact’, voici comment je m’y suis pris.

          Code

          -

          D’abort il faut ajouter tout en haut du body cette fois un div qui va être le voile noir qui va tout cacher.

          +

          D’abort il faut ajouter tout en haut du body cette fois un div qui va être le voile noir qui va tout cacher.

          @@ -132,9 +132,9 @@
           
          -

          Oui, c’est aussi simple que ça. Maintenant ajouter le #blackpage tout en haut de ma page me permet d’être certain de tout cacher pendant le chargement de la page.

          +

          Oui, c’est aussi simple que ça. Maintenant ajouter le #blackpage tout en haut de ma page me permet d’être certain de tout cacher pendant le chargement de la page.

          -

          J’espère que ça a pu vous être utile !

          +

          J’espère que ça a pu vous être utile !

          diff --git a/output/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html b/output/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html index 8b503e27f..622451424 100644 --- a/output/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html +++ b/output/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/index.html @@ -54,9 +54,9 @@
          -

          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 ?

          +

          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

          +

          Voici la solution que j’utilise avec jQuery

          HTML :

          @@ -135,7 +135,7 @@
          -

          Simple et peu gourmand en ressources. Pas de timer (ou presque), pas de fuite de mémoire, pas d’utilisation de date…

          +

          Simple et peu gourmand en ressources. Pas de timer (ou presque), pas de fuite de mémoire, pas d’utilisation de date…

          diff --git a/output/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/index.html b/output/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/index.html index 2733ab955..f9a6ab095 100644 --- a/output/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/index.html +++ b/output/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/index.html @@ -56,7 +56,7 @@

          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 :

          +

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

           nohup cmd &
          @@ -64,7 +64,7 @@ nohup cmd &
           cmd est la commande que vous souhaitez lancer.
           
          -

          Je laisse cette astuce ici pour moi et dans l’espoir que ça pourra aussi être utile à quelqu’un d’autre.

          +

          Je laisse cette astuce ici pour moi et dans l’espoir que ça pourra aussi être utile à quelqu’un d’autre.

          diff --git a/output/Scratch/fr/blog/2009-10-untaught-git-usage/index.html b/output/Scratch/fr/blog/2009-10-untaught-git-usage/index.html index 8d4e0129b..fe2a28347 100644 --- a/output/Scratch/fr/blog/2009-10-untaught-git-usage/index.html +++ b/output/Scratch/fr/blog/2009-10-untaught-git-usage/index.html @@ -54,9 +54,9 @@
          -

          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.

          +

          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.

          +

          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.

          @@ -68,12 +68,12 @@

          De SVN à Bazaar

          -

          J’étais un fervent utilisateur de subversion (svn). Lorsqu’un jour, comme beaucoup de gens je découvris ce qu’en pensais Linus Torvald sur une vidéo. Ventant les mérites d’un système de versions concurrentes décentralisé.

          +

          J’étais un fervent utilisateur de subversion (svn). Lorsqu’un jour, comme beaucoup de gens je découvris ce qu’en pensais Linus Torvald sur une vidéo. Ventant les mérites d’un système de versions concurrentes décentralisé.

          -

          En effet une fois qu’on s’y intéresse un peu, on voit tous les avantages pratiques qu’apporteraient en théorie un tel système.

          +

          En effet une fois qu’on s’y intéresse un peu, on voit tous les avantages pratiques qu’apporteraient en théorie un tel système.

          -

          J’ai alors eu besoin d’un système de version dans mon équipe. -Ils n’étaient pas familier avec les systèmes de versions. À par ceux possédant une GUI, qui sont lourds et administrés par un responsable.

          +

          J’ai alors eu besoin d’un système de version dans mon équipe. +Ils n’étaient pas familier avec les systèmes de versions. À par ceux possédant une GUI, qui sont lourds et administrés par un responsable.

          Après quelques recherches trois choix se dessinent :

          @@ -83,29 +83,29 @@ Ils n’étaient pas familier avec les systèmes de versions. À par ceux po
        3. Mercurial
        4. -

          En me renseignant un peu sur les forums et en essayant les trois, je me suis vite rendu compte que celui possédant l’interface utilisateur la plus simple était Bazaar*. Mon choix était fait.

          +

          En me renseignant un peu sur les forums et en essayant les trois, je me suis vite rendu compte que celui possédant l’interface utilisateur la plus simple était Bazaar*. Mon choix était fait.

          De bazaar à Git

          -

          Je me suis alors familiarisé avec Bazaar. Et je dois dire que c’était vraiment naturel en venant de subversion. La commande pull correspond au update, la commande push correspond au commit. Puis les commandes commit et update existent toujours si on en a besoin et qu’on veut utiliser un workflow identique à celui de subversion.

          +

          Je me suis alors familiarisé avec Bazaar. Et je dois dire que c’était vraiment naturel en venant de subversion. La commande pull correspond au update, la commande push correspond au commit. Puis les commandes commit et update existent toujours si on en a besoin et qu’on veut utiliser un workflow identique à celui de subversion.

          -

          Mais plus le temps passe et plus de partout sur les blog, c’est surtout Git qui a le vent en poupe.

          +

          Mais plus le temps passe et plus de partout sur les blog, c’est surtout Git qui a le vent en poupe.

          -

          Je décide alors d’utiliser Git en particulier pour versionner le site que vous êtes en train de lire. Sauf que je le trouve vraiment difficile d’utilisation et surtout complètement contre intuitif (j’y reviendrai plus tard).

          +

          Je décide alors d’utiliser Git en particulier pour versionner le site que vous êtes en train de lire. Sauf que je le trouve vraiment difficile d’utilisation et surtout complètement contre intuitif (j’y reviendrai plus tard).

          -

          Alors que j’essaye de trouver de l’aide et que je dis qu’il est plus difficile à utiliser que Bazaar, beaucoup me répliquent que c’est :

          +

          Alors que j’essaye de trouver de l’aide et que je dis qu’il est plus difficile à utiliser que Bazaar, beaucoup me répliquent que c’est :

          -

          Super-tellement-trop-simple que même ma fille de 12 ans qui n’y comprend rien en informatique l’utilise pour versionner ses documents. Elle s’en sert très facilement en créant des branches et tout et tout…

          +

          Super-tellement-trop-simple que même ma fille de 12 ans qui n’y comprend rien en informatique l’utilise pour versionner ses documents. Elle s’en sert très facilement en créant des branches et tout et tout…

          -

          Bon alors si une gamine 12 ans trouve ça très naturel et que moi (avec mon Doctorat en informatique) j’ai du mal à faire ce que je veux, c’est un peu frustrant et humiliant. Mais qu’est-ce qui fait que Git est naturel aux uns (comme pour CocoaSamurai ) et très confus pour moi ?

          +

          Bon alors si une gamine 12 ans trouve ça très naturel et que moi (avec mon Doctorat en informatique) j’ai du mal à faire ce que je veux, c’est un peu frustrant et humiliant. Mais qu’est-ce qui fait que Git est naturel aux uns (comme pour CocoaSamurai ) et très confus pour moi ?

          -

          C’est en lisant un article j’ai enfin compris ce qu’il me manquait. C’est la partie non dite de la conception. Celle que tous les développeurs et les concepteurs trouvaient comme aller de soi. Sauf que pour moi, ce n’était pas du tout le cas.

          +

          C’est en lisant un article j’ai enfin compris ce qu’il me manquait. C’est la partie non dite de la conception. Celle que tous les développeurs et les concepteurs trouvaient comme aller de soi. Sauf que pour moi, ce n’était pas du tout le cas.

          -

          - Je parle de ClearCase©. Et oui, je sais qu’il existe des commandes en lignes pour ClearCase©, mais ce n’est pas comme ça qu’ils étaient habitués à travailler avec des systèmes de “versionning”.

          +

          - Je parle de ClearCase©. Et oui, je sais qu’il existe des commandes en lignes pour ClearCase©, mais ce n’est pas comme ça qu’ils étaient habitués à travailler avec des systèmes de “versionning”.

          -

          * - Je n’ai pas vraiment donné sa chance à Mercurial, la terminologie qu’ils utilisaient était trop éloignée de celle de svn à laquelle je m’étais habituée.

          +

          * - Je n’ai pas vraiment donné sa chance à Mercurial, la terminologie qu’ils utilisaient était trop éloignée de celle de svn à laquelle je m’étais habituée.

          @@ -113,57 +113,57 @@ Ils n’étaient pas familier avec les systèmes de versions. À par ceux po
          -

          Lorsqu’on voit les présentations autour de la notion de branche et de dcvs, on s’imagine dans un monde où chaque branche est totalement isolée des autres sauf au moment de “merger” les différences les unes des autres. -Tout est magique. C’est la façon de voir “Mondes Parallèles”. Cette façon de voir est expliquée dans le très bon article sur les branches sur betterexplained.

          +

          Lorsqu’on voit les présentations autour de la notion de branche et de dcvs, on s’imagine dans un monde où chaque branche est totalement isolée des autres sauf au moment de “merger” les différences les unes des autres. +Tout est magique. C’est la façon de voir “Mondes Parallèles”. Cette façon de voir est expliquée dans le très bon article sur les branches sur betterexplained.

          Sauf que les concepteurs de Git (conçu pour le noyau Linux) ont plutôt imaginé un système basé non pas autour des mondes parallèles, mais sur la notion de Patch.

          -

          D’un côté Mondes Parallèles, de l’autre Patchs. Il y a beaucoup de notions équivalentes dans les deux cas, mais aussi quelques différences.

          +

          D’un côté Mondes Parallèles, de l’autre Patchs. Il y a beaucoup de notions équivalentes dans les deux cas, mais aussi quelques différences.

          • Bazaar est complètement basé sur la notion de Mondes Parallèles qui va impliquer un phénomène de Patch.
          • Alors que Git est basé sur la notion de Patch qui va impliquer la création de Mondes Parallèles.
          -

          Je ne vais pas argumenté pour savoir si une façon de voir est meilleure que l’autre. Disons simplement que ma façon d’entrer dans l’explication des DCVS était par le biais des Mondes Parallèles alors que Git est conçut selon l’autre notion.

          +

          Je ne vais pas argumenté pour savoir si une façon de voir est meilleure que l’autre. Disons simplement que ma façon d’entrer dans l’explication des DCVS était par le biais des Mondes Parallèles alors que Git est conçut selon l’autre notion.

          De la théorie à la pratique

          -

          Bien que je pense avoir bien compris les mécanismes conceptuels de Git, la mise en pratique posait problème. Et le point noir, celui qui m’empêchait de comprendre Git comme je le souhaitais était dû à la notion de branche légère.

          +

          Bien que je pense avoir bien compris les mécanismes conceptuels de Git, la mise en pratique posait problème. Et le point noir, celui qui m’empêchait de comprendre Git comme je le souhaitais était dû à la notion de branche légère.

          -

          Une branche légère qu’est-ce que c’est me demanderez-vous ? Si comme moi on vient de Bazaar, c’est une notion complètement nouvelle. Il s’agit simplement de la capacité de créer une nouvelle branche en réutilisant le répertoire dans lequel on se trouve.

          +

          Une branche légère qu’est-ce que c’est me demanderez-vous ? Si comme moi on vient de Bazaar, c’est une notion complètement nouvelle. Il s’agit simplement de la capacité de créer une nouvelle branche en réutilisant le répertoire dans lequel on se trouve.

          En pratique pour changer de branche, il faut lancer une commande. Tous les fichiers locaux non modifiés depuis le dernier commit seront alors modifiés pour correspondre à la version de la branche.

          -

          En théorie, les branches légères sont des branches tout comme avec bazaar. D’ailleurs le mot utilisé n’est pas branche légère mais branche tout court.

          +

          En théorie, les branches légères sont des branches tout comme avec bazaar. D’ailleurs le mot utilisé n’est pas branche légère mais branche tout court.

          -

          Sauf que contrairement à une branche standard résidant dans son propre répertoire, une branche légère est destinée à n’être qu’un patch de la branche principale du répertoire dans lequel elle réside.

          +

          Sauf que contrairement à une branche standard résidant dans son propre répertoire, une branche légère est destinée à n’être qu’un patch de la branche principale du répertoire dans lequel elle réside.

          -

          Bien entendu on pourra m’objecter que l’on peut tout à fait utiliser ces branches légères comme des branches normales. Mais elles n’ont pas été conçues pour ça. Et donc, en pratique, c’est gênant de les utiliser de la sorte.

          +

          Bien entendu on pourra m’objecter que l’on peut tout à fait utiliser ces branches légères comme des branches normales. Mais elles n’ont pas été conçues pour ça. Et donc, en pratique, c’est gênant de les utiliser de la sorte.

          Voici comment Git est censé être utilisé (pour plus de détails vous pouvez lire Git for Designers en anglais) :

            -
          • récupération ou création d’un “repository” central Le Grand Repository
          • -
          • Création d’un branche légère locale qui contient les différences qui vont devoir être “patché” dans LE GRAND REPOSITORY.
          • +
          • récupération ou création d’un “repository” central Le Grand Repository
          • +
          • Création d’un branche légère locale qui contient les différences qui vont devoir être “patché” dans LE GRAND REPOSITORY.
          -

          Voici comment n’est pas censé être utilisé Git :

          +

          Voici comment n’est pas censé être utilisé Git :

            -
          • Récupération ou création d’un “repository” quelconque
          • -
          • Création d’un branche légère locale qui n’a pas pour vocation de mettre à jour le “repository” d’origine, mais de vivre sa vie de façon autonome et de récupérer les mises à jour des autres du “repository” d’origine.
          • +
          • Récupération ou création d’un “repository” quelconque
          • +
          • Création d’un branche légère locale qui n’a pas pour vocation de mettre à jour le “repository” d’origine, mais de vivre sa vie de façon autonome et de récupérer les mises à jour des autres du “repository” d’origine.
          -

          En effet cette petite notion m’a empêché de fonctionner correctement.

          +

          En effet cette petite notion m’a empêché de fonctionner correctement.

          En pratique

          -

          Maintenant que j’ai compris ça, je peux enfin comprendre pourquoi Git a tant de défenseurs qui continue de trouver que Git est meilleur que les autres.

          +

          Maintenant que j’ai compris ça, je peux enfin comprendre pourquoi Git a tant de défenseurs qui continue de trouver que Git est meilleur que les autres.

          -

          La notion de branche légère est essentielle à Git et vraiment utile en pratique. Notamment pour la gestion de ce site. Par contre, elle m’empêche d’utiliser les branches comme je le souhaiterai.

          +

          La notion de branche légère est essentielle à Git et vraiment utile en pratique. Notamment pour la gestion de ce site. Par contre, elle m’empêche d’utiliser les branches comme je le souhaiterai.

          -

          Mais dans ce cas-là, je n’ai qu’à utiliser des clônes et pas des branches légères.

          +

          Mais dans ce cas-là, je n’ai qu’à utiliser des clônes et pas des branches légères.

          Des exemples

          @@ -187,7 +187,7 @@ Tout est magique. C’est la façon de voir “Mondes Parallèles
          git reset --hard HEAD~3
           
          -

          Là ça va commencer à se compliquer. Si on veut revenir dans le temps sur toute l’arborescence, avec Git on utilise reset.

          +

          Là ça va commencer à se compliquer. Si on veut revenir dans le temps sur toute l’arborescence, avec Git on utilise reset.

          OK
          @@ -198,47 +198,47 @@ Tout est magique. C’est la façon de voir “Mondes Parallèles**ET BIEN NON !** -

          La solution c’est :

          +

          La solution c’est :

          git checkout FILE
           
          -

          Quoi ? checkout !? Bon, d’accord, j’accepte, pourquoi pas après tout ? -En plus quand on est habitué à Bazaar c’est :

          +

          Quoi ? checkout !? Bon, d’accord, j’accepte, pourquoi pas après tout ? +En plus quand on est habitué à Bazaar c’est :

          git revert FILE
           

          Ce que je trouve quand même bien plus naturel.

          -

          Mais là où ça devient vraiment difficile de s’y faire c’est pour changer de branche.
          +

          Mais là où ça devient vraiment difficile de s’y faire c’est pour changer de branche.
          Avec Bazaar ça donne :

          cd ../branch
           
          -

          Bon ok, il faut changer de répertoire, un répertoire par branche. Ça consomme de l’espace disque mais au moins on voit où on est. Avec Git voilà comment on change de branche (branche légère) :

          +

          Bon ok, il faut changer de répertoire, un répertoire par branche. Ça consomme de l’espace disque mais au moins on voit où on est. Avec Git voilà comment on change de branche (branche légère) :

          git checkout branch
           
          -

          Alors là, on se dit “WTF?” ; en français : mais qu’est-ce que c’est que ça ? Je croyais que checkout c’était pour récupérer l’état d’un fichier ?

          +

          Alors là, on se dit “WTF?” ; en français : mais qu’est-ce que c’est que ça ? Je croyais que checkout c’était pour récupérer l’état d’un fichier ?

          En fait le mot checkout sert à la fois à revenir en arrière sur un fichier (MAIS PAS TOUTE UNE ARBORESCENCE où là ça sera reset --hard) et à changer de branche !

          -

          Je trouve ça carrément contre nature. Même si c’est totalement justifié du point de vue théorique voir le très bon article (en anglais) Git for Computer Scientist. Du point de vue interface utilisateur, on peut difficilement faire pire. On dirait que les mots clés sont utilisés pour piéger l’utilisateur.

          +

          Je trouve ça carrément contre nature. Même si c’est totalement justifié du point de vue théorique voir le très bon article (en anglais) Git for Computer Scientist. Du point de vue interface utilisateur, on peut difficilement faire pire. On dirait que les mots clés sont utilisés pour piéger l’utilisateur.

            -
          • — Alors, essaye de deviner ce qu’il va falloir écrire pour faire cette opération ?
          • -
          • — Perdu. Essaye encore, cherche sur Internet (blaireau).
          • -
          • — Non, c’est toujours pas bon, recommence (sale nul).
          • +
          • — Alors, essaye de deviner ce qu’il va falloir écrire pour faire cette opération ?
          • +
          • — Perdu. Essaye encore, cherche sur Internet (blaireau).
          • +
          • — Non, c’est toujours pas bon, recommence (sale nul).
          -

          Bon alors, voilà, les défauts de Git. Mais, il a par contre beaucoup d’avantages. Une fois qu’on a compris le principe des branches légères. Tout devient plus clair. Même si en pratique, l’édition du fichier .git/config peut s’avérer un peu fastidieuse et surtout contre intuitive.

          +

          Bon alors, voilà, les défauts de Git. Mais, il a par contre beaucoup d’avantages. Une fois qu’on a compris le principe des branches légères. Tout devient plus clair. Même si en pratique, l’édition du fichier .git/config peut s’avérer un peu fastidieuse et surtout contre intuitive.

          -

          - Il faut aussi préciser qu’ayant travaillé sur les logiques multi-modales et en particulier sur les logiques temporelles (linéaires ou non), j’étais plus enclin à adhérer à cette vision des choses. “Ah mes premiers amours dans la recherche scientifique !”

          +

          - Il faut aussi préciser qu’ayant travaillé sur les logiques multi-modales et en particulier sur les logiques temporelles (linéaires ou non), j’étais plus enclin à adhérer à cette vision des choses. “Ah mes premiers amours dans la recherche scientifique !”

          @@ -250,18 +250,18 @@ Avec Bazaar ça donne :

          DCVS vs. CVS ?

          -

          Est-ce que ça valait la peine d’utiliser un système de “versionning” décentralisé ? Indéniablement la réponse est oui. On peut très bien vivre avec des systèmes de versions centralisés, mais la souplesse apportée par la facilité de “merger” différentes branches. De travailler de façon autonomes sur différentes parties d’un projets sont vraiment des plus appréciables. J’aurai vraiment du mal à revenir en arrière.

          +

          Est-ce que ça valait la peine d’utiliser un système de “versionning” décentralisé ? Indéniablement la réponse est oui. On peut très bien vivre avec des systèmes de versions centralisés, mais la souplesse apportée par la facilité de “merger” différentes branches. De travailler de façon autonomes sur différentes parties d’un projets sont vraiment des plus appréciables. J’aurai vraiment du mal à revenir en arrière.

          Est-ce que Git est meilleurs que Bazaar ?

          En terme de fonctionnalités je dirai que Git est meilleurs. -Par contre, je dois avouer qu’il s’agit d’un CVS qui s’est mis dans mes pattes. Or c’est exactement ce que je ne souhaitait pas lors de mon premier choix.

          +Par contre, je dois avouer qu’il s’agit d’un CVS qui s’est mis dans mes pattes. Or c’est exactement ce que je ne souhaitait pas lors de mon premier choix.

          -

          Je n’aurai pas dû avoir du mal à comprendre cette notion de branche légère qui doit être un patch sinon tu reçois des messages t’expliquant que tu es en retard. En réalité, Git différencie la notion d’arbre de la notion de branche. Ce qui n’est pas le cas dans Bazaar. Conceptuellement, c’est beaucoup plus simple de comprendre avec Bazaar.

          +

          Je n’aurai pas dû avoir du mal à comprendre cette notion de branche légère qui doit être un patch sinon tu reçois des messages t’expliquant que tu es en retard. En réalité, Git différencie la notion d’arbre de la notion de branche. Ce qui n’est pas le cas dans Bazaar. Conceptuellement, c’est beaucoup plus simple de comprendre avec Bazaar.

          Finalement ?

          -

          Pour conclure, j’utilise plus souvent Git que Bazaar et je dois dire que je préfère utiliser Git. Cependant, les commandes comme revert manquent cruellement avec Git. Pour l’instant je n’ai pas encore fait d’alias pour renommer les commandes Git comme je le souhaite.

          +

          Pour conclure, j’utilise plus souvent Git que Bazaar et je dois dire que je préfère utiliser Git. Cependant, les commandes comme revert manquent cruellement avec Git. Pour l’instant je n’ai pas encore fait d’alias pour renommer les commandes Git comme je le souhaite.

          diff --git a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/index.html b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/index.html index 94ed27279..c9d524773 100644 --- a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/index.html +++ b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/index.html @@ -62,25 +62,25 @@
          -

          Si tout ce qui vous intéresse c’est d’utiliser Git tout de suite. Lisez simplement les parties sur fond noir. Je vous conseille aussi de revenir relire tout ça un peu plus tard, pour mieux comprendre les fondements des systèmes de versions et ne pas faire de bêtises quand vous les utilisez.

          +

          Si tout ce qui vous intéresse c’est d’utiliser Git tout de suite. Lisez simplement les parties sur fond noir. Je vous conseille aussi de revenir relire tout ça un peu plus tard, pour mieux comprendre les fondements des systèmes de versions et ne pas faire de bêtises quand vous les utilisez.

          -

          Git est un DCVS, c’est-à-dire un système de versions concurrentes décentralisé. Analysons chaque partie de cette appellation compliquée.

          +

          Git est un DCVS, c’est-à-dire un système de versions concurrentes décentralisé. Analysons chaque partie de cette appellation compliquée.

          Système de versions

          -

          Tout d’abord, les systèmes de versions gèrent des fichiers. +

          Tout d’abord, les systèmes de versions gèrent des fichiers. Quand on travaille avec des fichiers sans système de version voilà ce qui arrive souvent :

          -

          Lorsqu’on modifie un fichier un peu critique et qu’on a pas envie de perdre, on se retrouve souvent à le recopier sous un autre nom. Par exemple

          +

          Lorsqu’on modifie un fichier un peu critique et qu’on a pas envie de perdre, on se retrouve souvent à le recopier sous un autre nom. Par exemple

          $ cp fichier_important.c fichier_important.c.bak
           
          -

          Du coups, ce nouveau fichier joue le rôle de backup. Si on casse tout, on peut toujours écraser les modifications que nous avons faites. Évidemment le problème avec cette façon de faire c’est que ce n’est pas très professionnel. Et puis c’est un peu limité. Si on veut faire trois ou quatre modifications on se retrouve avec plein de fichiers. Parfois avec des nom bizarres comme :

          +

          Du coups, ce nouveau fichier joue le rôle de backup. Si on casse tout, on peut toujours écraser les modifications que nous avons faites. Évidemment le problème avec cette façon de faire c’est que ce n’est pas très professionnel. Et puis c’est un peu limité. Si on veut faire trois ou quatre modifications on se retrouve avec plein de fichiers. Parfois avec des nom bizarres comme :

          @@ -94,13 +94,13 @@ old.fichier_important.c
           
          -

          Bon alors si on veut que ça marche il faut se fixer des conventions de nommage. Les fichiers prennent beaucoup de place alors que souvent il n’y a que quelques lignes différentes entre le fichier et son backup…

          +

          Bon alors si on veut que ça marche il faut se fixer des conventions de nommage. Les fichiers prennent beaucoup de place alors que souvent il n’y a que quelques lignes différentes entre le fichier et son backup…

          Heureusement les systèmes de version viennent à la rescousse.

          -

          Il suffit de signaler que l’on va faire une nouvelle version d’un fichier et le système de version se débrouille pour l’enregistrer quelque part où on pourra facilement le retrouver. Et en général, le système de version fait les choses bien. C’est-à-dire qu’il n’utilise que très peu d’espace disque pour faire ces backups.

          +

          Il suffit de signaler que l’on va faire une nouvelle version d’un fichier et le système de version se débrouille pour l’enregistrer quelque part où on pourra facilement le retrouver. Et en général, le système de version fait les choses bien. C’est-à-dire qu’il n’utilise que très peu d’espace disque pour faire ces backups.

          -

          Il fut un temps où les versions étaient gérées fichier par fichier. Je pense à CVS. Puis on s’est vite aperçu qu’un projet c’est un ensemble de fichiers cohérents. Et donc il ne suffit pas de pouvoir revenir en arrière par fichier, mais plutôt dans le temps. Les numéros de versions sont donc passé d’un numéro par fichier à un numéro par projet tout entier.

          +

          Il fut un temps où les versions étaient gérées fichier par fichier. Je pense à CVS. Puis on s’est vite aperçu qu’un projet c’est un ensemble de fichiers cohérents. Et donc il ne suffit pas de pouvoir revenir en arrière par fichier, mais plutôt dans le temps. Les numéros de versions sont donc passé d’un numéro par fichier à un numéro par projet tout entier.

          Ainsi on peut dire, «je veux revenir trois jours en arrière», et tous les fichiers se remettent à jour.

          @@ -108,12 +108,12 @@ old.fichier_important.c
          -

          Qu’apportent les systèmes de versions ? (je n’ai pas tout mentionné)

          +

          Qu’apportent les systèmes de versions ? (je n’ai pas tout mentionné)

          • backup automatique de tous les fichiers: Revenir dans le temps. ;
          • donne la possibilité de voir les différences entre chaque version et les différences entre la version en cours et les modifications locales ;
          • -
          • permet de poser un tag sur certaines versions et ainsi pouvoir s’y référer facilement ;
          • +
          • permet de poser un tag sur certaines versions et ainsi pouvoir s’y référer facilement ;
          • permet d’avoir un historique des modifications. Car en général il est demandé aux utilisateurs d’ajouter un petit commentaire à chaque nouvelle version.
          @@ -123,7 +123,7 @@ old.fichier_important.c

          concurrentes

          -

          Les systèmes de versions sont déjà intéressants pour gérer ses projets personnels. Car ils permettent de mieux organiser celui-ci. De ne (presque) plus se poser de questions à propos des backups. Je dis presque parce qu’il faut quand même penser à protéger par backup son repository. Mais là où les systèmes de versions deviennent vraiment intéressants, c’est pour la gestion de projets à plusieurs.

          +

          Les systèmes de versions sont déjà intéressants pour gérer ses projets personnels. Car ils permettent de mieux organiser celui-ci. De ne (presque) plus se poser de questions à propos des backups. Je dis presque parce qu’il faut quand même penser à protéger par backup son repository. Mais là où les systèmes de versions deviennent vraiment intéressants, c’est pour la gestion de projets à plusieurs.

          Commençons par un exemple avec un projet fait par deux personnes ; Alex et Béatrice. Sur un fichier contenant une liste de dieux Lovecraftiens :

          @@ -146,9 +146,9 @@ Yogsototh
          -

          puis il envoi ce fichier sur le serveur du projet. Ainsi sur le serveur, il y a le fichier d’Alex.

          +

          puis il envoi ce fichier sur le serveur du projet. Ainsi sur le serveur, il y a le fichier d’Alex.

          -

          Ensuite c’est Béatrice qui n’a pas récupéré le fichier d’Alex sur le serveur qui fait une modification.

          +

          Ensuite c’est Béatrice qui n’a pas récupéré le fichier d’Alex sur le serveur qui fait une modification.

          @@ -161,7 +161,7 @@ Yogsototh
           
           

          Puis Béatrice envoi son fichier sur le serveur.

          -

          La modification d’Alex est perdue. Encore une fois les systèmes de versions sont là pour résoudre ce type de soucis.

          +

          La modification d’Alex est perdue. Encore une fois les systèmes de versions sont là pour résoudre ce type de soucis.

          Un système de version aurait mergé les deux fichiers au moment où Béatrice voulait envoyer la modification sur le serveur. Et comme par magie, sur le serveur le fichier deviendra :

          @@ -175,18 +175,18 @@ Yogsototh
          -

          En pratique, au moment où Béatrice veut envoyer ses modifications, le système de version la préviens qu’une modification a eu lieu sur le serveur. Elle utilise la commande qui rapatrie les modifications localement et qui va mettre à jour le fichier. Ensuite Béatrice renvoie le nouveau fichier sur le serveur.

          +

          En pratique, au moment où Béatrice veut envoyer ses modifications, le système de version la préviens qu’une modification a eu lieu sur le serveur. Elle utilise la commande qui rapatrie les modifications localement et qui va mettre à jour le fichier. Ensuite Béatrice renvoie le nouveau fichier sur le serveur.

          -

          Qu’apportent les Systèmes de Versions Concurrentes ?

          +

          Qu’apportent les Systèmes de Versions Concurrentes ?

          • récupérer sans problème les modifications des autres ;
          • envoyer sans problème ses modifications aux autres ;
          • -
          • permet de gérer les conflits. Je n’en ai pas parlé, mais quand un conflit arrive (ça peut arriver si deux personnes modifient la même ligne avec deux contenus différents), les SVC proposent leur aide pour les résoudre. J’en dirai un mot plus loin.
          • +
          • permet de gérer les conflits. Je n’en ai pas parlé, mais quand un conflit arrive (ça peut arriver si deux personnes modifient la même ligne avec deux contenus différents), les SVC proposent leur aide pour les résoudre. J’en dirai un mot plus loin.
          • permet de savoir qui a fait quoi et quand
          @@ -196,26 +196,26 @@ Yogsototh

          décentralisé

          -

          Ce mot n’est devenu populaire que très récemment dans le milieu des systèmes de version. Et bien ça veut dire principalement deux choses.

          +

          Ce mot n’est devenu populaire que très récemment dans le milieu des systèmes de version. Et bien ça veut dire principalement deux choses.

          -

          Tout d’abord, jusqu’à très récemment (SVN) il fallait être connecté sur un serveur distant pour avoir des informations sur un projet. Comme avoir l’historique. Les nouveaux systèmes décentralisés permettent de travailler avec un REPOSITORY (le répertoire contenant tous les backups, et les différentes info nécessaires au fonctionnement du système de versions) local au projet. Ainsi on peut avoir l’historique du projet sans avoir à se connecter au serveur.

          +

          Tout d’abord, jusqu’à très récemment (SVN) il fallait être connecté sur un serveur distant pour avoir des informations sur un projet. Comme avoir l’historique. Les nouveaux systèmes décentralisés permettent de travailler avec un REPOSITORY (le répertoire contenant tous les backups, et les différentes info nécessaires au fonctionnement du système de versions) local au projet. Ainsi on peut avoir l’historique du projet sans avoir à se connecter au serveur.

          Toutes les instances de projets peuvent vivre de façon indépendantes.

          Pour préciser, les systèmes de versions concurrentes décentralisés sont basés sur la notion de branche.

          -

          Et la signification pratique est très importante. Ça veut dire que tout les utilisateurs travaillent de façon complètement indépendante les uns des autres. Et c’est l’outil de version qui se charge de mettre tout ça ensemble.

          +

          Et la signification pratique est très importante. Ça veut dire que tout les utilisateurs travaillent de façon complètement indépendante les uns des autres. Et c’est l’outil de version qui se charge de mettre tout ça ensemble.

          -

          Ça va même encore plus loin. Ça permet de développer plusieurs features de manière complètement indépendantes. Sous les autres systèmes c’était plus difficile.

          +

          Ça va même encore plus loin. Ça permet de développer plusieurs features de manière complètement indépendantes. Sous les autres systèmes c’était plus difficile.

          -

          L’exemple type :

          +

          L’exemple type :

          -

          Je développe mon projet. Je suis en train de l’améliorer. Lorsqu’un bug urgent est reporté.

          +

          Je développe mon projet. Je suis en train de l’améliorer. Lorsqu’un bug urgent est reporté.

          Je peux très facilement avec un système décentralisé, revenir sur la version qui pose problème. Résoudre le bug. Renvoyer les modifications. Puis revenir à ma version avec les améliorations en cours. Et même récupérer la correction de bug dans ma nouvelle version avec les améliorations.

          -

          Dans un système non décentralisé, cela est possible, mais fastidieux. Les systèmes décentralisés rendent ce type de comportement très naturels. Ainsi, il devient naturel de tirer des branches pour toutes les features, les bug…

          +

          Dans un système non décentralisé, cela est possible, mais fastidieux. Les systèmes décentralisés rendent ce type de comportement très naturels. Ainsi, il devient naturel de tirer des branches pour toutes les features, les bug…

          @@ -236,15 +236,15 @@ Yogsototh

          Pour résumer

          -

          Résumons l’ensemble des choses que l’on peut faire facilement avec un DCVS :

          +

          Résumons l’ensemble des choses que l’on peut faire facilement avec un DCVS :

          Systèmes de versions

          • revenir dans le temps ;
          • lister les différences entre chaque version ;
          • -
          • nommer certaines versions pour s’y référer facilement ;
          • -
          • afficher l’historique des modifications.
          • +
          • nommer certaines versions pour s’y référer facilement ;
          • +
          • afficher l’historique des modifications.

          Concurrentes

          diff --git a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/index.html b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/index.html index d7293cb35..1a9902f8e 100644 --- a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/index.html +++ b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/index.html @@ -56,9 +56,9 @@
          -

          Et c’est parti !

          +

          Et c’est parti !

          -

          Voici une parmi de nombreuses autres façon d’utiliser Git. Cette méthode est nécessaire et suffisante pour travailler seul ou en collaboration sur un projet commun. Cependant, on peut faire beaucoup mieux avec Git que ce workflow (en langage anglo-saxon).

          +

          Voici une parmi de nombreuses autres façon d’utiliser Git. Cette méthode est nécessaire et suffisante pour travailler seul ou en collaboration sur un projet commun. Cependant, on peut faire beaucoup mieux avec Git que ce workflow (en langage anglo-saxon).

          Utilisation basique

          @@ -78,11 +78,11 @@ -

          Voilà, avec ces quelques commandes vous pouvez utiliser Git sur un projet avec d’autres personnes. Même si c’est suffisant, il faut quand même connaître une chose avant de se lancer ; la gestion des conflits.

          +

          Voilà, avec ces quelques commandes vous pouvez utiliser Git sur un projet avec d’autres personnes. Même si c’est suffisant, il faut quand même connaître une chose avant de se lancer ; la gestion des conflits.

          Gestion des conflits

          -

          Les conflits peuvent survenir lorsque vous modifiez les même lignes de codes sur le même fichier d’une autre branche que vous mergez. Ça peut sembler un peu intimidant, mais avec Git ce genre de chose est très facile a régler.

          +

          Les conflits peuvent survenir lorsque vous modifiez les même lignes de codes sur le même fichier d’une autre branche que vous mergez. Ça peut sembler un peu intimidant, mais avec Git ce genre de chose est très facile a régler.

          exemple

          @@ -140,7 +140,7 @@ Zoot the pure

          Résolution du conflit

          -

          Régler le conflit, il suffit d’éditer le fichier, par exemple en écrivant :

          +

          Régler le conflit, il suffit d’éditer le fichier, par exemple en écrivant :

          @@ -148,7 +148,7 @@ Zoot the not so pure
           
          -

          et de ‘commiter’ tout simplement :

          +

          et de ‘commiter’ tout simplement :

          @@ -157,7 +157,7 @@ git commit -a -m "conflict
           

          Maintenant vous êtes fin prêt pour utiliser Git. -Sauf que Git, c’est un outil qui permet de faire beaucoup plus que juste ça. Nous allons maintenant voir comment utiliser les fonctionnalités de Git qui n’étaient pas disponibles avec CVS et consorts.

          +Sauf que Git, c’est un outil qui permet de faire beaucoup plus que juste ça. Nous allons maintenant voir comment utiliser les fonctionnalités de Git qui n’étaient pas disponibles avec CVS et consorts.

          diff --git a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/commandes-avancees/index.html b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/commandes-avancees/index.html index 554df106d..997c50463 100644 --- a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/commandes-avancees/index.html +++ b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/commandes-avancees/index.html @@ -69,8 +69,8 @@
        5. envoyer ses modifications aux autres ;
        6. revenir dans le temps ;
        7. lister les différences entre chaque version ;
        8. -
        9. nommer certaines versions pour s’y référer facilement ;
        10. -
        11. afficher l’historique des modifications ;
        12. +
        13. nommer certaines versions pour s’y référer facilement ;
        14. +
        15. afficher l’historique des modifications ;
        16. savoir qui a fait quoi et quand ;
        17. gérer des conflits ;
        18. manipuler facilement des branches.
        19. @@ -97,7 +97,7 @@ $ git push

          revenir dans le temps

          -

          Pour toute l’arborescence

          +

          Pour toute l’arborescence

           $ git checkout
          @@ -113,7 +113,7 @@ $ git revert
           $ git uncommit 3
           
          -

          Revenir avant le dernier merge (s’il s’est mal passé).

          +

          Revenir avant le dernier merge (s’il s’est mal passé).

           $ git revertbeforemerge
          @@ -141,19 +141,19 @@ $ git status
           $ git diff
           
          -

          liste les différences entre les fichier d’une certaine version et les fichiers locaux.

          +

          liste les différences entre les fichier d’une certaine version et les fichiers locaux.

           $ git diff VersionHash fichier
           
          -

          nommer certaines versions pour s’y référer facilement

          +

          nommer certaines versions pour s’y référer facilement

           $ git tag 'toto'
           
          -

          afficher l’historique des modifications

          +

          afficher l’historique des modifications

           $ git log
          diff --git a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/comprendre/index.html b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/comprendre/index.html
          index 8c509adfc..3f182d63d 100644
          --- a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/comprendre/index.html
          +++ b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/comprendre/index.html
          @@ -60,19 +60,19 @@
                           

          Pourquoi Git est cool ?

          -

          Parce que grace à Git vous pouvez travailler sur plusieurs partie du projet de façon complètement isolée les unes des autres. Ça c’est la partie décentralisée de Git.

          +

          Parce que grace à Git vous pouvez travailler sur plusieurs partie du projet de façon complètement isolée les unes des autres. Ça c’est la partie décentralisée de Git.

          -

          Toutes les branches locales utilisent le même répertoire. Ainsi on peu changer de branche très aisément et rapidement. On peut aussi changer de branche alors que certains fichier sont en cours de modifications. On peut même pousser le vice jusqu’à modifier un fichier, changer de branche, commiter une partie seulement des modifications de ce fichier dans la branche courante. Revenir dans l’ancienne branche et commiter à nouveau les modifications restantes. Et merger dans une troisième branche les deux modifications.

          +

          Toutes les branches locales utilisent le même répertoire. Ainsi on peu changer de branche très aisément et rapidement. On peut aussi changer de branche alors que certains fichier sont en cours de modifications. On peut même pousser le vice jusqu’à modifier un fichier, changer de branche, commiter une partie seulement des modifications de ce fichier dans la branche courante. Revenir dans l’ancienne branche et commiter à nouveau les modifications restantes. Et merger dans une troisième branche les deux modifications.

          -

          Avec la command git rebase on peut après coup, décider que certaines modifications devaient aller dans certaines branches, que d’autres ne servaient à rien. C’est une commande vraiment très puissante pour organiser l’historique.

          +

          Avec la command git rebase on peut après coup, décider que certaines modifications devaient aller dans certaines branches, que d’autres ne servaient à rien. C’est une commande vraiment très puissante pour organiser l’historique.

          -

          En pratique, qu’est-ce que ça signifie ? Mieux qu’avec tous les autres systèmes de versions, vous pouvez utiliser Git pour vous concentrer sur votre code. En effet, on peut envoyer les commits après avoir coder. Par exemple, vous pouvez coder sur la résolution du bug b01, du bug b02 et de la feature f03. Puis ensuite, vous pouvez créer une branche par bug et par feature. Puis commiter les modifications pour chaque branche et chaque feature. Puis finalement merger tous les modifications dans la branche principale.

          +

          En pratique, qu’est-ce que ça signifie ? Mieux qu’avec tous les autres systèmes de versions, vous pouvez utiliser Git pour vous concentrer sur votre code. En effet, on peut envoyer les commits après avoir coder. Par exemple, vous pouvez coder sur la résolution du bug b01, du bug b02 et de la feature f03. Puis ensuite, vous pouvez créer une branche par bug et par feature. Puis commiter les modifications pour chaque branche et chaque feature. Puis finalement merger tous les modifications dans la branche principale.

          -

          Tout a été pensé pour vous permettre de coder d’abord, puis de vous occuper du système de version plus tard. Bien entendu, faire des commit atomique au fur et à mesure du code permet de gagner du temps et de ne pas trop s’embêter pour organiser les branches. Mais rien ne vous y oblige. Par contre faire la même chose dans d’autres systèmes de versions n’est absolument pas naturel.

          +

          Tout a été pensé pour vous permettre de coder d’abord, puis de vous occuper du système de version plus tard. Bien entendu, faire des commit atomique au fur et à mesure du code permet de gagner du temps et de ne pas trop s’embêter pour organiser les branches. Mais rien ne vous y oblige. Par contre faire la même chose dans d’autres systèmes de versions n’est absolument pas naturel.

          -

          Avec Git vous pouvez aussi dépendre de plusieurs sources. Ainsi, plutôt que d’avoir un serveur centralisé, vous pouvez avoir plusieurs sources. Vous pouvez définir ce genre de chose très finement.

          +

          Avec Git vous pouvez aussi dépendre de plusieurs sources. Ainsi, plutôt que d’avoir un serveur centralisé, vous pouvez avoir plusieurs sources. Vous pouvez définir ce genre de chose très finement.

          -

          Ce qui change le plus avec Git c’est la vision d’un projet centralisé sur un serveur avec plusieurs personnes qui travaillent dessus. Avec Git plusieurs personnes peuvent travailler sur le même projet, mais sans nécessairement avoir un repository de référence. On peut très facilement résoudre un bug et envoyer le patch à plein d’autres versions du projet.

          +

          Ce qui change le plus avec Git c’est la vision d’un projet centralisé sur un serveur avec plusieurs personnes qui travaillent dessus. Avec Git plusieurs personnes peuvent travailler sur le même projet, mais sans nécessairement avoir un repository de référence. On peut très facilement résoudre un bug et envoyer le patch à plein d’autres versions du projet.

          diff --git a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html index 29f5ab039..ecd806aa4 100644 --- a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html +++ b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/conf-et-install/index.html @@ -56,7 +56,7 @@
          -

          Avant l’utilisation, la configuration

          +

          Avant l’utilisation, la configuration

          installation

          @@ -115,9 +115,9 @@ $ git config --global user.name John Doe $ git config --global user.email john.doe@email.com
          -

          Voilà, la configuration de base est terminée. J’ai créé dans le fichier de configuration global des alias qui vont permettre de taper des commandes un peu plus courtes.

          +

          Voilà, la configuration de base est terminée. J’ai créé dans le fichier de configuration global des alias qui vont permettre de taper des commandes un peu plus courtes.

          -

          Récupération d’un projet déjà versionné

          +

          Récupération d’un projet déjà versionné

          Si un projet est déjà versionné avec Git vous devez avoir une URL pointant vers les sources du projet. La commande a exécuter est alors très simple.

          @@ -126,13 +126,13 @@ $ cd ~/Projets $ git clone git://main.server/path/to/file
          -

          S’il n’y a pas de serveur git sur le serveur distant, mais que vous avez un accès ssh, il suffit de remplacer le git de l’url par ssh. Pour ne pas avoir à entrer votre mot de passe à chaque fois le plus simple est de procéder comme suit :

          +

          S’il n’y a pas de serveur git sur le serveur distant, mais que vous avez un accès ssh, il suffit de remplacer le git de l’url par ssh. Pour ne pas avoir à entrer votre mot de passe à chaque fois le plus simple est de procéder comme suit :

           $ ssh-keygen -t rsa
           
          -

          Répondez aux question et n’entrez surtout PAS de mot de passe. Ensuite copiez les clés sur le serveur distant. Ce n’est pas la façon la plus sûre de procéder. L’idéal étant d’écrire quand même un mot de passe et d’utiliser ssh-agent.

          +

          Répondez aux question et n’entrez surtout PAS de mot de passe. Ensuite copiez les clés sur le serveur distant. Ce n’est pas la façon la plus sûre de procéder. L’idéal étant d’écrire quand même un mot de passe et d’utiliser ssh-agent.

          Ensuite le plus simple, si vous possédez ssh-copy-id (sous Ubuntu par exemple) :

          @@ -151,7 +151,7 @@ me@main.server$ rm id_rsa.pub me@main.server$ logout
          -

          Maintenant vous n’avez plus besoin de taper votre mot de passe pour accéder à main.server. Et donc aussi pour les commandes git.

          +

          Maintenant vous n’avez plus besoin de taper votre mot de passe pour accéder à main.server. Et donc aussi pour les commandes git.

          Créer un nouveau projet

          @@ -173,7 +173,7 @@ $ git commit -m "Initial c *~
          -

          Maintenant si vous voulez créer un repository sur un serveur distant, il faut absolument qu’il soit en mode bare. C’est-à-dire que le repository ne contiendra que la partie contenant les informations utile à la gestion de git, mais pas les fichiers du projet. Sans rentrer dans les détails, il suffit de lancer :

          +

          Maintenant si vous voulez créer un repository sur un serveur distant, il faut absolument qu’il soit en mode bare. C’est-à-dire que le repository ne contiendra que la partie contenant les informations utile à la gestion de git, mais pas les fichiers du projet. Sans rentrer dans les détails, il suffit de lancer :

           $ cd /path/to/local/project
          @@ -188,9 +188,9 @@ git clone ssh://server/path/to/project
           
           

          Résumé de la seconde étape

          -

          Vous avez maintenant un répertoire sur votre ordinateur local. Il est versionné. Vous pouvez vous en rendre compte parcequ’à la racine (et à la racine seulement), il y a un répertoire .git. Ce répertoire contient tous les fichiers nécessaires au bon fonctionnement de Git.

          +

          Vous avez maintenant un répertoire sur votre ordinateur local. Il est versionné. Vous pouvez vous en rendre compte parcequ’à la racine (et à la racine seulement), il y a un répertoire .git. Ce répertoire contient tous les fichiers nécessaires au bon fonctionnement de Git.

          -

          Il ne reste plus qu’à savoir comment s’en servir maintenant pour obtenir toutes les jolies promesses faites dans la première partie.

          +

          Il ne reste plus qu’à savoir comment s’en servir maintenant pour obtenir toutes les jolies promesses faites dans la première partie.

          diff --git a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/index.html b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/index.html index f0dbba77a..13601e80d 100644 --- a/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/index.html +++ b/output/Scratch/fr/blog/2009-11-12-Git-for-n00b/index.html @@ -62,7 +62,7 @@
          -

          Voici un tutoriel Git détaillé pour ceux qui en connaissent très peu sur les systèmes de versions. Vous comprendrez l’utilité de tels systèmes et surtout comment on se sert des systèmes de versions modernes, le tout en restant le plus pragmatique possible.

          +

          Voici un tutoriel Git détaillé pour ceux qui en connaissent très peu sur les systèmes de versions. Vous comprendrez l’utilité de tels systèmes et surtout comment on se sert des systèmes de versions modernes, le tout en restant le plus pragmatique possible.

          @@ -76,7 +76,7 @@

          Pour commencer, la conclusion

          -

          Voici la liste des commandes nécessaires et suffisantes pour utiliser Git. Il y en a très peu. Il est normal de ne pas les comprendre tout de suite mais c’est pour vous donner une idée. Malgré la longueur de l’article, 95% de l’utilisation de Git tiens dans les 7 commandes décrites ci-après.

          +

          Voici la liste des commandes nécessaires et suffisantes pour utiliser Git. Il y en a très peu. Il est normal de ne pas les comprendre tout de suite mais c’est pour vous donner une idée. Malgré la longueur de l’article, 95% de l’utilisation de Git tiens dans les 7 commandes décrites ci-après.

          Récupérer un projet :

          @@ -110,7 +110,7 @@ git commit -a -m "Fix bug git push -

          Cet article est écrit pour ceux qui en savent très peu sur les systèmes de version. Il est aussi écrit pour ceux qui n’ont pas suivi les progrès accomplis depuis CVS ou subversion (SVN). C’est pourquoi, dans un premier temps, j’explique rapidement quels sont les buts poursuivis par les systèmes de versions. J’explique ensuite comment installer et configurer Git. Puis, pour chaque action que doivent accomplir les DCVS je donne les commandes Git qui y correspondent.

          +

          Cet article est écrit pour ceux qui en savent très peu sur les systèmes de version. Il est aussi écrit pour ceux qui n’ont pas suivi les progrès accomplis depuis CVS ou subversion (SVN). C’est pourquoi, dans un premier temps, j’explique rapidement quels sont les buts poursuivis par les systèmes de versions. J’explique ensuite comment installer et configurer Git. Puis, pour chaque action que doivent accomplir les DCVS je donne les commandes Git qui y correspondent.

          diff --git a/output/Scratch/fr/blog/2009-12-06-iphone-call-filter/index.html b/output/Scratch/fr/blog/2009-12-06-iphone-call-filter/index.html index 7bd70dc61..ecbe8e259 100644 --- a/output/Scratch/fr/blog/2009-12-06-iphone-call-filter/index.html +++ b/output/Scratch/fr/blog/2009-12-06-iphone-call-filter/index.html @@ -54,9 +54,9 @@
          -

          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.

          +

          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

          +

          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

          diff --git a/output/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/index.html b/output/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/index.html index dc942e10c..9e689fdb3 100644 --- a/output/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/index.html +++ b/output/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/index.html @@ -62,7 +62,7 @@
          -

          Même si je considère que git a beaucoup de points noirs, je pense qu’il reste le meilleur DCVS à ce jour avec lequel travailler. C’est pourquoi je commencerai par parler des qualité de bazaar qui manquent à git. Ensuite seulement je donnerai le seul avantage de git qui suffit à le rendre préférable à Bazaar.

          +

          Même si je considère que git a beaucoup de points noirs, je pense qu’il reste le meilleur DCVS à ce jour avec lequel travailler. C’est pourquoi je commencerai par parler des qualité de bazaar qui manquent à git. Ensuite seulement je donnerai le seul avantage de git qui suffit à le rendre préférable à Bazaar.

          @@ -70,20 +70,20 @@

          La découverte des DCVS

          -

          À savoir avant de débuter l’article. Je suis, comme beaucoup, un ancien utilisateur de subversion. Je trouve subversion très bien, mais j’ai été conquis par les capacités supplémentaires apportées par les systèmes de versions concurrentes décentralisés.

          +

          À savoir avant de débuter l’article. Je suis, comme beaucoup, un ancien utilisateur de subversion. Je trouve subversion très bien, mais j’ai été conquis par les capacités supplémentaires apportées par les systèmes de versions concurrentes décentralisés.

          -

          Il y a deux façon de percevoir les systèmes de versions. Soit on voit un système de branches (voir le très bon article sur betterexplained). Soit on peut voir les systèmes de versions comme des moyens d’appliquer des patches. C’est-à-dire que l’on peut soit se concentrer sur les nœuds soit sur les transitions du graphe induit par les différentes versions d’un projet.

          +

          Il y a deux façon de percevoir les systèmes de versions. Soit on voit un système de branches (voir le très bon article sur betterexplained). Soit on peut voir les systèmes de versions comme des moyens d’appliquer des patches. C’est-à-dire que l’on peut soit se concentrer sur les nœuds soit sur les transitions du graphe induit par les différentes versions d’un projet.

          -

          Pour git, c’est plutôt ce deuxième point de vue qui a été adopté. C’est un peu normal, étant donné que c’est Linus Torvald qui l’a inventé pour combler les problèmes inhérent aux problèmes de création de code dans le noyau Linux. Et comme historiquement, la communauté Linux se base beaucoup sur les patches, il semblait logique que ce soit ce second point de vue qui soit adopté.

          +

          Pour git, c’est plutôt ce deuxième point de vue qui a été adopté. C’est un peu normal, étant donné que c’est Linus Torvald qui l’a inventé pour combler les problèmes inhérent aux problèmes de création de code dans le noyau Linux. Et comme historiquement, la communauté Linux se base beaucoup sur les patches, il semblait logique que ce soit ce second point de vue qui soit adopté.

          -

          J’ai d’abord été convaincu par Bazaar. Pourquoi ? Les arguments en faveur de bazaar étaient : facilité d’utilisation en particulier, facilité d’adaptation pour tous ceux qui étaient habitués à subversion. Comme c’était mon cas, et que lorsque j’avais essayé de suivre la doc Git à l’époque c’était un peu épique. -Puis avec le temps, je me suis dit que je n’allais quand même pas mourir idiot et que j’allais me mettre sérieusement à git histoire de voir si ses défenseurs avaient vraiment raison.

          +

          J’ai d’abord été convaincu par Bazaar. Pourquoi ? Les arguments en faveur de bazaar étaient : facilité d’utilisation en particulier, facilité d’adaptation pour tous ceux qui étaient habitués à subversion. Comme c’était mon cas, et que lorsque j’avais essayé de suivre la doc Git à l’époque c’était un peu épique. +Puis avec le temps, je me suis dit que je n’allais quand même pas mourir idiot et que j’allais me mettre sérieusement à git histoire de voir si ses défenseurs avaient vraiment raison.

          -

          Mon dieu, que ce fut fastidieux. La terminologie est affreuse ! Et ce n’est rien de le dire.

          +

          Mon dieu, que ce fut fastidieux. La terminologie est affreuse ! Et ce n’est rien de le dire.

          Là où Bazaar est meilleur que git

          -

          Par exemple, checkout qui sert certainement à la même chose du point de vue technique, est dans l’usage un terme employé pour faire des actions qui semblent très différentes à un utilisateur λ. Exemple :

          +

          Par exemple, checkout qui sert certainement à la même chose du point de vue technique, est dans l’usage un terme employé pour faire des actions qui semblent très différentes à un utilisateur λ. Exemple :

           git checkout pipo
          @@ -97,29 +97,29 @@ git checkout pipo
           
           

          change de la branche courante vers la branche pipo

          -

          Et là, comme moi, vous remarquez que la même commande à deux sens complètement différents. Comment ça se passe alors, quand il y a une branche pipo et un fichier pipo alors ? Et bien par défaut, ça change de branche. Pour lever l’ambigüité il faut utiliser la syntaxe

          +

          Et là, comme moi, vous remarquez que la même commande à deux sens complètement différents. Comment ça se passe alors, quand il y a une branche pipo et un fichier pipo alors ? Et bien par défaut, ça change de branche. Pour lever l’ambigüité il faut utiliser la syntaxe

           git checkout ./pipo
           
          -

          Oui, bon… Voilà, voilà, voilà….

          +

          Oui, bon… Voilà, voilà, voilà….

          -

          Ça marche, mais ce n’est pas très convivial. D’autant plus que le mot clé checkout signifiait sous CVS et SVN l’opération pour récupérer un projet distant.

          +

          Ça marche, mais ce n’est pas très convivial. D’autant plus que le mot clé checkout signifiait sous CVS et SVN l’opération pour récupérer un projet distant.

          -

          Là où la différence se creuse c’est avec la terminologie Bazaar qui est bien plus naturelle. Car il n’y a pas de commande pour changer de branche, puisqu’il y a une branche par répertoire. Ainsi, pour changer de branche, il suffit de faire cd path/to/branch. Et pour revenir en arrière :

          +

          Là où la différence se creuse c’est avec la terminologie Bazaar qui est bien plus naturelle. Car il n’y a pas de commande pour changer de branche, puisqu’il y a une branche par répertoire. Ainsi, pour changer de branche, il suffit de faire cd path/to/branch. Et pour revenir en arrière :

           bzr revert pipo
           
          -

          De plus, la plupart des commandes bazaar prennent en paramètre un numéro de révision, par exemple pour revenir 3 versions précédentes il suffit d’écrire :

          +

          De plus, la plupart des commandes bazaar prennent en paramètre un numéro de révision, par exemple pour revenir 3 versions précédentes il suffit d’écrire :

           bzr revert -r -3 pipo
           
          -

          L’équivalent sous git est beaucoup plus cryptique :

          +

          L’équivalent sous git est beaucoup plus cryptique :

           bzr checkout HEAD~3 pipo
          @@ -135,19 +135,19 @@ bzr checkout HEAD~3 pipo
           bzr revert -r -3 pipo
           
          -

          et avec git ? git checkout ? Bien sûr que non voyons ! Ce serait bien trop simple. Ce que l’on trouve dans les forums c’est :

          +

          et avec git ? git checkout ? Bien sûr que non voyons ! Ce serait bien trop simple. Ce que l’on trouve dans les forums c’est :

           git reset --hard HEAD~3
           
          -

          Sauf que cette syntaxe est horrible. Elle oublie ‘réellement’ les révisions. Il faut donc l’utiliser avec prudence. Mais en effet, je conseillerai plutôt :

          +

          Sauf que cette syntaxe est horrible. Elle oublie ‘réellement’ les révisions. Il faut donc l’utiliser avec prudence. Mais en effet, je conseillerai plutôt :

           git checkout HEAD~3 -- . && git commit -m 'back in time'
           
          -

          Histoire d’avoir la branche backup sous la main, car sinon, on risque de perdre définitivement la version courante de HEAD. Qui ramène la branche locale à ce point. Mais il reste des erreur s’il y a eu des ajouts de fichier entre temps. Le seul et l’unique vraiment propre de revenir en arrière dans git c’est de lancer la commande suivante :

          +

          Histoire d’avoir la branche backup sous la main, car sinon, on risque de perdre définitivement la version courante de HEAD. Qui ramène la branche locale à ce point. Mais il reste des erreur s’il y a eu des ajouts de fichier entre temps. Le seul et l’unique vraiment propre de revenir en arrière dans git c’est de lancer la commande suivante :

           for i in $(seq 0 2); do 
          @@ -156,11 +156,11 @@ git checkout HEAD~3 -- . && git commit -m <
           git commit -m "reverted 3 versions back"
           
          -

          ce qui signifie sur un système UNIX en zsh (ou bash) faire git revert de toutes les dernières versions. Même si quelqu’un d’autre à fait un pull de vos modification intermédiaire il ne sera pas embêté et il sera au courant de ce qu’il s’est passé.

          +

          ce qui signifie sur un système UNIX en zsh (ou bash) faire git revert de toutes les dernières versions. Même si quelqu’un d’autre à fait un pull de vos modification intermédiaire il ne sera pas embêté et il sera au courant de ce qu’il s’est passé.

          -

          La règle est simple : Ne JAMAIS utiliser la commande git reset avec une version que d’autres personnes auraient pu avoir fetcher.

          +

          La règle est simple : Ne JAMAIS utiliser la commande git reset avec une version que d’autres personnes auraient pu avoir fetcher.

          -

          Voilà, c’est dit. Découvrir ça m’a pris pas mal de temps, avec plein d’essai de tous les cotés. Le plus sûr reste toujours la méthode vue plus haut. Si vous souhaitez automatiser cela, le plus simple est d’ajouter l’alias suivant à votre fichier ~/.gitconfig. Bien sûr l’alias ne fonctionnera que sur les environnement possédant zsh, ce qui est le cas de la plupart des environnements UNIX (Ubuntu, Mac OS X…).

          +

          Voilà, c’est dit. Découvrir ça m’a pris pas mal de temps, avec plein d’essai de tous les cotés. Le plus sûr reste toujours la méthode vue plus haut. Si vous souhaitez automatiser cela, le plus simple est d’ajouter l’alias suivant à votre fichier ~/.gitconfig. Bien sûr l’alias ne fonctionnera que sur les environnement possédant zsh, ce qui est le cas de la plupart des environnements UNIX (Ubuntu, Mac OS X…).

          @@ -169,13 +169,13 @@ git commit -m "reverted 3
           
          -

          Ce qui fait que git est le meilleur DCVS jusqu’à aujourd’hui

          +

          Ce qui fait que git est le meilleur DCVS jusqu’à aujourd’hui

          Après avoir énoncé les cotés négatifs (et je les trouve nombreux) de git. Voici les cotés positifs qui a eux seul valent la peine de se coltiner tous les problèmes inhérent à git.

          Cheap branching

          -

          Vous travaillez toujours dans le même répertoire principal. Par exemple, vous pouvez travailler sur deux corrections de bug. Disons fix1 et fix2 nécessitant la modification respective de file1 et file2. Vous pouvez travailler dans n’importe quel ordre sur vos deux fichiers dans la branche master. Puis, une fois votre travail fini. Aller dans la branche fix1 pour commiter file1. Puis aller dans la branche fix2 pour commiter file2. Et enfin, merger les deux branches dans master.

          +

          Vous travaillez toujours dans le même répertoire principal. Par exemple, vous pouvez travailler sur deux corrections de bug. Disons fix1 et fix2 nécessitant la modification respective de file1 et file2. Vous pouvez travailler dans n’importe quel ordre sur vos deux fichiers dans la branche master. Puis, une fois votre travail fini. Aller dans la branche fix1 pour commiter file1. Puis aller dans la branche fix2 pour commiter file2. Et enfin, merger les deux branches dans master.

           > vim file1
          @@ -191,11 +191,11 @@ git commit -m "reverted 3
           > git merge fix2
           
          -

          Et il est vraiment très agréable de ne pas se soucier d’être dans la bonne branche. Vous n’avez à vous occuper que de votre code et seulement ensuite vous occuper du système de version.

          +

          Et il est vraiment très agréable de ne pas se soucier d’être dans la bonne branche. Vous n’avez à vous occuper que de votre code et seulement ensuite vous occuper du système de version.

          -

          Sous Bazaar, il m’est souvent arriver de coder dans la mauvaise branche. Pour récupérer le coup, on doit copier les modifications du fichier dans la bonne branche et faire un revert sur le fichier en question, puis aller dans la bonne branche pour commiter les modifications. Enfin, la plupart du temps, je me trompe de branche et puis tant pis, je merge les deux tout en sachant que c’est sale.

          +

          Sous Bazaar, il m’est souvent arriver de coder dans la mauvaise branche. Pour récupérer le coup, on doit copier les modifications du fichier dans la bonne branche et faire un revert sur le fichier en question, puis aller dans la bonne branche pour commiter les modifications. Enfin, la plupart du temps, je me trompe de branche et puis tant pis, je merge les deux tout en sachant que c’est sale.

          -

          C’est pourquoi je préfère utiliser git. Si Bazaar venait à implémenter ce système de cheap branching, je le replacerai certainement en tête.

          +

          C’est pourquoi je préfère utiliser git. Si Bazaar venait à implémenter ce système de cheap branching, je le replacerai certainement en tête.

          diff --git a/output/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html b/output/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html index 4ee3491ed..a9914fe33 100644 --- a/output/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html +++ b/output/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/index.html @@ -54,7 +54,7 @@
          -

          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 :

          +

          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 :

           > chsh
          diff --git a/output/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html b/output/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html
          index 1f0926c5b..69992f8d3 100644
          --- a/output/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html
          +++ b/output/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/index.html
          @@ -119,7 +119,7 @@
           
          -

          J’espère que ça a pu aider quelqu’un qui comme moi pleurait en regardant des fontes aussi laides.

          +

          J’espère que ça a pu aider quelqu’un qui comme moi pleurait en regardant des fontes aussi laides.

          diff --git a/output/Scratch/fr/blog/2010-02-15-All-but-something-regexp/index.html b/output/Scratch/fr/blog/2010-02-15-All-but-something-regexp/index.html index c1f6cdfb5..c801c822d 100644 --- a/output/Scratch/fr/blog/2010-02-15-All-but-something-regexp/index.html +++ b/output/Scratch/fr/blog/2010-02-15-All-but-something-regexp/index.html @@ -62,9 +62,9 @@ do_something -

          et vous devez obtenir le même comportement avec seulement une expression régulière. Le problème c’est que le complémentaire des régulier n’est pas régulier. Celà peut s’avérer impossible.

          +

          et vous devez obtenir le même comportement avec seulement une expression régulière. Le problème c’est que le complémentaire des régulier n’est pas régulier. Celà peut s’avérer impossible.

          -

          Cependant, pour certaines expressions ce peut être possible. Disons que vous souhaitez matcher toutes les lignes contenant le mot bull, mais que vous ne souhaitez pas matcher bullshit. Voici une façon sympa d’y arriver :

          +

          Cependant, pour certaines expressions ce peut être possible. Disons que vous souhaitez matcher toutes les lignes contenant le mot bull, mais que vous ne souhaitez pas matcher bullshit. Voici une façon sympa d’y arriver :

           # matcher toute les chaines qui 
          @@ -82,19 +82,19 @@
           /bull([^s]|$|s([^h]|$)|sh([^i]|$)|shi([^t]|$))/
           
          -

          Regardons de plus près. Dans la première ligne, l’expression est : +

          Regardons de plus près. Dans la première ligne, l’expression est : bull([^s]|$), pourquoi avons nous besoin du $ ? Parce que sans lui, le mot bull ne serait pas matché. Cette expression signifie :

          La chaine finie par bull
          ou,
          -contient bull suivi d’une lettre différente de s.

          +contient bull suivi d’une lettre différente de s.

          -

          Et voilà. J’espère que ça a pu vous aider.

          +

          Et voilà. J’espère que ça a pu vous aider.

          -

          Notez que cette méthode n’est pas toujours la meilleure. Par exemple essayons d’écrire une expression régulière équivalente à l’expression conditionnelle suivante :

          +

          Notez que cette méthode n’est pas toujours la meilleure. Par exemple essayons d’écrire une expression régulière équivalente à l’expression conditionnelle suivante :

           # Commence avec 'a': ^a
           # Se finit par 'a': c$
          @@ -117,11 +117,11 @@ contient bull suivi d’une lettre différente de sa.*b...*c/
           
          -

          Cette solution utilise la longueur maximale de la chaine qui ne doit pas être matchée. Il existe certainement d’autres méthodes. Mais la leçon importante c’est qu’il n’est pas naturel d’exclure des solutions d’un expression régulière.

          +

          Cette solution utilise la longueur maximale de la chaine qui ne doit pas être matchée. Il existe certainement d’autres méthodes. Mais la leçon importante c’est qu’il n’est pas naturel d’exclure des solutions d’un expression régulière.


          -

          -Il peut être démontré que tout ensemble régulier privé d’un ensemble fini est aussi régulier. +

          +Il peut être démontré que tout ensemble régulier privé d’un ensemble fini est aussi régulier.

          diff --git a/output/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/index.html b/output/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/index.html index dc3d7032d..d9afaf66c 100644 --- a/output/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/index.html +++ b/output/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/index.html @@ -54,8 +54,8 @@
          -

          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 :

          +

          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 :

           a.....a......b..b..a....a....b...
          @@ -68,33 +68,33 @@ a.....a......b..b..a....a.....a......b..b..a....a....b...
           
          -

          La première erreur vient de l’utilisation du terrible .*. Parce que vous allez matcher la chaîne de caractère la plus longue possible.

          +

          La première erreur vient de l’utilisation du terrible .*. Parce que vous allez matcher la chaîne de caractère la plus longue possible.

           /a.*?b/
           a.....a......b..b..a....a....b...
           
          -

          L’autre manière naturelle de répondre à ce problème est de changer la greediness. Mais ce n’est pas assez parce que vous allez matcher du premier a au premier b après celui-ci. On peut alors constater que votre chaine de caractère ne devrait comprendre ni la lettre a ni la lettre b. Ce qui emène à la dernière solution élégante.

          +

          L’autre manière naturelle de répondre à ce problème est de changer la greediness. Mais ce n’est pas assez parce que vous allez matcher du premier a au premier b après celui-ci. On peut alors constater que votre chaine de caractère ne devrait comprendre ni la lettre a ni la lettre b. Ce qui emène à la dernière solution élégante.

           /a[^ab]*b/
           a.....a......b..b..a....a....b...
           
          -

          Jusqu’ici, c’était facile. Maintenant comment fait vous quand au lieu de a vous avez une chaine de caractère ?

          +

          Jusqu’ici, c’était facile. Maintenant comment fait vous quand au lieu de a vous avez une chaine de caractère ?

          Par exemple, vous voulez matcher:

           <li>...<li>
           
          -

          C’est un peu difficile. Vous devez matcher

          +

          C’est un peu difficile. Vous devez matcher

           <li>[anything not containing <li>]</li>
           
          -

          La première méthode serait d’utiliser le même rainsonnement que dans mon article précédent. Ici un premier essai :

          +

          La première méthode serait d’utiliser le même rainsonnement que dans mon article précédent. Ici un premier essai :

           <li>([^<]|<[^l]|<l[^i]|<li[^>])*</li>
          @@ -105,14 +105,14 @@ a.....a......b..b..a....
          -

          Cette chaine ne matchera pas. C’est pourquoi si on veut vraiment la matcher correctement nous devons ajouter :

          +

          Cette chaine ne matchera pas. C’est pourquoi si on veut vraiment la matcher correctement nous devons ajouter :

           <li>([^<]|<[^l]|<l[^i]|<li[^>])*(|<|<l|<li)</li>
           
          -

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

          +

          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 :

          +

          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
          @@ -142,10 +142,10 @@ a.....a......b..b..a....

          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.

          +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.


          -

          Je sais que j’ai utilisé une syntaxe HTML dans mon exemple. Mais dans l’utilisation réelle que j’en ai faite, je devais matcher entre en: et ::, sachant que parfois les chaines pouvaient se terminer par e::.

          +

          Je sais que j’ai utilisé une syntaxe HTML dans mon exemple. Mais dans l’utilisation réelle que j’en ai faite, je devais matcher entre en: et ::, sachant que parfois les chaines pouvaient se terminer par e::.

          diff --git a/output/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/index.html b/output/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/index.html index c8e70f8ae..b1965fe51 100644 --- a/output/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/index.html +++ b/output/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/index.html @@ -54,8 +54,8 @@
          -

          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. +

          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.

          @@ -68,13 +68,13 @@ Le code suivant découpe un fichier pour chacune de ses ligne contenant le mot <
           {print $0>>FIC}
           
          -

          En réalité, j’avais besoin de cet outils pour avoir un fichier par jour. Chaque ligne contenant UTC ayant le format suivant :

          +

          En réalité, j’avais besoin de cet outils pour avoir un fichier par jour. Chaque ligne contenant UTC ayant le format suivant :

           Mon Dec  7 10:32:30 UTC 2009
           
          -

          J’en suis finallement arrivé au code suivant :

          +

          J’en suis finallement arrivé au code suivant :

           #!/usr/bin/env awk
          diff --git a/output/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html b/output/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html
          index 52e53e31a..45d765f4b 100644
          --- a/output/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html
          +++ b/output/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/index.html
          @@ -54,10 +54,10 @@
                       
          -

          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. +

          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à :

          +

          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à :

           # regexp
          @@ -71,7 +71,7 @@ ext=str.split(=File.extname(str)
           
          -

          A première vue, je pensais que l’expression régulière serait plus rapide que le split parce qu’il pouvait y avoir plusieurs de . dans un nom de fichier. Mais la majorité du temps il n’y a qu’un seul point par nom de fichier. C’est pourquoi j’ai réalisé que le split serait plus rapide. Mais pas le plus rapide possible. Il y a une fonction qui est dédiée à faire ce travail dans un module standard de ruby ; le module File.

          +

          A première vue, je pensais que l’expression régulière serait plus rapide que le split parce qu’il pouvait y avoir plusieurs de . dans un nom de fichier. Mais la majorité du temps il n’y a qu’un seul point par nom de fichier. C’est pourquoi j’ai réalisé que le split serait plus rapide. Mais pas le plus rapide possible. Il y a une fonction qui est dédiée à faire ce travail dans un module standard de ruby ; le module File.

          Voici le code pour faire un benchmark :

          @@ -116,7 +116,7 @@ regexp: 2.550000 0.020000 2.570000 ( 2.693407)

          En conclusion, les fonction dédiées sont meilleures que votre façon de faire (la plupart du temps).

          -

          Chemin complet d’un fichier sans l’extension

          +

          Chemin complet d’un fichier sans l’extension

          @@ -152,7 +152,7 @@ remove extension
           chomp:  0.820000   0.040000   0.860000 (  0.947432)
           
          -

          En conclusion du ce second benchmark. Un fonction simple est meilleure que trois fonctions dédiées. Pas de surprise, mais c’est toujours bien de savoir.

          +

          En conclusion du ce second benchmark. Un fonction simple est meilleure que trois fonctions dédiées. Pas de surprise, mais c’est toujours bien de savoir.

          diff --git a/output/Scratch/fr/blog/2010-03-22-Git-Tips/index.html b/output/Scratch/fr/blog/2010-03-22-Git-Tips/index.html index c514e898c..4807e032b 100644 --- a/output/Scratch/fr/blog/2010-03-22-Git-Tips/index.html +++ b/output/Scratch/fr/blog/2010-03-22-Git-Tips/index.html @@ -72,7 +72,7 @@ git clone git+ssh://git@github.com:443/yogsototh/project.git

          git clone peut seulement récuper la branche master.

          -

          Si vous n’avez pas beaucoup de branches, vous pouvez simplement les clone le project et ensuite pour chacune d’entre elle lancer la commande suivante :

          +

          Si vous n’avez pas beaucoup de branches, vous pouvez simplement les clone le project et ensuite pour chacune d’entre elle lancer la commande suivante :

           git branch --track local_branch remote_branch
          @@ -93,7 +93,7 @@ master *
           experimental
           
          -

          Si vous avez beaucoup de branches il peut être utile d’utiliser le script/la longue ligne de commande suivant(e) :

          +

          Si vous avez beaucoup de branches il peut être utile d’utiliser le script/la longue ligne de commande suivant(e) :

           # first clone your project
          diff --git a/output/Scratch/fr/blog/2010-03-23-Encapsulate-git/index.html b/output/Scratch/fr/blog/2010-03-23-Encapsulate-git/index.html
          index 7a3e828ad..31c47097f 100644
          --- a/output/Scratch/fr/blog/2010-03-23-Encapsulate-git/index.html
          +++ b/output/Scratch/fr/blog/2010-03-23-Encapsulate-git/index.html
          @@ -56,16 +56,16 @@
                           

          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. +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

          -

          Je travaille sur un projet dans lequel certaines de mes branches git doivent rester divergentes. Et les divergences devraient aller en s’accentuant.

          +

          Je travaille sur un projet dans lequel certaines de mes branches git doivent rester divergentes. Et les divergences devraient aller en s’accentuant.

          -

          J’utilise aussi certaines branches qui contiennent la partie commune de ces projets.

          +

          J’utilise aussi certaines branches qui contiennent la partie commune de ces projets.

          -

          Disons que j’ai les branches :

          +

          Disons que j’ai les branches :

          • master: commune à toutes les branches
          • @@ -83,7 +83,7 @@ Parce qu’il est facile de merger par erreur, je propose un script

            Branch hierarchy

            -

            Une flèche de A vers B signifie que l’on peut merger A dans B. S’il n’y a pas de flèche de A vers B cela signifie qu’il est interdit de merger A dans B. Voici le code ruby correspondant :

            +

            Une flèche de A vers B signifie que l’on peut merger A dans B. S’il n’y a pas de flèche de A vers B cela signifie qu’il est interdit de merger A dans B. Voici le code ruby correspondant :

             $architecture={ 
            @@ -92,12 +92,12 @@ Parce qu’il est facile de merger par erreur, je propose un script
                 :client => [ :clientA, :clientB ] }
             
            -

            :master => [ :dev, :client ] signifie que l’on peut merger la branche master dans la branche dev et la branche client.

            +

            :master => [ :dev, :client ] signifie que l’on peut merger la branche master dans la branche dev et la branche client.

            Je fait une erreur si je tape git checkout master && git merge clientA. -C’est pour éviter ça que j’ai fait un script pour encapsuler le comportement de git.

            +C’est pour éviter ça que j’ai fait un script pour encapsuler le comportement de git.

            -

            Mais ce script fait bien plus que ça. Il fait des merges en cascade de la racine vers les feuilles avec l’acion allmerges.

            +

            Mais ce script fait bien plus que ça. Il fait des merges en cascade de la racine vers les feuilles avec l’acion allmerges.

             git co dev && git merge master
            @@ -106,7 +106,7 @@ git co clientA && git merge client
             git co clientB && git merge client
             
            -

            Je peux ainsi mettre à jour toutes les branches. L’algorithme ne boucle pas même s’il y a des cycles dans la structure des branches.
            +

            Je peux ainsi mettre à jour toutes les branches. L’algorithme ne boucle pas même s’il y a des cycles dans la structure des branches.
            Le voici :

            @@ -131,7 +131,7 @@ Le voici :

            :dev => [ :master ], :client => [ :clientA, :clientB ] } -def get_current_branch() +def get_current_branch() (`git branch --no-color | awk '$1 == "*" {print $2}'`).chop.intern end @@ -218,7 +218,7 @@ Le voici :

            Pour que ça fonctionne il vous suffit de copier eng dans un répertoire présent dans votre PATH.

            -

            Bien entendu, il faut essayer de faire aussi peu que possible des cherry-pick et des rebase. Ce script a pour but de s’intégrer avec les workflow basé sur les pull et merge.

            +

            Bien entendu, il faut essayer de faire aussi peu que possible des cherry-pick et des rebase. Ce script a pour but de s’intégrer avec les workflow basé sur les pull et merge.

            diff --git a/output/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/index.html b/output/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/index.html index afff518aa..70b2afcb6 100644 --- a/output/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/index.html +++ b/output/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/index.html @@ -57,39 +57,39 @@

            Bonjour à tous !

            -

            …plus on retarde quelque chose, plus il devient difficile de s’y mettre…

            +

            …plus on retarde quelque chose, plus il devient difficile de s’y mettre…

            -

            Je devais écrire d’autres articles pour ce blog. J’ai noté plein d’idées dans mes todolist. Mais j’avais pas mal d’autres choses à faire. Et jusqu’ici, j’ai toujours dit «je le ferai plus tard». Ce qui m’a fait agir, c’est la petite réflexion que j’avais lu une fois. -> Arrétez d’écrire des TODO dans votre code est faites le maintenant !
            -> Vous serez surpris de l’efficacité de cette mesure.

            +

            Je devais écrire d’autres articles pour ce blog. J’ai noté plein d’idées dans mes todolist. Mais j’avais pas mal d’autres choses à faire. Et jusqu’ici, j’ai toujours dit «je le ferai plus tard». Ce qui m’a fait agir, c’est la petite réflexion que j’avais lu une fois. +> Arrétez d’écrire des TODO dans votre code est faites le maintenant !
            +> Vous serez surpris de l’efficacité de cette mesure.

            En résumé : > Just do it! ou Juste fait le comme auraient dit les nuls.

            -

            Finallement j’écrirais plus souvent ces derniers temps.

            +

            Finallement j’écrirais plus souvent ces derniers temps.

            -

            Qu’ai-je fait ?

            +

            Qu’ai-je fait ?

            -

            J’ai fini une application web pour gridpocket©.

            +

            J’ai fini une application web pour gridpocket©.

            -

            J’ai aussi fini d’adapter mon site à la dernière version de nanoc. La partie difficile étant d’avoir un système qui permet de gérer plusieurs langues. Je pense que j’écrirai les détails dans un article.

            +

            J’ai aussi fini d’adapter mon site à la dernière version de nanoc. La partie difficile étant d’avoir un système qui permet de gérer plusieurs langues. Je pense que j’écrirai les détails dans un article.

            -

            J’ai aussi une vrai vie. J’ai passé quelques moments agréables avec ma famille et des amis.

            +

            J’ai aussi une vrai vie. J’ai passé quelques moments agréables avec ma famille et des amis.

            -

            J’ai travaillé avec luc sur un framework REST/JSON orienté API écrit en ruby. Il fonctionne assez bien, avec très peu de bug jusqu’ici. Nous espérons pouvoir écrire un tutoriel de todolist. Peut-être en deux ou trois posts. Ce framework n’est pas encore public. Il le deviendra certainement lorsque nous aurons fini d’écrire une application web et que nous aurons fait un joli site pour lui.

            +

            J’ai travaillé avec luc sur un framework REST/JSON orienté API écrit en ruby. Il fonctionne assez bien, avec très peu de bug jusqu’ici. Nous espérons pouvoir écrire un tutoriel de todolist. Peut-être en deux ou trois posts. Ce framework n’est pas encore public. Il le deviendra certainement lorsque nous aurons fini d’écrire une application web et que nous aurons fait un joli site pour lui.

            Finallement voilà un partie des choses que je dois faire :

            • finir de faire un service web public (je pense que ça peut être populaire) ;
            • -
            • finir d’écrire l’application iPhone associée ;
            • +
            • finir d’écrire l’application iPhone associée ;
            • finir de publier notre framework pour créer des services web ;
            • publier des articles sur ce blog ;
            • publier le code source de ce blog sur github.
            -

            Certaines choses ne seront peut-être jamais finie. Mais simplement parce qu’elles ne dépendent pas complètement de moi.

            +

            Certaines choses ne seront peut-être jamais finie. Mais simplement parce qu’elles ne dépendent pas complètement de moi.

            diff --git a/output/Scratch/fr/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html b/output/Scratch/fr/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html index 25911c4eb..b20c96d8b 100644 --- a/output/Scratch/fr/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html +++ b/output/Scratch/fr/blog/2010-05-19-How-to-cut-HTML-and-repair-it/index.html @@ -58,7 +58,7 @@
            -

            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.

            +

            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 :

            @@ -73,7 +73,7 @@ </div>
          -

          Après avoir coupé, j’obtiens :

          +

          Après avoir coupé, j’obtiens :

           <div class="corps">
          @@ -84,13 +84,13 @@
               <img src="/img/im
           
          -

          En plein milieu d’un tag <img> !

          +

          En plein milieu d’un tag <img> !

          -

          En réalité, ce n’est pas si difficile que celà peut paraître au premier abord. Le secret réside dans le fait de comprendre que l’on n’a pas besoin de conserver la structure complète de l’arbre pour le réparer, mais seulement la liste des parents non fermés.

          +

          En réalité, ce n’est pas si difficile que celà peut paraître au premier abord. Le secret réside dans le fait de comprendre que l’on n’a pas besoin de conserver la structure complète de l’arbre pour le réparer, mais seulement la liste des parents non fermés.

          -

          Pour notre exemple, juste après le paragraphe first paragraph nous n’avons qu’à fermer un div pour la classe corps et le XML est réparé. Bien entendu, quand on est dans le cas où un tag est coupé au milieu, on a qu’à remonté juste avant le début de ce tag corrompu.

          +

          Pour notre exemple, juste après le paragraphe first paragraph nous n’avons qu’à fermer un div pour la classe corps et le XML est réparé. Bien entendu, quand on est dans le cas où un tag est coupé au milieu, on a qu’à remonté juste avant le début de ce tag corrompu.

          -

          Donc, tout ce que nous avons à faire, c’est d’enregistrer la liste des parents dans une pile. Supposons que nous traitions le premier exemple complètement. La pile passera par les états suivants :

          +

          Donc, tout ce que nous avons à faire, c’est d’enregistrer la liste des parents dans une pile. Supposons que nous traitions le premier exemple complètement. La pile passera par les états suivants :

           []           
          @@ -110,7 +110,7 @@
           []              </div>
           
          -

          L’algorithme est alors très simple : +

          L’algorithme est alors très simple : <pre class="twilight"> let res be the XML as a string ; read res and each time you encouter a tag: @@ -128,7 +128,7 @@ for each tag in the stack, pop it, and write:

          Et res contiend le XML réparé.

          -

          Finallement, voici le code en ruby que j’utilise. La variable xml contient le XML coupé.

          +

          Finallement, voici le code en ruby que j’utilise. La variable xml contient le XML coupé.

          @@ -159,7 +159,7 @@ for each tag in the stack, pop it, and write:
           
          -

          Je ne sais pas si ce code pourra vous être utile. Par contre le raisonnement pour y parvenir mérite d’être connu.

          +

          Je ne sais pas si ce code pourra vous être utile. Par contre le raisonnement pour y parvenir mérite d’être connu.

          diff --git a/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png b/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png index a39289809..152c6c1d2 100644 Binary files a/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png and b/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_destination_tree.png differ diff --git a/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png b/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png index ae8c96b84..4b2d67e93 100644 Binary files a/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png and b/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/graph/The_source_tree.png differ diff --git a/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html b/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html index ccb61613d..1673f91e0 100644 --- a/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html +++ b/output/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/index.html @@ -65,13 +65,13 @@

          tlàl :

            -
          • J’ai essayé de programmer un simple filtre ;
          • -
          • J’ai été bloqué pendant deux jours ;
          • -
          • J’ai arrêté de penser comme un robot ;
          • -
          • J’ai utilisé un papier et un stylo ;
          • -
          • J’ai fait un peu de maths ;
          • -
          • J’ai résolu le problème en 10 minutes ;
          • -
          • Conclusion: Pragmatisme n’est pas : «n’utilisez jamais la théorie». +
          • J’ai essayé de programmer un simple filtre ;
          • +
          • J’ai été bloqué pendant deux jours ;
          • +
          • J’ai arrêté de penser comme un robot ;
          • +
          • J’ai utilisé un papier et un stylo ;
          • +
          • J’ai fait un peu de maths ;
          • +
          • J’ai résolu le problème en 10 minutes ;
          • +
          • Conclusion: Pragmatisme n’est pas : «n’utilisez jamais la théorie».
          @@ -80,25 +80,25 @@

          Résumé (plus long que le tlàl)

          Je devais résoudre un problème à mon travail. Au début cela -semblait assez facile. J’ai donc commencé à programmer -tout de suite. Je suis alors entré dans un cercle infernal d’essais +semblait assez facile. J’ai donc commencé à programmer +tout de suite. Je suis alors entré dans un cercle infernal d’essais et de réparations. Voilà à quoi ressemblait cet étrange état de boucle infini :

          -

          – Plus que ça a réparer et ça devrait être bon.
          - – Très bien, maintenant ça doit marcher.
          - – Oui !!
          - – Ah mince! J’ai oublié ce détail…
          +

          – Plus que ça a réparer et ça devrait être bon.
          + – Très bien, maintenant ça doit marcher.
          + – Oui !!
          + – Ah mince! J’ai oublié ce détail…
          répéter jusqu'à la mort

          Après deux jours à me prendre pour Sisyphe, je me suis arrêté pour repenser le problème. -J’ai pris un stylo et une feuille de papier. Je me suis souvenu de de ce que j’avais appris sur les arbres pendant mon doctorat. +J’ai pris un stylo et une feuille de papier. Je me suis souvenu de de ce que j’avais appris sur les arbres pendant mon doctorat. Finalement, le problème fut résolu en moins de 20 minutes.

          Je pense que la leçon à retenir de cette expérience est de se souvenir que la méthodologie la plus efficace pour résoudre ce problème pragamtique était la méthode théorique. -Ça ne signifie pas que la méthode théorique est toujours la meilleure, mais en tout cas, il ne faut pas l’écarter.

          +Ça ne signifie pas que la méthode théorique est toujours la meilleure, mais en tout cas, il ne faut pas l’écarter.

          @@ -106,16 +106,16 @@ Finalement, le problème fut résolu en moins de 20 minutes.

          -

          L’anecdote

          +

          L’anecdote

          Apparemment 90% des programmeurs sont incapable de programmer une recherche binaire sans faire de bug. -L’algorithme est pourtant connu et facile à comprendre. +L’algorithme est pourtant connu et facile à comprendre. Cependant, il est difficile à programmer sans bug. -J’ai participé à ce concours. +J’ai participé à ce concours. Vous pouvez voir les résultats ici1. -J’ai dû faire face à un problème similaire à mon travail. +J’ai dû faire face à un problème similaire à mon travail. Il paraissait simple au départ. -Transformer un xml d’un format à un autre.

          +Transformer un xml d’un format à un autre.

          Voici le format général du xml source :

          @@ -138,7 +138,7 @@ Transformer un xml d’un format à un autre.

          </menu>
          -

          et le format d’arrivé est celui-ci :

          +

          et le format d’arrivé est celui-ci :

           <item name="Menu0">
          @@ -166,7 +166,7 @@ Transformer un xml d’un format à un autre.

          </item>
          -

          À première vue, cela m’a paru simple. J’étais certain de pouvoir y arriver en me fixant les règles suivantes :

          +

          À première vue, cela m’a paru simple. J’étais certain de pouvoir y arriver en me fixant les règles suivantes :

          1. ne pas utiliser xslt ;
          2. @@ -175,13 +175,13 @@ Transformer un xml d’un format à un autre.

          Vous pouvez essayer si vous le souhaitez. Si vous attaquez ce problème directement en écrivant le programme, ce ne sera certainement pas si simple. -Je peux le dire, parce que c’est ce que j’ai fait. -Et je dois dire que j’ai perdu une journée de travail complète en m’y prenant de la sorte. -En réalité, il y avait pas mal de petits détails dont je ne parle pas qui m’ont induis en erreur et qui m’ont fait perdre encore plus de temps.

          +Je peux le dire, parce que c’est ce que j’ai fait. +Et je dois dire que j’ai perdu une journée de travail complète en m’y prenant de la sorte. +En réalité, il y avait pas mal de petits détails dont je ne parle pas qui m’ont induis en erreur et qui m’ont fait perdre encore plus de temps.

          Pourquoi étais-je incapable de résoudre ce problème si simple en aparence ?

          -

          Voici comment je m’y suis pris :

          +

          Voici comment je m’y suis pris :

          1. Réfléchir
          2. @@ -190,27 +190,27 @@ En réalité, il y avait pas mal de petits détails dont je ne parle pas qui m&r
          3. Vérifier les résultats
          4. Trouver un bug
          5. Résoudre le bug
          6. -
          7. Reprendre à l’étape 3
          8. +
          9. Reprendre à l’étape 3
          -

          Il s’agissait d’une méthode de travail standard pour un ingénieur en informatique. L’erreur venait de la première étape. -J’ai d’abord pensé à comment résoudre le problème mais avec des yeux d’ingéinieur pragmatique. Je me suis simplement dit :

          +

          Il s’agissait d’une méthode de travail standard pour un ingénieur en informatique. L’erreur venait de la première étape. +J’ai d’abord pensé à comment résoudre le problème mais avec des yeux d’ingéinieur pragmatique. Je me suis simplement dit :

          -

          Ça à l’air de pouvoir se résouvre avec un petit script de search&replace en perl +

          Ça à l’air de pouvoir se résouvre avec un petit script de search&replace en perl Commençons à écrire le code maintenant.

          -

          C’est la deuxième phrase qui est complètement fausse. Parce que j’avais mal commencé et que cette méthodologie de travail ne fonctionne pas lorsque l’on part vraiment mal.

          +

          C’est la deuxième phrase qui est complètement fausse. Parce que j’avais mal commencé et que cette méthodologie de travail ne fonctionne pas lorsque l’on part vraiment mal.

          Réfléchir

          -

          Après un certain temps, j’ai arrêté de programmer et je me suis dit : «Maintenant, ça suffit !». -J’ai pris une feuille et un stylo et j’ai commencé à dessiner des arbres.

          +

          Après un certain temps, j’ai arrêté de programmer et je me suis dit : «Maintenant, ça suffit !». +J’ai pris une feuille et un stylo et j’ai commencé à dessiner des arbres.

          -

          J’ai commencer par simplifier un peu en enlevant le maximum de verbiage. -Tout d’abord en renommant <item name="Menu"> par un simple M par exemple. -J’ai obtenu quelque chose comme :

          +

          J’ai commencer par simplifier un peu en enlevant le maximum de verbiage. +Tout d’abord en renommant <item name="Menu"> par un simple M par exemple. +J’ai obtenu quelque chose comme :

          The source tree

          @@ -220,7 +220,7 @@ J’ai obtenu quelque chose comme :

          Puis, je me suis fait la réflexion suivante :

          -

          Dans les distances d’éditions sur les arbres, chaque opération atomique correspond à un simple search and replace sur mon fichier xml source2. +

          Dans les distances d’éditions sur les arbres, chaque opération atomique correspond à un simple search and replace sur mon fichier xml source2. On considère trois opérations atomiques sur les arbres :

            @@ -251,7 +251,7 @@ r - b y - c -

            Et regardez ce que ça implique quand on l’écrit en xml :

            +

            Et regardez ce que ça implique quand on l’écrit en xml :

             <r>
            @@ -271,8 +271,8 @@ r - b
             s/<\/?x>//g
             
            -

            Par conséquent, s’il existe un transducteur déterministe à un état qui permet de transformer mes arbres ; -je suis capable de transformer le xml d’un format à l’autre en utilisant une simple liste de search and replace.

            +

            Par conséquent, s’il existe un transducteur déterministe à un état qui permet de transformer mes arbres ; +je suis capable de transformer le xml d’un format à l’autre en utilisant une simple liste de search and replace.

            Solution

            @@ -312,7 +312,7 @@ M - V - M - V - tag2 tag1

            peut-être fait en utilisant le transducteur déterministe à un état suivant:

            -

            C → ε
            +

            C → ε
            E → M
            R → V

            @@ -335,18 +335,18 @@ M - V - M - V - tag2 tag1 s%</rubrique>%</value>%g -

            Et c’est tout.

            +

            Et c’est tout.

            Conclusion

            -

            Même si cela peut sembler paradoxal, parfois la solution la plus efficace à un problème pragmatique est d’utiliser une méthodologie théorique.

            +

            Même si cela peut sembler paradoxal, parfois la solution la plus efficace à un problème pragmatique est d’utiliser une méthodologie théorique.


            1. -

              Normalement, je fais parti des 10% qui ont fourni une implémentation sans bug.

              +

              Normalement, je fais parti des 10% qui ont fourni une implémentation sans bug.

            2. -

              J’ai programmé un outil qui calcule automatiquement le poids de chaque élément des matrices d’édition à partir de données.

              +

              J’ai programmé un outil qui calcule automatiquement le poids de chaque élément des matrices d’édition à partir de données.

            diff --git a/output/Scratch/fr/blog/2010-06-14-multi-language-choices/index.html b/output/Scratch/fr/blog/2010-06-14-multi-language-choices/index.html index d3fb4a830..eab846f7c 100644 --- a/output/Scratch/fr/blog/2010-06-14-multi-language-choices/index.html +++ b/output/Scratch/fr/blog/2010-06-14-multi-language-choices/index.html @@ -54,8 +54,8 @@
            -

            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.

            +

            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.

             Bonjour, 
            @@ -72,15 +72,15 @@ here is an example of english text.
             

            Cette façon de traduire vous impose une certaine façon de traduire. -D’abord écrire entièrement le texte dans une langue, +D’abord écrire entièrement le texte dans une langue, puis copier le fichier et enfin retraduire dans une nouvelle langue.

            -

            Le problème, c’est que très souvent, les articles ont des parties communes non négligeables. Par exemple, les images, les codes sources, etc… -Lorsque je m’aperçoit que j’ai fait une erreur dans ces parties communes -ça m’oblige à refaire deux fois la même manipulation. Sauf que comme il m’arrive d’être distrait, il peut y avoir pas mal d’aller-retours.

            +

            Le problème, c’est que très souvent, les articles ont des parties communes non négligeables. Par exemple, les images, les codes sources, etc… +Lorsque je m’aperçoit que j’ai fait une erreur dans ces parties communes +ça m’oblige à refaire deux fois la même manipulation. Sauf que comme il m’arrive d’être distrait, il peut y avoir pas mal d’aller-retours.

            -

            C’est pourquoi, j’ai plutôt opté pour une autre solution. -J’utilise des tags sur un seul fichier. +

            C’est pourquoi, j’ai plutôt opté pour une autre solution. +J’utilise des tags sur un seul fichier. En fin de compte, mes fichiers ressemblent à :

            @@ -92,10 +92,10 @@ En fin de compte, mes fichiers ressemblent à :

            [image](url)
            -

            Comme j’édite mes fichier avec vim, il m’est très facile d’ajouter ces fr: ou en: en début de ligne à l’aide du très utile C-v. -Par contre nanoc a été conçu pour être utilisé par une seule langue. Précédemment, j’avais utilisé les capacité de nanoc pour séparer les langues. Mais finalement, il s’avère bien plus simple de faire un pré-traitement qui nettoie mes fichiers et en fait deux copie qui seront ensuite gérées par nanoc.

            +

            Comme j’édite mes fichier avec vim, il m’est très facile d’ajouter ces fr: ou en: en début de ligne à l’aide du très utile C-v. +Par contre nanoc a été conçu pour être utilisé par une seule langue. Précédemment, j’avais utilisé les capacité de nanoc pour séparer les langues. Mais finalement, il s’avère bien plus simple de faire un pré-traitement qui nettoie mes fichiers et en fait deux copie qui seront ensuite gérées par nanoc.

            -

            Vous pouvez récupérer les sources de mon blog (sans tous les articles) à l’adresse suivante github.com/yogsototh/Scratch. J’écrirais un article pour savoir comment l’utiliser facilement. J’ai en effet ajouté beaucoup de scripts et de librairies.

            +

            Vous pouvez récupérer les sources de mon blog (sans tous les articles) à l’adresse suivante github.com/yogsototh/Scratch. J’écrirais un article pour savoir comment l’utiliser facilement. J’ai en effet ajouté beaucoup de scripts et de librairies.

            diff --git a/output/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/index.html b/output/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/index.html index b5c8fe20b..b593768be 100644 --- a/output/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/index.html +++ b/output/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/index.html @@ -54,7 +54,7 @@
            -

            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). +

            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 ?

            @@ -66,11 +66,11 @@ Vous pouvez le récupérer sur commentaires gérés avec intenseDebate de façon asynchrone ;
          • très portable avec ou sans javascript, XHTML Strict 1.0 / CSS3 ;
          • écrivez vos entrées au format Markdown (pas de HTML) ;
          • -
          • des améliorations typographiques (pas de ‘:’ en début de ligne en Français par exemple),
          • -
          • entrez directement le code de graphes qui se génèreront automatiquement en image à l’aide de Graphviz.
          • +
          • des améliorations typographiques (pas de ‘:’ en début de ligne en Français par exemple),
          • +
          • entrez directement le code de graphes qui se génèreront automatiquement en image à l’aide de Graphviz.
          -

          Pour vous donner une idée plus précise, voici la documentation que j’ai faite (en anglais) pour accompagner le code.

          +

          Pour vous donner une idée plus précise, voici la documentation que j’ai faite (en anglais) pour accompagner le code.

          @@ -108,9 +108,9 @@ $ ./task/recompile

          Multi-language

          All files in multi are processed and copied in the content directory. -For each file in multi, each line starting by ‘fr: ’ are copied (without the fr: into the content/html/fr/ tree, but not into the content/html/en tree. File not starting by fr: or en: are copied in each destinations.

          +For each file in multi, each line starting by ‘fr: ’ are copied (without the fr: into the content/html/fr/ tree, but not into the content/html/en tree. File not starting by fr: or en: are copied in each destinations.

          -

          If you want to add another language, you’ll have to modify tasks/config, and config.yaml, create a content/html/xx where xx is the language code.

          +

          If you want to add another language, you’ll have to modify tasks/config, and config.yaml, create a content/html/xx where xx is the language code.

          Edition & Rendering

          @@ -124,7 +124,7 @@ For each file in multi, each line starting by ‘fr: ’ ar

          Typography

          -

          In French all ‘:’, ‘;’, ‘!’ and ‘?’ are preceded automatically by &nbsp. This enable not to have a line starting by a single special character.

          +

          In French all ‘:’, ‘;’, ‘!’ and ‘?’ are preceded automatically by &nbsp. This enable not to have a line starting by a single special character.

          You can use small caps using <sc> tags.

          diff --git a/output/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/index.html b/output/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/index.html index 538bc5a8d..e752effb6 100644 --- a/output/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/index.html +++ b/output/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/index.html @@ -55,12 +55,12 @@

          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. +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.

          +

          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.

          +

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

               var admin = $.cookie('admin');
          @@ -125,7 +125,7 @@ Je centralise tout dans un seul fichier javascript ce qui facilite le travail.
           
          -

          Maintenant en accédant à ces fichiers depuis votre navigateur vous pouvez disparaître des systèmes d’analyses ou bien être considéré comme tous les autres individus. +

          Maintenant en accédant à ces fichiers depuis votre navigateur vous pouvez disparaître des systèmes d’analyses ou bien être considéré comme tous les autres individus. Pensez à accéder à ces fichiers depuis tous les navigateurs que vous utilisez et vos visites ne seront plus comptabilisées.

          diff --git a/output/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/index.html b/output/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/index.html index d13437307..18a6cebb4 100644 --- a/output/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/index.html +++ b/output/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/index.html @@ -60,7 +60,7 @@

          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 :

          +

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

               <script type="text/javascript" src="jquery.js"></script>
          @@ -119,9 +119,9 @@ _gaq.push([
           
          -

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

          +

          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 :

          +

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

          Where to find events tracking in google analytics interface

          diff --git a/output/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/index.html b/output/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/index.html index 29459297a..3d725f971 100644 --- a/output/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/index.html +++ b/output/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/index.html @@ -57,9 +57,9 @@

          Sur ce blog, je donne parfois la possibilité de télécharger certaines sources de code. Dans ce cas, le code est souvent plus large que le div qui le contient. Le texte est alors coupé. -C’est pourquoi, j’utilise une méthode qui permet d’afficher ces sources dans de grandes popups en jQuery.

          +C’est pourquoi, j’utilise une méthode qui permet d’afficher ces sources dans de grandes popups en jQuery.

          -

          Vous pouvez faire un essai en cliquant le code suivant ; remarquez qu’un bout du code n’est pas visible (après z-index normallement) :

          +

          Vous pouvez faire un essai en cliquant le code suivant ; remarquez qu’un bout du code n’est pas visible (après z-index normallement) :

          @@ -88,17 +88,17 @@ C’est pourquoi, j’utilise une méthode qui permet d’afficher c
           
          -

          Ce code est celui qui permet d’obtenir cet effet.

          +

          Ce code est celui qui permet d’obtenir cet effet.

          Que fait-il ?

          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.

          +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, +

          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.

          +Pas besoin d’utiliser un plugin jQuery.

          diff --git a/output/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/index.html b/output/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/index.html index fe52b4cc9..5ec5d9e16 100644 --- a/output/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/index.html +++ b/output/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/index.html @@ -61,10 +61,10 @@

          tlàl:

            -
          • J’ai essayé de faire une version de YPassword en jQuery et avec Cappuccino.
          • -
          • Cappuccino est très bien sur les navigateurs non mobile mais l’application pèse 1.4Mo et n’est pas compatible avec l’iPhone.
          • -
          • la version jQuery n’est pas aussi jolie que la version réalisée avec Cappuccino mais elle pèse seulement 106Ko et est compatible avec l’iPhone.
          • -
          • J’essayerai Dashcode 3
          • +
          • J’ai essayé de faire une version de YPassword en jQuery et avec Cappuccino.
          • +
          • Cappuccino est très bien sur les navigateurs non mobile mais l’application pèse 1.4Mo et n’est pas compatible avec l’iPhone.
          • +
          • la version jQuery n’est pas aussi jolie que la version réalisée avec Cappuccino mais elle pèse seulement 106Ko et est compatible avec l’iPhone.
          • +
          • J’essayerai Dashcode 3
          @@ -76,21 +76,21 @@
          -

          Avant de commencer, je dois dire que je sais que Cappuccino et jQuery ne sont pas plus comparable que Cocoa et la standard library en C++. L’un est fait pour créer des interfaces utilisateurs tandis que l’autre est plus une librairie qui aide aux tâches de bas niveaux. -Par contre je les ai utilisé tous les deux pour faire la même application. C’est pourquoi je compare l’expérience que j’ai retenu de chacun pour cette tâche.

          +

          Avant de commencer, je dois dire que je sais que Cappuccino et jQuery ne sont pas plus comparable que Cocoa et la standard library en C++. L’un est fait pour créer des interfaces utilisateurs tandis que l’autre est plus une librairie qui aide aux tâches de bas niveaux. +Par contre je les ai utilisé tous les deux pour faire la même application. C’est pourquoi je compare l’expérience que j’ai retenu de chacun pour cette tâche.

          -

          J’ai fait une version web de mon widget YPassword. -C’est un simple widget qui permet d’organiser ses mots de passes simplement avec une grande sécurité et de façon portable. -Ce n’est pas un widget créé pour remplacer le trousseau d’accès, mais +

          J’ai fait une version web de mon widget YPassword. +C’est un simple widget qui permet d’organiser ses mots de passes simplement avec une grande sécurité et de façon portable. +Ce n’est pas un widget créé pour remplacer le trousseau d’accès, mais plus un générateur de mots de passe.

          Le premier a été élaboré à partir du code de mon widget Mac. -Vous pouvez l’essayer ici. -J’ai ensuite fait une version avec Cappuccino, que vous pouvez essayer ici.

          +Vous pouvez l’essayer ici. +J’ai ensuite fait une version avec Cappuccino, que vous pouvez essayer ici.

          Que fait ce widget ?

          @@ -104,12 +104,12 @@ J’ai ensuite fait une version avec Cappucc -

          J’organise mes mots de passe avec une méthode simple. +

          J’organise mes mots de passe avec une méthode simple. Je mémorise un mot de passe maître. Et mon mot de passe est alors (principalement) : <pre class="twilight">hash(motDePasseMaitre+NomDeDomaine) </pre>

          -

          En réalité j’ai besoin d’un plus d’informations pour créer mon mot de passe :

          +

          En réalité j’ai besoin d’un plus d’informations pour créer mon mot de passe :

          • Un mot de passe maître ;
          • @@ -137,11 +137,11 @@ hash=sha1( masterPasswo
          • longueur maximale ;
          • ne doit pas contenir de caractères spéciaux ;
          • doit contenir des caractères spéciaux ;
          • -
          • etc…
          • +
          • etc…

          Et si vous souhaitez changer votre mot de passe, le nombre de changement sert à ça. -Toutes les informations peuvent rester publiques sans trop de danger à l’exception du mot de passe principal.

          +Toutes les informations peuvent rester publiques sans trop de danger à l’exception du mot de passe principal.

          Si vous souhaitez avoir encore plus de détails vous pouvez toujours lire certaines de mes anciens articles de blog (en anglais) :

          @@ -153,64 +153,64 @@ Toutes les informations peuvent rester publiques sans trop de danger à l’

          Cappuccino

          -

          Tout d’abord je voudrais dire que les applications réalisées avec Cappuccino sont tout simplement incroyables. -C’est comme avoir une application Mac dans son navigateur.

          +

          Tout d’abord je voudrais dire que les applications réalisées avec Cappuccino sont tout simplement incroyables. +C’est comme avoir une application Mac dans son navigateur.

          -

          Je dois aussi admettre que j’ai pris du plaisir a écrire mon application avec Cappuccino. -C’est comme programmer une application Mac ou iPhone. +

          Je dois aussi admettre que j’ai pris du plaisir a écrire mon application avec Cappuccino. +C’est comme programmer une application Mac ou iPhone. Si vous connaissez bien Cocoa, vous vous sentirez comme à la maison. Si vous ne connaissez pas Cocoa, je vous conseille de vous y intéresser. -Il s’agit vraiment d’un framework excellent pour faire des interfaces utilisateur. +Il s’agit vraiment d’un framework excellent pour faire des interfaces utilisateur. Je ne suis pas un spécialiste de tous les frameworks. -Mais j’ai réalisé des Interfaces Utilisateurs avec les MFC, Java Swing1 et WXWindows il y a quelques années. +Mais j’ai réalisé des Interfaces Utilisateurs avec les MFC, Java Swing1 et WXWindows il y a quelques années. Et je dois dire que Cocoa est bien meilleurs que tous ces framework.

          -

          Cappuccino est un framework spécialisé dans le développement d’application web vraiment exceptionnel. Mais il a aussi quelques défauts qui ont surgit lors de l’écriture de mon widget.

          +

          Cappuccino est un framework spécialisé dans le développement d’application web vraiment exceptionnel. Mais il a aussi quelques défauts qui ont surgit lors de l’écriture de mon widget.

          -

          Les choses qui m’ont plu :

          +

          Les choses qui m’ont plu :

          • Le résultat est vraiment très beau
          • -
          • C’était très agréable de programmer
          • +
          • C’était très agréable de programmer
          • Comme programmer une application Mac
          • -
          • J’aurai pu utiliser Interface Builder pour créer l’interface.
          • +
          • J’aurai pu utiliser Interface Builder pour créer l’interface.
          -

          Les choses qui ne m’ont pas plu :

          +

          Les choses qui ne m’ont pas plu :

            -
          • J’ai mis un bon moment avant de comprendre comment récupérer le onChange des champs textuels.
          • -
          • La documentation manquait d’organisation.
          • +
          • J’ai mis un bon moment avant de comprendre comment récupérer le onChange des champs textuels.
          • +
          • La documentation manquait d’organisation.
          • Ça ne marche pas sous iPhone.
          • Il a fallu déployer 11Mo.
          • -
          • Il faut télécharger 1,3Mo pour que l’application se charge dans le navigateur.
          • +
          • Il faut télécharger 1,3Mo pour que l’application se charge dans le navigateur.
          -

          Je n’ai pas utilisé les bindings parce qu’il me semble qu’ils ne sont pas prêts.

          +

          Je n’ai pas utilisé les bindings parce qu’il me semble qu’ils ne sont pas prêts.

          jQuery

          -

          La version jQuery de YPassword n’est pas aussi bien finie que celle de Cappuccino. Simplement parce qu’il n’y a pas de slider directement avec jQuery. Il faudrait que j’utilise jQueryUI. Et je pense que l’application deviendrait beaucoup plus lourde pour le coups. En tout cas largement au dessus des 106Ko actuels.

          +

          La version jQuery de YPassword n’est pas aussi bien finie que celle de Cappuccino. Simplement parce qu’il n’y a pas de slider directement avec jQuery. Il faudrait que j’utilise jQueryUI. Et je pense que l’application deviendrait beaucoup plus lourde pour le coups. En tout cas largement au dessus des 106Ko actuels.

          -

          J’ai utilisé le code de mon widget mac en l’adaptant un peu pour faire cette version. C’était relativement facile. Mais jQuery n’est pas un framework orienté application. Il s’agit plus d’un framework pour faire des animations qui la pète.

          +

          J’ai utilisé le code de mon widget mac en l’adaptant un peu pour faire cette version. C’était relativement facile. Mais jQuery n’est pas un framework orienté application. Il s’agit plus d’un framework pour faire des animations qui la pète.

          -

          Je n’ai pas beaucoup plus à dire sur la version jQuery, sinon que programmer avec jQuery était de la programmation de niveau beaucoup plus bas qu’avec Cappuccino.

          +

          Je n’ai pas beaucoup plus à dire sur la version jQuery, sinon que programmer avec jQuery était de la programmation de niveau beaucoup plus bas qu’avec Cappuccino.

          En conclusion

          -

          Si vous voulez faire une application compatible iPhone n’utilisez pas Cappuccino. Du moins pas encore. +

          Si vous voulez faire une application compatible iPhone n’utilisez pas Cappuccino. Du moins pas encore. Si vous souhaitez faire un application très simple (comme la mienne), je pense que Cappuccino est un peu trop lourd pour ça.

          Si vous souhaitez faire des applications web complexes qui ressemblent à des applications de bureau alors clairement Cappuccino est un très bon choix. -Notez cependant qu’il peut être un peu difficile de débuter.

          +Notez cependant qu’il peut être un peu difficile de débuter.

          -

          Finallement, pour terminer la version web de mon widget, j’essayerai Dashcode 3. +

          Finallement, pour terminer la version web de mon widget, j’essayerai Dashcode 3. Il semblerai que ce soit une bonne alternative pour créer des widget sur le web compatible iPhone. -Je ne sais pas si les applications réalisées avec Dashcode 3 sont compatibles pour les browser n’utilisant pas webkit. Mais si c’est le cas, alors ça pourrait sonner le glas des projets comme Cappuccino et Sproutcore.

          +Je ne sais pas si les applications réalisées avec Dashcode 3 sont compatibles pour les browser n’utilisant pas webkit. Mais si c’est le cas, alors ça pourrait sonner le glas des projets comme Cappuccino et Sproutcore.


          1. -

            Si ça vous intéresse vous pouvez jeter un coup d’œil à SEDiL. Je suis assez fier de la vue automatique des arbres que j’ai programmé sans librairie de départ.

            +

            Si ça vous intéresse vous pouvez jeter un coup d’œil à SEDiL. Je suis assez fier de la vue automatique des arbres que j’ai programmé sans librairie de départ.

          diff --git a/output/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html b/output/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html index 9a0973953..2a94d54a7 100644 --- a/output/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html +++ b/output/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/index.html @@ -54,10 +54,10 @@
          -

          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 :

          +

          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 :

          1. Les dégradés sur Chrome (pas dans Safari sur Mac)
          2. @@ -66,24 +66,24 @@ En réalité, ce qui ralenti le rendu de ce site est par ordre d’importanc

            les dégradés

            -

            Sur Safari il n’y a absolument aucun problème avec les dégradés. Par contre sur Chrome sous Linux le site devient quasiment inutilisable.

            +

            Sur Safari il n’y a absolument aucun problème avec les dégradés. Par contre sur Chrome sous Linux le site devient quasiment inutilisable.

            -

            Safari et Chrome utilisent webkit tous les deux. Lorsque vous accéder à ce blog avec javascript activé, un CSS spécifique à votre navigateur est ajouté. Jusqu’à maintenant je faisais un tri entre : IE, Mozilla et Webkit. Maintenant j’ai rajouté un cas particulier pour Chrome. -Maintenant j’ai supprimé les gradients lorsque vous naviguer sur ce site en utilisant Chrome.

            +

            Safari et Chrome utilisent webkit tous les deux. Lorsque vous accéder à ce blog avec javascript activé, un CSS spécifique à votre navigateur est ajouté. Jusqu’à maintenant je faisais un tri entre : IE, Mozilla et Webkit. Maintenant j’ai rajouté un cas particulier pour Chrome. +Maintenant j’ai supprimé les gradients lorsque vous naviguer sur ce site en utilisant Chrome.

            -

            Je n’ai pas vérifier la vitesse de rendu de toutes les propriétés de CSS 3. Mais je vous conseille de ne pas utiliser -webkit-gradient avec Chrome. Au moins sous Linux.

            +

            Je n’ai pas vérifier la vitesse de rendu de toutes les propriétés de CSS 3. Mais je vous conseille de ne pas utiliser -webkit-gradient avec Chrome. Au moins sous Linux.

            Les ombres (box-shadow)

            -

            J’ai aussi remarqué que -moz-box-shadow ralenti le rendu sous Firefox (et sous Linux). Alors que l’équivalent webkit ne pose aucun problème à Safari sous Mac.

            +

            J’ai aussi remarqué que -moz-box-shadow ralenti le rendu sous Firefox (et sous Linux). Alors que l’équivalent webkit ne pose aucun problème à Safari sous Mac.

            Ombres de texte

            -

            Beaucoup d’utilisateurs mon dit d’utiliser text-shadows avec parcimonie. Mais je pense qu’il ne s’agissait pas là du problème du ralentissement du site. C’est pourquoi je vais les remettre.

            +

            Beaucoup d’utilisateurs mon dit d’utiliser text-shadows avec parcimonie. Mais je pense qu’il ne s’agissait pas là du problème du ralentissement du site. C’est pourquoi je vais les remettre.

            en conclusion

            -

            N’utilisez pas -webkit-gradient avec google Chrome pour l’instant. +

            N’utilisez pas -webkit-gradient avec google Chrome pour l’instant. Utilisez -moz-box-shadow avec parcimonie.

          diff --git a/output/Scratch/fr/blog/2010-07-09-Indecidabilities/index.html b/output/Scratch/fr/blog/2010-07-09-Indecidabilities/index.html index b387685db..891f9d665 100644 --- a/output/Scratch/fr/blog/2010-07-09-Indecidabilities/index.html +++ b/output/Scratch/fr/blog/2010-07-09-Indecidabilities/index.html @@ -58,10 +58,10 @@
          -

          tlàl : Je crée un mode mathématique simple pour parler de différents types d’indécidabilités :

          +

          tlàl : Je crée un mode mathématique simple pour parler de différents types d’indécidabilités :

            -
          • indécidabilité due aux erreurs d’observation ;
          • +
          • indécidabilité due aux erreurs d’observation ;
          • grandes erreurs résultant de petites erreurs de mesure ;
          • indécidabilité fractales ;
          • indécidabilité logique.
          • @@ -83,14 +83,14 @@
            -

            Si le monde a été fabriqué par un démiurge, on peut dire que celui-ci devait avoir le sens de l’humour. +

            Si le monde a été fabriqué par un démiurge, on peut dire que celui-ci devait avoir le sens de l’humour. Et le récit que je vais faire va vous en fournir la preuve. Je vais me mettre à sa place. Je vais créer un monde simplifié. Un monde régi exactement par nos règles mathématiques. -Puis je vais vous parler du mal qui touche cet Univers semblable au notre ; l’indécidabilité. -L’incapacité de savoir si nous avons trouvé la vérité, ou seulement une approximation de celle-ci. -L’incapacité de prédire certaines choses qui semblent pourtant aller de soi. +Puis je vais vous parler du mal qui touche cet Univers semblable au notre ; l’indécidabilité. +L’incapacité de savoir si nous avons trouvé la vérité, ou seulement une approximation de celle-ci. +L’incapacité de prédire certaines choses qui semblent pourtant aller de soi. Voilà comment tout aurait pu commencer.

            @@ -99,71 +99,71 @@ Voilà comment tout aurait pu commencer.

            no name

            -

            Au début, il n’y avait rien. +

            Au début, il n’y avait rien. Puis un article de blog commença à prendre forme. -J’inspire profondément pour sentir la pesanteur de ce que je vais accomplir. -Attention, une dernier moment de tension et je crée l’Univers. -Un Univers qui n’existera que le temps de la lecture de cet article. +J’inspire profondément pour sentir la pesanteur de ce que je vais accomplir. +Attention, une dernier moment de tension et je crée l’Univers. +Un Univers qui n’existera que le temps de la lecture de cet article. Me voici le démiurge de cet Univers et te voilà son observateur privilégié.

            -

            Comme j’aime bien tout contrôler, je fabrique ce monde avec quelques règles simples. +

            Comme j’aime bien tout contrôler, je fabrique ce monde avec quelques règles simples. Je décide que les vrais règles de ce monde sont celles que nous pensons qui régissent notre monde. -Notez qu’il y a une grande différence. -Pour leur monde, ce que l’on croit vrai aujourd’hui, est vraiment vrai pour eux. +Notez qu’il y a une grande différence. +Pour leur monde, ce que l’on croit vrai aujourd’hui, est vraiment vrai pour eux. Leur monde est donc plus simple à priori que le notre. En particulier, on peut le décrire avec des axiomes et des règles mathématiques. -Alors qu’il est possible que ce ne soit pas le cas de notre Univers. +Alors qu’il est possible que ce ne soit pas le cas de notre Univers. Mais nous reviendront là-dessus plus tard.

            Bon au travail maintenant, je crée une Terre. -J’y ajoute des habitants intelligents, les Ys. +J’y ajoute des habitants intelligents, les Ys. Bien entendu ils se posent des questions. En particulier, ils se demandent quelles sont les lois qui régissent leur monde. -Ils pensent que connaître toutes ces règles leur permettrait de connaître l’avenir. +Ils pensent que connaître toutes ces règles leur permettrait de connaître l’avenir. Leur naïveté est touchante. Ah, si seulement ils savaient. Mais je suis là pour les aider à apprendre.

            Comme je suis un Dieu un peu facétieux, je vais leur jouer quelques tours. -Sinon on s’ennuierai à mourir. +Sinon on s’ennuierai à mourir. Le premier est de leur donner des sens imparfaits. -De plus il leur est impossible d’avoir des mesures parfaites. +De plus il leur est impossible d’avoir des mesures parfaites. Je leur laisse cependant toutes libertés pour améliorer leur technologie et diminuer ces erreurs de mesures.

            Les habitants de ce monde pensent que celui-ci est plat. -Certains d’entre eux pensent qu’il est possible de découvrir les règles du monde que j’ai créé. +Certains d’entre eux pensent qu’il est possible de découvrir les règles du monde que j’ai créé. Et bien que le jeu commence.

            -

            Commençons par leur première leçon, les erreurs causent de l’indécidabilité.

            +

            Commençons par leur première leçon, les erreurs causent de l’indécidabilité.

            Indécidabilité dues aux erreurs de mesures

            -

            Voici ce que pense l’un de ces individus.

            +

            Voici ce que pense l’un de ces individus.

            -

            Tous les triangles que j’observe semble avoir une propriété commune. +

            Tous les triangles que j’observe semble avoir une propriété commune. La somme de leurs angles est toujours π radiants (180°). -Il s’agit certainement d’une loi de mon Univers. +Il s’agit certainement d’une loi de mon Univers. Mais comment être certain que tous les triangles de mon Univers possèdent cette propriété ?

            no name

            -

            Certain d’entre eux commencent à formaliser un petit peu le problème +

            Certain d’entre eux commencent à formaliser un petit peu le problème et ils finissent faire une preuve mathématique. Magnifique ! La preuve est correcte, mais il reste un petit problème. -La preuve s’appuie sur des axiomes et des règles. +La preuve s’appuie sur des axiomes et des règles. Comment être certain que ces règles et ces axiomes sont vrai dans leur monde? Ils auront beau faire des mesures de plus en plus précises qui conforteront cette formule, -ils n’auront que l’espoir et jamais la certitude que la formule est vrai. -Simplement parce que le seul moyen de vérifier la véracité des axiomes est par l’observation. -Hors en tant que dieu facétieux, j’ai interdit les observation avec des mesures parfaites.

            +ils n’auront que l’espoir et jamais la certitude que la formule est vrai. +Simplement parce que le seul moyen de vérifier la véracité des axiomes est par l’observation. +Hors en tant que dieu facétieux, j’ai interdit les observation avec des mesures parfaites.

            -

            Bien entendu, ils prient, ils m’appellent à l’aide. +

            Bien entendu, ils prient, ils m’appellent à l’aide. Et comme tout Dieu qui se respecte, je ne réponds pas. -Ah ah ah ! J’ai toujours aimé faire ce genre de chose. -Ensuite je ferai comme si je n’existe pas. +Ah ah ah ! J’ai toujours aimé faire ce genre de chose. +Ensuite je ferai comme si je n’existe pas. Encore un bonne blague !

            Si certains se sentent accablés, il leur reste un espoir :

            @@ -181,14 +181,14 @@ Encore un bonne blague !

            Malheureusement pour eux, il y a le problème des 3 corps. Prenons les formules de la gravitation Universelle et appliquons la à deux corps célestes. Si on connait la position de ces corps avec un grande précision, on pourra aussi connaître la position future de ces corps avec une grande précision. -L’hypothèse selon laquelle de petite erreurs de mesures impliquent de petites erreurs prédictive est confortée. +L’hypothèse selon laquelle de petite erreurs de mesures impliquent de petites erreurs prédictive est confortée. Cependant, il y a un problème. Reprenons le même problème mais avec trois corps. Par exemple, avec le Soleil, la Terre et la Lune. -Dans ce cas, les erreurs de mesures initiales vont s’amplifier. -S’amplifier au point de rendre toute prédiction inutilisable.

            +Dans ce cas, les erreurs de mesures initiales vont s’amplifier. +S’amplifier au point de rendre toute prédiction inutilisable.

            -

            Là encore une voix d’espoir s’élève : -> Peut-être pouvons nous calculer l’erreur maximale acceptable pour prédire quelque chose. +

            Là encore une voix d’espoir s’élève : +> Peut-être pouvons nous calculer l’erreur maximale acceptable pour prédire quelque chose. > Et nous pourrions au moins savoir ce que nous pouvons prédire ou pas.

            Une fois encore, ça ne va pas très bien se passer.

            @@ -203,23 +203,23 @@ S’amplifier au point de rendre toute prédiction inutilisable.

            Les coordonnées sont proches des côtes de la Bretagne. Ce point va-t-il tomber dans la mer ou sur la terre ferme ?

            -

            Et bien, pour certaines coordonnées, c’est impossible de le savoir. -Même si je réduis l’erreur à une valeur infinitésimale. -Simplement parce que certains voisinages autour d’un point contiennent toujours à la fois de l’eau et de la terre. +

            Et bien, pour certaines coordonnées, c’est impossible de le savoir. +Même si je réduis l’erreur à une valeur infinitésimale. +Simplement parce que certains voisinages autour d’un point contiennent toujours à la fois de l’eau et de la terre. Et ce quelque soit la taille du voisinage.

            -

            On peut même imaginer une structure ou tous les points sont au bord de celle-ci, on ne peut donc pas se permettre d’erreur[^2]. +

            On peut même imaginer une structure ou tous les points sont au bord de celle-ci, on ne peut donc pas se permettre d’erreur[^2]. [^2]: Pensez aux deux ensembles R\Q et Q.

            Mais que vois-je ? -Un petit malin essaye de trouver la vérité en s’extrayant de mon Monde et en faisant un article sur un blog ? +Un petit malin essaye de trouver la vérité en s’extrayant de mon Monde et en faisant un article sur un blog ? Ça ne va pas se passer comme ça ! Croyez moi ! -> Faire des prédictions précises à partir des données observées semble être une quête vouée à l’échec. -> Mais je suis persuadé que l’on peut aller au delà. -> Au diable ce Dieu qui nous empêche d’avoir des mesures précises ! +> Faire des prédictions précises à partir des données observées semble être une quête vouée à l’échec. +> Mais je suis persuadé que l’on peut aller au delà. +> Au diable ce Dieu qui nous empêche d’avoir des mesures précises ! > Inventons notre propre Univers mathématique. > Un monde qui se suffit à lui-même. -> Un monde dans lequel il n’y aura plus d’erreur de mesure. +> Un monde dans lequel il n’y aura plus d’erreur de mesure. > Un monde entièrement contrôlé par des règles que nous aurons choisi. > Un monde similaire au notre mais où tout pourra être prédit.

            @@ -227,48 +227,48 @@ Un petit malin essaye de trouver la vérité en s’extrayant de mon Monde e

            no name

            -

            Jusqu’ici, tous les problèmes d’indécidabilités étaient dûs aux erreurs. -Maintenant peut-être que privé d’erreur de mesure, on pourrait enfin résoudre tous les problèmes.
            +

            Jusqu’ici, tous les problèmes d’indécidabilités étaient dûs aux erreurs. +Maintenant peut-être que privé d’erreur de mesure, on pourrait enfin résoudre tous les problèmes.
            Et bien non. Même dans un monde mathématique complètement contrôlé. -On peut créer un objet pour lequel on ne pourra pas décider à l’avance ce qu’il fait.

            +On peut créer un objet pour lequel on ne pourra pas décider à l’avance ce qu’il fait.

            -

            Il s’agit du problème de l’arrêt.

            +

            Il s’agit du problème de l’arrêt.

            -

            Le Théorème stipule qu’il n’existe pas de programme permettant de décider si un autre programme s’arrête. +

            Le Théorème stipule qu’il n’existe pas de programme permettant de décider si un autre programme s’arrête. La preuve est suffisamment simple pour rentrer dans ce post, donc je me fais un petit plaisir en la donnant.

            -

            Supposons qu’il existe un programme qui puisse dire si un autre programme s’arrête. Plus précisément :

            +

            Supposons qu’il existe un programme qui puisse dire si un autre programme s’arrête. Plus précisément :

            Hypothèse: Il existe un programme P tel que:

              -
            • P(x,y) réponde “s’arrête” en un temps fini si et seulement si x(y)1 s’arrête effectivement en temps fini et
            • -
            • P(x,y) réponde “ne s’arrête pas” en un temps fini dans le cas contraire.
            • +
            • P(x,y) réponde “s’arrête” en un temps fini si et seulement si x(y)1 s’arrête effectivement en temps fini et
            • +
            • P(x,y) réponde “ne s’arrête pas” en un temps fini dans le cas contraire.
            -

            Remarque: Tout code de programme est une chaîne de caractère qui peut être utilisée aussi comme entrée d’un autre programme. +

            Remarque: Tout code de programme est une chaîne de caractère qui peut être utilisée aussi comme entrée d’un autre programme. Ainsi écrire P(x,x) est autorisé.

            -

            Soit le programme Q que j’écris comme suit : +

            Soit le programme Q que j’écris comme suit : <pre class="twilight"> Q(x) : - si P(x,x)=”s’arrête” alors je fais une boucle infinie. - si P(x,x)=”ne s’arrête pas” alors je m’arrête. + si P(x,x)=”s’arrête” alors je fais une boucle infinie. + si P(x,x)=”ne s’arrête pas” alors je m’arrête. </pre>

            Maintenant que répond P(Q,Q)?

              -
            • si P(Q,Q) répond “s’arrête” ça implique que P(Q,Q)=”ne s’arrête pas”
            • -
            • si P(Q,Q) répond “ne s’arrête pas” ça implique que P(Q,Q)=”s’arrête”
            • +
            • si P(Q,Q) répond “s’arrête” ça implique que P(Q,Q)=”ne s’arrête pas”
            • +
            • si P(Q,Q) répond “ne s’arrête pas” ça implique que P(Q,Q)=”s’arrête”

            Il y a donc une contradiction que le seul moyen de régler est par la non existence du programme P.

            -

            C’est simple, je suis le démiurge de ce monde imaginaire. +

            C’est simple, je suis le démiurge de ce monde imaginaire. Et même moi, je dois me soumettre à cette règle. Comme quoi, avoir la possibilité de créer le monde et la toute puissance sont deux choses différentes.

            @@ -279,12 +279,12 @@ Comme quoi, avoir la possibilité de créer le monde et la toute puissance sont

            Après tout ceci, il peut sembler difficile de savoir en quoi nous pouvons croire. -Mais ce serait une erreur de jeter le bébé avec l’eau du bain. -Dans une seconde partie, j’expliquerai ce que nous pouvons espérer et qu’elle attitude nous devons adopter une fois que l’on a réalisé que beaucoup de vérité nous sont inaccessibles.

            +Mais ce serait une erreur de jeter le bébé avec l’eau du bain. +Dans une seconde partie, j’expliquerai ce que nous pouvons espérer et qu’elle attitude nous devons adopter une fois que l’on a réalisé que beaucoup de vérité nous sont inaccessibles.


            1. -

              C’est-à-dire le programme x prenant l’entrée y.

              +

              C’est-à-dire le programme x prenant l’entrée y.

            diff --git a/output/Scratch/fr/blog/2010-07-31-New-style-after-holidays/index.html b/output/Scratch/fr/blog/2010-07-31-New-style-after-holidays/index.html index 131ce84c6..6f19383e7 100644 --- a/output/Scratch/fr/blog/2010-07-31-New-style-after-holidays/index.html +++ b/output/Scratch/fr/blog/2010-07-31-New-style-after-holidays/index.html @@ -54,11 +54,11 @@
            -

            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. +

            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© sur iPhone©.

            +J’ai complètement modifié le style de mon site web. +Il est inspiré du style de l’application iBooks© sur iPhone©.

            Dites moi ce que vous pensez de ce nouveau design.

            diff --git a/output/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/index.html b/output/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/index.html index ff734d2a5..9c51126c5 100644 --- a/output/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/index.html +++ b/output/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/index.html @@ -60,14 +60,14 @@

            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.

            +

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

            Mais comme vous devez le savoir mon blog est un site complètement statique. -J’utilise nanoc pour l’engendrer. -Avoir un site statique amène beaucoup d’avantages par rapport à un site dynamique. Surtout en terme de sécurité. +J’utilise nanoc pour l’engendrer. +Avoir un site statique amène beaucoup d’avantages par rapport à un site dynamique. Surtout en terme de sécurité. Voici comment configurer un site statique sur heroku.

            -

            La racine de mes fichiers est ‘/output’. Vous devez simplement créer deux fichiers. Un fichier config.ru1 :

            +

            La racine de mes fichiers est ‘/output’. Vous devez simplement créer deux fichiers. Un fichier config.ru1 :

            @@ -126,7 +126,7 @@ rack-contrib
             
            -

            Maintenant il suffit de suivre l’introduction rapide d’heroku pour créer une nouvelle application :

            +

            Maintenant il suffit de suivre l’introduction rapide d’heroku pour créer une nouvelle application :

             git init
            @@ -136,11 +136,11 @@ git push heroku master
             

            Maintenant je peux rediriger correctement mes erreurs 404. -J’espère que ça a pu vous être utile.

            +J’espère que ça a pu vous être utile.


            1. -

              Je me suis complètement inspiré de cet article.

              +

              Je me suis complètement inspiré de cet article.

            diff --git a/output/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html b/output/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html index 02fa19941..901a2ee4e 100644 --- a/output/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html +++ b/output/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/index.html @@ -54,23 +54,23 @@
            -

            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.

            +

            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 :

            +

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

             uuencode fic.jpg fic.jpg | mail -s 'Subject'
             
            -

            Bon, alors, bête et discipliné j’ai essayé. +

            Bon, alors, bête et discipliné j’ai essayé. Et bien, ça marche presque tout le temps. -Pour mon fichier ça n’a pas marché du tout. -Je l’ai compressé au format .gz, .bz2 et .zip. +Pour mon fichier ça n’a pas marché du tout. +Je l’ai compressé au format .gz, .bz2 et .zip. Avec le format .bz2 le mail reçu avait bien un fichier attaché. Mais avec les formats .gz et .zip, ça ne fonctionnait pas. -Au lieu d’avoir un fichier attaché j’avais un message qui contenait quelque chose comme :

            +Au lieu d’avoir un fichier attaché j’avais un message qui contenait quelque chose comme :

             begin 664 fic.jpg
            @@ -83,12 +83,12 @@ end
             

            Pas très lisible. -Après pas mal de recherche j’ai trouvé la solution. -Le problème c’est uuencode qui est une méthode qui devrait devenir obsolète pour envoyer les fichiers. +Après pas mal de recherche j’ai trouvé la solution. +Le problème c’est uuencode qui est une méthode qui devrait devenir obsolète pour envoyer les fichiers. Il vaut mieux utiliser le format MIME pour envoyer des fichiers attachés.

            -

            Donc finalement le mieux est de faire ça “à la main” avec sendmail. -Je n’ai quand même pas utilisé telnet. +

            Donc finalement le mieux est de faire ça “à la main” avec sendmail. +Je n’ai quand même pas utilisé telnet. La commande à lancer est :

            @@ -125,8 +125,8 @@ uuencode -m fic.jpg fic.jpg
             

            Et voilà. -Parfois la technique c’est tellement simple. -Si j’en ai besoin encore quelques fois, je pense que j’écrirai un émetteur de mail en shell.

            +Parfois la technique c’est tellement simple. +Si j’en ai besoin encore quelques fois, je pense que j’écrirai un émetteur de mail en shell.

            diff --git a/output/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html b/output/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html index 3f61769f4..b65d50896 100644 --- a/output/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html +++ b/output/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/index.html @@ -54,14 +54,14 @@
            -

            Vous pouvez remarquer qu’à la fin de chaque page je donne une date de dernière modification. +

            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.

            +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 :

            +

            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 :

            @@ -82,7 +82,7 @@ Voici comment je m’y prend avec nanoc
             
            -

            Bien entendu je sais que c’est très lent et absolument pas optimisé. +

            Bien entendu je sais que c’est très lent et absolument pas optimisé. Mais ça fonctionne comme prévu. Maintenant la date que vous voyez en bas de la page correspond exactement à la dernière date de modification de son contenu.

            diff --git a/output/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html b/output/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html index afe63cc66..6d16eabaa 100644 --- a/output/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html +++ b/output/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/index.html @@ -54,66 +54,66 @@
            -

            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.

            +

            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. +

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

            -#import <CommonCrypto/CommonDigest.h>
            +#import <CommonCrypto/CommonDigest.h>
             ...
             NSString *b64_hash = [self b64_sha1:@"some NSString to be sha1'ed"];
             ...
             NSString *hex_hash = [self hex_sha1:@"some NSString to be sha1'ed"];
             
            -

            L’algorithme pour l’encodage en base64 doit être programmé sur iPhone. -Il n’y a pas de librairie officielle qui s’occupe de ça.

            +

            L’algorithme pour l’encodage en base64 doit être programmé sur iPhone. +Il n’y a pas de librairie officielle qui s’occupe de ça.

             
            -- (unsigned char *)sha1:(NSString *)baseString result:(unsigned char *)result {
            -    char *c_baseString=(char *)[baseString UTF8String];
            -    CC_SHA1(c_baseString, strlen(c_baseString), result);
            -    return result;
            +- (unsigned char *)sha1:(NSString *)baseString result:(unsigned char *)result {
            +    char *c_baseString=(char *)[baseString UTF8String];
            +    CC_SHA1(c_baseString, strlen(c_baseString), result);
            +    return result;
             }
             
            -- (NSString *)base64:(unsigned char *)result {
            -    NSString *password=[[NSString alloc] init];
            -    static const unsigned char cb64[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
            -    for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i+=3) {
            -        password=[password stringByAppendingFormat:@"%c%c%c%c",
            -            cb64[(result[i] &0xFC)>>2],
            -            cb64[((result[i] & 0x03) << 4)
            -                | ((result[i + 1] & 0xF0) >> 4)],
            -            cb64[((result[i + 1] & 0x0F) << 2)
            -                | ((result[i + 2] & 0xC0) >> 6)],
            -            cb64[result[i+2]&0x3F]
            +- (NSString *)base64:(unsigned char *)result {
            +    NSString *password=[[NSString alloc] init];
            +    static const unsigned char cb64[65]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
            +    for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i+=3) {
            +        password=[password stringByAppendingFormat:@"%c%c%c%c",
            +            cb64[(result[i] &0xFC)>>2],
            +            cb64[((result[i] & 0x03) << 4)
            +                | ((result[i + 1] & 0xF0) >> 4)],
            +            cb64[((result[i + 1] & 0x0F) << 2)
            +                | ((result[i + 2] & 0xC0) >> 6)],
            +            cb64[result[i+2]&0x3F]
                             ];            
                 }
            -    return password;
            +    return password;
             }
             
            -- (NSString *)hexadecimalRepresentation:(unsigned char *)result {
            -    NSString *password=[[NSString alloc] init];
            -    for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
            -        password=[password stringByAppendingFormat:@"%02x", result[i]];
            +- (NSString *)hexadecimalRepresentation:(unsigned char *)result {
            +    NSString *password=[[NSString alloc] init];
            +    for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
            +        password=[password stringByAppendingFormat:@"%02x", result[i]];
                 }
            -    return password;
            +    return password;
             }
             
            -- (NSString *)b64_sha1:(NSString *)inputString {
            -    unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
            -    [self sha1:inputString result:result];
            -    return [self base64:result];
            +- (NSString *)b64_sha1:(NSString *)inputString {
            +    unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
            +    [self sha1:inputString result:result];
            +    return [self base64:result];
             }
             
            -- (NSString *)hex_sha1:(NSString *)inputString {
            -    unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
            -    [self sha1:inputString result:result];
            -    return [self hexadecimalRepresentation:result];
            +- (NSString *)hex_sha1:(NSString *)inputString {
            +    unsigned char result[CC_SHA1_DIGEST_LENGTH+1];
            +    [self sha1:inputString result:result];
            +    return [self hexadecimalRepresentation:result];
             }
             
            diff --git a/output/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/index.html b/output/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/index.html index 125a16638..ca232dea4 100644 --- a/output/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/index.html +++ b/output/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/index.html @@ -54,24 +54,24 @@
            -

            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. +

            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é. +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:

              -
            • pas d’élément CSS qui commence par -moz ou -webkit, etc… ;
            • -
            • pas d’ombre sous le texte pour donner une impression de profondeur ;
            • +
            • pas d’élément CSS qui commence par -moz ou -webkit, etc… ;
            • +
            • pas d’ombre sous le texte pour donner une impression de profondeur ;
            • nettoyer pas mal le code et enlever tout ce que je peux ;
            -

            J’espère que ce nouveau design vous plaît.

            +

            J’espère que ce nouveau design vous plaît.

            diff --git a/output/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html b/output/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html index 49dfc6b52..53e001c74 100644 --- a/output/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html +++ b/output/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/index.html @@ -66,23 +66,23 @@
          • Récupérez un certificat signé par une AC: cliquez ici pour un certificat gratuit ;
          • ouvrez le fichier ;
          • supprimer le fichier en mode sécurisé ;
          • -
          • utilisez Mail plutôt que l’interface web de gmail.
          • +
          • utilisez Mail plutôt que l’interface web de gmail.
          -

          J’ai (re)découvert comment adoptez la norme S/MIME. -J’ai été surpris de voir à quel point ce fut aisé. -Il y a seulement quelques années c’était bien plus difficile à accomplir. +

          J’ai (re)découvert comment adoptez la norme S/MIME. +J’ai été surpris de voir à quel point ce fut aisé. +Il y a seulement quelques années c’était bien plus difficile à accomplir. Maintenant je peux signer et chiffrer mes mails.

          Pourquoi est-ce important ?

          -

          Signer : cela permet de certifier avec une absolue certitude que la personne qui a écrit le mail est vous ou au moins qu’elle a utilisé votre ordinateur.

          +

          Signer : cela permet de certifier avec une absolue certitude que la personne qui a écrit le mail est vous ou au moins qu’elle a utilisé votre ordinateur.

          -

          Chiffrer : parce que parfois il est nécessaire d’être certain qu’une conversation reste privée.

          +

          Chiffrer : parce que parfois il est nécessaire d’être certain qu’une conversation reste privée.

          Comment procéder ?

          @@ -90,12 +90,12 @@ Maintenant je peux signer et chiffrer mes mails.

        20. Récupérez un certificat signé par une authorité de certification : cliquez ici pour récupérer un certificat gratuit ;
        21. ouvrez le fichier ;
        22. supprimer le fichier en mode sécurisé ;
        23. -
        24. utilisez Mail plutôt que l’interface web de gmail. +
        25. utilisez Mail plutôt que l’interface web de gmail. Maintenant vous devriez voir ces icônes : no name
        26. -

          n.b. : si vous utilisez gmail et que vous ne travaillez pas toujours avec un Mac, vous devriez considérer d’utiliser le module gmail S/MIME de firefox.

          +

          n.b. : si vous utilisez gmail et que vous ne travaillez pas toujours avec un Mac, vous devriez considérer d’utiliser le module gmail S/MIME de firefox.

          diff --git a/output/Scratch/fr/blog/2010-10-14-Fun-with-wav/index.html b/output/Scratch/fr/blog/2010-10-14-Fun-with-wav/index.html index 9c8e7fb4c..8b08b06ad 100644 --- a/output/Scratch/fr/blog/2010-10-14-Fun-with-wav/index.html +++ b/output/Scratch/fr/blog/2010-10-14-Fun-with-wav/index.html @@ -66,59 +66,59 @@ -

          J’ai eu besoin de calculer la somme des valeurs absolue des données d’un fichier wav. -Pour des raison d’efficacité (et aussi de fun), j’ai fait le programme en C.

          +

          J’ai eu besoin de calculer la somme des valeurs absolue des données d’un fichier wav. +Pour des raison d’efficacité (et aussi de fun), j’ai fait le programme en C.

          -

          Celà faisait longtemps que je n’avais pas programmé en C. +

          Celà faisait longtemps que je n’avais pas programmé en C. De mémoire il était peu aisé de manipuler des fichiers. -Mais je dois concéder que j’ai été étonné de la clarté du code que j’ai obtenu.

          +Mais je dois concéder que j’ai été étonné de la clarté du code que j’ai obtenu.

          -

          Tout d’abord, un fichier wav se compose d’un entête qui contient pas mal de meta données. +

          Tout d’abord, un fichier wav se compose d’un entête qui contient pas mal de meta données. Cet entête a été optimisé pour prendre peu de place. -Donc on discute de l’entête avec des nombres d’octets :

          +Donc on discute de l’entête avec des nombres d’octets :

          • Les 4 premiers octets doivent contenir RIFF en ASCII ;
          • les 4 octects suivant correspondent à un entier codé sur 32 bits qui donne la taille du fichier moins 8 octets. etc..
          -

          Etonnamment je pense que lire ce type de fichier avec un langage de haut niveau aurait été plus pénible qu’en C. -La preuve, il m’a suffit de chercher sur le net le format complet de l’entête et de l’écrire dans un struct.

          +

          Etonnamment je pense que lire ce type de fichier avec un langage de haut niveau aurait été plus pénible qu’en C. +La preuve, il m’a suffit de chercher sur le net le format complet de l’entête et de l’écrire dans un struct.

          -struct wavfile
          +struct wavfile
           {
          -    char        id[4];          // should always contain "RIFF"
          -    int     totallength;    // total file length minus 8
          -    char        wavefmt[8];     // should be "WAVEfmt "
          -    int     format;         // 16 for PCM format
          -    short     pcm;            // 1 for PCM format
          -    short     channels;       // channels
          -    int     frequency;      // sampling frequency
          -    int     bytes_per_second;
          -    short     bytes_by_capture;
          -    short     bits_per_sample;
          -    char        data[4];        // should always contain "data"
          -    int     bytes_in_data;
          +    char        id[4];          // should always contain "RIFF"
          +    int     totallength;    // total file length minus 8
          +    char        wavefmt[8];     // should be "WAVEfmt "
          +    int     format;         // 16 for PCM format
          +    short     pcm;            // 1 for PCM format
          +    short     channels;       // channels
          +    int     frequency;      // sampling frequency
          +    int     bytes_per_second;
          +    short     bytes_by_capture;
          +    short     bits_per_sample;
          +    char        data[4];        // should always contain "data"
          +    int     bytes_in_data;
           };
           
          -

          Si j’avais eu à faire ça en Ruby, je pense qu’il m’aurait fallu pour chaque bloc de l’entête écrire un bout de code de lecture du bon nombre d’octets. -Alors qu’en C il m’a suffit d’écrire:

          +

          Si j’avais eu à faire ça en Ruby, je pense qu’il m’aurait fallu pour chaque bloc de l’entête écrire un bout de code de lecture du bon nombre d’octets. +Alors qu’en C il m’a suffit d’écrire:

          -fread(&header,sizeof(header),1,wav)
          +fread(&header,sizeof(header),1,wav)
           

          Et en une seule étape ma structure de donnée a été remplie avec les valeurs souhaitées. Magique !

          -

          Ensuite, récupérer un entier à partir de deux octets n’est pas non plus une opération naturelle dans les nouveaux langages de programmation. -Alors qu’en C. Pour récupérer un entier codé sur 16 bits il suffit d’écrire :

          +

          Ensuite, récupérer un entier à partir de deux octets n’est pas non plus une opération naturelle dans les nouveaux langages de programmation. +Alors qu’en C. Pour récupérer un entier codé sur 16 bits il suffit d’écrire :

          -short value=0;
          -while( fread(&value,sizeof(value),1,wav) ) {
          -    // do something with value
          +short value=0;
          +while( fread(&value,sizeof(value),1,wav) ) {
          +    // do something with value
           }
           
          @@ -126,91 +126,91 @@ Alors qu’en C. Pour récupérer un entier codé sur 16 bits i
          -#include <stdio.h>
          -#include <stdlib.h>
          -#include <stdint.h>
          +#include <stdio.h>
          +#include <stdlib.h>
          +#include <stdint.h>
           
          -struct wavfile
          +struct wavfile
           {
          -    char        id[4];          // should always contain "RIFF"
          -    int     totallength;    // total file length minus 8
          -    char        wavefmt[8];     // should be "WAVEfmt "
          -    int     format;         // 16 for PCM format
          -    short     pcm;            // 1 for PCM format
          -    short     channels;       // channels
          -    int     frequency;      // sampling frequency
          -    int     bytes_per_second;
          -    short     bytes_by_capture;
          -    short     bits_per_sample;
          -    char        data[4];        // should always contain "data"
          -    int     bytes_in_data;
          +    char        id[4];          // should always contain "RIFF"
          +    int     totallength;    // total file length minus 8
          +    char        wavefmt[8];     // should be "WAVEfmt "
          +    int     format;         // 16 for PCM format
          +    short     pcm;            // 1 for PCM format
          +    short     channels;       // channels
          +    int     frequency;      // sampling frequency
          +    int     bytes_per_second;
          +    short     bytes_by_capture;
          +    short     bits_per_sample;
          +    char        data[4];        // should always contain "data"
          +    int     bytes_in_data;
           };
           
          -int main(int argc, char *argv[]) {
          -    char *filename=argv[1];
          -    FILE *wav = fopen(filename,"rb");
          -    struct wavfile header;
          +int main(int argc, char *argv[]) {
          +    char *filename=argv[1];
          +    FILE *wav = fopen(filename,"rb");
          +    struct wavfile header;
           
          -    if ( wav == NULL ) {
          -        fprintf(stderr,"Can't open input file %s", filename);
          -        exit(1);
          +    if ( wav == NULL ) {
          +        fprintf(stderr,"Can't open input file %s", filename);
          +        exit(1);
               }
           
           
          -    // read header
          -    if ( fread(&header,sizeof(header),1,wav) < 1 )
          +    // read header
          +    if ( fread(&header,sizeof(header),1,wav) < 1 )
               {
          -        fprintf(stderr,"Can't read file header\n");
          -        exit(1);
          +        fprintf(stderr,"Can't read file header\n");
          +        exit(1);
               }
          -    if (    header.id[0] != 'R'
          -         || header.id[1] != 'I' 
          -         || header.id[2] != 'F' 
          -         || header.id[3] != 'F' ) { 
          -        fprintf(stderr,"ERROR: Not wav format\n"); 
          -        exit(1); 
          +    if (    header.id[0] != 'R'
          +         || header.id[1] != 'I' 
          +         || header.id[2] != 'F' 
          +         || header.id[3] != 'F' ) { 
          +        fprintf(stderr,"ERROR: Not wav format\n"); 
          +        exit(1); 
               }
           
          -    fprintf(stderr,"wav format\n");
          +    fprintf(stderr,"wav format\n");
           
          -    // read data
          -    long sum=0;
          -    short value=0;
          -    while( fread(&value,sizeof(value),1,wav) ) {
          -        // fprintf(stderr,"%d\n", value);
          -        if (value<0) { value=-value; }
          +    // read data
          +    long sum=0;
          +    short value=0;
          +    while( fread(&value,sizeof(value),1,wav) ) {
          +        // fprintf(stderr,"%d\n", value);
          +        if (value<0) { value=-value; }
                   sum += value;
               }
          -    printf("%ld\n",sum);
          -    exit(0);
          +    printf("%ld\n",sum);
          +    exit(0);
           }
           
          -

          Bien entendu ce code n’est qu’un hack. +

          Bien entendu ce code n’est qu’un hack. Mais on voit bien comment on peut facilement améliorer ce code, ajouter des cas possibles par exemple. Comme je dis souvent : le bon outil pour la bonne tâche. On voit en effet que pour cette tâche C est bien supérieur à Ruby par exemple.

          -

          _màj : pour des raisons de compatibilité (machines 64 bits) j’ai utilisé int16_t au lieu de short et int au lieu de int.

          +

          _màj : pour des raisons de compatibilité (machines 64 bits) j’ai utilisé int16_t au lieu de short et int au lieu de int.

          -

          Je serai curieux de savoir s’il existe un manière plus propre en Ruby que je ne connais pas. -Certainement qu’en Python ça doit être la cas.

          +

          Je serai curieux de savoir s’il existe un manière plus propre en Ruby que je ne connais pas. +Certainement qu’en Python ça doit être la cas.

          Màj (2) : après toutes les remarques concernant la portabilité. -J’ai fait une nouvelle version qui devrait être plus portable. +J’ai fait une nouvelle version qui devrait être plus portable. Elle fait aussi plus de test pour vérifier le fichier. -Cependant j’utilise une assertion spécifique à gcc pour être certain que la structure de donnée n’ai pas de “trou” :

          +Cependant j’utilise une assertion spécifique à gcc pour être certain que la structure de donnée n’ai pas de “trou” :

           __attribute__((__packed__))
           
          -

          Le nouveau code n’utilise pas mmap et devrait être plus compatible.
          +

          Le nouveau code n’utilise pas mmap et devrait être plus compatible.
          Voici le dernier résultat :

          @@ -219,111 +219,111 @@ Voici le dernier résultat :

          -#include <stdio.h>
          -#include <stdlib.h>
          -#include <string.h> // for memcmp
          -#include <stdint.h> // for int16_t and int32_t
          +#include <stdio.h>
          +#include <stdlib.h>
          +#include <string.h> // for memcmp
          +#include <stdint.h> // for int16_t and int32_t
           
          -struct wavfile
          +struct wavfile
           {
          -    char    id[4];          // should always contain "RIFF"
          -    int32_t totallength;    // total file length minus 8
          -    char    wavefmt[8];     // should be "WAVEfmt "
          -    int32_t format;         // 16 for PCM format
          -    int16_t pcm;            // 1 for PCM format
          -    int16_t channels;       // channels
          -    int32_t frequency;      // sampling frequency
          -    int32_t bytes_per_second;
          -    int16_t bytes_by_capture;
          -    int16_t bits_per_sample;
          -    char    data[4];        // should always contain "data"
          -    int32_t bytes_in_data;
          +    char    id[4];          // should always contain "RIFF"
          +    int32_t totallength;    // total file length minus 8
          +    char    wavefmt[8];     // should be "WAVEfmt "
          +    int32_t format;         // 16 for PCM format
          +    int16_t pcm;            // 1 for PCM format
          +    int16_t channels;       // channels
          +    int32_t frequency;      // sampling frequency
          +    int32_t bytes_per_second;
          +    int16_t bytes_by_capture;
          +    int16_t bits_per_sample;
          +    char    data[4];        // should always contain "data"
          +    int32_t bytes_in_data;
           } __attribute__((__packed__));
           
          -int is_big_endian(void) {
          -    union {
          -        uint32_t i;
          -        char c[4];
          -    } bint = {0x01000000};
          -    return bint.c[0]==1;
          +int is_big_endian(void) {
          +    union {
          +        uint32_t i;
          +        char c[4];
          +    } bint = {0x01000000};
          +    return bint.c[0]==1;
           }
           
          -int main(int argc, char *argv[]) {
          -    char *filename=argv[1];
          -    FILE *wav = fopen(filename,"rb");
          -    struct wavfile header;
          +int main(int argc, char *argv[]) {
          +    char *filename=argv[1];
          +    FILE *wav = fopen(filename,"rb");
          +    struct wavfile header;
           
          -    if ( wav == NULL ) {
          -        fprintf(stderr,"Can't open input file %s\n", filename);
          -        exit(1);
          +    if ( wav == NULL ) {
          +        fprintf(stderr,"Can't open input file %s\n", filename);
          +        exit(1);
               }
           
           
          -    // read header
          -    if ( fread(&header,sizeof(header),1,wav) < 1 ) {
          -        fprintf(stderr,"Can't read input file header %s\n", filename);
          -        exit(1);
          +    // read header
          +    if ( fread(&header,sizeof(header),1,wav) < 1 ) {
          +        fprintf(stderr,"Can't read input file header %s\n", filename);
          +        exit(1);
               }
           
          -    // if wav file isn't the same endianness than the current environment
          -    // we quit
          -    if ( is_big_endian() ) {
          -        if (   memcmp( header.id,"RIFX", 4) != 0 ) {
          -            fprintf(stderr,"ERROR: %s is not a big endian wav file\n", filename); 
          -            exit(1);
          +    // if wav file isn't the same endianness than the current environment
          +    // we quit
          +    if ( is_big_endian() ) {
          +        if (   memcmp( header.id,"RIFX", 4) != 0 ) {
          +            fprintf(stderr,"ERROR: %s is not a big endian wav file\n", filename); 
          +            exit(1);
                   }
          -    } else {
          -        if (   memcmp( header.id,"RIFF", 4) != 0 ) {
          -            fprintf(stderr,"ERROR: %s is not a little endian wav file\n", filename); 
          -            exit(1);
          +    } else {
          +        if (   memcmp( header.id,"RIFF", 4) != 0 ) {
          +            fprintf(stderr,"ERROR: %s is not a little endian wav file\n", filename); 
          +            exit(1);
                   }
               }
           
          -    if (   memcmp( header.wavefmt, "WAVEfmt ", 8) != 0 
          -        || memcmp( header.data, "data", 4) != 0 
          +    if (   memcmp( header.wavefmt, "WAVEfmt ", 8) != 0 
          +        || memcmp( header.data, "data", 4) != 0 
                       ) {
          -        fprintf(stderr,"ERROR: Not wav format\n"); 
          -        exit(1); 
          +        fprintf(stderr,"ERROR: Not wav format\n"); 
          +        exit(1); 
               }
          -    if (header.format != 16) {
          -        fprintf(stderr,"\nERROR: not 16 bit wav format.");
          -        exit(1);
          +    if (header.format != 16) {
          +        fprintf(stderr,"\nERROR: not 16 bit wav format.");
          +        exit(1);
               }
          -    fprintf(stderr,"format: %d bits", header.format);
          -    if (header.format == 16) {
          -        fprintf(stderr,", PCM");
          -    } else {
          -        fprintf(stderr,", not PCM (%d)", header.format);
          +    fprintf(stderr,"format: %d bits", header.format);
          +    if (header.format == 16) {
          +        fprintf(stderr,", PCM");
          +    } else {
          +        fprintf(stderr,", not PCM (%d)", header.format);
               }
          -    if (header.pcm == 1) {
          -        fprintf(stderr, " uncompressed" );
          -    } else {
          -        fprintf(stderr, " compressed" );
          +    if (header.pcm == 1) {
          +        fprintf(stderr, " uncompressed" );
          +    } else {
          +        fprintf(stderr, " compressed" );
               }
          -    fprintf(stderr,", channel %d", header.pcm);
          -    fprintf(stderr,", freq %d", header.frequency );
          -    fprintf(stderr,", %d bytes per sec", header.bytes_per_second );
          -    fprintf(stderr,", %d bytes by capture", header.bytes_by_capture );
          -    fprintf(stderr,", %d bits per sample", header.bytes_by_capture );
          -    fprintf(stderr,"\n" );
          +    fprintf(stderr,", channel %d", header.pcm);
          +    fprintf(stderr,", freq %d", header.frequency );
          +    fprintf(stderr,", %d bytes per sec", header.bytes_per_second );
          +    fprintf(stderr,", %d bytes by capture", header.bytes_by_capture );
          +    fprintf(stderr,", %d bits per sample", header.bytes_by_capture );
          +    fprintf(stderr,"\n" );
           
          -    if ( memcmp( header.data, "data", 4) != 0 ) { 
          -        fprintf(stderr,"ERROR: Prrroblem?\n"); 
          -        exit(1); 
          +    if ( memcmp( header.data, "data", 4) != 0 ) { 
          +        fprintf(stderr,"ERROR: Prrroblem?\n"); 
          +        exit(1); 
               }
          -    fprintf(stderr,"wav format\n");
          +    fprintf(stderr,"wav format\n");
           
          -    // read data
          -    long long sum=0;
          -    int16_t value;
          -    int i=0;
          -    fprintf(stderr,"---\n", value);
          -    while( fread(&value,sizeof(value),1,wav) ) {
          -        if (value<0) { value=-value; }
          +    // read data
          +    long long sum=0;
          +    int16_t value;
          +    int i=0;
          +    fprintf(stderr,"---\n", value);
          +    while( fread(&value,sizeof(value),1,wav) ) {
          +        if (value<0) { value=-value; }
                   sum += value;
               }
          -    printf("%lld\n",sum);
          -    exit(0);
          +    printf("%lld\n",sum);
          +    exit(0);
           }
           
          diff --git a/output/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html b/output/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html index c4d5f157b..a33c80f32 100644 --- a/output/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html +++ b/output/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/index.html @@ -58,18 +58,18 @@
          -

          tlàl : J’ai fait un système simple de macros pour mon blog. Par exemple, il me suffit d’écrire %latex et ça affiche LaTeX.

          +

          tlàl : J’ai fait un système simple de macros pour mon blog. Par exemple, il me suffit d’écrire %latex et ça affiche LaTeX.

          -

          J’ai ajouter un système de macro pour mon système de blog. -Lorsqu’on est habitué à LaTeX et que l’on commence à écrire des articles +

          J’ai ajouter un système de macro pour mon système de blog. +Lorsqu’on est habitué à LaTeX et que l’on commence à écrire des articles un peu conséquent avec des notations mathématiques, -les macros deviennent vite quelque chose d’indispensable.

          +les macros deviennent vite quelque chose d’indispensable.

          -

          Dans l’entête de mes fichiers j’écris simplement:

          +

          Dans l’entête de mes fichiers j’écris simplement:

           macros:
          @@ -80,8 +80,8 @@ les macros deviennent vite quelque chose d’indispensable.

          Puis dans le corps ça va remplacer :

            -
          • %test par This is a macro test ;
          • -
          • et %latex par LaTeX
          • +
          • %test par This is a macro test ;
          • +
          • et %latex par LaTeX

          Le code est assez simple. diff --git a/output/Scratch/fr/blog/2011-01-03-Happy-New-Year/index.html b/output/Scratch/fr/blog/2011-01-03-Happy-New-Year/index.html index 934bc7234..680cd1e81 100644 --- a/output/Scratch/fr/blog/2011-01-03-Happy-New-Year/index.html +++ b/output/Scratch/fr/blog/2011-01-03-Happy-New-Year/index.html @@ -54,15 +54,15 @@

          Bonne et heureuse année !

          -

          J’étais très occupé ces derniers mois. +

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

          -

          J’ai fait un outil qui permet d’écrire des livre en utilisant une syntaxe proche de markdown. -C’est un markdown avec des macros (essentiel pour les textes longs). +

          J’ai fait un outil qui permet d’écrire des livre en utilisant une syntaxe proche de markdown. +C’est un markdown avec des macros (essentiel pour les textes longs). De plus le système gère la génération de pages HTML ainsi que du PDF engendré avec du XeLaTeX. -Je n’en ai pas encore terminé avec ça. Mais si je tarde trop, je communiquerai lorsque j’aurai fini le minimum.

          +Je n’en ai pas encore terminé avec ça. Mais si je tarde trop, je communiquerai lorsque j’aurai fini le minimum.

          -

          J’ai écrit un framework MVC pour application javascript simple mais néanmoins très rapide.

          +

          J’ai écrit un framework MVC pour application javascript simple mais néanmoins très rapide.

          Meilleurs vœux à tous !

          diff --git a/output/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html b/output/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html index c5d6ddce7..f571853ec 100644 --- a/output/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html +++ b/output/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/index.html @@ -60,9 +60,9 @@
          -

          Mise à jour : Je pense que je vais finallement changer d’avis. +

          Mise à jour : Je pense que je vais finallement changer d’avis. Pourquoi ? -Tout d’abord, je viens de découvrir un convertisseur javascript vers coffeescript, ensuite Denis Knauf m’a laissé un commentaire et m’a appris l’existence d’une fonction CoffeeScript.eval. De plus, il faut voir CoffeeScript comme javascript avec une syntaxe similaire à Ruby et pas comme un langage similaire à Ruby.

          +Tout d’abord, je viens de découvrir un convertisseur javascript vers coffeescript, ensuite Denis Knauf m’a laissé un commentaire et m’a appris l’existence d’une fonction CoffeeScript.eval. De plus, il faut voir CoffeeScript comme javascript avec une syntaxe similaire à Ruby et pas comme un langage similaire à Ruby.

          @@ -72,14 +72,14 @@ Tout d’abord, je viens de découvrir un convertisseur javascript vers coff
          -

          tlàl : Qu’est-ce qui n’allait pas avec Coffeescript? La meta-programmation, il faut le “vendre” aux autres, une nouvelle étape de compilation intermédiaire sans fournir les avantages de Cappuccino, la sensation que c’est un peu instable.

          +

          tlàl : Qu’est-ce qui n’allait pas avec Coffeescript? La meta-programmation, il faut le “vendre” aux autres, une nouvelle étape de compilation intermédiaire sans fournir les avantages de Cappuccino, la sensation que c’est un peu instable.

          Le commentaire le mieux classé de la question suivante posée sur HackerNews mentionnait CoffeeScript. -Récemment j’ai beaucoup programmé en javascript. +Récemment j’ai beaucoup programmé en javascript. Après avoir essayé Sroutcore, Cappuccino, @@ -87,29 +87,29 @@ Après avoir essayé javascriptMVC, Je me suis décidé à créer mon propre framework MVC minimal pour client javascript.1

          -

          Je me suis battu avec l’horrible syntaxe de javascript. C’était comme revenir des années dans le passé :

          +

          Je me suis battu avec l’horrible syntaxe de javascript. C’était comme revenir des années dans le passé :

          • une syntaxe à la Java très verbeuse ;
          • une syntaxe follement verbeuse et étrange pour la programmation orientée objet ;
          • -
          • pas de manière naturelle de se référer à l’instance d’une classe ;
          • -
          • etc…
          • +
          • pas de manière naturelle de se référer à l’instance d’une classe ;
          • +
          • etc…
          -

          J’étais tellement ennuyé par tous ces point qu’il était arrivé un moment où je commençais à vouloir faire mon propre CoffeeScript.

          +

          J’étais tellement ennuyé par tous ces point qu’il était arrivé un moment où je commençais à vouloir faire mon propre CoffeeScript.

          -

          J’ai fini une première version de mon framework MVC en javascript et j’ai appris l’existence de CoffeeScript. Merci à git, j’ai immédiatement créé une nouvelle branche dans le seul but d’essayer CoffeeScript.

          +

          J’ai fini une première version de mon framework MVC en javascript et j’ai appris l’existence de CoffeeScript. Merci à git, j’ai immédiatement créé une nouvelle branche dans le seul but d’essayer CoffeeScript.

          Voici mon expérience :

            -
          1. J’ai dû installer node.js et utiliser npm simplement pour utiliser CoffeeScript. Ce n’était pas très difficile, mais pas aussi facile que ce que j’aurai aimé.
          2. +
          3. J’ai dû installer node.js et utiliser npm simplement pour utiliser CoffeeScript. Ce n’était pas très difficile, mais pas aussi facile que ce que j’aurai aimé.
          4. Les fichier javascript existants ne sont pas compatible avec coffee.
          5. -
          6. Il n’y a pas script pour aider à transformer les anciens fichiers javascripts en fichier coffee. Du coups j’ai dû faire ça manuellement. +
          7. Il n’y a pas script pour aider à transformer les anciens fichiers javascripts en fichier coffee. Du coups j’ai dû faire ça manuellement. Merci à vim, il ne fut pas très difficile de transformer 90% des fichiers avec des expressions régulières. - L’option --watch de coffee était très utile pour debugger cette transformation. - Cependant, il m’a fallu écrire mon propre script pour que tous mes fichiers soient watchés dans tous les sous-répertoires.
          8. -
          9. Quelque chose à laquelle je n’avais pas pensé. J’ai fait un peu de meta-programmation en javascript en utilisant eval. Mais pour que celà fonctionne correctement, il faut que la chaîne de caractère que je passe à eval soit codée en javascript et pas en coffee. C’est un peu comme écrire dans deux langages différents au même endroit. Ça ne me parraissait vraiment pas agréable.
          10. + L’option --watch de coffee était très utile pour debugger cette transformation. + Cependant, il m’a fallu écrire mon propre script pour que tous mes fichiers soient watchés dans tous les sous-répertoires. +
          11. Quelque chose à laquelle je n’avais pas pensé. J’ai fait un peu de meta-programmation en javascript en utilisant eval. Mais pour que celà fonctionne correctement, il faut que la chaîne de caractère que je passe à eval soit codée en javascript et pas en coffee. C’est un peu comme écrire dans deux langages différents au même endroit. Ça ne me parraissait vraiment pas agréable.

          Conclusion

          @@ -118,42 +118,42 @@ Je me suis décidé à créer mon propre framework MVC minimal pour client javas
          • Code plus lisible : CoffeeScript résoud la majorité des problèmes de syntaxes de javascript
          • -
          • Concision : j’ai gagné 14% de lignes, 22% de mots et 14% de caractères.
          • +
          • Concision : j’ai gagné 14% de lignes, 22% de mots et 14% de caractères.

          Inconvénients :

            -
          • Ajout d’une nouvelle étape de compilation avant de pouvoir vérifier le comportement de mon site
          • -
          • Facilité d’utilisation : il m’a fallu créer un script pour gérer la génératio automatique des fichiers
          • +
          • Ajout d’une nouvelle étape de compilation avant de pouvoir vérifier le comportement de mon site
          • +
          • Facilité d’utilisation : il m’a fallu créer un script pour gérer la génératio automatique des fichiers
          • Il faut apprendre un autre langage proche de ruby
          • La meta-programmation devient une expérience désagréable
          • Je dois convaincre les personnes travaillant avec moi :
              -
            • d’installer node.js, npm et CoffeeScript ;
            • +
            • d’installer node.js, npm et CoffeeScript ;
            • de se souvenir de lancer un script à chaque session de codage ;
            • -
            • d’apprendre un autre language proche de ruby.
            • +
            • d’apprendre un autre language proche de ruby.

          Les deux derniers points étant de mon point de vue les plus problématiques.

          -

          Mais même si j’avais à travailler seul, je n’utiliserai certainement pas CoffeeScript. -Il s’agit d’un tier dont la moindre mise à jour pourrait rendre mon code inutilisable. -Cette situation m’est déjà arrivée plusieurs fois et c’est très désagrable. +

          Mais même si j’avais à travailler seul, je n’utiliserai certainement pas CoffeeScript. +Il s’agit d’un tier dont la moindre mise à jour pourrait rendre mon code inutilisable. +Cette situation m’est déjà arrivée plusieurs fois et c’est très désagrable. Beaucoup plus que coder avec une mauvaise syntaxe.

          Digression

          Je suis attristé. -J’espérais tant pouvoir programmer Javascript avec une touche de Ruby. -En fin de compte, cette solution n’est pas pour moi. -Je vais devoir utiliser l’horrible syntaxe javascript pour l’instant. -À la limite j’aurai préféré un script Ruby2Js par exemple2. -Mais il me semble que ça serait un travail très difficile rien que pour simuler l’accès à la classe courante.

          +J’espérais tant pouvoir programmer Javascript avec une touche de Ruby. +En fin de compte, cette solution n’est pas pour moi. +Je vais devoir utiliser l’horrible syntaxe javascript pour l’instant. +À la limite j’aurai préféré un script Ruby2Js par exemple2. +Mais il me semble que ça serait un travail très difficile rien que pour simuler l’accès à la classe courante.

          -

          Typiquement @x est transformé en this.x. Mais le code suivant ne fait pas ce que j’attendrai de lui.

          +

          Typiquement @x est transformé en this.x. Mais le code suivant ne fait pas ce que j’attendrai de lui.

           -> 
          @@ -183,10 +183,10 @@ Mais il me semble que ça serait un travail très difficile rien que pour simule
           
          1. -

            Je sais que ce n’est certainement ni la meilleure ni la plus productive des décisions. Mais j’aime bien fabriquer les choses pour savoir comment tout fonctionne dans le détail.

            +

            Je sais que ce n’est certainement ni la meilleure ni la plus productive des décisions. Mais j’aime bien fabriquer les choses pour savoir comment tout fonctionne dans le détail.

          2. -

            Je sais qu’il existe un projet rb2js, mais il ne résoud pas le problème dont je parle.

            +

            Je sais qu’il existe un projet rb2js, mais il ne résoud pas le problème dont je parle.

          diff --git a/output/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/index.html b/output/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/index.html index 2ea7abaa9..1e3c12f72 100644 --- a/output/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/index.html +++ b/output/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/index.html @@ -54,7 +54,7 @@

          Title image

          -

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

          +

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

          diff --git a/output/Scratch/fr/blog/A-more-convenient-diff/index.html b/output/Scratch/fr/blog/A-more-convenient-diff/index.html index c4b83f718..80a535a27 100644 --- a/output/Scratch/fr/blog/A-more-convenient-diff/index.html +++ b/output/Scratch/fr/blog/A-more-convenient-diff/index.html @@ -54,11 +54,11 @@
          -

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

          +

          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.

          +

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

          -

          Voici le script que j’utilise lorsque je veux avoir un diff à la git.

          +

          Voici le script que j’utilise lorsque je veux avoir un diff à la git.

          diff --git a/output/Scratch/fr/blog/Haskell-Mandelbrot/index.html b/output/Scratch/fr/blog/Haskell-Mandelbrot/index.html
          index 181cd1a0e..57fd6a555 100644
          --- a/output/Scratch/fr/blog/Haskell-Mandelbrot/index.html
          +++ b/output/Scratch/fr/blog/Haskell-Mandelbrot/index.html
          @@ -54,7 +54,7 @@
                       
          -

          Voici le code “obfusqué” :

          +

          Voici le code “obfusqué” :

          diff --git a/output/Scratch/fr/blog/Higher-order-function-in-zsh/index.html b/output/Scratch/fr/blog/Higher-order-function-in-zsh/index.html
          index ce7218b29..5592e7fa9 100644
          --- a/output/Scratch/fr/blog/Higher-order-function-in-zsh/index.html
          +++ b/output/Scratch/fr/blog/Higher-order-function-in-zsh/index.html
          @@ -60,16 +60,16 @@
           
          -

          tlàl : des fonctions d’ordres supérieurs en zsh.

          +

          tlàl : des fonctions d’ordres supérieurs en zsh.

          -

          Tout d’abord, pourquoi c’est important d’avoir ces fonctions. -Plus je programmais avec zsh plus j’essayais d’avoir un style fonctionnel.

          +

          Tout d’abord, pourquoi c’est important d’avoir ces fonctions. +Plus je programmais avec zsh plus j’essayais d’avoir un style fonctionnel.

          -

          Le minimum pour pouvoir avoir du code plus lisible c’est de posséder les fonctions map, filter et fold.

          +

          Le minimum pour pouvoir avoir du code plus lisible c’est de posséder les fonctions map, filter et fold.

          Voici pourquoi avec une comparaison. Commençons par un programme qui converti tous les gif en png dans plusieurs répertoires projets contenant tous des répertoires resources. @@ -91,9 +91,9 @@ Avant :

            -
          • Le (/N) permet de sélectionner seulement les répertoires sans casser la boucle s’il n’y a pas de “match”.
          • -
          • Le (.N) permet de sélection seulement les fichiers, aussi sans tout arréter s’il ne trouve rien.
          • -
          • Le :t signfie “tail” ; si toto=/path/to/file.ext alors ${toto:t}=file.ext.
          • +
          • Le (/N) permet de sélectionner seulement les répertoires sans casser la boucle s’il n’y a pas de “match”.
          • +
          • Le (.N) permet de sélection seulement les fichiers, aussi sans tout arréter s’il ne trouve rien.
          • +
          • Le :t signfie “tail” ; si toto=/path/to/file.ext alors ${toto:t}=file.ext.

          Après

          @@ -107,8 +107,8 @@ 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.

          +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.

          @@ -147,11 +147,11 @@ map verify_file_name $( filter

          La première version peu paraître plus facile à lire. -Mais la seconde est plus bien supérieure en terme d’architecture. -Je ne veux pas discuster ici pourquoi c’est mieux. -Je vous demande simplement de me croire quand je dis que l’approche fonctionnelle est supérieure.

          +Mais la seconde est plus bien supérieure en terme d’architecture. +Je ne veux pas discuster ici pourquoi c’est mieux. +Je vous demande simplement de me croire quand je dis que l’approche fonctionnelle est supérieure.

          -

          Actuellement il me manque une fonction lambda, si quelqu’un à une idée elle serait la bienvenue. +

          Actuellement il me manque une fonction lambda, si quelqu’un à une idée elle serait la bienvenue. Je ne sais pas encore comment créer facilement des fonctions anonymes.

          Voici le code source :

          diff --git a/output/Scratch/fr/blog/Learn-Vim-Progressively/index.html b/output/Scratch/fr/blog/Learn-Vim-Progressively/index.html index 039c1de6a..c4208629c 100644 --- a/output/Scratch/fr/blog/Learn-Vim-Progressively/index.html +++ b/output/Scratch/fr/blog/Learn-Vim-Progressively/index.html @@ -66,7 +66,7 @@
          -

          Vim ou l’éditeur qui vallait 3 milliards :

          +

          Vim ou l’éditeur qui vallait 3 milliards :

          Meilleur, plus fort, plus rapide.

          @@ -76,7 +76,7 @@ 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 :

          +

          Je vous conseille de l’apprendre en 4 étapes :

          1. La survie
          2. @@ -92,10 +92,10 @@ 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. +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

            +

            1er Niveau – Survivre

            1. Installez vim
            2. @@ -103,13 +103,13 @@ En fait ça sera certainement plus 2 semaines que 3 jours.

            3. NE TOUCHEZ A RIEN! Lisez
            -

            Dans un éditeur normal, il suffit de taper sur une touche du clavier et la lettre s’affiche à l’écran. +

            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. +

            Voilà, c’est magique. Vous pouvez tapez comme dans un éditeur standard. Pour repasser en mode Normal tapez sur la touche Echap.

            @@ -128,30 +128,30 @@ Voici les commandes de survie (toutes en mode Normal) :

            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.
            • +
            • 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. +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.

          +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é.

          +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>.
          • +
          • 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

          +

          2ème Niveau – Se sentir à son aise

          Vous connaissez les commandes de survie. Passons à des commandes pour être un peu plus à notre aise. @@ -159,7 +159,7 @@ Je vous suggère :

          1. -

            Les variantes de l’insertion

            +

            Les variantes de l’insertion

              @@ -189,7 +189,7 @@ Je vous suggère :

              • 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
              • +
              • yy → Copier la ligne courante. C’est plus simple et équivalent à ddP
              @@ -210,9 +210,9 @@ Je vous suggère :

              • :e <path/to/file> → Ouvrir.
              • :w → Sauvegarder.
              • -
              • :saveas <path/to/file> → Sauvegarder sous …
              • +
              • :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.
              • +
              • :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).
            @@ -220,13 +220,13 @@ Je vous suggère :

          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.

          +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.

          +

          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. +

          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é”.

          +Vim est la contraction de “vi improved”, ou en Français, “vi amélioré”.

          Meilleur

          @@ -242,10 +242,10 @@ Vim est la contraction de “vi improved”, ou en Français, “vi
          • 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 ?
          • +
          • 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 ?
          @@ -269,7 +269,7 @@ Ne sautez pas cette section.

          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.

          +Si vous voulez considérer des MOTS alors il suffit d’utiliser les majuscules.

          1. W → aller au début du MOT suivant
          2. @@ -290,15 +290,15 @@ Si vous voulez considérer des MOTS alors il suffit d’utiliser les majuscu
          -

          Croyez moi, ces trois dernières commandes valent de l’or. +

          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. +

          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. +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>

          @@ -307,21 +307,21 @@ De façon générale :

          • 0 → Aller au début de la ligne,
          • -
          • y → copie à partir d’ici,
          • -
          • $ → jusqu’à la fin de cette 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”.

          +

          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…

          +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

          +

          4ième Niveau – Les super pouvoirs de Vim

          -

          Jusqu’ici vous avez appris les commandes les plus courantes. +

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

          +Celles que je n’ai retrouvé que dans vim (ou presque).

          Déplacement sur la ligne : 0 ^ $ g_ f F t T , ;

          @@ -331,7 +331,7 @@ Celles que je n’ai retrouvé que dans vim (ou presque).

        27. ^ → aller au premier caractère de la ligne
        28. $ → aller à la dernière colonne de la ligne
        29. g_ → aller au dernier caractère de la ligne
        30. -
        31. fa → vous amène à la prochaine occurrence de a sur la ligne courante. , (resp. ;) recherche l’occurrence suivante (resp. précédente).
        32. +
        33. fa → vous amène à la prochaine occurrence de a sur la ligne courante. , (resp. ;) recherche l’occurrence suivante (resp. précédente).
        34. t, → vous amène juste avant le ,.
        35. 3fa → recherche la 3ième occurrence de a.
        36. F et T → comme f et t mais en arrière. @@ -339,16 +339,16 @@ Celles que je n’ai retrouvé que dans vim (ou presque).

        37. -

          Un truc pratique : dt" → supprime tout jusqu’au prochain ".

          +

          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”. +

          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… +

          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")).

          @@ -374,23 +374,23 @@ Typiquement: ^<C-V><C-d>I-- [ESC]

          • ^ → aller en début de ligne
          • <C-V> → Commencer la sélection du bloc
          • -
          • <C-d> → se déplacer vers le bas (pourrait être jjj ou % etc…)
          • +
          • <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.

          +

          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. +

          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. +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.

          @@ -402,14 +402,14 @@ Sur une ligne contenant seulement un 1 tapez :

          qaYp<C-a>q

            -
          • qa → début de l’enregistrement.
          • +
          • qa → début de l’enregistrement.
          • Yp → copier cette ligne.
          • <C-a> → incrémente le nombre.
          • -
          • q → arrête d’enregistrer.
          • +
          • q → arrête d’enregistrer.
        38. @a → écrit un 2 sous le 1.
        39. -
        40. Écrivez 100@@. Cela va créer une liste de nombre croissants jusqu’à 103.
        41. +
        42. Écrivez 100@@. Cela va créer une liste de nombre croissants jusqu’à 103.
        43. @@ -433,7 +433,7 @@ Et une fois la sélection visuelle faite vous pouvez par exemple:

          • <C-v>
          • -
          • aller jusqu’à la ligne désirée (jjj ou <C-d> ou /pattern ou % etc…)
          • +
          • aller jusqu’à la ligne désirée (jjj ou <C-d> ou /pattern ou % etc…)
          • $ aller à la fin
          • A, écrire le texte, Echap.
          @@ -449,7 +449,7 @@ 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><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
          @@ -459,17 +459,17 @@ Voici les commandes principales :

          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.

          +

          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. +

          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. +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. +

          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.

          analyser

            +

            analyser

            expressions régulières

              +

            expressions régulières

            Mac

            mac

            Mac

            macros

            mathématiques

              +

            mathématiques

            Réalité alternée

              +

            Réalité alternée

            securité

              +

            securité

            théorie

              +

            théorie

            • 24 diff --git a/output/Scratch/fr/blog/mvc/index.html b/output/Scratch/fr/blog/mvc/index.html index 9df4d51ce..e92086d2a 100644 --- a/output/Scratch/fr/blog/mvc/index.html +++ b/output/Scratch/fr/blog/mvc/index.html @@ -54,17 +54,17 @@

              Why This article and for whom?

              -

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

              +

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

              -

              I have difficulties to obey some principle don’t know why I should use it. And something better than the:

              +

              I have difficulties to obey some principle don’t know why I should use it. And something better than the:

              -

              “Smarter people than you decided you have to do so”

              +

              “Smarter people than you decided you have to do so”

              This article is for people who like me want to understand the real motivation of using an MVC architecture and which advantage it gives you.

              -

              Let’s start making a project from scratch pretending we don’t know anything about the MVC architecture. Then let see how we’ll naturally derive to an MVC architecture.

              +

              Let’s start making a project from scratch pretending we don’t know anything about the MVC architecture. Then let see how we’ll naturally derive to an MVC architecture.

              → Next

              diff --git a/output/Scratch/fr/blog/programming-language-experience/index.html b/output/Scratch/fr/blog/programming-language-experience/index.html index 9483eda2e..118f4d475 100644 --- a/output/Scratch/fr/blog/programming-language-experience/index.html +++ b/output/Scratch/fr/blog/programming-language-experience/index.html @@ -59,7 +59,7 @@
              -tlàl : Mon avis court et hautement subjectif concernant les différents languages de programmations que j’ai utilisé. +tlàl : Mon avis court et hautement subjectif concernant les différents languages de programmations que j’ai utilisé.
              @@ -72,13 +72,13 @@ Je devais avoir 10-11 ans. Sous MO5, Amstrad CPC 6128 et même Atari STe. Le langage des GOTOs. -Je suis empleint de nostalgie rien que d’y penser. -C’est à peu prêt le seul intérêt de ce langage.

              +Je suis empleint de nostalgie rien que d’y penser. +C’est à peu prêt le seul intérêt de ce langage.

              -

              Aujourd’hui ce langage est tombé en désuétude. -Ce n’est ni un bon langage pour apprendre, ni un bon langage pour faire de vrai programmes. +

              Aujourd’hui ce langage est tombé en désuétude. +Ce n’est ni un bon langage pour apprendre, ni un bon langage pour faire de vrai programmes. Même si quelques années plus tard, je me remettais à programmer dans un basic avec un compilateur qui pourrait lui redonner vie. -Je m’en était servi pour faire un livre dont vous êtes le héro :-).

              +Je m’en était servi pour faire un livre dont vous êtes le héro :-).

               READY
              @@ -87,32 +87,32 @@ READY
               RUN
               
              -

              Je m’en souviens aussi pour avoir copier des codes de jeux vidéo à partir de magasines. +

              Je m’en souviens aussi pour avoir copier des codes de jeux vidéo à partir de magasines. La plupart des lignes ressemblaient à

               3110 DATA FA,01,FF,FF,FF,FF,00,23,22,43,DA,DE,EE,FF,FF,FF,00,03,4A,F2
               
              -

              Quel plaisir c’était !

              +

              Quel plaisir c’était !

              Dragon fractal -Toujours lors que j’avais 10 ans, on pouvait faire de petits programmes sympathiques.

              +Toujours lors que j’avais 10 ans, on pouvait faire de petits programmes sympathiques.

              -

              Je me souviens que lors du chargement de l’application logo on avait droit à de la musique de Bach.

              +

              Je me souviens que lors du chargement de l’application logo on avait droit à de la musique de Bach.

              Oui, il fallait charger le programme en mémoire avec une cassette. -Et elle ne faisait pas les ‘Krrrkrr csssss krrrr’.

              +Et elle ne faisait pas les ‘Krrrkrr csssss krrrr’.

              -

              Je l’avais utilisé sans les boucles. -Des années plus tard, je le réutiliser pour faire de l’initiation à l’informatique à mes étudiants de DEUG MIAS première année. -Il s’est en fait révélé très utile. -Grace à lui, faire des fractales se révèle être un jeu d’enfant, au sens litéral. +

              Je l’avais utilisé sans les boucles. +Des années plus tard, je le réutiliser pour faire de l’initiation à l’informatique à mes étudiants de DEUG MIAS première année. +Il s’est en fait révélé très utile. +Grace à lui, faire des fractales se révèle être un jeu d’enfant, au sens litéral. Je ne peux que conseiller ce langage pour apprendre à programmer et aussi pour le fun.

              -

              Voici un exemple de code et le résultat est la jolie fractale ‘dragon’.

              +

              Voici un exemple de code et le résultat est la jolie fractale ‘dragon’.

               HIDETURTLE
              @@ -143,11 +143,11 @@ dragon 6 3000
               
               

              Pascal

              -

              L’éternel numéro 2.

              +

              L’éternel numéro 2.

              -

              J’ai dû apprendre à programmer en Pascal aux alentour de 15 ans et je l’ai aussi réutiliser un peit peu en faculté. +

              J’ai dû apprendre à programmer en Pascal aux alentour de 15 ans et je l’ai aussi réutiliser un peit peu en faculté. Je dois avouer, que je le trouve inférieur au C en tous points. -J’ai fait pas mal de chose avec ça, comme des algorithmes de graphes, des algorithmes de tri, et même un peu d’intelligence artificielle comme des algorithmes génétiques. +J’ai fait pas mal de chose avec ça, comme des algorithmes de graphes, des algorithmes de tri, et même un peu d’intelligence artificielle comme des algorithmes génétiques. Mais je préfère largement le C.

              C

              @@ -166,34 +166,34 @@ Si vous voulez avoir du code de bonne qualité, alors apprendre le C est quasi-o En particulier, (la majorité du temps). Il y a une relation linéaire entre la taille du code en C et de son résultat compilé en assembleur.

              -

              Ça signifie qu’à chaque fois que vous écrivez une ligne de C, il ne va pas se passer de choses toutes bizarres comme lancer un algorithme qui va prendre deux plombes.

              +

              Ça signifie qu’à chaque fois que vous écrivez une ligne de C, il ne va pas se passer de choses toutes bizarres comme lancer un algorithme qui va prendre deux plombes.

              -

              Il est très proche de la machine tout en ayant une abstraction suffisante pour ne pas être “trop” désagréable.

              +

              Il est très proche de la machine tout en ayant une abstraction suffisante pour ne pas être “trop” désagréable.

              -

              J’ai fait beaucoup de choses avec. -Tous les algorithmes de tri, des algorithmes d’intelligence artificielle (résolution de SAT3), du système, du réseau etc… -Bref il est versatile, et on ne peut pas dire que l’on sait programmer si on ne s’est jamais mis à programmer sérieusement en C.

              +

              J’ai fait beaucoup de choses avec. +Tous les algorithmes de tri, des algorithmes d’intelligence artificielle (résolution de SAT3), du système, du réseau etc… +Bref il est versatile, et on ne peut pas dire que l’on sait programmer si on ne s’est jamais mis à programmer sérieusement en C.

              ADA

              Le langage super-propre.

              -

              J’avais bien aimé ADA, mais j’avoue que ça n’a duré que le temps d’un semestre de cours. -Peut-être qu’un jour je m’y remettrai. -Disons qu’il est assez vieux et qu’il a inspiré la plupart des concepts objets.

              +

              J’avais bien aimé ADA, mais j’avoue que ça n’a duré que le temps d’un semestre de cours. +Peut-être qu’un jour je m’y remettrai. +Disons qu’il est assez vieux et qu’il a inspiré la plupart des concepts objets.

              Les langages orientés objets

              -

              Bon, oui, le Pascal, le C, le Basic (fortran, Cobol et autres) étaient tous des langages impératifs, sans notion d’objets.

              +

              Bon, oui, le Pascal, le C, le Basic (fortran, Cobol et autres) étaient tous des langages impératifs, sans notion d’objets.

              -

              En gros, il n’y avait pas d’aide pour structurer votre code.

              +

              En gros, il n’y avait pas d’aide pour structurer votre code.

              -

              Alors, pour aider à limiter le nombre de bug, en particulier pour la création de très gros programmes, on s’est mis à réfléchir à la meilleure façon d’organiser du code d’ordinateur. +

              Alors, pour aider à limiter le nombre de bug, en particulier pour la création de très gros programmes, on s’est mis à réfléchir à la meilleure façon d’organiser du code d’ordinateur. À la fin, ça à donné la programmation orienté objet. Et donc les langages comme le C manquaient de système pour aider au développement orienté objet. -Attention, la programmaiton orienté objet n’est pas la panacée. Combien de programme utilisez-vous qui n’ont pas de bug ? +Attention, la programmaiton orienté objet n’est pas la panacée. Combien de programme utilisez-vous qui n’ont pas de bug ? Et ça ne convient pas à tous les type de problème. Mais pour faire une application banquaire, un système de gestion des stocks, des clients ou des archives. -C’est-à-dire un système d’information, c’est pas trop mal.

              +C’est-à-dire un système d’information, c’est pas trop mal.

              Donc les langages orientés objets se sont mis à fleurir.

              @@ -203,93 +203,93 @@ C’est-à-dire un système d’information, c’est pas trop mal.Le malpropre

              -

              Et oui l’industrie voulait un langage objet, mais elle n’était pas prête à mettre à la poubelle tout ses codes en C. +

              Et oui l’industrie voulait un langage objet, mais elle n’était pas prête à mettre à la poubelle tout ses codes en C. La solution, prendre C et lui rajouter une couche objet. -Le problème avec C++ c’est qu’il fait trop de choses. -L’héritage multiple, des templates, etc… -Bon, je l’ai quand même choisi pour faire le plus gros programme que j’ai jamais fais lors de ma thèse. -Et je dois avouer que l’expérience m’a plu. -Le seul reproche que j’ai à faire, c’est que la STL n’était pas aussi complète que l’on aurait pu l’espérer pour un détail. +Le problème avec C++ c’est qu’il fait trop de choses. +L’héritage multiple, des templates, etc… +Bon, je l’ai quand même choisi pour faire le plus gros programme que j’ai jamais fais lors de ma thèse. +Et je dois avouer que l’expérience m’a plu. +Le seul reproche que j’ai à faire, c’est que la STL n’était pas aussi complète que l’on aurait pu l’espérer pour un détail. On ne peut pas faire de String<T> pour autre chose que des char16. Du coup, mon alphabet était limité à 216 lettres. -Hors, pour certaines application, l’alphabet doit être gigantesque.

              +Hors, pour certaines application, l’alphabet doit être gigantesque.

              -

              En conclusion je dirai que C++ est un très bon langage si vous vous fixez à l’avance un sous ensemble de ses fonctionnalités.

              +

              En conclusion je dirai que C++ est un très bon langage si vous vous fixez à l’avance un sous ensemble de ses fonctionnalités.

              Eiffel

              Eiffel tower construction

              -

              Bon, ok c’est un très beau langage objet. +

              Bon, ok c’est un très beau langage objet. Bien plus propre que C++. -Mais, à moins que les choses aient changées, il n’est pas très populaire. -Derrière lui il n’a pas la communauté de C++. -Pour être franc, j’ai préféré travailler en C++. -J’ai menti à mes profs de l’époque pour leur faire plaisir. -Lorsqu’on viens du C, il est désagréable de changer ses habitudes.

              +Mais, à moins que les choses aient changées, il n’est pas très populaire. +Derrière lui il n’a pas la communauté de C++. +Pour être franc, j’ai préféré travailler en C++. +J’ai menti à mes profs de l’époque pour leur faire plaisir. +Lorsqu’on viens du C, il est désagréable de changer ses habitudes.

              Java

              Holy Grail from the Monty Python

              -

              On continue vers les langages objets. Alors, à une époque où j’en ai entendu parler, c’était le Graal !

              +

              On continue vers les langages objets. Alors, à une époque où j’en ai entendu parler, c’était le Graal !

              -

              La portabilité, votre programme marchera partout. Il était orienté objet. Incrusté à l’intérieur il y avait des concepts d’architecture qui empêchent de faire n’importe quoi… Sauf que.

              +

              La portabilité, votre programme marchera partout. Il était orienté objet. Incrusté à l’intérieur il y avait des concepts d’architecture qui empêchent de faire n’importe quoi… Sauf que.

              -

              Sauf qu’il est incroyablement verbeux. -Et que les limitations sont très désagréables si on sait ce que l’on fait.

              +

              Sauf qu’il est incroyablement verbeux. +Et que les limitations sont très désagréables si on sait ce que l’on fait.

              -

              Par exemple, il n’y a pas d’héritage multiple en Java. -Ce qui est en général un choix que je trouve cohérent s’il est bien appuyé par des systèmes qui compensent ce manque. +

              Par exemple, il n’y a pas d’héritage multiple en Java. +Ce qui est en général un choix que je trouve cohérent s’il est bien appuyé par des systèmes qui compensent ce manque. En java, il existe les interfaces. -Les interfaces permettent d’ajouter des méthodes à une classe. -En aucun cas on ne peut rajouter un attribut autrement qu’en héritant. -Cet état de fait m’a vraiment géné.

              +Les interfaces permettent d’ajouter des méthodes à une classe. +En aucun cas on ne peut rajouter un attribut autrement qu’en héritant. +Cet état de fait m’a vraiment géné.

              Typiquement je faisais une GUI en Java Swing. -J’avais créé mon propre système de notification entre objets. -Au début je considérais qu’un objet ne devait envoyer des notifications qu’à un seul objet. -Ô quelle erreur lorsque je réalisais qu’il fallait non plus gérer un seul objet mais parfois plusieurs. -Je changeais mon implémentation d’interface partout, conséquence, des copier/coller dans tous les sens pour mes classes. +J’avais créé mon propre système de notification entre objets. +Au début je considérais qu’un objet ne devait envoyer des notifications qu’à un seul objet. +Ô quelle erreur lorsque je réalisais qu’il fallait non plus gérer un seul objet mais parfois plusieurs. +Je changeais mon implémentation d’interface partout, conséquence, des copier/coller dans tous les sens pour mes classes. Les copier/coller qui sont justement un problème censé être évité par les langages orientés objets.

              De plus toujours pour ma GUI, je devais évidemment gérer des threads. -Hors, il m’a fallu faire mon propre système de gestion de threads pour éviter les locks, pour les notifications (ce thread à fini, etc…). -À l’époque j’utilisais Java 1.5. +Hors, il m’a fallu faire mon propre système de gestion de threads pour éviter les locks, pour les notifications (ce thread à fini, etc…). +À l’époque j’utilisais Java 1.5. Normallement ce problème devait être réglé sur Java 1.6. -J’espère que c’est le cas, mais avoir ce type de “feature” essentielle oubliée par le langage était assez grave.

              +J’espère que c’est le cas, mais avoir ce type de “feature” essentielle oubliée par le langage était assez grave.

              -

              De même, il a fallu attendre très longtemps avant d’avoir des boucles foreach qui rendent le code bien plus lisible.

              +

              De même, il a fallu attendre très longtemps avant d’avoir des boucles foreach qui rendent le code bien plus lisible.

              Bon, après cette expérience je déconseillerai Java. -La portabilité, n’est pas si intéressante que ce qu’on pourrait croire.

              +La portabilité, n’est pas si intéressante que ce qu’on pourrait croire.

              En ce qui concerne les GUI, portable signifie interface fonctionnelle mais médiocre sur toutes les plateformes. -Quelquesoit le système d’ailleurs (wxWidget, QT, etc…). -Donc, pour des applications à distribuer à des tiers, c’est à éviter.

              +Quelquesoit le système d’ailleurs (wxWidget, QT, etc…). +Donc, pour des applications à distribuer à des tiers, c’est à éviter.

              Le système de Java est très clos. Par contre il résoud un très bon problème. Il permet à des développeurs médiocres de travailler en groupe sans faire trop de mal. -Et un bon programmeur sera tout de même capable d’y faire des choses très intéressantes. -Veuillez noter que je n’ai pas dit que les programmeurs Java sont de mauvais programmeurs, ce n’est pas ce que je pense.

              +Et un bon programmeur sera tout de même capable d’y faire des choses très intéressantes. +Veuillez noter que je n’ai pas dit que les programmeurs Java sont de mauvais programmeurs, ce n’est pas ce que je pense.

              Objective-C

              Xcode Logo

              -

              Le langage que je n’ai appris et utilisé que pour faire des applications sur les plateformes d’Apple©. -J’ai appris Objective-C après Python. -Et je dois avouer que j’ai eu du mal à m’y mettre. -Je n’ai pas du tout aimé la syntaxe et pas mal d’autres détails. +

              Le langage que je n’ai appris et utilisé que pour faire des applications sur les plateformes d’Apple©. +J’ai appris Objective-C après Python. +Et je dois avouer que j’ai eu du mal à m’y mettre. +Je n’ai pas du tout aimé la syntaxe et pas mal d’autres détails. Mais ça fait parti de ces langages que plus on utilise, plus on aime. En réalité, il y a quelque chose dans ce langage qui fait que tout est bien pensé. -Mais surtout, ici, ce n’est pas le langage qui est la meilleure partie, c’est plutôt le framework Cocoa qui lui est le plus souvent associé qui est une merveille. +Mais surtout, ici, ce n’est pas le langage qui est la meilleure partie, c’est plutôt le framework Cocoa qui lui est le plus souvent associé qui est une merveille. Par rapport à tous les autres framework permettant de fabriquer des GUI, Cocoa est de très loin supérieur. Même si ça semble être des détails sur le papier, en pratique cela fait une grande différence.

              -

              Vraiment jusqu’ici, même si Objective-C reste assez bas niveau, le fait que le typage de ce langage soit dynamique est un vrai plus pour l’interface graphique. -Je ne peux que vous encourager à vous accrocher à ce langage et de faire un vrai programme avec. Vous en serez certainement plus ravi qu’il n’y parrait eu début.

              +

              Vraiment jusqu’ici, même si Objective-C reste assez bas niveau, le fait que le typage de ce langage soit dynamique est un vrai plus pour l’interface graphique. +Je ne peux que vous encourager à vous accrocher à ce langage et de faire un vrai programme avec. Vous en serez certainement plus ravi qu’il n’y parrait eu début.

              Les langages interprétés modernes

              @@ -297,17 +297,17 @@ Je ne peux que vous encourager à vous accrocher à ce langage et de faire un vr

              A Jacky Touch Car

              -

              Le petit langage de script que nous utilisions tous pour faire des sites web à l’époque des gifs animées !

              +

              Le petit langage de script que nous utilisions tous pour faire des sites web à l’époque des gifs animées !

              -

              Sympatique, mais sans plus. Apparemment il y a eu pas mal de progrès depuis PHP5, un jour peut-être que j’y reviendrai. Mais, il a derrière lui une réputation de langage pour les “scripts kiddies”. +

              Sympatique, mais sans plus. Apparemment il y a eu pas mal de progrès depuis PHP5, un jour peut-être que j’y reviendrai. Mais, il a derrière lui une réputation de langage pour les “scripts kiddies”. En gros ceux qui ne savent pas coder. -Des trous de sécurité de tous les cotés, etc…

              +Des trous de sécurité de tous les cotés, etc…

              -

              En réalité, PHP est au niveau d’abstration à peine supérieur au C. +

              En réalité, PHP est au niveau d’abstration à peine supérieur au C. Et donc, il est beaucoup moins bien organisé que des langages objets, favorisant ainsi la création de bug. -Pour les applications web, c’est un vrai problème.

              +Pour les applications web, c’est un vrai problème.

              -

              PHP, reste pour moi le langage de l’injection SQL. J’en fait encore un peu de temps en temps. Et j’ai moi-même dû protéger les accès au SQL pour éviter les injections. Oui, je n’ai pas trouvé de librairie toute prête pour protéger les entrées SQL. Je n’ai pas beaucoup cherché non plus.

              +

              PHP, reste pour moi le langage de l’injection SQL. J’en fait encore un peu de temps en temps. Et j’ai moi-même dû protéger les accès au SQL pour éviter les injections. Oui, je n’ai pas trouvé de librairie toute prête pour protéger les entrées SQL. Je n’ai pas beaucoup cherché non plus.

              Python

              @@ -315,30 +315,30 @@ Pour les applications web, c’est un vrai problème.

              Alors là, attention ! Révélation !

              -

              Lorsqu’on avait l’habitude de travailler avec des langages compilé, type C++, Java et qu’on passe à Python, on se prend une claque magistrale. +

              Lorsqu’on avait l’habitude de travailler avec des langages compilé, type C++, Java et qu’on passe à Python, on se prend une claque magistrale. La programmation comme elle doit être faite. -Tout est si naturel, c’est magique. -Oui, c’est si bien que ça. -Mais quelque chose d’aussi incroyablement bien doit avoir des inconvénients me dirais-vous.

              +Tout est si naturel, c’est magique. +Oui, c’est si bien que ça. +Mais quelque chose d’aussi incroyablement bien doit avoir des inconvénients me dirais-vous.

              Et bien, oui, comme tous les langages de scripts de haut niveau, Python est lent. Attention pas juste un peu lent, comme 2 fois plus lent que du C. -Non, de l’ordre de 10 à 20 fois plus lent que le C. -Argh… Bon ça reste utilisable pour beaucoup de choses. +Non, de l’ordre de 10 à 20 fois plus lent que le C. +Argh… Bon ça reste utilisable pour beaucoup de choses. Mais certaines application lui sont donc interdites.

              Awk

              Des filtres de fichiers à faire. -Si ce n’est pas trop compliqué, c’est le langage idéal. +Si ce n’est pas trop compliqué, c’est le langage idéal. Vous avez un fichier et vous voulez savoir quels sont les mots les plus utilisés. Savoir combien de fois un mot est utilisé. -Filtrer sous des condition un peu plus compliquées qu’un grep. -Super outils. Je l’ai utilisé pour modifier en masse des centaines de fichier XML plus facilement qu’avec du XSLT.

              +Filtrer sous des condition un peu plus compliquées qu’un grep. +Super outils. Je l’ai utilisé pour modifier en masse des centaines de fichier XML plus facilement qu’avec du XSLT.

              Perl

              -

              Perl c’est assez magique, mais la syntaxe est tellement désagréable à lire que personne ne peut vraiment aimer programmer dans un environnement de plusieurs personnes en Perl. +

              Perl c’est assez magique, mais la syntaxe est tellement désagréable à lire que personne ne peut vraiment aimer programmer dans un environnement de plusieurs personnes en Perl. A moins que tous les autres soient des cadors du Perl. Mais la feature qui tue, les expressions régulières :

              @@ -349,32 +349,32 @@ Mais la feature qui tue, les expressions régulières :

              Va remplacer toto par titi dans la valeur de la variable $var. Et oui, les expressions régulière y sont intégrées directement comme avec sed et awk. Et ça rend le code beacoup plus compact (et parfois illisible). -Mais c’est vraiment pas mal. -C’est une sorte de awk sous stéroides.

              +Mais c’est vraiment pas mal. +C’est une sorte de awk sous stéroides.

              Ruby

              -

              C’est une sorte de Perl en plus propre. +

              C’est une sorte de Perl en plus propre. Un mélange de Perl et de Python. -Les notion objets y sont plus fortes qu’en Python. -Je l’ai beaucoup utilisé, je reste quand même un Pythoniste de préférence. +Les notion objets y sont plus fortes qu’en Python. +Je l’ai beaucoup utilisé, je reste quand même un Pythoniste de préférence. Mais Ruby est vraiment très bien. -Par contre en terme d’efficacité, c’est le pire langage utilisé par beaucoup de monde de ce point de vue. -C’est le langage qui perd quasiment tous les benchmarks. -Par contre c’est un outil parfait pour faire des prototypes. +Par contre en terme d’efficacité, c’est le pire langage utilisé par beaucoup de monde de ce point de vue. +C’est le langage qui perd quasiment tous les benchmarks. +Par contre c’est un outil parfait pour faire des prototypes. Et si vous voulez faire un prototype de site web, RoR est ce qui se fait de mieux. -De l’idée au site, il ne se passera que peu de temps.

              +De l’idée au site, il ne se passera que peu de temps.

              Javascript

              -

              C’est la bonne surprise. +

              C’est la bonne surprise. Pendant des années, javascript était considéré comme un langage tout bon à vous embéter dans votre navigation web. En réalité, javascript possède beaucoup de qualité des langages de haut niveau. En particulier, il est facille de passer une fonction en paramèter ou de créer des fonctions anonymes (closures). Récemment, il est devenu très rapide et beaucoup de frameworks et de librairies naissent un peu partout.

                -
              • Il y a Cappuccino, Objective-J (comme de l’objective-C mais avec du javascript)
              • +
              • Il y a Cappuccino, Objective-J (comme de l’objective-C mais avec du javascript)
              • Sproutcore
              • Spine.js
              • Backbone.js
              • @@ -383,46 +383,46 @@ Récemment, il est devenu très rapide et beaucoup de frameworks et de librairie

              En particulier avec jQuery, on peut faire des appels chainés, très agréables à utiliser. -Comme je le disais, c’est une bonne surprise, javascript a été choisi un peu au hasard lors de la création des navigateurs web comme langage de script. -Et il s’avère qu’à part sa syntaxe, tout le reste est bien. +Comme je le disais, c’est une bonne surprise, javascript a été choisi un peu au hasard lors de la création des navigateurs web comme langage de script. +Et il s’avère qu’à part sa syntaxe, tout le reste est bien. Heureusement, en ce qui concerne la syntaxe, on peu pallier à ce problème en utilisant CoffeeScript.

              Les langages fonctionnels

              CamL

              -

              J’ai appris CamL à la fac, j’avais trouvé cette expérience très interressante. -J’étais plutôt bon, et j’avais les bonnes intuitions mathématiques qui vont avec la programmation fonctionnelle. -Mais je dois avouer que je ne l’ai plus jamais utilisé. -Simplement, ce type de langage semble si loin de ce qui se fait pour fabriquer des produits que ça me donnais vraiment l’impression d’être un langage pour chercheurs.

              +

              J’ai appris CamL à la fac, j’avais trouvé cette expérience très interressante. +J’étais plutôt bon, et j’avais les bonnes intuitions mathématiques qui vont avec la programmation fonctionnelle. +Mais je dois avouer que je ne l’ai plus jamais utilisé. +Simplement, ce type de langage semble si loin de ce qui se fait pour fabriquer des produits que ça me donnais vraiment l’impression d’être un langage pour chercheurs.

              Haskell

              -

              Je suis en train d’apprendre ce langage. -Et je dois dire que c’est un vrai plaisir. +

              Je suis en train d’apprendre ce langage. +Et je dois dire que c’est un vrai plaisir. En général les concepts derrière tous les langages de programmation sont assez limités. -Chaque langage y va de son petit lot de nouveau concepts, et en général en une après-midi, c’est appris. -Pour haskell, c’est très différent. -Je sens bien qu’il va me falloir plusieurs semaines pour maîtriser la bête. -Ça doit faire quatre semaines que j’apprend haskell un peut tous les jours et je sais qu’il y a des notions que j’ai juste survollées et qui sont assez incroyables. -Les Monades par exemple, est un concept que je n’avais jamais rencontré ailleurs. -C’est un super concept. +Chaque langage y va de son petit lot de nouveau concepts, et en général en une après-midi, c’est appris. +Pour haskell, c’est très différent. +Je sens bien qu’il va me falloir plusieurs semaines pour maîtriser la bête. +Ça doit faire quatre semaines que j’apprend haskell un peut tous les jours et je sais qu’il y a des notions que j’ai juste survollées et qui sont assez incroyables. +Les Monades par exemple, est un concept que je n’avais jamais rencontré ailleurs. +C’est un super concept. De plus le design du langage en fait un parfait système pour paralléliser les calculs naturellement. -haskell sépare la partie “pure” de la partie “impure” de la programmation. -À ma connaissance, c’est le seul langage de programmation qui fait ça. +haskell sépare la partie “pure” de la partie “impure” de la programmation. +À ma connaissance, c’est le seul langage de programmation qui fait ça. Enfin, je prend beaucoup de plaisir à apprendre ce langage. La communauté est aussi très acceuillante. -Pas de “L0L! URAN00B!”. +Pas de “L0L! URAN00B!”. Et aussi pas de concession du langage pour devenir populaire. Le langage est bon, voilà tout. -Alors qu’en Java et C++, typiquement certain choix ont été fait en dépis du bon sens pour “faire plaisir”.

              +Alors qu’en Java et C++, typiquement certain choix ont été fait en dépis du bon sens pour “faire plaisir”.

              Langages originaux

              Metapost

              Metapost est un langage qui permet de programmer des dessins. -Le gros plus de metapost, c’est sa capacité de résoudre automatiquement les systèmes d’équations linéaires. +Le gros plus de metapost, c’est sa capacité de résoudre automatiquement les systèmes d’équations linéaires. Par exemple, si vous écrivez :

              @@ -437,8 +437,8 @@ Plus précisément, au barycentre (2A + B)/3.

              X=whatever[C,D]
              -

              Ce deuxième exemple positionne X à l’intersection des deux segments AB et CD. -Vous pouvez aussi voir pas mal d’exemples ici. +

              Ce deuxième exemple positionne X à l’intersection des deux segments AB et CD. +Vous pouvez aussi voir pas mal d’exemples ici. You could see more example there.

              Cette fonction est très utile. @@ -448,30 +448,30 @@ De mon point de vue, les autres langages de programmation devraient penser à ra

              zsh

              Oui, zsh est un shell. -Mais c’est aussi un langage de script très bien adapté aux traitement de fichiers. +Mais c’est aussi un langage de script très bien adapté aux traitement de fichiers. Je le recommande chaudement. -C’est pour l’instant le meilleur shell que j’ai utilisé. Je le préfère au bash.

              +C’est pour l’instant le meilleur shell que j’ai utilisé. Je le préfère au bash.

              Prolog

              -

              Je n’ai jamais rien fait de conséquent avec Prolog, mais j’ai adoré l’apprendre et l’utiliser. -J’ai eu la chance d’apprendre Prolog par Alain Colmerauer lui-même. -C’est un langage qui essaye de résoudre les contraintes autant qu’il le peut pour vous. +

              Je n’ai jamais rien fait de conséquent avec Prolog, mais j’ai adoré l’apprendre et l’utiliser. +J’ai eu la chance d’apprendre Prolog par Alain Colmerauer lui-même. +C’est un langage qui essaye de résoudre les contraintes autant qu’il le peut pour vous. Il en ressort un impression de magie. -On ne fait que décrire ce qu’il faut et on ne donne pas d’ordre. +On ne fait que décrire ce qu’il faut et on ne donne pas d’ordre. Un peu comme la programmation fonctionnelle mais en beaucoup plus puissant.

              Les langages à découvrir

              Il reste encore pas mal de langages et de framework à essayer. Actuellement je pense que je vais passer un moment avec haskell. -Peut-être demain que j’irai apprendre LISP, Scala ou Erlang. -Comme je suis plus dans la création de site web, j’irai certainement jeter un coup d’œil à clojure aussi. -Et certainement beaucoup d’autres choses.

              +Peut-être demain que j’irai apprendre LISP, Scala ou Erlang. +Comme je suis plus dans la création de site web, j’irai certainement jeter un coup d’œil à clojure aussi. +Et certainement beaucoup d’autres choses.

              Dites moi si vous avez une autre expérience avec ces langages de programmation. Évidement mes impression sont hautement subjectives. -Cependant, j’ai utilisé tous les langages dont j’ai parlé.

              +Cependant, j’ai utilisé tous les langages dont j’ai parlé.

              diff --git a/output/Scratch/fr/index.html b/output/Scratch/fr/index.html index fbe89feee..bdb0e6361 100644 --- a/output/Scratch/fr/index.html +++ b/output/Scratch/fr/index.html @@ -148,7 +148,7 @@ Droits de reproduction ©, Yann Esposito
            - modifié le : 19/01/2012 + modifié le : 20/01/2012
            Site entièrement réalisé avec diff --git a/output/Scratch/fr/blog/latest/index.html b/output/Scratch/fr/latest/index.html similarity index 85% rename from output/Scratch/fr/blog/latest/index.html rename to output/Scratch/fr/latest/index.html index c6f43d540..8f194ca74 100644 --- a/output/Scratch/fr/blog/latest/index.html +++ b/output/Scratch/fr/latest/index.html @@ -1,11 +1,13 @@ + + Redirect to the right page. - +

            You should be redirected to

            - + - + \ No newline at end of file diff --git a/output/Scratch/fr/rss/index.html b/output/Scratch/fr/rss/index.html index 1dcf2d7ed..36477bf4b 100644 --- a/output/Scratch/fr/rss/index.html +++ b/output/Scratch/fr/rss/index.html @@ -64,9 +64,9 @@

            rss

            -

            On vous propose de vous abonner au flux RSS. Mais de quoi s’agit il ?

            +

            On vous propose de vous abonner au flux RSS. Mais de quoi s’agit il ?

            -

            Si vous n’êtes pas anglophobe je vous recommande la lecture de what is rss ou encore mieux, de regarder cette vidéo RSS explained.

            +

            Si vous n’êtes pas anglophobe je vous recommande la lecture de what is rss ou encore mieux, de regarder cette vidéo RSS explained.

            @@ -76,23 +76,23 @@

            Mon explication

            -

            Il s’agit d’un moyen facile d’agréger dans un seul endroit toutes les mises à jours de tous les sites qui vous intéressent.

            +

            Il s’agit d’un moyen facile d’agréger dans un seul endroit toutes les mises à jours de tous les sites qui vous intéressent.

            choisir un client

            -

            Tout d’abord, il faut choisir un client de flux RSS. Aujourd’hui il existe de nombreux client en ligne. C’est-à-dire des sites web qui vont s’occuper du regroupement. Ces client s’appellent des “aggregator”.

            +

            Tout d’abord, il faut choisir un client de flux RSS. Aujourd’hui il existe de nombreux client en ligne. C’est-à-dire des sites web qui vont s’occuper du regroupement. Ces client s’appellent des “aggregator”.

            -

            Personnellement j’utilise Netvibes. J’en ai essayé vraiment beaucoup, et il reste de loin mon préféré.

            +

            Personnellement j’utilise Netvibes. J’en ai essayé vraiment beaucoup, et il reste de loin mon préféré.

            -

            Évidemment Google propose son client aussi : Google Reader. S’il reste adapté pour les contenus pour lesquels on ne veut rien perdre. Il est moins agréable d’utilisation lorsque l’on s’abonne à des flux qui proposent une vingtaine de nouveaux liens par jour.

            +

            Évidemment Google propose son client aussi : Google Reader. S’il reste adapté pour les contenus pour lesquels on ne veut rien perdre. Il est moins agréable d’utilisation lorsque l’on s’abonne à des flux qui proposent une vingtaine de nouveaux liens par jour.

            -

            S’abonner aux flux d’un site

            +

            S’abonner aux flux d’un site

            -

            Donc une fois que l’on a choisi son client, il suffit pour s’abonner de cliquer sur l’icône d’abonnement. Soit il est bien visible sur la page, soit tout en haut dans la barre des tâches.

            +

            Donc une fois que l’on a choisi son client, il suffit pour s’abonner de cliquer sur l’icône d’abonnement. Soit il est bien visible sur la page, soit tout en haut dans la barre des tâches.

            -

            Récupérer les “news”

            +

            Récupérer les “news”

            -

            Ensuite lorsque vous utilisez votre client RSS les nouvelles provenant du blog se mettront à jour. Ainsi, il n’y a plus besoin d’aller sur les sites intéressants pour voir s’il n’y a rien de neuf. Ce sont eux qui vous donne leur dernières nouvelles.

            +

            Ensuite lorsque vous utilisez votre client RSS les nouvelles provenant du blog se mettront à jour. Ainsi, il n’y a plus besoin d’aller sur les sites intéressants pour voir s’il n’y a rien de neuf. Ce sont eux qui vous donne leur dernières nouvelles.

            diff --git a/output/Scratch/fr/softwares/yaquabubbles/index.html b/output/Scratch/fr/softwares/yaquabubbles/index.html index bd82fed6c..a17dc4d48 100644 --- a/output/Scratch/fr/softwares/yaquabubbles/index.html +++ b/output/Scratch/fr/softwares/yaquabubbles/index.html @@ -62,10 +62,10 @@

            Screenshot

            -

            YAquaBubbles est un économiseur d’écran réalisé avec QuartzComposer. -Il s’agissait d’un simple essai mais le résultat était plaisant.

            +

            YAquaBubbles est un économiseur d’écran réalisé avec QuartzComposer. +Il s’agissait d’un simple essai mais le résultat était plaisant.

            -

            YAquaBubbles.dmg

            +

            YAquaBubbles.dmg

            diff --git a/output/Scratch/fr/softwares/yclock/index.html b/output/Scratch/fr/softwares/yclock/index.html index 6e4ebcb18..0552fcbfd 100644 --- a/output/Scratch/fr/softwares/yclock/index.html +++ b/output/Scratch/fr/softwares/yclock/index.html @@ -58,11 +58,11 @@

            Screenshot

            -

            YClock est un économiseur d’écran qui vous donne l’heure.i +

            YClock est un économiseur d’écran qui vous donne l’heure.i Il a trois thèmes clair, rouge et noir. -Il utilise une base de QuartzComposition + du code objective-C pour la gestion du nombre d’images par seconde.

            +Il utilise une base de QuartzComposition + du code objective-C pour la gestion du nombre d’images par seconde.

            -

            YClock.dmg

            +

            YClock.dmg

            diff --git a/output/Scratch/fr/softwares/ypassword/index.html b/output/Scratch/fr/softwares/ypassword/index.html index 76157ff60..f16ff53ce 100644 --- a/output/Scratch/fr/softwares/ypassword/index.html +++ b/output/Scratch/fr/softwares/ypassword/index.html @@ -58,7 +58,7 @@

            Une gestion simple, sécurisée et portable de ses mots de passes web.

            -

            Souvenez vous d’un seul mot de passe de bonne qualité, le reste suis.

            +

            Souvenez vous d’un seul mot de passe de bonne qualité, le reste suis.

            Ici vous trouverez :

            diff --git a/output/Scratch/fr/validation/index.html b/output/Scratch/fr/validation/index.html index ff9ddec42..56b27abe6 100644 --- a/output/Scratch/fr/validation/index.html +++ b/output/Scratch/fr/validation/index.html @@ -61,19 +61,19 @@ de mes pages.

            Je voulais utiliser box-shadows et border-radius

            -

            J’ai donc préféré avoir un approche pragamatique que dogmatique.

            +

            J’ai donc préféré avoir un approche pragamatique que dogmatique.

            Utiliser ces propriétés me fait perdre la validation CSS -mais fonctionne très bien avec les navigateurs récents (Safari 4 -et Firefox 3.5 au moment de l’écriture de ces lignes)

            +mais fonctionne très bien avec les navigateurs récents (Safari 4 +et Firefox 3.5 au moment de l’écriture de ces lignes)

            -

            Si vous n’utilisez pas ces navigateur les pages s’affichent -correctement mais sans ces effets qui n’ont pour but que d’améliorer -l’aspect général de la page.

            +

            Si vous n’utilisez pas ces navigateur les pages s’affichent +correctement mais sans ces effets qui n’ont pour but que d’améliorer +l’aspect général de la page.

            -

            Par contre je suis plutôt un partisant de la validation et c’est -pourquoi il y a toujours les liens. Tout valide à l’exception +

            Par contre je suis plutôt un partisant de la validation et c’est +pourquoi il y a toujours les liens. Tout valide à l’exception des propriétés commençant par -moz et -webkit.

            diff --git a/output/Scratch/sitemap.xml b/output/Scratch/sitemap.xml index d920366bb..4b7cda050 100644 --- a/output/Scratch/sitemap.xml +++ b/output/Scratch/sitemap.xml @@ -1,635 +1,43 @@ - http://yannesposito.com/Scratch/en/about/contact/ - 2012-01-19 + http://yannesposito.com/Scratch/sitemap.xml + 2012-01-18 - http://yannesposito.com/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/Yesod-excellent-ideas/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/softwares/ypassword/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/Password-Management/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/Higher-order-function-in-zsh/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/about/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/softwares/ypassword/iphoneweb/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-06-17-hide-yourself-to-analytics/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/commandes-avancees/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-09-replace-all-except-some-part/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_1/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/mvc/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_2/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/softwares/yaquabubbles/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/commandes-avancees/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-Focus-vs-Minimalism/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_3/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-06-19-jQuery-popup-the-easy-way/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-03-22-Git-Tips/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-07-09-Indecidabilities/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_4/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-12-06-iphone-call-filter/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/01_nanoc/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/11_Load_Disqus_Asynchronously/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-02-15-All-but-something-regexp/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_1/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/softwares/ypassword/web/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/05_git_create_remote_branch/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-untaught-git-usage/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/11_Load_Disqus_Asynchronously/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/Yesod-tutorial-for-newbies/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_2/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/about/cv/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-06-15-Get-my-blog-engine/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/Haskell-Mandelbrot/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/about/technical_details/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/mvc/ - 2012-01-19 - - - http://yannesposito.com/Scratch/assets/css/dynamic.css - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/programming-language-experience/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/validation/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_3/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/Yesod-tutorial-for-newbies/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/Higher-order-function-in-zsh/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-untaught-git-usage/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/softwares/yclock/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/ + http://yannesposito.com/Scratch/en/blog/04_drm/ 2012-01-19 http://yannesposito.com/Scratch/en/blog/2011-01-03-Happy-New-Year/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_4/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/02_ackgrep/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/03_losthighway/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/about/old/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/ - 2012-01-19 + 2012-01-20 http://yannesposito.com/Scratch/en/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/ 2012-01-19 - - http://yannesposito.com/Scratch/fr/blog/programming-language-experience/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-12-06-iphone-call-filter/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/about/contact/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-07-31-New-style-after-holidays/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/softwares/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-10-14-Fun-with-wav/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/Yesod-excellent-ideas/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/02_ackgrep/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-02-15-All-but-something-regexp/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-09-replace-all-except-some-part/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/about/old/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/06_How_I_use_git/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/about/cv/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2011-04-20-Now-hosted-on-github/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/softwares/ypassword/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/Password-Management/ - 2012-01-19 - http://yannesposito.com/Scratch/en/blog/A-more-convenient-diff/ - 2012-01-19 + 2012-01-20 - http://yannesposito.com/Scratch/en/blog/09_Why_I_didn-t_keep_whosamung-us/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/feed/feed.xml - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/validation/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-06-14-multi-language-choices/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-10-14-Fun-with-wav/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/A-more-convenient-diff/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2011-01-03-Happy-New-Year/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/ - 2012-01-19 + http://yannesposito.com/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/ + 2012-01-20 http://yannesposito.com/Scratch/en/blog/10_Synchronize_Custom_WebSite_with_mobileMe/ 2012-01-19 - - http://yannesposito.com/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/softwares/yaquabubbles/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-07-31-New-style-after-holidays/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/06_How_I_use_git/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/03_losthighway/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/rss/ - 2012-01-19 - http://yannesposito.com/Scratch/en/blog/2009-09-jQuery-Tag-Cloud/ 2012-01-19 - - http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-launch-daemon-from-command-line/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-03-22-Git-Tips/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-03-23-Encapsulate-git/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/Haskell-Mandelbrot/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-02-23-When-regexp-is-not-the-best-solution/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-08-23-Now-heberged-on-heroku/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/softwares/ypassword/web/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/Learn-Vim-Progressively/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-03-23-Encapsulate-git/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/conf-et-install/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/ - 2012-01-19 - http://yannesposito.com/Scratch/en/blog/2010-06-17-track-events-with-google-analytics/ - 2012-01-19 + 2012-01-20 - http://yannesposito.com/Scratch/assets/css/main.css - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/rss/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/about/technical_details/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/04_drm/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/SVG-and-m4-fractals/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/ + http://yannesposito.com/Scratch/en/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/ 2012-01-19 @@ -637,91 +45,143 @@ 2012-01-19 - http://yannesposito.com/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/ + http://yannesposito.com/Scratch/en/blog/2010-10-26-LaTeX-like-macro-and-markdown/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2009-12-06-iphone-call-filter/ 2012-01-19 - http://yannesposito.com/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/ + http://yannesposito.com/Scratch/en/blog/03_losthighway/ 2012-01-19 - http://yannesposito.com/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/ + http://yannesposito.com/Scratch/en/blog/11_Load_Disqus_Asynchronously/ 2012-01-19 - http://yannesposito.com/Scratch/en/blog/2010-07-09-Indecidabilities/ + http://yannesposito.com/Scratch/en/blog/2010-07-31-New-style-after-holidays/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/Yesod-tutorial-for-newbies/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2009-10-launch-daemon-from-command-line/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2010-06-14-multi-language-choices/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2011-04-20-Now-hosted-on-github/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2010-08-31-send-mail-from-command-line-with-attached-file/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2010-10-06-New-Blog-Design-Constraints/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/Haskell-Mandelbrot/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/02_ackgrep/ 2012-01-19 http://yannesposito.com/Scratch/en/blog/01_nanoc/ 2012-01-19 - - http://yannesposito.com/Scratch/en/about/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/softwares/ypassword/iphoneweb/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-05-19-How-to-cut-HTML-and-repair-it/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/softwares/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/ - 2012-01-19 - - - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/comprendre/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2010-06-14-multi-language-choices/ - 2012-01-19 - - - http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/ - 2012-01-19 - http://yannesposito.com/Scratch/en/blog/05_git_create_remote_branch/ 2012-01-19 - http://yannesposito.com/Scratch/en/blog/feed/feed.xml + http://yannesposito.com/Scratch/en/blog/2010-07-07-CSS-rendering-problems-by-navigator/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/ 2012-01-19 - http://yannesposito.com/Scratch/sitemap.xml + http://yannesposito.com/Scratch/en/blog/mvc/ 2012-01-19 - http://yannesposito.com/Scratch/fr/softwares/yclock/ + http://yannesposito.com/Scratch/en/blog/07_Screensaver_compilation_option_for_Snow_Leopard/ 2012-01-19 - http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/ + http://yannesposito.com/Scratch/en/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2010-05-19-How-to-cut-HTML-and-repair-it/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2009-09-replace-all-except-some-part/ 2012-01-19 - http://yannesposito.com/Scratch/en/blog/04_drm/ + http://yannesposito.com/Scratch/en/blog/2009-10-How-to-preload-your-site-with-style/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2010-10-14-Fun-with-wav/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/09_Why_I_didn-t_keep_whosamung-us/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2010-02-15-All-but-something-regexp/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2010-09-02-base64-and-sha1-on-iPhone/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/SVG-and-m4-fractals/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/blog/Higher-order-function-in-zsh/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2010-06-19-jQuery-popup-the-easy-way/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2010-06-15-Get-my-blog-engine/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/06_How_I_use_git/ 2012-01-19 @@ -729,7 +189,555 @@ 2012-01-19 - http://yannesposito.com/Scratch/en/blog/SVG-and-m4-fractals/ + http://yannesposito.com/Scratch/en/blog/Password-Management/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2010-07-05-Cappuccino-and-Web-applications/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/Yesod-excellent-ideas/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2009-10-Focus-vs-Minimalism/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2010-05-24-Trees--Pragmatism-and-Formalism/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/programming-language-experience/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/comprendre/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/conf-et-install/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/commandes-avancees/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2009-10-30-How-to-handle-evil-IE/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2009-11-12-Git-for-n00b/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2010-03-23-Encapsulate-git/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2010-02-16-All-but-something-regexp--2-/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2010-03-22-Git-Tips/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2010-02-18-split-a-file-by-keyword/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_3/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_2/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_1/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/03_losthighway/03_losthighway_4/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2010-05-17-at-least-this-blog-revive/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2010-06-17-hide-yourself-to-analytics/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2010-07-09-Indecidabilities/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/2009-10-untaught-git-usage/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/2010-02-23-When-regexp-is-not-the-best-solution/ + 2012-01-19 + + + http://yannesposito.com/Scratch/en/blog/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/about/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/latest/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/rss/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/softwares/ypassword/iphoneweb/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/softwares/ypassword/web/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/softwares/ypassword/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/softwares/yclock/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/softwares/yaquabubbles/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/softwares/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/validation/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/about/old/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/about/technical_details/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/about/contact/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/about/cv/ + 2012-01-18 + + + http://yannesposito.com/Scratch/en/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/04_drm/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2011-01-03-Happy-New-Year/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2009-09-Disqus-versus-Intense-Debate--Why-I-switched-/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/A-more-convenient-diff/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-08-23-Now-heberged-on-heroku/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/10_Synchronize_Custom_WebSite_with_mobileMe/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2009-09-jQuery-Tag-Cloud/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-06-17-track-events-with-google-analytics/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-01-12-antialias-font-in-Firefox-under-Ubuntu/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-Wait-to-hide-a-menu-in-jQuery/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-10-26-LaTeX-like-macro-and-markdown/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2009-12-06-iphone-call-filter/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/03_losthighway/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/11_Load_Disqus_Asynchronously/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-07-31-New-style-after-holidays/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/Yesod-tutorial-for-newbies/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-launch-daemon-from-command-line/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-06-14-multi-language-choices/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-08-31-send-mail-from-command-line-with-attached-file/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-10-06-New-Blog-Design-Constraints/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/Haskell-Mandelbrot/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/02_ackgrep/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/01_nanoc/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/05_git_create_remote_branch/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-07-07-CSS-rendering-problems-by-navigator/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/08_Configure_ssh_to_listen_the_port_443_on_Snow_Leopard/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/mvc/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/07_Screensaver_compilation_option_for_Snow_Leopard/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-10-10-Secure-eMail-on-Mac-in-few-steps/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-05-19-How-to-cut-HTML-and-repair-it/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2009-09-replace-all-except-some-part/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-How-to-preload-your-site-with-style/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-10-14-Fun-with-wav/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/09_Why_I_didn-t_keep_whosamung-us/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-28-custom-website-synchronisation-with-mobileme--2-/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-02-15-All-but-something-regexp/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-09-02-Use-git-to-calculate-trusted-mtimes/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-09-02-base64-and-sha1-on-iPhone/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/SVG-and-m4-fractals/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/blog/Higher-order-function-in-zsh/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-06-19-jQuery-popup-the-easy-way/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-01-04-Change-default-shell-on-Mac-OS-X/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-06-15-Get-my-blog-engine/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/06_How_I_use_git/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2009-12-14-Git-vs--Bzr/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/Password-Management/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-07-05-Cappuccino-and-Web-applications/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/Learn-Vim-Progressively/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/Yesod-excellent-ideas/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-Focus-vs-Minimalism/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-05-24-Trees--Pragmatism-and-Formalism/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/programming-language-experience/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/c-est-parti-pour-l-aventure/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/comprendre/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/Git-pour-quoi-faire/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/conf-et-install/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/commandes-avancees/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-30-How-to-handle-evil-IE/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2009-11-12-Git-for-n00b/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-03-23-Encapsulate-git/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-02-16-All-but-something-regexp--2-/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-03-22-Git-Tips/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-02-18-split-a-file-by-keyword/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_3/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_2/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_1/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/03_losthighway/03_losthighway_4/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-05-17-at-least-this-blog-revive/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-06-17-hide-yourself-to-analytics/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2010-07-09-Indecidabilities/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/blog/2009-10-untaught-git-usage/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/2010-02-23-When-regexp-is-not-the-best-solution/ + 2012-01-19 + + + http://yannesposito.com/Scratch/fr/blog/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/about/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/latest/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/rss/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/softwares/ypassword/iphoneweb/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/softwares/ypassword/web/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/softwares/ypassword/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/softwares/yclock/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/softwares/yaquabubbles/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/softwares/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/validation/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/about/old/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/about/technical_details/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/about/contact/ + 2012-01-20 + + + http://yannesposito.com/Scratch/fr/about/cv/ + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/ + 2012-01-20 + + + http://yannesposito.com/Scratch/en/blog/feed/feed.xml + 2012-01-18 + + + http://yannesposito.com/Scratch/fr/blog/feed/feed.xml + 2012-01-18 + + + http://yannesposito.com/Scratch/assets/css/main.css + 2012-01-19 + + + http://yannesposito.com/Scratch/assets/css/dynamic.css 2012-01-19 diff --git a/output/index.html b/output/index.html index 316f67e55..9b6774dc9 100644 --- a/output/index.html +++ b/output/index.html @@ -31,14 +31,14 @@